DeFi SDK is an open-source system of smart contracts that allows you to execute trades with ERC20 tokens and track balances on different protocols.
If you have any questions about DeFi SDK, feel free to reach out to us on our Discord server.
💸Trade any ERC20 tokens on L2 chains using single Router contract
💥Query user assets and debt deposited in DeFi protocols like Maker, Aave, dYdX, etc.
How much debt does
0xdead..beef
have on Compound?
📊Get the underlying components of complex derivative ERC20 tokens
How much
cUSDC
vsETH
doesETHMACOAPY
have?
✨Interact with multiple DeFi protocols in a unified way
- Trade any ERC20 token
- Two types of amounts: absolute (usual amount) and relative (percentage of balance)
- Three types of
permit()
functions for approving tokens in the same transaction (EIP2612, DAI-like, Yearn-like) - Two types of swaps: with fixed input amount or fixed output amount
- Two types of fees:
- protocol fee managed by the Router contract owner with possibility of one-time discounts requiring signature of an address with the special role
- marketplace fee managed by the transaction creator
- Relayed transactions requiring just an EIP712 signature of the user
Read-only and interactive adapters are maintained in
master
andinteractive-updates
branches of defi-sdk repo respectively.
The full instructions on how to add a custom adapters may be found in our docs.
If you have questions and/or want to add your adapter to Zerion reach out to us on our Discord server.
All the deployed contracts' addresses are available here.
If you discover a security vulnerability within DeFi SDK, please send us an e-mail at [email protected]. All security vulnerabilities will be promptly addressed.
The project uses Slither for security analysis. It should be previously installed (e.g. via pip).
Run npm run slither
to run security checks.
We use Hardhat, which runs tests extremely fast!
Also, we use Truffle Dashboard for secure deployment.
Run npm install
to install all the dependencies.
Run npm run truffle-dashboard
to start the Truffle Dashboard.
Run npm run deploy:router:truffle-dashboard
to deploy the Router contract.
Sign deployment transaction in your browser at http://localhost:24012/
.
Fill in address of newly deployed contract to scripts/deployment.js
.
The same instruction applies to the SimpleCaller contract with deploy:sc:truffle-dashboard
command.
After filling in fee beneficiary for the chosen network in scripts/deployment.js
, initialize:router:truffle-dashboard
command may be run.
Run npm run verify
to verify contract on any block explorer.
The respective <BLOCK_EXPLORER>_API_KEY
filled in .env
file is required for this step.
See the hardhat.config.ts
file for the details (etherscan
field of config
variable uses these API keys).
The Router contract and its dependencies is fully covered with tests.
Run npm run test
and npm run coverage
to run tests or coverage respectively.
INFURA_API_KEY
filled in .env
file is required for this step.
REPORT_GAS
filled in .env
file enables/disables gas reports during tests.
Run npm run lint
for both JS and Solidity linters.
Run npm run lint:eslint
and npm run lint:solhint
to run linter for JS and Solidity separately.
npm run docs:serve
All smart contracts are released under GNU LGPLv3 license.