# Bera

Source: https://developers.bitgo.com/docs/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

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

## 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 consists of `1,000,000,000,000,000,000` (<code>10<sup>18</sup></code>) wei, so not even a single bera can be stored numerically without exceeding the range of JavaScript numbers. Gas fees use gwei.

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

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:<br/> - Gas fees <br/> - Establishing new validators |
| **BGT** |<br/> Non-transferrable governance token of Berachain for:<br/> - Delegating authority to validators <br/> - Voting on the network proposals <br/> - 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, the network prioritizes transactions with a higher priority fee and processes them faster. If transaction speed is important to your app, setting a higher priority fee can help ensure quicker inclusion.

## Create Wallet

```shell cURL
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
}'
```
```js JavaScript
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

```shell cURL
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

```
```js JavaScript
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

```shell cURL
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"

```
```js JavaScript
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

```shell cURL
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"'"
}'
```
```shell cURL (send to many)
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"'"
}'
```
```js JavaScript
const tx = await fundedWallet.send({
    address: `<DESTINATION_ADDRESS>`,
    amount: `<AMOUNT>`,
    walletPassphrase: process.env.PASSWORD as string,
  });
```
```js JavaScript (send to many)
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 supports only **BGT**.

[To learn more about staking assets with BitGo, see [Staking Overview](/docs/stake-overview).]

```shell cURL
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"
}'
```
```js JavaScript
const stakingWallet = wallet.toStakingWallet();
const stakingRequest = await stakingWallet.stake({
  amount: '<AMOUNT>',
  cliendId: '<CLIENT_ID>'
});
```

## See Also

- [Consolidate Account Balance](/docs/wallets-consolidate)
- [Staking Overview](/docs/stake-overview)
