Starter kit for defi adapter development compatible with Opty-Fi's earn-protocol
- Install Node JS >= v12.0.0
- Learn Javascript and Typescript
- Learn Solidity >=v0.6.12.
- Learn smart contract development environment like Hardhat
- Learn testing framework like mocha
- Learn assertion library like chai
And passion for financial freedom...
- Create a
.env
file and set a BIP-39 compatible mnemonic as an environment variable. Follow the example in.env.example
. If you don't already have a mnemonic, use this website to generate one. - You will require access to archive Node URL for forking the mainnet.
Proceed with installing dependencies:
yarn install
- DeFi adapter is a vital building block for executing opty.fi's network of strategies.
- Specifications for DeFi adapter help perform :
- transactions like deposit, withdraw, staking, un-staking, adding liquidity, claim reward and harvesting of the reward.
- read calls for liquidity pool token contract address, liquidity pool token balance, staked token balance, balance in underlying token of both staked and non-staked liquidity pool token, unclaimed reward tokens and reward token contract address
- A DeFi Adapter smart contract requires implementation of following interfaces :
- IAdapter.sol (Mandatory)
- IAdapterHarvestReward.sol (Optional)
- IAdapterStaking.sol (Optional)
- IAdapterBorrow.sol (Optional)
- IAdapterInvestmentLimit.sol (Optional)
Pro Tip : Inherit IAdapterFull interface from IAdapterFull.sol to Adapter Contract if the protocol you choose required implementation of all the above interfaces.
- This is a GitHub template, so click on green button "Use this template" on the top-right corner of the page to create new defi adapter.
- Choose a DeFi protocol and gather the pool contract addresses similar to harvest.finance-pools.json.
- Implement an adapter contract using above interface(s) similar to HarvestFinanceAdapter.sol
- Write unit tests for all the functions across all the pool contracts gathered in Step 1.
- You might want to use a test utility contract like TestDeFiAdapter for creating a sandbox environment to execute the transaction based on function signature and target address returned from
getCodes()
-style functions from DeFiAdapter. - All other functions can be directly tested from the DeFiAdapter contract.
- The unit test for
HarvestFinanceAdapter.sol
can be found in HarvestFinanceAdapter.ts
Usage | Command |
---|---|
Compile the smart contracts with Hardhat | $ yarn compile |
Compile the smart contracts and generate TypeChain artifacts | $ yarn typechain |
Lint the Solidity Code | $ yarn lint:sol |
Lint the TypeScript Code | $ yarn lint:ts |
Run the Mocha tests | $ yarn test |
Generate the code coverage report | $ yarn coverage |
Delete the smart contract artifacts, the coverage reports and the Hardhat cache | $ yarn clean |
Deploy the adapter to Hardhat Network | $ yarn deploy |
If you use VSCode, you can enjoy syntax highlighting for your Solidity code via the vscode-solidity extension. The recommended approach to set the compiler version is to add the following fields to your VSCode user settings:
{
"solidity.compileUsingRemoteVersion": "v0.6.12+commit.27d51765",
"solidity.defaultCompiler": "remote"
}
Where of course v0.6.12+commit.27d51765
can be replaced with any other version.