https://github.com/fooock/optify-beefy-adapter
https://github.com/fooock/optify-beefy-adapter
Last synced: 9 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/fooock/optify-beefy-adapter
- Owner: fooock
- License: agpl-3.0
- Created: 2021-08-23T18:41:47.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-08-26T17:23:54.000Z (over 4 years ago)
- Last Synced: 2025-02-12T05:56:56.963Z (11 months ago)
- Language: Solidity
- Size: 1.66 MB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

## DeFi Adapter Kit
Starter kit for defi adapter development compatible with Opty-Fi's earn-protocol
### Prerequisites
- Install [Node JS](https://nodejs.org/en/download/) >= v12.0.0
- Learn [Javascript](https://developer.mozilla.org/en-US/docs/Web/JavaScript) and [Typescript](https://www.typescriptlang.org/)
- Learn [Solidity](https://docs.soliditylang.org/en/latest/) >=v0.6.12.
- Learn smart contract development environment like [Hardhat](https://hardhat.org/getting-started/)
- Learn testing framework like [mocha](https://mochajs.org/)
- Learn assertion library like [chai](https://www.chaijs.com/)
And passion for financial freedom...
## Getting started
### Development Setup
- 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](https://iancoleman.io/bip39/) to generate one.
- You will require access to archive Node URL for forking the mainnet.
Proceed with installing dependencies:
```sh
yarn install
```
### What is a DeFiAdapter
- DeFi adapter is a vital building block for executing [opty.fi](https://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](./contracts/interfaces/opty/IAdapter.sol) **(Mandatory)**
- [IAdapterHarvestReward.sol](./contracts/interfaces/opty/IAdapterHarvestReward.sol) **(Optional)**
- [IAdapterStaking.sol](./contracts/interfaces/opty/IAdapterStaking.sol) **(Optional)**
- [IAdapterBorrow.sol](./contracts/interfaces/opty/IAdapterBorrow.sol) **(Optional)**
- [IAdapterInvestmentLimit.sol](./contracts/interfaces/opty/IAdapterInvestmentLimit.sol) **(Optional)**
> Pro Tip : Inherit IAdapterFull interface from [IAdapterFull.sol](./contracts/interfaces/opty/IAdapterFull.sol) to Adapter Contract if the protocol you choose required implementation of all the above interfaces.
### Developing DeFiAdapter
#### Step #1 - Use this template
- 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.
#### Step #2 - Pool, LP token and underlying token(s) address gathering
- Choose a DeFi protocol and gather the pool contract addresses similar to [harvest.finance-pools.json](./test/harvest.finance-pools.json).
#### Step #3 - Implementing `IAdapter` interface
- Implement an adapter contract using above interface(s) similar to [HarvestFinanceAdapter.sol](./contracts/adapters/HarvestFinanceAdapters.sol)
#### Step #4 - Unit Tests
- 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](./contracts/mock/TestDeFiAdapter.sol) 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](./test/adapters/HarvestFinanceAdapter.ts)
#### Useful commands
| 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` |
#### Syntax Highlighting
If you use VSCode, you can enjoy syntax highlighting for your Solidity code via the
[vscode-solidity](https://github.com/juanfranblanco/vscode-solidity) extension. The recommended approach to set the
compiler version is to add the following fields to your VSCode user settings:
```json
{
"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.
### References
- [Hardhat](https://hardhat.org/getting-started/)
- [Ethereum Development Documentation](https://ethereum.org/en/developers/docs/)
- [Harvest Finance Docs](https://harvest-finance.gitbook.io/harvest-finance/)