Skip to content

bnb-chain/bsc-genesis-contract

This branch is 1 commit ahead of master.

Folders and files

NameName
Last commit message
Last commit date
Sep 23, 2024
Jul 22, 2024
Oct 9, 2024
Oct 11, 2024
Sep 23, 2024
Sep 3, 2020
Feb 26, 2024
Nov 11, 2020
Feb 26, 2024
Jul 3, 2023
Jul 3, 2023
Feb 26, 2024
Feb 26, 2024
Feb 26, 2024
Oct 11, 2024
Oct 9, 2024
Mar 1, 2023
Aug 26, 2024
Sep 23, 2024
Jan 8, 2025
Jan 8, 2025

Repository files navigation

bsc-genesis-contracts

This repo hold all the genesis contracts on BNB Smart chain. More details in doc-site.

Prepare

Install node.js dependency:

npm install

Install foundry:

curl -L https://foundry.paradigm.xyz | bash
foundryup
forge install --no-git --no-commit foundry-rs/forge-std@v1.7.3

Install poetry:

curl -sSL https://install.python-poetry.org | python3 -
poetry install

Tips: You can manage multi version of Node:

## Install nvm and node
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
nvm install  12.18.3 && nvm use 12.18.3

Unit test

Add follow line to .env file in project dir, replace archive_node with a valid bsc mainnet node url which should be in archive mode:

RPC_BSC=${archive_node}

You can get a free archive node endpoint from https://nodereal.io/.

Run forge test:

forge test

Flatten all system contracts

bash scripts/flatten.sh

All system contracts will be flattened and output into ${workspace}/contracts/flattened/.

How to generate genesis file

  1. Edit init_holders.js file to alloc the initial BNB holder.
  2. Edit validators.js file to alloc the initial validator set.
  3. Edit system contracts setting as needed.
  4. Run node scripts/generate-genesis.js will generate genesis.json

How to generate mainnet/testnet/dev genesis file

poetry run python -m scripts.generate ${network}

Check the genesis.json file, and you can get the exact compiled bytecode for different network. (poetry run python -m scripts.generate --help for more details)

You can refer to generate:dev in package.json for more details about how to custom params for local dev-net.

How to update contract interface for test

// get metadata
forge build

// generate interface
cast interface ${workspace}/out/{contract_name}.sol/${contract_name}.json -p ^0.8.0 -n ${contract_name} > ${workspace}/test/utils/interface/I${contract_name}.sol

BEP-171 unlock bot

npm install ts-node -g

cp .env.example .env
# set UNLOCK_RECEIVER, OPERATOR_PRIVATE_KEY to .env

ts-node scripts/bep171-unlock-bot.ts 

License

The library is licensed under the Apache License, Version 2.0, also included in our repository in the LICENSE file.