• Stars
    star
    522
  • Rank 84,811 (Top 2 %)
  • Language
    Python
  • License
    GNU Affero Genera...
  • Created about 4 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Yearn Vault smart contracts

Yearn Vault Contracts

Please read and be familiar with the Specification.

This repository is the set of smart contracts that are used for the Yearn Vaults. It contains the requirements, code, deployment scripts, and tests necessary for the core protocol, including a inheritable template strategy for use with Solidity-based strategies that interact with Yearn Vaults. These contracts are used to create a simple way to generate high risk-adjusted returns for depositors of various assets via best- in-class lending protocols, liquidity pools, and community-made yield farming strategies on Ethereum.

Requirements

To run the project you need:

  • Python 3.8 local development environment and Node.js 10.x development environment for Ganache.
  • Brownie local environment setup. See instructions for how to install it here.
  • Local env variables for Etherscan API and Infura (ETHERSCAN_TOKEN, WEB3_INFURA_PROJECT_ID).
  • Local Ganache environment installed with npm install -g [email protected].

Installation

To use the tools that this project provides, please pull the repository from GitHub and install its dependencies as follows. You will need yarn installed. It is recommended to use a Python virtual environment.

git clone https://github.com/yearn/yearn-vaults
cd yearn-vaults
yarn install --lock-file

Compile the Smart Contracts:

brownie compile # add `--size` to see contract compiled sizes

Extended Instructions

The below guide covers installation on Mac, Linux, Windows, and Windows using the Windows Subsystem for Linux.

Any command in code blocks is meant to be executed from a Mac/Linux terminal or Windows command prompt.

  1. Note for Windows users: if you want to use the Windows Subsystem for Linux (WSL), go ahead and install it now
    • After it's installed, launch your chosen Linux subsystem
    • Follow the Linux instructions below from within your terminal, except for VSCode. Any VSCode installation happens in Windows, not the Linux subsystem.
  2. Install VSCode
  3. Install VSCode Extensions
  4. Install Python 3.8
  5. Setup Brownie
    • python3 -m pip install --user pipx
      • Note, if get you an error to the effect of python3 not being installed or recognized, run python --version, if it returns back something like Python 3.8.x then just replace python3 with python for all python commands in these instructions
    • python3 -m pipx ensurepath
    • pipx install eth-brownie
      • If you're on Windows (pure Windows, not WSL), you'll need to install the C++ Build Tools before executing this
  6. Install Node.js 10.x
  7. Install Ganache
  8. Install Yarn
  9. Install Black
    • python3 -m pip install black
  10. Setup an account on Etherscan and create an API key
    • Set ETHERSCAN_TOKEN environment variable to this key's value
      • Windows: setx ETHERSCAN_TOKEN yourtokenvalue
      • Mac/Linux: echo "export ETHERSCAN_TOKEN=\"yourtokenvalue\"" | sudo tee -a ~/.bash_profile
  11. Setup an account on Infura and create an API key
    • Set WEB3_INFURA_PROJECT_ID environment variable to this key's value
      • Windows: setx WEB3_INFURA_PROJECT_ID yourtokenvalue
      • Mac/Linux: echo "export WEB3_INFURA_PROJECT_ID=\"yourtokenvalue\"" | sudo tee -a ~/.bash_profile
  12. Close & re-open your terminal before proceeding (to get the new environment variable values)
  13. If you don't have git yet, go set it up
  14. Pull the repository from GitHub and install its dependencies
    • git clone https://github.com/yearn/yearn-vaults
    • cd yearn-vaults
    • yarn install --lock-file
      • You may have to install with --ignore-engines (try this if you get an error)
  15. Compile the Smart Contracts:
    • brownie compile
  16. brownie test tests/functional/ -s -n auto * If everything worked, you'll see something like the following: Console
  17. Launch VSCode
    • If you're in Windows using WSL, type code . to launch VSCode
    • Open one of the .sol files, right click the code and click Soldity: Change Workspace compiler version (Remote), Change to 0.6.12
      • Alternatively, go to File -> Preferences -> Settings
      • If you’re using WSL, go to the Remote [WSL] tab
      • Otherwise choose the Workspace tab
        • Search for Solidity and copy and paste v0.6.12+commit.27d51765 into the Solidity: Compile Using Remote Version textbox
    • Set Black as the linter.
      • You'll see a toast notification the bottom right asking about linting, choose black
      • If you don't see this, just go to File -> Preferences -> Settings
        • If you're using WSL, go to the Remote [WSL] tab.
        • Otherwise choose the Workspace tab
        • Search for python formatting provider and choose black.
        • Search for format on save and check the box
  18. Lastly, you'll want to add .vscode to to your global .gitignore
    • Use a terminal on Mac / Linux, use Git Bash on Windows
    • touch ~/.gitignore_global
    • use your favorite editor and add .vscode/ to the ignore file
      • Using vi:
        • vi ~/.gitignore_global
        • copy .vscode/ and hit p in vi
        • type :x and hit enter
    • git config --global core.excludesfile ~/.gitignore_global
  19. Congratulations! You're all set up.
    • Use git pull to stay up to date with any changes made to the source code

Tests

If you're not familiar with brownie, see the quickstart.

The fastest way to run the tests is:

brownie test tests/functional/ -n auto

Run tests with coverage and gas profiling:

brownie test tests/functional/ --coverage --gas -n auto

A brief explanation of flags:

  • -s - provides iterative display of the tests being executed
  • -n auto - parallelize the tests, letting brownie choose the degree of parallelization
  • --gas - generates a gas profile report
  • --coverage - generates a test coverage report

Formatting

Check linter rules for *.json and *.sol files:

yarn lint:check

Fix linter errors for *.json and *.sol files:

yarn lint:fix

Check linter rules for *.py files:

black . --check

Fix linter errors for *.py files:

black .

Security

For security concerns, please visit Bug Bounty.

Documentation

You can read more about Yearn Finance on our documentation webpage.

Discussion

For questions not covered in the docs, please visit our Discord server.

More Repositories

1

yearn-protocol

Yearn smart contracts
Solidity
441
star
2

iearn-finance

Web repository
JavaScript
256
star
3

yearn-security

Security contacts and disclosure reports
195
star
4

yearn-finance

🏦 yearn v2 web interface
JavaScript
169
star
5

brownie-strategy-mix

Python
168
star
6

yearn-finance-v3

Yearn Finance Web App v3
TypeScript
125
star
7

tokenized-strategy

Contains the Contracts for the Yearn V3 Tokenized Strategy Implementation
Solidity
106
star
8

yearn-vaults-v3

Python
99
star
9

yearn-docs

Old Documentation gitbook for yearn. Replaced by https://github.com/yearn/yearn-devdocs
98
star
10

yearn-exporter

Realtime and historical Yearn metrics
Python
95
star
11

yearn-devdocs

yearn documentation
JavaScript
79
star
12

veYFI

Voting YFI
Python
75
star
13

vaults

Solidity
74
star
14

yearn-pm

72
star
15

itoken

yToken wrappers for automated investment strategy tokenization
JavaScript
72
star
16

yearn-vesting-escrow

token vesting escrow with cliff and clawback
Python
69
star
17

tokenized-strategy-foundry-mix

Create Yearn V3 "Tokenized Strategies" using Foundry
Solidity
63
star
18

tokenized-strategy-periphery

Solidity
60
star
19

yearn-starter-pack

Starter pack strategy for yearn vaults
Solidity
57
star
20

yearn-recycle

dai/usdc/usdt/tusd/ycrv ➝ yusd
Python
56
star
21

yearn-sdk

🦧 SDK for the yearn.finance platform. WIP
TypeScript
53
star
22

ygov-finance

Web repository for yfi staking and voting
JavaScript
50
star
23

ape-tax

TypeScript
46
star
24

YIPS

The Yearn Improvement Proposal repository
HTML
46
star
25

audit

Solidity
37
star
26

woofy

πŸ‘€ nothing to see here
Python
37
star
27

ycredit.finance

StableCreditProtocol, decentralized lending and AMM platform
Solidity
37
star
28

budget

yearn budget requests and audits
Python
36
star
29

hardhat-monorepo

TypeScript
31
star
30

ydaemon

Next gen API for Yearn
Go
29
star
31

yearn-watch-legacy

Yearn Watch is a tool that provides vault and strategies data for management
TypeScript
29
star
32

web-lib

Context and UI library for Yearn
TypeScript
27
star
33

yearn-meta

πŸ—„ Yearn metadata storage on IPFS (static)
JavaScript
26
star
34

yearn-audits

Collection of published audits
26
star
35

yoracle.link

TWAP based 24 hour oracle for on-chain insurance and lending
Solidity
25
star
36

crv.ape.tax

home for experimental vaults
Solidity
24
star
37

vault-periphery

Solidity
24
star
38

zap

Collection of automated on-chain investment strategies
JavaScript
24
star
39

apr-oracle

On-chain APR aggregator for dYdX, Fulcrum, Compound, and Aave
JavaScript
24
star
40

uniswap-roi

On-chain uniswap ROI pool calculations
JavaScript
23
star
41

yearn-api-archived

Collection of serverless API
JavaScript
23
star
42

yearn.fi

TypeScript
22
star
43

macarena-finance

Macarena finance is a simple UI for Yearn Finance, made to be forked!
TypeScript
21
star
44

ydata

Python
20
star
45

yearn-assets

Repo of yearn assets
Python
19
star
46

yearn-comms

Collection of communication, announcements, tweets, newsletters, and other articles about Yearn and a hosted blog for all translation contributors.
JavaScript
19
star
47

yearn-watch

Yearn Watch is a tool that provides vault and strategies data for management
TypeScript
18
star
48

yearn-subgraph

Subgraph for yearn finance: https://yearn.finance
TypeScript
18
star
49

yinsure-finance

JavaScript
18
star
50

ygenius-brain

Python
17
star
51

yearn-lens

Solidity
16
star
52

eth-allowlist

Solidity
16
star
53

yswap-finance

JavaScript
15
star
54

brownie-wrapper-mix

Python
14
star
55

snapshot-strategy

Python
14
star
56

seafood

Seafood
TypeScript
13
star
57

NFTreasury

NFTreasury is a simple yet powerful treasury management tool, powered by Yearn.
TypeScript
13
star
58

keep3r-jobs

Solidity
11
star
59

ygift

Solidity
10
star
60

yearn-treasury

Solidity
10
star
61

strategies-keep3r

Solidity
9
star
62

Yearn-ERC4626-Router

ERC4626 Router for Yearn V3 vaults.
Solidity
9
star
63

yearn-keeper

self-sustainable keeper bots for yearn vaults and strategies
Python
9
star
64

zaps

Repository for v2 Vaults Zaps
Solidity
9
star
65

web-template

Template for the next projects from Yearn.Finance
TypeScript
8
star
66

ygift-ui

TypeScript
8
star
67

yearn-marketing

This repository includes all marketing issues and workstreams
8
star
68

ycredit-finance

JavaScript
8
star
69

yETH

Vyper
7
star
70

yearn-vaults-descriptions

TypeScript
7
star
71

tokenized-strategy-ape-mix

Python
7
star
72

yPartners

Partners website
TypeScript
6
star
73

yearn-caching-api

πŸ• Lightweight Rest API shim for yearn's SDK
JavaScript
5
star
74

yuni.finance

JavaScript
5
star
75

yearn-allowlist

Python
5
star
76

yearn-token

Python
4
star
77

yearn-data

πŸ—„ Yearn live data storage on AWS (dynamic)
TypeScript
4
star
78

iliquidate-finance

JavaScript
4
star
79

ileverage-finance

JavaScript
4
star
80

yBuyback

TypeScript
4
star
81

yearn-multisig-actions

Template repository for Gnosis multisignature wallet automation with eth-brownie and GitHub Actions
Python
4
star
82

iborrow-finance

JavaScript
4
star
83

ygenius-webui

JavaScript
4
star
84

yearn-exporter-api

Python
3
star
85

ySync

TypeScript
3
star
86

yCRV

The best crv yields in defi. mic drop
TypeScript
3
star
87

yearn-workflows

Github actions workflows
Python
3
star
88

governance

JavaScript
3
star
89

tokenlist

2
star
90

JuicedVaults

Freshly squeezed and bursting with yield.
TypeScript
2
star
91

yearn-mainnet-fork

Python
2
star
92

api.yuni.finance

JavaScript
2
star
93

yearn-stb

Yearn Stake the Bridge Setup for Polygon CDK
Solidity
2
star
94

yETH-periphery

Vyper
2
star
95

risk-framework

Solidity
2
star
96

yswaps

TypeScript
2
star
97

yLSTeth

TypeScript
2
star
98

yearn-multisig-ci-scripts

Python
2
star
99

yearn-partner-tracker

Solidity
2
star
100

yearn-integration-hardhat

TypeScript
2
star