Ren has two repositories for its Solidity contract:
darknode-sol
- contracts on Ethereum for managing darknode registrations.gateway-sol
(this repository) - contracts on multiple EVM chains for minting and burning of ren-assets.
~ Documentation ~
- For the latest contract addresses, see the contract addresses page.
- For a summary of each contract, see the summary of contracts page.
There are three core layers in the gateway-sol contracts:
- GatewayRegistry - responsible for deploying and tracking gateway and asset instances
- RenAsset - ERC20s backed 1:1 by a corresponding asset on another chain. e.g. renDAI on Fantom is backed by DAI on Ethereum
- Gateways - responsible for minting and burning (MintGateway) and locking and releasing (LockGateway) Ren assets.
For example, minting renDAI on Fantom backed by DAI on Ethereum involves the following contracts:
- On Ethereum:
- The Ethereum GatewayRegistry
- A DAI LockGateway
- On Fantom:
- The Fantom GatewayRegistry
- A DAI MintGateway
- A renDAI RenAsset
Development notes
yarn
yarn test
Here is the list of npm scripts you can execute:
Some of them relies on ./config/_scripts.js to allow parameterizing it via command line argument (have a look inside if you need modifications)
yarn prepare
As a standard lifecycle npm script, it is executed automatically upon install. It generate config file and typechain to get you started with type safe contract interactions
yarn lint
, yarn lint:fix
, yarn format
and yarn format:fix
These will lint and format check your code. the :fix
version will modifiy the files to match the requirement specified in .eslintrc
and and the prettier config in package.json
yarn compile
These will compile your contracts
yarn void:deploy
This will deploy your contracts on the in-memory hardhat network and exit, leaving no trace. quick way to ensure deployments work as intended without consequences
yarn test [mocha args...]
These will execute your tests using mocha. you can pass extra arguments to mocha
yarn coverage
These will produce a coverage report in the coverage/
folder
yarn gas
These will produce a gas report for function used in the tests
yarn dev
These will run a local hardhat network on localhost:8545
and deploy your contracts on it. Plus it will watch for any changes and redeploy them.
yarn local:dev
This assumes a local node it running on localhost:8545
. It will deploy your contracts on it. Plus it will watch for any changes and redeploy them.
yarn execute <network> <file.ts> [args...]
This will execute the script <file.ts>
against the specified network
yarn deploy <network> [args...]
This will deploy the contract on the specified network.
Behind the scene it uses hardhat deploy
command so you can append any argument for it
yarn export <network> <file.json>
This will export the abi+address of deployed contract to <file.json>
yarn fork:execute <network> [--blockNumber <blockNumber>] [--deploy] <file.ts> [args...]
This will execute the script <file.ts>
against a temporary fork of the specified network
if --deploy
is used, deploy scripts will be executed
yarn fork:deploy <network> [--blockNumber <blockNumber>] [args...]
This will deploy the contract against a temporary fork of the specified network.
Behind the scene it uses hardhat deploy
command so you can append any argument for it
yarn fork:test <network> [--blockNumber <blockNumber>] [mocha args...]
This will test the contract against a temporary fork of the specified network.
yarn fork:dev <network> [--blockNumber <blockNumber>] [args...]
This will deploy the contract against a fork of the specified network and it will keep running as a node.
Behind the scene it uses hardhat node
command so you can append any argument for it
yarn hardhat --network kovan etherscan-verify --api-key ETHERSCAN_KEY --license GPL-3.0
For contracts that use a Proxy, you then need to go to the Etherscan page, select "More Options" and then "Is this a proxy?":