Overview

Unichain is a DeFi-native Ethereum Layer 2 rollup built on the OP Stack by Uniswap Labs. The network is fully EVM-compatible and part of the Optimism Superchain, offering faster and lower-cost transactions than Ethereum mainnet while settling to Ethereum for security.

Explorer

Wallets Types

BitGo enables holding Unichain in the following wallet types:

Multisig Cold Multisig Hot MPC Cold MPC Hot
Custody
Self-Custody

Ticker Symbols

Mainnet Testnet
Ticker unieth tunieth
Chain ID 130 1301

Faucet

You can use a faucet to obtain free testnet tunieth for development and testing.

Faucet: https://developers.uniswap.org/docs/unichain/tools/faucets

Units

Each unieth consists of 1,000,000,000,000,000,000 (1018) wei, so not even a single unieth can be stored numerically without exceeding the range of JavaScript numbers. Gas fees are denoted in gwei.

  • 1 unieth = 1018 wei
  • 1 wei = 10-18 unieth
  • 1 gwei = 10-9 unieth

For that reason, only string balance properties are available, which are balanceString, confirmedBalanceString, and spendableBalanceString.

Tokens

Unichain natively supports ERC20 tokens. BitGo-supported Unichain tokens can be accessed on the Mainnet (e.g. BitGo coins and tokens).

Fees

Unichain supports EIP-1559 gas estimation. As an OP Stack L2, fees account for both L2 execution costs and L1 data posting fees. The eth_estimateGas RPC endpoint returns a value that already considers both components. The base fee is the minimum price per unit of gas required for inclusion in a block. The priority fee is paid on top of the base fee and incentivizes faster sequencer processing. The network denominates and pays gas in ETH.

Create Wallet

bitgo
  .coin('tunieth')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '5612c2beeecf83610b621b90964448cd',
    walletVersion: 4,
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="tunieth"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export LABEL="<DESIRED_WALLET_NAME>"
export PASSPHRASE="<YOUR_BITGO_LOGIN_PASSPHRASE>"
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"

curl -X POST \
 http://$BITGO_EXPRESS_HOST/api/v2/$COIN/wallet/generate \
 -H 'Content-Type: application/json' \
 -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "label": "'"$LABEL"'",
    "passphrase": "'"$PASSPHRASE"'",
    "enterprise": "'"$ENTERPRISE_ID"'",
    "walletVersion": 4
}'

Create Address

bitgo
  .coin('tunieth')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
export WALLET="585c51a5df8380e0e3082e46"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tunieth/wallet/$WALLET/address

Consolidate Balance

Consolidation Fee Source: Unichain Gas Tank

Unichain uses forwarders, so it does not support manual consolidation.

Estimate Fee

const BitGoJS = require('../../../src/index.js');
const bitgo = new BitGoJS.BitGo({ env: 'test' });
const accessToken = '<YOUR_ACCESS_TOKEN>';
const coin = 'tunieth';

async function getFeeEstimate() {
  try {
    await bitgo.authenticateWithAccessToken({ accessToken });
    const res = await bitgo.coin(coin).feeEstimate({ numBlocks: 2 });
    console.dir(res);
  } catch (err) {
    console.error('Error fetching fee estimate:', err);
  }
}

getFeeEstimate();
export COIN="tunieth"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X GET \
 https://app.bitgo-test.com/api/v2/$COIN/tx/fee \
 -H 'Content-Type: application/json' \
 -H "Authorization: Bearer $ACCESS_TOKEN"

Transact

Withdrawal Fee Source: Wallet Base Address

const tx = await fundedWallet.send({
    address: '<DESTINATION_ADDRESS>',
    amount: '<AMOUNT>',
    walletPassphrase: process.env.PASSWORD,
  });
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="tunieth"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ADDRESS="<DESTINATION_ADDRESS>"
export AMOUNT="<AMOUNT_IN_BASE_UNITS>"
export WALLET_PASSPHRASE="<YOUR_WALLET_PASSPHRASE>"

curl -X POST \
 http://$BITGO_EXPRESS_HOST/api/v2/$COIN/wallet/$WALLET_ID/sendcoins \
  -H 'Content-Type: application/json' \
 -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "address": "'"$ADDRESS"'",
    "amount": "'"$AMOUNT"'",
    "walletPassphrase": "'"$WALLET_PASSPHRASE"'"
}'

Stake

Unichain isn't a stakeable asset.

See Also