Skip to main content
This guide shows how to give any NFT its own account (wallet) on Monad using the canonical Tokenbound ERC-6551 v3 deployment. The full stack is live on both Monad mainnet and testnet at the same canonical addresses used on Ethereum and Base, so the standard @tokenbound/sdk works with no custom contract configuration.

What is ERC-6551?

ERC-6551 gives every ERC-721 NFT its own smart-contract account — a “token-bound account” (TBA). The account is owned by whoever currently holds the NFT, so anything the account owns or can do transfers automatically when the NFT is transferred. Concretely, a token-bound account can:
  • Hold assets — ERC-20s, other NFTs, and native MON.
  • Execute arbitrary transactions, authorized by the current NFT holder.
  • Act as an identity or inventory for games, agents, memberships, and loyalty programs.
Because accounts are created deterministically through a shared, permissionless registry, the account address for a given NFT is knowable in advance and identical across every chain the standard is deployed on.

Key benefits

  • Ownership follows the NFT: transfer the NFT and its entire account — assets and permissions — moves with it, atomically, with no migration step.
  • Deterministic addresses: an NFT’s account address is computed from (chainId, tokenContract, tokenId, implementation, salt), so it can be derived off-chain before the account is even deployed.
  • No new standard to learn on the wallet side: a TBA is a smart account, compatible with existing tooling and ERC-4337 account abstraction.
  • Works out of the box: Monad uses the canonical Tokenbound contracts at their standard cross-chain addresses, so existing ERC-6551 apps and the Tokenbound SDK point at Monad with a config change only.

Canonical deployment on Monad

The Tokenbound ERC-6551 v3 stack is deployed at its canonical, deterministic addresses on Monad mainnet (chain ID 143) and Monad testnet (chain ID 10143). The addresses are identical on both networks and match the Ethereum/Base deployments. All contracts are source-verified on Monadscan and MonadVision. The V3 account implementation is wired to the ERC-4337 EntryPoint v0.6 at 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789 (testnet), which is also live on Monad.

Quickstart with the Tokenbound SDK

Install the SDK and viem:
Point the client at Monad. Because Monad’s deployment uses the canonical v3 addresses that ship as the SDK’s defaults, you only need to supply the chain — no custom contract addresses:
Pass the viem chain object (monad / monadTestnet) explicitly. Recognizing Monad by chainId alone (e.g. chainId: 143) requires Monad to be registered in the SDK’s bundled chain list — a change tracked upstream in tokenbound/sdk. Requires viem ≥ 2.40.0, which is the first release to export the monad mainnet chain.
Derive an NFT’s account address (deterministic — works before the account is deployed), then create it:
Once created, the account is controlled by the current holder of the NFT. The holder can execute transactions through it:
Transfer the underlying NFT and control of the account — along with everything it holds — moves to the new owner automatically. No further action required.

Notes and limitations

  • Cross-chain execution is not enabled on Monad. The core TBA stack is fully deployed, but the optional LayerZero V2 executor that powers Tokenbound’s cross-chain calls was not deployed. Same-chain account creation, ownership resolution, and execution work as normal.

Resources

Need help?

Join the Monad Developer Discord.