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/[email protected]
Please make sure your dependency version is as follows:
Node: v12.18.3
Truffle: v5.1.31
Solc: 0.6.4+commit.1dca32f3
Tips: You can manage multi version of Solc and Node:
## Install solc-select and solc
pip3 install solc-select
solc-select install 0.6.4 && solc-select use 0.6.4
## 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
npm run flatten
All system contracts will be flattened and output into ${workspace}/contracts/flattened/
.
How to generate genesis file
- Edit
init_holders.js
file to alloc the initial BNB holder. - Edit
validators.js
file to alloc the initial validator set. - Edit
generate-validatorset.js
file to changefromChainId
andtoChainId
, - Edit
generate-tokenhub.js
file to changerefundRelayReward
,minimumRelayFee
andmaxGasForCallingBEP20
. - Edit
generate-tendermintlightclient.js
file to changechainID
andinitConsensusStateBytes
. - run
node generate-genesis.js
will generate genesis.json
How to generate mainnet/testnet/QA genesis file
npm run generate-mainnet
npm run generate-testnet
npm run generate-QA
Check the genesis.json
file and you can get the exact compiled bytecode for different network.
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.10 -n ${contract_name} > ${workspace}/lib/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.