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
Wallets Types
BitGo enables holding inketh in the following wallet types:
| Multisig Cold | Multisig Hot | MPC Cold | MPC Hot | |
|---|---|---|---|---|
| Custody | ❌ | ❌ | ✅ | ❌ |
| Self-Custody | ❌ | ❌ | ✅ | ✅ |
Ticker Symbols
| Mainnet | Testnet |
|---|---|
| INKETH | TINKETH |
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 =
1018wei - 1 wei =
10-18inketh - 1 gwei =
10-9inketh
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 13bitgo .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 17export 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 11bitgo .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 6export 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 16const 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 7export 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 5const 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 17export 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.