INK

Overview

INK is a Layer 2 blockchain built on Optimism's Superchain by Kraken, designed for decentralized finance applications. It enables developers to deploy EVM-compatible smart contracts with access to cross-chain interoperability through the Superchain ecosystem. The network supports standard EVM development tools including Foundry and Hardhat, and uses ETH as its native gas token.

Explorer

https://explorer.inkonchain.com/

Wallets Types

BitGo enables holding inketh in the following wallet types:

Multisig ColdMultisig HotMPC ColdMPC Hot
Custody
Self-Custody

Ticker Symbols

MainnetTestnet
INKETHTINKETH

Faucet

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

Faucet: https://docs.inkonchain.com/tools/faucets

Units

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

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

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

Tokens

INK supports the ERC20 token standard. ERC20 tokens on INK are available as BitGo supported assets.

Fees

INK supports EIP-1559 gas estimation. As an OP Stack L2, INK accounts for both L2 execution costs and L1 data posting fees. The eth_estimateGas RPC endpoint returns a value that already considers both components. You cannot set a fixed 21K gas limit since the L1 data fee component changes over time with L1 prices.

The base fee is the minimum price per unit of gas required for a transaction to be included in a block. Transactions must specify a maximum base fee higher than the block base fee to be included. The priority fee is paid on top of the base fee and is used to incentivize faster sequencer processing.

Create Wallet

1 2 3 4 5 6 7 8 9 10 11 12 13 bitgo .coin("tinketh") .wallets() .generateWallet({ label: "My Test Wallet", passphrase: "secretpassphrase1a5df8380e0e30", enterprise: "5612c2beeecf83610b621b90964448cd", walletVersion: 4, }) .then(function (wallet) { // print the new wallet console.dir(wallet); });
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>" export COIN="tinketh" 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

1 2 3 4 5 6 7 8 9 10 11 bitgo .coin("tinketh") .wallets() .getWallet({ id: "585c51a5df8380e0e3082e46" }) .then(function (wallet) { return wallet.createAddress(); }) .then(function (newAddress) { // print new address details console.dir(newAddress); });
1 2 3 4 5 6 export WALLET="585c51a5df8380e0e3082e46" export ACCESS_TOKEN=<YOUR_ACCESS_TOKEN> curl -X POST \ -H "Authorization: Bearer $ACCESS_TOKEN" \ https://app.bitgo-test.com/api/v2/tinketh/wallet/$WALLET/address

Consolidate Balance

INK supports Multisignature smart-contract wallets which utilize forwarder smart contracts to enable multiple receive addresses. The forwarder smart contract automatically consolidates native tokens received in your receive addresses to your base address. However, if you receive non-native tokens, such as ERC20 tokens, a different consolidation transaction will be initiated to the base address. Additionally, forwarders can only send assets to the base address of the wallet.

Estimate Fee

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 const BitGoJS = require("../../../src/index.js"); const bitgo = new BitGoJS.BitGo({ env: "test" }); const accessToken = process.env.ACCESS_TOKEN; const coin = "tinketh"; 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();
1 2 3 4 5 6 7 export COIN="tinketh" 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

1 2 3 4 5 const tx = await fundedWallet.send({ address: "<DESTINATION_ADDRESS>", amount: "<AMOUNT>", walletPassphrase: process.env.PASSWORD, });
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>" export COIN="tinketh" 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

INK isn't a stakeable asset.