ApeChain
Overview
ApeChain is an Ethereum Layer 3 blockchain built on Arbitrum Orbit, designed for the ApeCoin ecosystem and gaming/entertainment applications. It uses APE as its native gas token and provides full EVM compatibility, enabling existing Ethereum and Arbitrum dApps to deploy without code modifications. ApeChain settles to Arbitrum One and inherits Ethereum's security through Arbitrum's fraud proof system.
Network Information
| Configuration | Mainnet | Testnet (Curtis) |
|---|---|---|
| Block Explorer | https://apescan.io | https://curtis.apescan.io |
| Chain ID | 33139 | 33111 |
| Currency Symbol | APE | APE |
| Layer 1 | Arbitrum One | Arbitrum Sepolia |
Explorer
- Mainnet: https://apescan.io
- Testnet: https://curtis.apescan.io
Wallets Types
BitGo enables holding ApeChain in the following wallet types:
| Multisig Cold | Multisig Hot | MPC Cold | MPC Hot | |
|---|---|---|---|---|
| Custody | ❌ | ❌ | ✅ | ❌ |
| Self-Custody | ❌ | ❌ | ✅ | ✅ |
Ticker Symbols
| Mainnet | Testnet |
|---|---|
| apechain | tapechain |
Faucet
You can use a faucet to obtain free testnet APE for development and testing.
Faucet: https://curtis.hub.caldera.xyz/
Units
Each APE is comprised of 1,000,000,000,000,000,000 (1018) wei, so not even a single APE can be stored numerically without exceeding the range of JavaScript numbers. Gas fees are denoted in gwei.
- 1 APE =
1018wei - 1 wei =
10-18APE - 1 gwei =
10-9APE
For that reason, only string balance properties are available, which are balanceString, confirmedBalanceString, and
spendableBalanceString.
Tokens
ApeChain natively supports tokens. BitGo-supported ApeChain tokens can be accessed on the Mainnet (e.g. BitGo coins and tokens).
Fees
ApeChain supports EIP-1559 gas estimation. The network uses APE as its native gas token. Fees consist of a base fee that adjusts dynamically based on block utilization plus an optional priority tip. As an Arbitrum Orbit chain, fees also include an L2 component for posting data to the parent chain.
Create Wallet
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="tapechain"
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
}'bitgo
.coin('tapechain')
.wallets()
.generateWallet({
label: 'My Test Wallet',
passphrase: 'secretpassphrase1a5df8380e0e30',
enterprise: '5612c2beeecf83610b621b90964448cd',
walletVersion: 4,
})
.then(function (wallet) {
// print the new wallet
console.dir(wallet);
});Create Address
export WALLET="585c51a5df8380e0e3082e46"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tapechain/wallet/$WALLET/address
bitgo
.coin('tapechain')
.wallets()
.getWallet({ id: '585c51a5df8380e0e3082e46' })
.then(function (wallet) {
return wallet.createAddress();
})
.then(function (newAddress) {
// print new address details
console.dir(newAddress);
});Consolidate Balance
Consolidation Fee Source: ApeChain Gas Tank
ApeChain uses forwarders, so it does not support manual consolidation.
Estimate Fee
export COIN="tapechain"
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"
const BitGoJS = require('../../../src/index.js');
const bitgo = new BitGoJS.BitGo({ env: 'test' });
const accessToken = '<YOUR_ACCESS_TOKEN>';
const coin = 'tapechain';
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();
Transact
Withdrawal Fee Source: Wallet Base Address
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="tapechain"
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"'"
}'export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="tapechain"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ADDRESS_1="<DESTINATION_ADDRESS_1>"
export AMOUNT_1="<AMOUNT_1_IN_BASE_UNITS>"
export WALLET_PASSPHRASE="<YOUR_WALLET_PASSPHRASE>"
curl -X POST \
http://$BITGO_EXPRESS_HOST/api/v2/$COIN/wallet/$WALLET_ID/sendmany \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"recipients": [
{
"address": "'"$ADDRESS_1"'",
"amount": "'"$AMOUNT_1"'"
}
],
"walletPassphrase": "'"$WALLET_PASSPHRASE"'"
}'const tx = await fundedWallet.send({
address: `<DESTINATION_ADDRESS>`,
amount: `<AMOUNT>`,
walletPassphrase: process.env.PASSWORD as string,
});let params = {
recipients: [
{
amount: "<AMOUNT_1>",
address: "<DESTINATION_ADDRESS_1>",
}
],
walletPassphrase: "<YOUR_WALLET_PASSPHRASE>",
};
wallet.sendMany(params).then(function (transaction) {
// Print transaction details
console.dir(transaction);
});Stake
ApeChain isn't a stakeable asset.
See Also
Updated 2 days ago