# Katana Network

Source: https://developers.bitgo.com/docs/katana

## Overview

Katana Network is a Layer 2 blockchain built on the OP Stack and part of the Superchain ecosystem. It provides one-second block times with minimal transaction fees, using ETH as its native gas token. Katana Network inherits Ethereum's security through periodic state commitments to mainnet and supports standard Ethereum development tooling, including cross-chain interoperability through the Superchain bridge.

## Explorer

<a href="https://katanascan.com/" target="_blank" rel="noreferrer">
  https://katanascan.com/
</a>

## Wallet Types

BitGo enables holding katanaeth in the following wallet types:

|                  | Multisig Cold | Multisig Hot | MPC Cold | MPC Hot |
| ---------------- | ------------- | ------------ | -------- | ------- |
| **Custody**      | ❌            | ❌           | ✅       | ❌      |
| **Self-Custody** | ❌            | ❌           | ✅       | ✅      |

## Ticker Symbols

| Mainnet   | Testnet    |
| --------- | ---------- |
| KATANAETH | TKATANAETH |

## Faucet

The Katana Bokuto faucet is access-code-gated and may be temporarily unavailable. The recommended way to obtain testnet tkatanaeth is to bridge ETH from Sepolia to Bokuto.

**Bridge:** https://bridge.katana.network/

## Units

Each Katana ETH contains `1,000,000,000,000,000,000` (<code>10<sup>18</sup></code>) wei, so not even a single unit can be stored numerically without exceeding the range of JavaScript numbers. Gas fees use gwei as the denomination.

- 1 katanaeth = <code>10<sup>18</sup></code> wei
- 1 wei = <code>10<sup>-18</sup></code> katanaeth
- 1 gwei = <code>10<sup>-9</sup></code> katanaeth

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

## Tokens

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

## Fees

Katana Network supports EIP-1559 gas estimation. As an OP Stack L2, Katana accounts for both L2 execution costs and L1 data posting fees to Ethereum. 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

```javascript
bitgo
  .coin("tkatanaeth")
  .wallets()
  .generateWallet({
    label: "My Test Wallet",
    passphrase: "secretpassphrase1a5df8380e0e30",
    enterprise: "5612c2beeecf83610b621b90964448cd",
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
```
```shell
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="tkatanaeth"
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"'"
}'
```

## Create Address

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

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

## Consolidate Balance

Katana Network MPC wallets support multiple receive addresses. Each receive address is an externally owned account (EOA) controlled by the wallet key. To consolidate funds from receive addresses back to the base address, use the BitGo wallet consolidation API.

## Estimate Fee

```javascript
const BitGoJS = require("../../../src/index.js");
const bitgo = new BitGoJS.BitGo({ env: "test" });
const accessToken = process.env.ACCESS_TOKEN;
const coin = "tkatanaeth";

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();
```
```shell
export COIN="tkatanaeth"
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

```javascript
const tx = await fundedWallet.send({
  address: "<DESTINATION_ADDRESS>",
  amount: "<AMOUNT>",
  walletPassphrase: process.env.PASSWORD,
});
```
```shell
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="tkatanaeth"
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

Katana Network isn't a stakeable asset.
