Reselling on the secondary market
The exit route — order, match, dual registry check, transfer, certificates reissued
Both parties are re-checked at execution, because the contract enforces the whitelist on every transfer and not just at issue. The seller's certificate is then cancelled and reissued for the balance, and the realised gain is booked against the specific lot sold.
Real elapsed time: under a minute once a buyer appears · 2 external system call(s) · simulated round trip 4,252 msHolder lists tokens for sale
A holder offers 60 tokens at AED 1,040.00, a 4% premium to the issue price. Those tokens are locked against the position so they cannot be offered twice.
{
"accountRef" : "INV-101",
"assetRef" : "PRP-1001",
"tokens" : 60,
"pricePerToken" : 1040.00
}
{
"orderId" : "ORD-418772",
"status" : "Open",
"spreadVsIssue" : "+4.0%",
"priceBandCheck" : "pass — under 200% of issue",
"tokensLocked" : 60,
"sellableRemaining" : 260
}
What changed
- Order ORD-418772 live on the order book
- 60 tokens committed and locked
The price band and the lock are both refusals waiting to happen. Try to list the same tokens twice, or at triple the issue price, and the platform declines.
Buyer takes the order
A second registry-verified holder buys part of the order. Partial fills are supported, so the remainder stays live.
{
"accountRef" : "INV-104",
"orderId" : "ORD-418772",
"tokens" : 60
}
{
"accepted" : true,
"consideration" : 62400.00,
"selfDealingCheck": "pass — different accounts",
"fundsCheck" : "pass",
"nextCheck" : "registry, both sides"
}
What changed
- Trade held pending compliance
- Nothing transferred yet
Registry checked on both sides
Buyer and seller are both verified. A seller who has fallen off the registry cannot transfer out — losing whitelist status locks a position rather than freeing it.
{
"checks" : [
{ "role" : "seller", "address" : "0x1d77...4a29", "accountRef" : "INV-101" },
{ "role" : "buyer", "address" : "0x4b8e...c6b8", "accountRef" : "INV-104" }
]
}
{
"seller" : { "verified" : true, "claimExpiry" : "valid" },
"buyer" : { "verified" : true, "claimExpiry" : "valid" },
"transferAllowed" : true
}
What changed
- Both parties verified
- Transfer released for settlement
Cash legs settle
Consideration moves buyer to seller inside the segregated client account. The SPV is not a party to a secondary trade — this is between two holders.
{
"from" : "client money — INV-104",
"to" : "client money — INV-101",
"amount" : 62400.00,
"currency" : "AED",
"reference" : "secondary trade ORD-418772"
}
{
"settled" : true,
"tradeRef" : "TRD-660419",
"buyerDebit" : 62400.00,
"sellerCredit" : 62400.00,
"spvInvolved" : false
}
What changed
- Buyer debited AED 62,400.00
- Seller credited AED 62,400.00
Tokens transferred on the contract
The transfer hook re-checks the registry inside the contract itself. If the registry said no, this call would revert and the platform would roll the cash legs back.
{
"method" : "transferFrom",
"params" : {
"from" : "0x1d77...4a29",
"to" : "0x4b8e...c6b8",
"amount" : 60
},
"contract" : "0x41945f556471d0ff07411f2c39587b68a42a6c83",
"signedBy" : "custody HSM, 2-of-3 quorum"
}
{
"success" : true,
"txHash" : "0xe81b...3f4d",
"transferHook" : "registry verified both parties",
"sellerBalance" : 260,
"buyerBalance" : 60,
"supplyUnchanged" : true
}
What changed
- 60 tokens moved between holders
- Total supply unchanged — no mint, no burn
Certificates cancelled and reissued
The seller's certificate is not edited. It is cancelled, marked superseded, and a replacement is issued for the balance — carrying the original acquisition date and the surviving proportion of the cost. A printed certificate can therefore never contradict the register.
{
"costBasis" : "FIFO — earliest acquisition lot consumed first",
"lotConsumed" : {
"certificate" : "RXT-2026-118204",
"lotAcquired" : "2026-01-14",
"tokensOnFace" : 1000,
"tokensDisposed" : 60,
"costPerToken" : 1000.00,
"costConsumed" : 60000.00,
"newStatus" : "Superseded"
},
"replacementIssued" : {
"certificate" : "RXT-2026-884210",
"tokens" : 940,
"attributableCost" : 940000.00,
"lotAcquired" : "2026-01-14 (carried forward unchanged)",
"supersedes" : "RXT-2026-118204"
},
"buyerCertificate" : {
"certificate" : "RXT-2026-731905",
"holder" : "Omar Haddad (INV-104)",
"tokens" : 60,
"unitPrice" : 1040.00,
"origin" : "Secondary transfer",
"lotAcquired" : "today — a new lot for the buyer",
"settlementTx" : "0xe81b...3f4d"
}
}
{
"sellerRealised" : {
"disposalRef" : "DSP-604118",
"proceeds" : 62400.00,
"costOfLotsSold" : 60000.00,
"realisedGain" : 2400.00,
"basis" : "FIFO"
},
"certificatesIssued" : 2,
"certificatesSuperseded" : 1,
"markUpdated" : "last traded price now drives portfolio valuation",
"auditEntries" : 4
}
What changed
- Seller's old certificate superseded, balance carried forward
- Buyer holds a new certificate — new lot, new acquisition date
- Realised gain of AED 2,400.00 booked against the seller
- Seller's cost basis reduced by the cost of the lot sold
- Last traded price now marks every holder's portfolio
Two points here. Cancel-and-reissue is what a lawyer expects — the old certificate is visibly dead rather than quietly wrong. And the realised gain is booked against the specific lot consumed, which is the figure the investor's accountant needs at year end.