Prerequisites
- Sender wallet funded with native asset (ETH or SOL)
- Recipient registered on the target chain (or pass their 66-byte meta-address directly)
ethereumWalletClient/ethereumProvider(EVM) orsolanaWallet(Solana)
High-level: one method
Delayed announcement (anonymity set)
SetdelayAnnouncement (ms) to decouple the transfer from the announcement and break
the timing correlation between the two on-chain events:
Cross-chain send
Low-level: prepare + submit yourself
Use this when you need custom gas, batching, or UI control.Cross-chain relay (manual)
buildAnnounceWithRelay returns instructions + extra signers (Wormhole message keypair):
Sending tokens (ERC-20 / SPL)
Settoken to send an ERC-20 (Ethereum) or SPL mint (Solana) instead of the native asset.
amount is the token’s smallest unit (decimals-aware). The announcement is identical to a
native send, so the recipient discovers it the same way.
A fresh stealth address holds the token but no native gas, so the recipient cannot move it
without help. Either set
gasDrop to also send a little native asset to the stealth address,
or have the recipient withdraw via a gasless sweep.Recipient resolution
recipient accepts every identity form client.resolveRecipient understands:
recipient value | Behavior |
|---|---|
66-byte meta-address (0x + 132 hex, st:opq: prefix accepted) | Validated and used directly |
Ethereum 0x address | Registry lookup on Ethereum |
| Solana base58 pubkey | Registry lookup on Solana |
ipfs://CID | DID document fetch (configure ipfs on the client) |
*.eth name | ENS com.opaque.meta text record (configure ens on the client) |