Bridge with Wormhole
Look up Wormhole chain IDs, send TNZO or a supported token through the Wormhole adapter, follow the VAA, and see where Native Token Transfers fit.
Wormhole is a generic cross-chain messaging network. A message published on the source chain is observed by Wormhole's guardian network, whose signatures form a Verified Action Approval (VAA). The VAA is then redeemed on the destination chain, where the token bridge or a Native Token Transfers (NTT) manager mints or releases the tokens. Tenzro nodes verify guardian signatures on inbound VAAs before acting on them.
On Tenzro Network 1, Wormhole is one adapter in the node's bridge router, with its own tenzro wormhole CLI group and tenzro_wormhole* RPC methods.
Prerequisites
- The
tenzroCLI (see CLI reference). - A funded Tenzro account. Fund it by transferring TNZO to its address from another wallet or account.
- A recipient address on the destination chain. For Solana, use a base58 address.
export RPC=https://rpc.tenzro.xyz
export ME=0x<your-address>1. Look up chain IDs
Wormhole identifies chains by its own numeric IDs, which differ from EVM chain IDs. You need them when reading VAAs or configuring contracts:
tenzro wormhole chain-id --chain solana --rpc $RPC
tenzro wormhole chain-id --chain base --rpc $RPC{ "chain": "solana", "wormhole_chain_id": 1 }2. See the NTT catalog
Tokens deployed with Native Token Transfers move as the native token on every chain, with no wrapped copies. List the chains in the node's NTT catalog:
tenzro wormhole-ntt list-chains --rpc $RPC3. Compare the route
tenzro bridge quote --rpc $RPC \
--from-chain tenzro --to-chain solana \
--token TNZO --amount 5000000000000000000 \
--protocol wormholeThe quote shows the estimated fee, output and time for the Wormhole route, and all_routes lists the alternatives when you drop --protocol.
4. Send
The transfer moves your funds, so the request must be signed by the sending account (see RPC access). The amount is in the smallest unit:
tenzro wormhole bridge --rpc $RPC \
--source-chain tenzro --dest-chain solana \
--asset TNZO --amount 5000000000000000000 \
--sender $ME \
--recipient <solana-address>{
"transfer_id": "...",
"source_chain": "tenzro",
"dest_chain": "solana",
"tx_hash": "0x...",
"fee_paid": "...",
"estimated_arrival_ms": ...
}If the node has no Wormhole adapter registered, the response carries status: "failed", an error, and the list of registered_adapters, so you can pick another rail.
5. Follow the VAA
A Wormhole VAA is identified as chain/emitter/sequence. Split an ID into its parts to look it up on a Wormhole explorer or pass it to a destination contract:
tenzro wormhole parse-vaa --vaa-id 2/0000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585/1234 --rpc $RPC{
"emitter_chain": 2,
"emitter_address": "0000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585",
"sequence": 1234
}Track the transfer through the router:
tenzro bridge status <transfer_id> --protocol wormhole --rpc $RPCThe transfer completes once enough guardians have signed the VAA and it has been redeemed on the destination chain. How long that takes depends mostly on the finality of the source chain.
6. From the TypeScript SDK
import { TenzroClient } from "tenzro-sdk";
const client = new TenzroClient({
endpoint: "https://rpc.tenzro.xyz",
apiEndpoint: "https://api.tenzro.xyz",
});
const wh = client.wormhole();
console.log(await wh.chainId("solana"));
console.log(await wh.parseVaaId("2/0000...a585/1234"));Next steps
- Wormhole reference, including NTT: Wormhole.
- All adapters and routing: Bridge.
- Other rails: Chainlink CCIP and LayerZero V2.