Skip to content

Latest commit

 

History

History
153 lines (92 loc) · 4.9 KB

README.md

File metadata and controls

153 lines (92 loc) · 4.9 KB

⛩️ gateway-sol

EVM contracts for minting and burning ren-assets

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.

Contract summary

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.

gateway-sol diagram

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

INSTALL

yarn

TEST

yarn test

SCRIPTS

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

Verifying

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?":

image