From 2563e7a9210c685c53591c24a3a2b72929ffbb00 Mon Sep 17 00:00:00 2001 From: pradyuman-verma Date: Sat, 19 Mar 2022 13:24:15 +0530 Subject: [PATCH] updated readme.md --- README.md | 71 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index a3701741..0ce92cba 100644 --- a/README.md +++ b/README.md @@ -47,8 +47,25 @@ Run all the tests: ```sh $ npm run test ``` + (Striclty use this envirnment to test, or otherwise make suitable changes in config file before testing). +### Deploy + +To deploy a connector using interactive CLI + +```sh +$ npm run deploy:runner +``` + +### checks + +To check that code is compatible with github actions + +```sh +$ npm run check +``` + ## How to add a new connector You can create a new PR to add a new connector. To get the PR merged, certain requirements needs to be met which will be explained here. @@ -57,39 +74,39 @@ You can create a new PR to add a new connector. To get the PR merged, certain re Common files for all connectors are in `contracts/common` directory. -* `math.sol` has methods for mathematical operations (`DSMath`) -* `interfaces.sol` contains the common interfaces - * `TokenInterface` for ERC-20 interface including WETH -* `stores.sol` contains the global constants as well as methods `getId` & `setId` (`Stores`) -* `basic.sol` inherits `DSMath` & `Stores` contracts. This contains few details explained below - * Wrapping & unwrapping ETH (`convertEthToWeth` & `convertWethToEth`) - * Getting token & ETH balance of DSA +- `math.sol` has methods for mathematical operations (`DSMath`) +- `interfaces.sol` contains the common interfaces + - `TokenInterface` for ERC-20 interface including WETH +- `stores.sol` contains the global constants as well as methods `getId` & `setId` (`Stores`) +- `basic.sol` inherits `DSMath` & `Stores` contracts. This contains few details explained below + - Wrapping & unwrapping ETH (`convertEthToWeth` & `convertWethToEth`) + - Getting token & ETH balance of DSA Connectors are under `contracts/connectors` directory, and should be formatted as follows: -* Connector events should be in a separate contract: `events.sol` -* Interfaces should be defined in a seperate file: `interface.sol` -* If the connector has helper methods & constants (including interface instances), this should be defined in a separate file: `helpers.sol` - * `Helpers` contract should inherit `Basic` contract from common directory - * If the connector doesn't have any helper methods, the main contract should inherit `Basic` contract -* The main logic of the contract should be under `main.sol`, and the contract should inherit `Helpers` (if exists, otherwise `Basic`) & `Events` +- Connector events should be in a separate contract: `events.sol` +- Interfaces should be defined in a seperate file: `interface.sol` +- If the connector has helper methods & constants (including interface instances), this should be defined in a separate file: `helpers.sol` + - `Helpers` contract should inherit `Basic` contract from common directory + - If the connector doesn't have any helper methods, the main contract should inherit `Basic` contract +- The main logic of the contract should be under `main.sol`, and the contract should inherit `Helpers` (if exists, otherwise `Basic`) & `Events` Few things to consider while writing the connector: -* Connector should have a public constant string declared `name`, which will be the name of the connector. This will be versioned. Ex: `Compound-v1` -* Contract name should start with `ConnectV2` appended with protocol name. Eg: `ConnectV2Compound` -* User interacting methods (`external` methods) will not be emitting events, rather the methods will be returning 2 variables: - * `_eventName` of `string` type: This will be the event signture defined in the `Events` contract. Ex: `LogDeposit(address,address,uint256,uint256,uint256)` - * `_eventParam` of `bytes` type: This will be the abi encoded event parameters -* The contracts should not have `selfdestruct()` -* The contracts should not have `delegatecall()` -* Use `uint(-1)` of `type(uint256).max` for maximum amount everywhere -* Use `ethAddr` (declared in `Stores`) to denote Ethereum (non-ERC20) -* Use `address(this)` instead of `msg.sender` for fetching balance on-chain, etc -* Only `approve()` (declared in `Basic`) limited amount while giving ERC20 allowance, which strictly needs to be 0 by the end of the spell. -* User interacting functions should have natspec comments(@dev, @notice, @param). -* Use `getUint()` (declared in `Stores`) for getting value that saved from previous spell -* Use `setUint()` (declared in `Stores`) for setting value to save for the future spell +- Connector should have a public constant string declared `name`, which will be the name of the connector. This will be versioned. Ex: `Compound-v1` +- Contract name should start with `ConnectV2` appended with protocol name. Eg: `ConnectV2Compound` +- User interacting methods (`external` methods) will not be emitting events, rather the methods will be returning 2 variables: + - `_eventName` of `string` type: This will be the event signture defined in the `Events` contract. Ex: `LogDeposit(address,address,uint256,uint256,uint256)` + - `_eventParam` of `bytes` type: This will be the abi encoded event parameters +- The contracts should not have `selfdestruct()` +- The contracts should not have `delegatecall()` +- Use `uint(-1)` of `type(uint256).max` for maximum amount everywhere +- Use `ethAddr` (declared in `Stores`) to denote Ethereum (non-ERC20) +- Use `address(this)` instead of `msg.sender` for fetching balance on-chain, etc +- Only `approve()` (declared in `Basic`) limited amount while giving ERC20 allowance, which strictly needs to be 0 by the end of the spell. +- User interacting functions should have natspec comments(@dev, @notice, @param). +- Use `getUint()` (declared in `Stores`) for getting value that saved from previous spell +- Use `setUint()` (declared in `Stores`) for setting value to save for the future spell ### Support