forked from smartcontractkit/defi-minimal
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 0c9a895
Showing
29 changed files
with
11,425 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
KOVAN_RPC_URL='https://kovan.infura.io/v3/1234567890' | ||
RINKEBY_RPC_URL='https://rinkeby.infura.io/v3/1234567890' | ||
POLYGON_MAINNET_RPC_URL='https://rpc-mainnet.maticvigil.com' | ||
PRIVATE_KEY='abcdefg' | ||
ALCHEMY_MAINNET_RPC_URL="https://eth-mainnet.alchemyapi.io/v2/your-api-key" | ||
REPORT_GAS=true | ||
COINMARKETCAP_API_KEY="YOUR_KEY" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
node_modules | ||
.env | ||
coverage | ||
coverage.json | ||
typechain | ||
|
||
#Hardhat files | ||
cache | ||
artifacts | ||
|
||
artifacts | ||
cache | ||
coverage | ||
deployments |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
node_modules | ||
artifacts | ||
cache | ||
coverage* | ||
gasReporterOutput.json | ||
package.json | ||
img | ||
.env | ||
.* | ||
README.md | ||
coverage.json | ||
deployments |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ | ||
"tabWidth": 4, | ||
"useTabs": false, | ||
"semi": false, | ||
"singleQuote": false, | ||
"printWidth": 100 | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
{ | ||
"extends": "solhint:recommended", | ||
"rules": { | ||
"compiler-version": ["error", "^0.8.0"], | ||
"func-visibility": ["warn", { "ignoreConstructors": true }] | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
node_modules | ||
contracts/test |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
MIT License | ||
|
||
Copyright (c) 2021 patrickalphac | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
# Defi Minimal | ||
|
||
This repo is dedicated to making minimal repos of existing defi primatives. | ||
|
||
### Completed minimal contracts: | ||
- `Lending.sol`: Based off [Aave](https://aave.com/) | ||
- `Staking.sol`: Based off [Synthetix](https://synthetix.io/) | ||
- `RewardToken.sol`: Based off [Synthetix](https://synthetix.io/) | ||
|
||
### Uncompleted: | ||
- `Options.sol`: Based off nothing | ||
|
||
### Not a minimal contract: | ||
- `Swap.sol`: Based off [Uniswap](https://uniswap.org/) | ||
|
||
|
||
|
||
# Getting Started | ||
|
||
It's recommended that you've gone through the [hardhat getting started documentation](https://hardhat.org/getting-started/) before proceeding here. | ||
|
||
## Requirements | ||
|
||
- [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) | ||
- You'll know you did it right if you can run `git --version` and you see a response like `git version x.x.x` | ||
- [Nodejs](https://nodejs.org/en/) | ||
- You'll know you've installed nodejs right if you can run: | ||
- `node --version`and get an ouput like: `vx.x.x` | ||
- [Yarn](https://classic.yarnpkg.com/lang/en/docs/install/) instead of `npm` | ||
- You'll know you've installed yarn right if you can run: | ||
- `yarn --version` And get an output like: `x.x.x` | ||
- You might need to install it with npm | ||
|
||
> If you're familiar with `npx` and `npm` instead of `yarn`, you can use `npx` for execution and `npm` for installing dependencies. | ||
## Quickstart | ||
|
||
1. Clone and install dependencies | ||
|
||
After installing all the requirements, run the following: | ||
|
||
```bash | ||
git clone https://github.com/smartcontractkit/defi-minimal/ | ||
cd defi-minimal | ||
``` | ||
Then: | ||
``` | ||
yarn | ||
``` | ||
|
||
or | ||
``` | ||
npm i | ||
``` | ||
|
||
2. You can now do stuff! | ||
|
||
``` | ||
yarn hardhat test | ||
``` | ||
|
||
or | ||
|
||
``` | ||
npx hardhat test | ||
``` | ||
|
||
|
||
# Usage | ||
|
||
If you run `yarn hardhat --help` you'll get an output of all the tasks you can run. | ||
|
||
## Deploying Contracts | ||
|
||
``` | ||
yarn hardhat deploy | ||
``` | ||
|
||
This will deploy your contracts to a local network. Additionally, if on a local network, it will deploy mock Chainlink contracts for you to interact with. If you'd like to interact with your deployed contracts, skip down to [Interacting with Deployed Contracts](#interacting-with-deployed-contracts). | ||
|
||
## Run a Local Network | ||
|
||
One of the best ways to test and interact with smart contracts is with a local network. To run a local network with all your contracts in it, run the following: | ||
|
||
``` | ||
yarn hardhat node | ||
``` | ||
|
||
You'll get a local blockchain, private keys, contracts deployed (from the `deploy` folder scripts), and an endpoint to potentially add to an EVM wallet. | ||
|
||
|
||
## Using a Testnet or Live Network (like Mainnet or Polygon) | ||
|
||
In your `hardhat.config.js` you'll see section like: | ||
|
||
``` | ||
module.exports = { | ||
defaultNetwork: "hardhat", | ||
networks: { | ||
``` | ||
|
||
This section of the file is where you define which networks you want to interact with. You can read more about that whole file in the [hardhat documentation.](https://hardhat.org/config/) | ||
|
||
To interact with a live or test network, you'll need: | ||
|
||
1. An rpc URL | ||
2. A Private Key | ||
3. ETH & LINK token (either testnet or real) | ||
|
||
Let's look at an example of setting these up using the Rinkeby testnet. | ||
|
||
### Rinkeby Ethereum Testnet Setup | ||
|
||
First, we will need to set environment variables. We can do so by setting them in our `.env` file (create it if it's not there). You can also read more about [environment variables](https://www.twilio.com/blog/2017/01/how-to-set-environment-variables.html) from the linked twilio blog. You'll find a sample of what this file will look like in `.env.example` | ||
|
||
> IMPORTANT: MAKE SURE YOU'D DONT EXPOSE THE KEYS YOU PUT IN THIS `.env` FILE. By that, I mean don't push them to a public repo, and please try to keep them keys you use in development not associated with any real funds. | ||
1. Set your `RINKEBY_RPC_URL` [environment variable.](https://www.twilio.com/blog/2017/01/how-to-set-environment-variables.html) | ||
|
||
You can get one for free from [Alchmey](https://www.alchemy.com/), [Infura](https://infura.io/), or [Moralis](https://moralis.io/speedy-nodes/). This is your connection to the blockchain. | ||
|
||
2. Set your `PRIVATE_KEY` environment variable. | ||
|
||
This is your private key from your wallet, ie [MetaMask](https://metamask.io/). This is needed for deploying contracts to public networks. You can optionally set your `MNEMONIC` environment variable instead with some changes to the `hardhat.config.js`. | ||
|
||
![WARNING](https://via.placeholder.com/15/f03c15/000000?text=+) **WARNING** ![WARNING](https://via.placeholder.com/15/f03c15/000000?text=+) | ||
|
||
When developing, it's best practice to use a Metamask that isn't associated with any real money. A good way to do this is to make a new browser profile (on Chrome, Brave, Firefox, etc) and install Metamask on that brower, and never send this wallet money. | ||
|
||
Don't commit and push any changes to .env files that may contain sensitive information, such as a private key! If this information reaches a public GitHub repository, someone can use it to check if you have any Mainnet funds in that wallet address, and steal them! | ||
|
||
`.env` example: | ||
``` | ||
RINKEBY_RPC_URL='www.infura.io/asdfadsfafdadf' | ||
PRIVATE_KEY='abcdef' | ||
``` | ||
`bash` example | ||
``` | ||
export RINKEBY_RPC_URL='www.infura.io/asdfadsfafdadf' | ||
export PRIVATE_KEY='abcdef' | ||
``` | ||
|
||
> You can also use a `MNEMONIC` instead of a `PRIVATE_KEY` environment variable by uncommenting the section in the `hardhat.config.js`, and commenting out the `PRIVATE_KEY` line. However this is not recommended. | ||
For other networks like mainnet and polygon, you can use different environment variables for your RPC URL and your private key. See the `hardhat.config.js` to learn more. | ||
|
||
3. Get some Rinkeby Testnet ETH and LINK | ||
|
||
Head over to the [Chainlink faucets](https://faucets.chain.link/) and get some ETH and LINK. Please follow [the chainlink documentation](https://docs.chain.link/docs/acquire-link/) if unfamiliar. | ||
|
||
# Code Formating | ||
|
||
This will format both your javascript and solidity to look nicer. | ||
|
||
``` | ||
yarn format | ||
``` | ||
|
||
# Slither Static Analysis | ||
|
||
You have to do a few steps for slither since right now multiple imports are not supported. First, you'll have to copy paste any non opennzepplin imports into the contracts, and then you should be able to run this: | ||
|
||
``` | ||
slither ./contracts/ --solc-remaps @openzeppelin/contracts=./node_modules/@openzeppelin/contracts --exclude naming-convention | ||
``` |
Oops, something went wrong.