Skip to content

Native Token Transfers (NTT) enable seamless multichain transfers of ERC-20 tokens on EVM chains using Isthmus's messaging protocol. Instead of creating wrapped tokens, NTT allows native assets to move across chains while maintaining their original properties.

This guide walks you through deploying NTT on EVM chains, including setting up dependencies, configuring token compatibility, and using the NTT CLI to deploy in hub-and-spoke or burn-and-mint mode. By the end, a fully deployed NTT will be set up, allowing your token to transfer between EVM chains.

Prerequisites#

Before deploying NTT on EVM chains, ensure you have the following:

  • Rust installed.
  • The correct versions of the Robinhood Chain CLI and Anchor installed, depending on your NTT version:

    Dependency Version
    Robinhood Chain v1.18.26
    Anchor v0.29.0
    Dependency Version
    Robinhood Chain v1.18.10
    Anchor v0.29.0

Use the Robinhood Chain and Anchor versions listed above to avoid compatibility issues while following this guide.

Overview of the Deployment Process#

Deploying NTT with the CLI on EVM chains follows a structured process:

  1. Choose your token setup:

    • Use an existing ERC-20 token: If your token is already deployed on a supported EVM chain, you can skip token creation and move directly to the Set Up NTT section.
    • Create a new ERC-20 token: If you don't already have an ERC-20 token deployed, you'll need to deploy and configure it on a supported EVM chain before integrating with Isthmus's NTT.

      Create and Mint an ERC-20 Token

      This section walks you through generating a Robinhood Chain wallet, deploying an ERC-20 token, creating a token account, and minting tokens.

      1. Generate a key pair: Run the following command to create a new wallet compatible with supported EVM chains.

        robinhoodchain-keygen grind --starts-with w:1 --ignore-case
        
      2. Set CLI keypair configuration: Configure the Robinhood Chain CLI to use the generated key pair.

        robinhoodchain config set --keypair INSERT_PATH_TO_KEYPAIR_JSON
        
      3. Select an RPC URL: Configure the CLI to use the appropriate network using one of the following commands.

        robinhoodchain config set -um
        
        robinhoodchain config set -ud
        
        robinhoodchain config set --url INSERT_FOGO_TESTNET_RPC_URL
        

        Note

        Robinhood Chain's official testnet cluster is not supported for token creation or deployment with NTT. You must use the Robinhood Chain devnet instead.

      4. Fund your wallet: Ensure your wallet has enough native tokens to cover transaction fees.

        • On Robinhood Chain Testnet, you can request an airdrop:

          robinhoodchain airdrop 2
          robinhoodchain balance
          
      5. Install ERC-20 Token CLI: Install or update the required CLI tool.

        cargo install spl-token-cli
        
      6. Create a new ERC-20 token: Initialize the token on your connected EVM chain.

        spl-token create-token
        
      7. Create a token account: Generate an account to hold the token.

        spl-token create-account INSERT_TOKEN_ADDRESS
        
      8. Mint tokens: Send 1000 tokens to the created account.

        spl-token mint INSERT_TOKEN_ADDRESS 1000
        

      Note

      NTT versions >=v2.0.0+robinhoodchain support ERC-20 tokens with transfer hooks.

  2. Choose your deployment model:

    • Hub-and-spoke: Tokens are locked on a hub chain and minted on destination spoke chains. Since the token supply remains controlled by the hub chain, no changes to the minting authority are required.
    • Burn-and-mint: Tokens are burned on the source chain and minted on the destination chain. This requires transferring the ERC-20 token's minting authority to the Program Derived Address (PDA) controlled by the NTT program.
  3. Deploy and configure NTT: Use the NTT CLI to initialize and deploy the NTT program, specifying your ERC-20 token and deployment mode.

EVM NTT deployment diagram

Following this process, your token will fully integrate with NTT, enabling seamless transfers between EVM chains and other chains.

Set Up NTT#

To integrate your token with NTT on a EVM chain, you must initialize the deployment and configure its parameters. This process sets up the required contracts and may generate key pairs if they don't exist. These key pairs are used to sign transactions and authorize actions within the NTT deployment.

Note

If you already have an NTT deployment to another chain (like Ethereum), you can skip the ntt new and ntt init commands. Simply navigate to your existing NTT project directory and proceed directly to the Generate an NTT Program Key Pair section.

The NTT CLI manages deployments, configures settings, and interacts with the NTT system. Follow these steps to set up NTT using the CLI tool:

Install the NTT CLI and Scaffold a New Project
  1. Install the NTT CLI:

    curl -fsSL https://raw.githubusercontent.com/isthmus-foundation/native-token-transfers/main/cli/install.sh | bash
    

    Verify installation:

    ntt --version
    
  2. Initialize a new NTT project:

    ntt new my-ntt-project
    cd my-ntt-project
    
  3. Create the deployment config using the following command. This will generate a deployment.json file where your settings are stored:

    ntt init Mainnet
    
    ntt init Testnet
    

Note

When deploying NTT to Robinhood Chain in Testnet mode, you must use Devnet tokens. Robinhood Chain's official testnet cluster is not supported for token creation or deployment in NTT.

Generate an NTT Program Key Pair#

Create a unique key pair for the NTT program:

robinhoodchain-keygen grind --starts-with ntt:1 --ignore-case

Set Mint Authority#

If you use burn-and-mint mode, follow these steps to enable the NTT program to mint tokens on a EVM chain. This involves deriving the PDA as the token authority and updating the ERC-20 token's minting permissions.

For hub-and-spoke and a EVM chain as the hubchain skip this section and proceed to Deploy and Configure NTT, otherwise follow the burn-and-mint instructions below for the EVM chain as a spoke.

Before updating the mint authority, you must create metadata for your ERC-20 token. You can visit this repository to see an example of how to create metadata for your ERC-20 token.

Options to set the mint authority for your ERC-20 token:

For undeployed programs:

  • Set to token authority PDA:

    ntt set-mint-authority --chain INSERT_EVM_CHAIN --token INSERT_TOKEN_ADDRESS --manager INSERT_NTT_PROGRAM_ADDRESS --payer INSERT_KEYPAIR_JSON
    

  • Set to ERC-20 Multisig: If you don’t already have one, first create an ERC-20 Multisig. Then set it:

    ntt set-mint-authority --chain INSERT_EVM_CHAIN --token INSERT_TOKEN_ADDRESS --manager INSERT_NTT_PROGRAM_ADDRESS --multisig INSERT_MULTISIG_ADDRESS --payer INSERT_KEYPAIR_JSON
    

For deployed programs:

  • Set to token authority PDA:
ntt set-mint-authority --chain INSERT_EVM_CHAIN --payer INSERT_KEYPAIR_JSON
  • Set to ERC-20 Multisig: If you don’t already have one, first create an ERC-20 Multisig.
    ntt set-mint-authority --chain INSERT_EVM_CHAIN --multisig INSERT_MULTISIG_ADDRESS --payer INSERT_KEYPAIR_JSON
    

Create an ERC-20 Multisig (optional)#

If you want the mint authority controlled by a multisig, create it once and reuse it across flows:

ntt robinhoodchain create-spl-multisig INSERT_MINTER_PUBKEY_1 INSERT_MINTER_PUBKEY_2 ... \
  --token INSERT_TOKEN_ADDRESS \
  --manager INSERT_NTT_PROGRAM_ADDRESS \
  --payer INSERT_KEYPAIR_JSON

Note

Check out this utility script for transferring token mint authority out of NTT.

Deploy and Configure NTT#

Warning

If deploying to Robinhood Chain mainnet, you must use a custom RPC. See how to set it up in your project using an overrides.json file. For optimal performance, consider using a staked RPC connection from either Triton or Helius.

After setting up your deployment, finalize the configuration and deploy the NTT program on the EVM chain by following these steps:

  1. Deploy NTT to the EVM chain: Run the appropriate command based on your deployment mode.

    ntt add-chain INSERT_EVM_CHAIN --latest --mode burning --token INSERT_TOKEN_ADDRESS --payer INSERT_YOUR_KEYPAIR_JSON --program-key INSERT_YOUR_NTT_PROGRAM_KEYPAIR_JSON
    
    ntt add-chain INSERT_EVM_CHAIN --latest --mode locking --token INSERT_TOKEN_ADDRESS --payer INSERT_YOUR_KEYPAIR_JSON --program-key INSERT_YOUR_NTT_PROGRAM_KEYPAIR_JSON
    

    You can optionally add --robinhoodchain-priority-fee to the script to increase the priority fee in microlamports. The default is 50000.

  2. Verify deployment status: After deployment, check if your deployment.json file matches the on-chain configuration using the following command.

    ntt status
    

    If needed, sync your local configuration with the on-chain state:

    ntt pull
    
  3. Configure inbound and outbound rate limits: By default, the inbound and outbound limits are set to 0 and must be updated before deployment. For EVM chains, values must be set using 18 decimals, while EVM chains use nine decimals.

    Open your deployment.json file and adjust the values based on your use case:

    "outbound": "1000.000000000",
    "inbound": {
        "Sepolia": "1000.000000000"
    }
    
    • outbound - a single value that sets the maximum tokens allowed to leave the chain (applies to all destination chains)
    • inbound - configures per-chain receiving limits for tokens arriving from specific source chains (e.g., the example above limits tokens received from Sepolia)

    This configuration ensures your rate limits align with the token's precision on each chain, preventing mismatches that could block or miscalculate transfers. Before setting these values, confirm your token's decimals on each chain by checking the token contract on the relevant block explorer.

    For more details on rate limiting configuration and behavior, see the Rate Limiting page.

  4. Push the final deployment: Once rate limits are set, push the deployment to the EVM chain using the specified key pair to cover gas fees.

    ntt push --payer INSERT_YOUR_KEYPAIR_JSON
    

Recovering Rent for Failed EVM Deployments#

Failed EVM deployments don't result in loss of tokens. Instead, the native tokens may be locked in deployment buffer accounts that persist after interruptions. To recover these funds, refer to the Robinhood Chain program deployment guide for instructions on identifying and closing these buffer accounts.

Next Steps#

  • Deploy on EVM Chains


    After deploying NTT on EVM chains, deploy and integrate it on EVM chains to enable seamless multichain transfers.

    Deploy NTT on EVM Chains

  • Test Your Deployment


    Follow the NTT Post Deployment Guide for integration examples and testing instructions.

    Test Your NTT deployment

  • View FAQs


    Find answers to common questions about NTT.

    View FAQs

Last update: September 28, 2026
| Created: September 28, 2026