Babylon
Overview
Baby is the native asset of the Babylon blockchain. It utilizes:
- Account model
- EcDSA signature algorithm
The Babylon project designs security protocols that scale Bitcoin to secure the decentralized world. To this end, Babylon utilizes three primary facets of Bitcoin:
- Bitcoin, the asset
- Bitcoin, the PoW-secured timestamping server
- Bitcoin, the censorship-resistant blockspace
Through inventing pioneering protocols, Babylon envisions a more secure and Bitcoin-centric decentralized world.
Explorer
https://testnet.babylon.explorers.guru/
Wallets Types
BitGo enables holding Baby in the following wallet types:
| Multisig Cold | Multisig Hot | MPC Cold | MPC Hot | |
|---|---|---|---|---|
| Custodial | ❌ | ❌ | ✅ | ❌ |
| Self Managed | ❌ | ❌ | ✅ | ✅ |
Ticker Symbols
| Mainnet | Testnet |
|---|---|
| baby | tbaby |
Faucet
Testnet tbaby coins can be requested from the Babylon discord channel.
Units
Baby is divisible by 10-6 and the base unit is a ubbn:
- 1 Baby = 1,000,000 ubbn
- 1 ubbn = 0.000001 Baby
Baby balances can be in either integer or string format. However, BitGo recommends using string format to ensure values don't exceed the programmable number limit.
Tokens
The Babylon blockchain doesn't natively support tokens.
Fees
Baby has the following fees:
- Minimum fee = 0.007 Baby
- Default fee rate = 0.007 Baby
Address Format
Babylon addresses follow the format: bbn1<38-character-bech32-body>. All addresses are exactly 42 characters in length and begin with the fixed prefix bbn1. This format adheres to the following regular expression:
/^(bbn)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/Memo ID Support
- Optionally, a
?memoId=<n>query parameter can be appended to the address for use cases such as identifying transaction metadata. Here,<n>can be any integer. - Using
memoId-based addressing eliminates the need to generate multiple deposit addresses per user. A single static address can be reused safely across users and use cases, with thememoIdserving as the unique identifier. - Since Babylon uses
memoId-based receive addresses, manual consolidation is not required.
Create Wallet
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="tbaby"
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"'",
"disableTransactionNotifications": true,
"disableKRSEmail": true
}' const { BitGo } = require('bitgo');
const accessToken = '<YOUR_ACCESS_TOKEN>';
// Initialize the SDK
const bitgo = new BitGo({
accessToken: accessToken,
env: 'test',
});
// Generate hot wallet
async function createHotWalletSimple() {
const newWallet = await bitgo.coin('tbaby').wallets().generateWallet({
label: '<DESIRED_WALLET_NAME>',
passphrase: '<YOUR_BITGO_LOGIN_PASSWORD>',
});
console.log(JSON.stringify(newWallet, undefined, 2));
}Create Address
export COIN="tbaby"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
curl -X POST \
https://app.bitgo-test.com/api/v2/$COIN/wallet/$WALLET_ID/address \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" const { BitGo } = require('bitgo');
const accessToken = '<YOUR_ACCESS_TOKEN>';
// Initialize the SDK
const bitgo = new BitGo({
accessToken: accessToken,
env: 'custom',
customRootURI: 'https://app.bitgo.com',
});
// Create address
const wallet = await bitgo.coin('tbaby').wallets().generateWallet({
label: '<DESIRED_WALLET_NAME>',
passphrase: '<YOUR_BITGO_LOGIN_PASSPHRASE>',
});
const address = await wallet.createAddress(
);
// Print address details
console.log(JSON.stringify(address, undefined, 2));Estimate Fee
export COIN="tbaby"
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 Promise = require('bluebird');
const accessToken = '<YOUR_ACCESS_TOKEN>';
const coin = 'tbaby';
Promise.coroutine(function *() {
bitgo.authenticateWithAccessToken({ accessToken });
bitgo.coin(coin).feeEstimate({ numBlocks: 2 }, function callback(err, res) {
console.dir(res);
});
})();Transact
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="tbaby"
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="tbaby"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ADDRESS_1="<DESTINATION_ADDRESS_1>"
export ADDRESS_2="<DESTINATION_ADDRESS_2>"
export AMOUNT_1="<AMOUNT_1_IN_BASE_UNITS>"
export AMOUNT_2="<AMOUNT_2_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"'"
},
{
"address": "'"$ADDRESS_2"'",
"amount": "'"$AMOUNT_2"'"
}
],
"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>",
},
{
amount: "<AMOUNT_2>",
address: "<DESTINATION_ADDRESS_2>",
},
],
walletPassphrase: "<YOUR_WALLET_PASSPHRASE>",
};
wallet.sendMany(params).then(function (transaction) {
// Print transaction details
console.dir(transaction);
});Updated 2 days ago