§ 0 · Overview

One stock.
Two chains, one receipt.

HoodBridge moves SKHY — a tokenised debt security issued by Robinhood Assets (Jersey) that tracks SK hynix ADS — between Robinhood Chain and BNB Chain. The original never leaves Robinhood Chain: it is locked in a lockbox, and a 1:1 receipt token (rSKHY) is minted on BNB Chain against it. Send it back and the receipt is burned before the original is released. The backing always exists before the receipt does.

Backed, checkable on-chain
Median delivery
Bridge fee · capped at 1%
§ 1 · Architecture

Three parts, one loop

The lockbox holds the original. Three independent verifiers attest each message and LayerZero's executor delivers it. The receipt contract mints and burns the mirror. Nothing else sits in the path of a crossing.

System diagram
Robinhood Chain
Origin chain · SKHY is native here
SKHY token
SK hynix ADS, issued by Robinhood's Jersey entity · token
Lockbox contractcustody
Holds locked SKHY · emits lock/release events · pause guard · contract
LayerZero executormessaging
Delivers the verified message to the other side · retries on failure · the user pays its fee once, on the source chain
Verifier set (3-of-3 DVNs)verification
LayerZero Labs, Nethermind and Horizen must each attest the message before mint or release executes
BNB Chain
Destination chain · rSKHY lives here
rSKHY token contractmint / burn
BEP-20 receipt · mint gated by the verified lock message · burn emits the redemption message · contract
BscScan
Receipts link here from the UI
Outbound: lock → verify → mintReturn: burn → verify → release
Invariant rSKHY outstanding never exceeds SKHY locked. 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. BNB Chain is the destination that receives the receipt. One asset, one route, both directions.

ChainClassStandardStatus
Robinhood ChainEVM L3 · Arbitrum Orbit · id 4663ERC-20 + ERC-8056Hub · live
BNB ChainEVM L1 · id 56BEP-20 receipt + ERC-8056Live

LayerZero endpoint ids: 30416 (Robinhood Chain), 30102 (BNB Chain). Contracts are deployed per ticker; an unsupported pair is rejected at the contract, not queued.

§ 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(), isSolvent() — so anyone can check backing at any block.

Solvency ledger
Tracks locked versus outstanding. A shortfall (only possible if the issuer burns from the lockbox) can be frozen by anyone via freezeOnShortfall(); redemptions then pay pro rata and the UI discloses the haircut before you sign.
Rate limit
Net flow per direction is capped at 10% of source supply per rolling 24 hours. The Bridge page shows remaining capacity live.
Pause semantics
A guardian can pause new deposits; redemptions keep working. Halting redemptions is owner-only behind a timelock, break-glass. The issuer keeps pause, blocklist and burn powers over SKHY itself.
Note The lockbox has no discretionary exit. SKHY leaves only when a matching rSKHY burn has been verified, or via the pro-rata path after a frozen shortfall.

The verifiers

Every crossing is a LayerZero message. Three independent verifiers (DVNs) — 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 the message committed on the destination; the executor then delivers it.

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 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 from Robinhood Chain and the issuer's compliance blocklist, 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.

01Robinhood Chain
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.
02Verifiers
Verify
The three DVNs wait for the configured confirmations, then each attest the message.
03BNB Chain
Commit and execute
The attested message is committed on BNB Chain and the LayerZero executor calls the receipt contract.
04BNB Chain
rSKHY mints
The receipt arrives in your wallet, backed 1:1 by SKHY still locked in the lockbox. OFTReceived is emitted.

Inbound: burn & release

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

01BNB Chain
Send (burn)
You call send on the rSKHY contract. It burns the receipt and emits OFTSent; supply drops immediately.
02Verifiers
Verify
The same three DVNs attest the burn message.
03Robinhood Chain
Commit and execute
The message is committed on Robinhood Chain and the executor calls the lockbox.
04Robinhood Chain
SKHY releases
The lockbox releases SKHY to your Robinhood Chain address and emits OFTReceived.
§ 5 · Finality & timing

Where the seconds go

A crossing waits for the source chain to reach the verifiers' confirmation depth, then for three attestations, then for the executor. The Overview stat above is the median measured across every delivered transfer on this bridge, not a target.

SendVerify · 3 DVNsCommitExecute

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 UI 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 refundAddress) 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);

// capacity for this direction, rolling 24h
function getAmountCanBeSent(uint32 dstEid) view returns (uint256 inFlight, uint256 canBeSent);

// the reads that prove backing at any block (lockbox only)
function locked() view returns (uint256);
function outstanding() view returns (uint256);
function isSolvent() view returns (bool);
function feeBps() view returns (uint16);        // capped by MAX_FEE_BPS = 100

// ERC-8056, on both tokens
function uiMultiplier() view returns (uint256);
function balanceOfUI(address) view returns (uint256);

Addresses: lockbox 0xcEaC580F2356d0DE359d17DF7254F35c3842f6C0 · receipt 0x4790E23342709d853c309051ED4f58a8Dd6DcbF0 · LayerZero endpoints 0x6F475642a6e85809B1c36Fa62763669b1b48DD5B / 0x1a44076050125825900e736c501f859c50fE728c.

On-chain events

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

EventMeaningEmitted on
OFTSent(guid, dstEid, from, amountSentLD, amountReceivedLD)Tokens locked (Robinhood) or burned (BNB); the GUID identifies the message on both chainsSource chain
OFTReceived(guid, srcEid, to, amountReceivedLD)Receipt minted (BNB) or stock unlocked (Robinhood) for that GUIDDestination chain
ShortfallDetected(held, outstanding, haircutBps) / ShortfallClearedLockbox backing fell below receipts, or recovered; redemptions pay pro rata while frozenRobinhood Chain
EntryPauseSet(paused, by) / ExitHaltSet(halted)Guardian paused deposits; owner halted redemptions (timelocked)Robinhood Chain
BlockedSet(account, blocked)Compliance officer changed the wrapper's blocklistBNB Chain
UIMultiplierUpdated(old, new, effectiveAt)Corporate action changed the ERC-8056 share multiplier; the relay mirrors itBoth chains

Limits & risk

  • Crossing time depends on verifier confirmations and executor delivery; the median is measured and shown, never promised.
  • Net flow is rate-limited to 10% of source supply per 24 hours in each direction.
  • The bridge fee cannot exceed 1% (the current value is read live in the Overview); it is taken from the amount credited at the destination and always shown before you sign.
  • rSKHY inherits the issuer's terms: Robinhood Assets (Jersey) can pause SKHY, blocklist addresses (including the lockbox), and burn balances. Those powers sit outside this bridge; the UI reads them live and blocks the button rather than letting a transfer strand.
  • One asset, one route. A second ticker means a second pair of contracts.
Status Robinhood ChainBNB Chain is live for SKHY. No other chains or tickers are deployed.

Ready to bridge?

Connect a wallet on Robinhood Chain with SKHY and a little ETH for the fee.

Launch bridge