The collections of smart contracts that power the Ronin Delegated Proof of Stake (DPoS) network.
- Node@>=14 + Solc@^0.8.0
-
Add Github NPM token to install packages, and then replace
{YOUR_TOKEN}
in.npmrc
file by any arbitrary Github token withread:packages
permission.Note: To create a new token, please refer to this article. The token must have
read:packages
permission.cp .npmrc.example .npmrc && vim .npmrc
-
Install packages
$ yarn --frozen-lockfile
-
Install foundry libs
$ git submodule add -b release-v0 https://github.com/PaulRBerg/prb-test lib/prb-test $ git submodule add -b release-v4 https://github.com/PaulRBerg/prb-math lib/prb-math
-
Compile contracts
$ yarn compile
-
Run test
$ yarn test
-
Extract storage layout
$ yarn plugin:storage-layout [--destination <output-path>] [--override <true|false>]
<output-path>
(optional): The path to store generated storage layout file. If not provided, the default path islayout/storage.txt
.--override
(optional): Indicates whether to override the destination file at<output-path>
if it already exists. By default, it is set tofalse
.
This repo contains source code of contracts that will be either deployed on the mainchains, or on Ronin chain.
- On mainchains:
- Governance contract:
MainchainGovernanceAdmin
- Bridge contract:
MainchainGatewayV3
- Trusted orgs contract:
RoninTrustedOrganization
- Governance contract:
- On Ronin chain:
- Governance contract:
RoninGovernanceAdmin
- Bridge operation:
RoninGatewayV3
- Trusted orgs contract:
RoninTrustedOrganization
- DPoS contracts
- Governance contract:
Except for the governance contracts and vault forwarder contracts, all other contracts are deployed following the proxy pattern for upgradeability. The TransparentUpgradeableProxyV2
, an extended version of OpenZeppelin's, is used for deploying the proxies.
To comply with the governance process, in which requires all modifications to a contract must be approved by a set of governors, the admin role of all proxies must be granted for the governance contract address.
-
Init the environment variables
$ cp .env.example .env && vim .env
-
Update the contract configuration in
config.ts
file -
Deploy the contracts
$ yarn hardhat deploy --network <local|ronin-devnet|ronin-mainnet|ronin-testnet>
See docs/README.md for the documentation of the contracts.
See docs/HACK.md for the structure of the repo.
For the contract interaction flow, please refer to DPoS Contract: Interaction Flow.
For the whitepaper, please refer to Ronin Whitepaper.