Demonstration environment — simulated contracts and approvals, nothing stored
Royex Technologies RoyexTokenization
Investor sign in Open an account
Adding a property Investor onboarding Funding an account Buying tokens and issuing the deed Reselling on the secondary market A transfer that gets refused Paying out rental income
Walkthrough · 4 steps

A transfer that gets refused

What happens when an unscreened buyer tries to acquire tokens

All walkthroughs

The strongest compliance moment in the platform. The interface does not simply hide the button — the contract itself rejects the transfer, and the refusal is recorded as evidence.

Real elapsed time: under a second · 1 external system call(s) · simulated round trip 568 ms
Investor
Browser or mobile app
Platform
Application + database
Compliance registry
On-chain whitelist
EXT
Token contract
Permissioned token on chain
Operator
Royex Tokenization console
Step 0 of 4
Step 01 Awaiting reply 30 ms

Unscreened investor attempts a purchase

An account that failed sanctions screening tries to buy from the order book. The platform does not hide the attempt — it processes it, so the refusal is recorded.

Investor ──▶ Platform HTTPS POST
/Market/Buy
Request Investor → Platform
{
  "accountRef" : "INV-103",
  "orderId"    : "ORD-418772",
  "tokens"     : 25
}
Response 202 Accepted
{
  "accepted" : false,
  "stage"    : "registry check",
  "detail"   : "proceeding to compliance verification"
}

What changed

  • Attempt logged
  • No funds reserved
Step 02 Refused 190 ms

Registry returns not verified

The address is not on the whitelist. The screening decision that produced this is on file against the account, so the refusal is explainable rather than opaque.

Platform ──▶ Compliance registry JSON-RPC (read)
IdentityRegistry.isVerified()
Request Platform → Compliance registry
{
  "method" : "IdentityRegistry.isVerified",
  "params" : { "address" : "0x9c31...77e5", "accountRef" : "INV-103" }
}
Response 200 OK
{
  "verified"        : false,
  "reason"          : "identity not registered",
  "onFile"          : "screening refused — sanctions match requiring escalation",
  "transferAllowed" : false
}

What changed

  • Transfer blocked before settlement
  • No money moved
Step 03 Refused 340 ms

Contract-level rejection demonstrated

Even if the interface were bypassed and the transfer submitted directly to the chain, the transfer hook reverts it. This is the control that actually matters.

Investor ──▶ Token contract JSON-RPC (direct call)
Marina Heights 1204 token → transfer() [eth_call]
Direct attempt Investor → Token contract
{
  "method" : "transfer",
  "params" : { "to" : "0x9c31...77e5", "amount" : 25 },
  "contract" : "0x41945f556471d0ff07411f2c39587b68a42a6c83",
  "note" : "submitted bypassing the platform interface"
}
Contract revert Reverted
{
  "success"    : false,
  "revert"     : "IdentityRegistry: receiver not verified",
  "gasUsed"    : 24118,
  "stateChange": "none",
  "note" : "the interface is not the control — the contract is"
}

What changed

  • Transaction reverted
  • No state change on chain
Say this

This is the slide to linger on. A platform that only hides the button has a compliance problem the moment someone uses the API directly.

Step 04 Completed 8 ms

Refusal written to the audit trail

The refusal is recorded with the rule that produced it, the account, the asset and a timestamp — then exported to the regulator in the same file as the successful actions.

Platform ──▶ Operator internal
Audit trail (append-only)
Audit entry Platform → Operator
{
  "sequence"   : 1184,
  "actor"      : "Gate",
  "refused"    : true,
  "message"    : "Transfer to Lionel Fabre rejected by the token contract — the address is not on the compliance registry.",
  "rule"       : "Permissioned transfer check — shared compliance registry",
  "accountRef" : "INV-103",
  "assetRef"   : "PRP-1001",
  "stamp"      : "refused — nothing written"
}
Result 201 Created
{
  "appended"       : true,
  "immutable"      : true,
  "visibleTo"      : ["operator console", "audit trail export"],
  "exportFormat"   : "CSV, RFC 4180"
}

What changed

  • Refusal permanently on the audit trail
  • Included in the regulator export
Say this

Refusals are recorded with the same weight as approvals. An inspection asks to see that the gate fired, not that nothing bad happened.