Skip to content

h2-chain/h2-genesis-contract

Repository files navigation

h2-genesis-contracts

This repo hold all the genesis contracts on H2 chain.

Prepare

Install node.js dependency:

npm install

Install foundry:

curl -L https://foundry.paradigm.xyz | bash
foundryup
forge install --no-git foundry-rs/[email protected]

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 18.17.0 && nvm use 18.17.0

Unit test

Run forge test:

forge test --fork-url ${archive_node_rpc}

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 H2 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

# build mainnet genesis file & clean
npm run generate:mainnet && poetry run python -m scripts.generate recover

# build testnet genesis file & clean
npm run generate:testnet && poetry run python -m scripts.generate recover

# build local dev-net genesis file & clean
npm run generate:dev && poetry run python -m scripts.generate recover

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 verify the bytecode in genesis.json with solc, take ./contracts/StakeHub.sol for example:
solc-select use 0.8.17
solc --optimize --optimize-runs 200 --abi --metadata-hash none --bin-runtime ./contracts/StakeHub.sol --base-path . --include-path ./node_modules/ -o output

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

update ABI files

forge inspect {{contract}} abi > abi/{{contract}}.abi

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

License

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

About

The genesis contracts of H2 Chain.

Resources

License

Stars

Watchers

Forks

Packages

No packages published