Technical documentation · Revision ARobinhood Chain ⇄ BNB Chain live · EVM + SVM
§ 0 · Overview

One stock. Every chain.

HoodBridge is a cross-chain protocol for tokenized stocks. A stock tokenized on one chain becomes tradable on another: the original is locked in a lockbox on its home chain, and a bridged receipt is minted on the destination chain against it. Send it back and the receipt is burned before the original is released. The backing always exists before the mirror does.

—
Backed, checkable on-chain
—
Median crossing, measured
—
Protocol fee · capped at 1%
§ 1 · Architecture

Three parts, one loop

The lockbox holds the original. Three independent verifiers attest each message and an executor delivers it. The receipt contract issues and destroys the mirror. Nothing else sits in the path of a crossing.

HOME CHAIN · ROBINHOODDESTINATION · BNB CHAIN01 · LOCKBOXLocks the originalSKHY held on-chain02 · VERIFIERSAttest the message3-of-3 DVNs, single-use03 · RECEIPTIssues the mirrorrSKHY, 1:1 backedSOLID = OUTBOUND (LOCK → MINT) · DASHED = INBOUND (BURN → RELEASE)
INVARIANT · rSKHY outstanding never exceeds SKHY locked in the lockbox. Lock precedes mint; burn precedes release.
§ 2 · Chains & routes

Robinhood Chain is the hub

Robinhood Stock Tokens live on Robinhood Chain, so it holds the lockbox. Every other chain is a destination that receives bridged receipts. Robinhood Chain ⇄ BNB Chain is live; the rest are rolling out.

ChainClassStandardStatus
Robinhood ChainEVM L3Native RWAHub · live
BNB ChainEVM L1BEP-20Live
EthereumEVM L1ERC-20Rollout
BaseEVM L2ERC-20Rollout
SolanaSVM L1SPLRollout
ArcEVM L1ERC-20Rollout
§ 3 · The mechanism

The lockbox

The lockbox (RhStockOFTAdapter) sits on Robinhood Chain and does two things: it escrows SKHY on the way out and releases it against a verified message on the way back. Its ledger is public, locked(), outstanding() and isSolvent(), so anyone can check backing at any block. Net flow is capped at 10% of supply per rolling 24 hours in each direction, a guardian can pause deposits, and halting redemptions is owner-only behind a timelock.

NOTE · The lockbox has no discretionary exit. SKHY leaves only when a matching rSKHY burn has been verified, or pro rata after a frozen shortfall.

The verifiers

Every crossing is a LayerZero message. Three independent verifiers, LayerZero Labs, Nethermind and Horizen, watch the source chain, wait for the configured block confirmations, and each attest the message. Only when all three agree is it committed on the destination, where an executor delivers it. A delivered message cannot be delivered again.

Scoped

Bound to one destination endpoint and one recipient, both fixed in the message.

Exact

Carries the amount observed on the source chain, floored to 8 shared decimals; never more.

Single-use

Each message has a nonce and a GUID; the endpoint consumes it once and rejects replays.

The receipt token

On BNB Chain the receipt contract (StockOFT) issues rSKHY for SKHY against a verified lock message, and burns it when a holder bridges back. It is the only contract that can change rSKHY supply, and it can only do so through the LayerZero endpoint. It mirrors the ERC-8056 share multiplier and the issuer's blocklist from Robinhood Chain, so 1 rSKHY always redeems for 1 SKHY whatever corporate actions do to the share count.

§ 4 · Crossings

Outbound: lock & mint

Moving SKHY from Robinhood Chain to BNB Chain. Four steps, in this order, every time.

01

Approve and send

You approve the lockbox for the exact amount, then call send. The lockbox escrows SKHY and emits OFTSent with the message GUID.

Home chain
02

Verify

The three DVNs wait for the configured confirmations, then each attest the message.

Verifiers
03

Commit and execute

The attested message is committed on BNB Chain and the executor calls the receipt contract.

Destination
04

rSKHY mints

The receipt arrives in your wallet, backed 1:1 by SKHY still locked. OFTReceived is emitted.

Destination

Inbound: burn & release

Coming back the other way, the receipt is destroyed before the backing is freed.

01

Send (burn)

You call send on the rSKHY contract. It burns the receipt and emits OFTSent; supply drops immediately.

Destination
02

Verify

The same three DVNs attest the burn message.

Verifiers
03

Commit and execute

The message is committed on Robinhood Chain and the executor calls the lockbox.

Home chain
04

SKHY releases

The lockbox releases SKHY to your Robinhood Chain address and emits OFTReceived.

Home chain
§ 5 · Finality & timing

Where the seconds go

Almost all of a crossing is waiting for the source chain to reach the verifiers' confirmation depth, then for three attestations. Delivery is fast; confirmations are not negotiable. The figure below is measured across every delivered transfer, not a target.

SENDCONFIRMATIONS + 3 DVN ATTESTATIONSCOMMITEXECUTE
t = 0t ≈ —

If the destination leg cannot execute yet (paused, halted, rate-limited), the message is stored and retryable indefinitely. Funds are safe and nothing needs resending; the Bridge page tracks each stage from LayerZero Scan.

§ 6 · Reference

Interface

Both sides expose the LayerZero OFT surface. Deposit and redeem are the same call on different chains; there is no separate deposit or withdraw.

RhStockOFTAdapter · StockOFTSolidity · LayerZero V2 OFT
// the crossing — identical on both chains
function send(SendParam calldata, MessagingFee calldata, address refund) payable returns (MessagingReceipt, OFTReceipt);
// what it costs and what arrives
function quoteSend(SendParam calldata, bool payInLzToken) view returns (MessagingFee);
function quoteOFT(SendParam calldata) view returns (OFTLimit, OFTFeeDetail[], OFTReceipt);
function getAmountCanBeSent(uint32 dstEid) view returns (uint256 inFlight, uint256 canBeSent);
// the reads that prove 1:1 backing at any block (lockbox)
function locked() view returns (uint256);
function outstanding() view returns (uint256);
function isSolvent() view returns (bool);
function feeBps() view returns (uint16); // MAX_FEE_BPS = 100
// ERC-8056, on both tokens
function uiMultiplier() view returns (uint256);
function balanceOfUI(address) view returns (uint256);

Lockbox 0xcEaC580F2356d0DE359d17DF7254F35c3842f6C0 · receipt 0x4790E23342709d853c309051ED4f58a8Dd6DcbF0 · LayerZero endpoints 0x6F475642a6e85809B1c36Fa62763669b1b48DD5B / 0x1a44076050125825900e736c501f859c50fE728c · eids 30416 / 30102.

Onchain events

Every step announces itself, so a crossing can be audited end to end from chain data alone.

EventMeaningEmitted on
OFTSentTokens locked (Robinhood Chain) or burned (BNB Chain). Carries the GUID that identifies the message on both chains.Source chain
OFTReceivedReceipt minted (BNB Chain) or stock released (Robinhood Chain) for that GUID.Destination
ShortfallDetectedLockbox backing fell below receipts. Redemptions pay pro rata while frozen; ShortfallCleared ends it.Robinhood Chain
EntryPauseSetGuardian paused or resumed deposits. Redemptions keep working.Robinhood Chain
ExitHaltSetOwner halted or resumed redemptions, behind a timelock.Robinhood Chain
BlockedSetCompliance officer changed the receipt token's blocklist.BNB Chain
UIMultiplierUpdatedA corporate action changed the ERC-8056 share multiplier; the relay mirrors it.Both chains

Limits & risk

Crossing time depends on source-chain confirmations and executor delivery and is not fixed. Net flow is rate-limited to 10% of supply per 24 hours each way. The protocol fee is read live and can never exceed 1%. Routes go live one at a time; an unsupported pair is rejected at the contract, not queued. rSKHY tracks SKHY and inherits its issuer terms: Robinhood Assets (Jersey) can pause the token, blocklist addresses including the lockbox, and burn balances. The UI reads those powers live and blocks the button rather than letting a transfer strand.

STATUS · Robinhood Chain ⇄ BNB Chain is live for SKHY. Ethereum, Base, Solana and Arc routes are in rollout; nothing else is deployed.