Bera
Overview
Berachain is a high-performance EVM-identical L1 blockchain built using the Cosmos SDK and leveraging a unique consensus mechanism called Proof-of-Liquidity (PoL). Unlike traditional proof-of-stake models, Berachain incentivizes liquidity providers by allowing them to stake liquidity positions instead of native tokens, fostering deeper liquidity and aligning incentives between validators and ecosystem participants.
Explorer
https://berascan.com/
Wallets Types
BitGo enables holding bera in the following wallet types:
| Multisig Cold | Multisig Hot | MPC Cold | MPC Hot | |
|---|---|---|---|---|
| Custody | ❌ | ❌ | ✅ | ✅ |
| Self-Custody | ❌ | ❌ | ✅ | ✅ |
Ticker Symbols
| Mainnet | Testnet |
|---|---|
| bera | tbera |
Faucet
You can use a faucet to obtain free testnet tbera for development and testing purposes.
Faucet: Use a cartio faucet funds
Units
Each bera is comprised of 1,000,000,000,000,000,000 (1018) wei, so not even a single bera can be stored numerically without exceeding the range of JavaScript numbers. Gas fees are denoted in gwei.
- 1 bera =
1018wei - 1 wei =
10-18bera - 1 gwei =
10-9bera
For that reason, only string balance properties are available, which are balanceString, confirmedBalanceString, and
spendableBalanceString.
Tokens
| Native Tokens | Utility |
|---|---|
| BERA | Native token of Berachain primarily used for: - Gas fees - Establishing new validators |
| BGT | Non-transferrable governance token of Berachain for: - Delegating authority to validators - Voting on the network proposals - Redeeming for $BERA |
| HONEY | Stablecoin of Berachain which maintains a 1:1 ratio with USD |
Fees
BERA supports EIP-1559 gas estimation and accounts for both L2 and L1 components of fees. The eth_estimateGas RPC endpoint provides a value that already includes both L1 and L2 gas costs.
Unlike fixed gas limits, you cannot set a strict 21K upper limit for transactions, as gas requirements fluctuate over time with L1 price variations.
The base fee is the minimum price per unit of gas that a transaction must pay to be included in a block. Transactions must specify a maximum base fee higher than the block base fee to be included. The actual fee charged is the block base fee, even if the transaction specifies a higher maximum base fee.
The priority fee is an additional price per unit of gas paid on top of the base fee. In BERA, transactions with a higher priority fee are prioritized and processed faster. If transaction speed is important to your application, setting a higher priority fee can help ensure quicker inclusion.
Create Wallet
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="tbera"
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('tbera')
.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/tbera/wallet/$WALLET/address
bitgo
.coin('tbera')
.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: Berachain Gas Tank
Bera uses forwarders, therefore does not support manual consolidation
Estimate Fee
export COIN="tbera"
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 = 'tbera';
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="tbera"
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="tbera"
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
BitGo supports both native staking and liquid staking for BERA.
Note: Staking is limited to BGT.
[To learn more about staking assets with BitGo, see Staking Overview.]
export COIN="[testnet ID all lowercase]"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export CLIENT_ID="<CLIENT_ID>"
export AMOUNT="<AMOUNT_IN_BASE_UNITS>"
export GAS_PRICE="<GAS_PRICE>"
export TYPE="STAKE"
curl -X POST \
http://api/staking/v1/$COIN/wallets/$WALLET_ID/requests \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"clientId": "'$CLIENT_ID'",
"amount": "'$AMOUNT'",
"gasPrice": "'$GAS_PRICE'",
"type": "STAKE"
}'const stakingWallet = wallet.toStakingWallet();
const stakingRequest = await stakingWallet.stake({
amount: '<AMOUNT>',
cliendId: '<CLIENT_ID>'
});See Also
Updated 2 days ago