• Stars
    star
    236
  • Rank 170,480 (Top 4 %)
  • Language
    Solidity
  • Created over 1 year ago
  • Updated 3 months ago

Reviews

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

Repository Details

Foundry DeFi Stablecoin

This is a section of the Cyfrin Foundry Solidity Course.

DSCEngine Example Decentralized Stablecoin Example

About

This project is meant to be a stablecoin where users can deposit WETH and WBTC in exchange for a token that will be pegged to the USD.

Getting Started

Requirements

  • 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
  • foundry
    • You'll know you did it right if you can run forge --version and you see a response like forge 0.2.0 (816e00b 2023-03-16T00:05:26.396218Z)

Quickstart

git clone https://github.com/Cyfrin/foundry-defi-stablecoin-f23
cd foundry-defi-stablecoin-f23
forge build

Optional Gitpod

If you can't or don't want to run and install locally, you can work with this repo in Gitpod. If you do this, you can skip the clone this repo part.

Open in Gitpod

Updates

  • The latest version of openzeppelin-contracts has changes in the ERC20Mock file. To follow along with the course, you need to install version 4.8.3 which can be done by forge install openzeppelin/[email protected] --no-commit instead of forge install openzeppelin/openzeppelin-contracts --no-commit

Usage

Start a local node

make anvil

Deploy

This will default to your local node. You need to have it running in another terminal in order for it to deploy.

make deploy

Deploy - Other Network

See below

Testing

We talk about 4 test tiers in the video.

  1. Unit
  2. Integration
  3. Forked
  4. Staging

In this repo we cover #1 and Fuzzing.

forge test

Test Coverage

forge coverage

and for coverage based testing:

forge coverage --report debug

Deployment to a testnet or mainnet

  1. Setup environment variables

You'll want to set your SEPOLIA_RPC_URL and PRIVATE_KEY as environment variables. You can add them to a .env file, similar to what you see in .env.example.

  • PRIVATE_KEY: The private key of your account (like from metamask). NOTE: FOR DEVELOPMENT, PLEASE USE A KEY THAT DOESN'T HAVE ANY REAL FUNDS ASSOCIATED WITH IT.
  • SEPOLIA_RPC_URL: This is url of the sepolia testnet node you're working with. You can get setup with one for free from Alchemy

Optionally, add your ETHERSCAN_API_KEY if you want to verify your contract on Etherscan.

  1. Get testnet ETH

Head over to faucets.chain.link and get some testnet ETH. You should see the ETH show up in your metamask.

  1. Deploy
make deploy ARGS="--network sepolia"

Scripts

Instead of scripts, we can directly use the cast command to interact with the contract.

For example, on Sepolia:

  1. Get some WETH
cast send 0xdd13E55209Fd76AfE204dBda4007C227904f0a81 "deposit()" --value 0.1ether --rpc-url $SEPOLIA_RPC_URL --private-key $PRIVATE_KEY
  1. Approve the WETH
cast send 0xdd13E55209Fd76AfE204dBda4007C227904f0a81 "approve(address,uint256)" 0x091EA0838eBD5b7ddA2F2A641B068d6D59639b98 1000000000000000000 --rpc-url $SEPOLIA_RPC_URL --private-key $PRIVATE_KEY
  1. Deposit and Mint DSC
cast send 0x091EA0838eBD5b7ddA2F2A641B068d6D59639b98 "depositCollateralAndMintDsc(address,uint256,uint256)" 0xdd13E55209Fd76AfE204dBda4007C227904f0a81 100000000000000000 10000000000000000 --rpc-url $SEPOLIA_RPC_URL --private-key $PRIVATE_KEY

Estimate gas

You can estimate how much gas things cost by running:

forge snapshot

And you'll see an output file called .gas-snapshot

Formatting

To run code formatting:

forge fmt

Slither

slither :; slither . --config-file slither.config.json

Thank you!

If you appreciated this, feel free to follow me or donate!

ETH/Arbitrum/Optimism/Polygon/etc Address: 0x9680201d9c93d65a3603d2088d125e955c73BD65

Patrick Collins Twitter Patrick Collins YouTube Patrick Collins Linkedin Patrick Collins Medium

More Repositories

1

foundry-full-course-cu

3,269
star
2

security-and-auditing-full-course-s23

The ultimate, most advanced, security, DeFi, assembly, web3 auditor course ever created.
Solidity
1,170
star
3

foundry-devops

Solidity
388
star
4

aderyn

Aderyn 🦜 Rust-based Solidity AST analyzer.
Rust
359
star
5

sc-exploits-minimized

A repo to showcase web3 hacks
Solidity
305
star
6

audit-report-templating

263
star
7

audit-checklist

Aggregated audit checklist
171
star
8

cyfrin-audit-reports

A list of public audit reports conducted by the Cyfrin team
133
star
9

chainlink-lottery

A web3 implementation of a lottery using Chainlink VRF and Chainlink alarm clock to have a totally decentralized lottery
JavaScript
80
star
10

assembly-evm-opcodes-and-formal-verification-course

78
star
11

foundry-fund-me-cu

Solidity
74
star
12

forge-template

Solidity
62
star
13

OpenPositions

51
star
14

foundry-smart-contract-lottery-cu

Solidity
45
star
15

4-puppy-raffle-audit

Solidity
45
star
16

Updraft

Python
45
star
17

remix-simple-storage-cu

Solidity
43
star
18

2023-07-foundry-defi-stablecoin

Solidity
37
star
19

remix-fund-me-cu

Solidity
32
star
20

foundry-simple-storage-cu

Solidity
32
star
21

minimal-account-abstraction

Solidity
29
star
22

evm-wallet-and-post-deployment-course

29
star
23

TSender

A hyper gas optimized and formally verified smart contract, written in huff. 🐎
Solidity
27
star
24

remix-storage-factory-cu

Solidity
25
star
25

advanced-defi-2024

Solidity
24
star
26

foundry-upgrades-cu

Solidity
23
star
27

ctf

A minimal repo to create EVM/solidity capture the flags
Solidity
22
star
28

foundry-nft-cu

Solidity
21
star
29

foundry-erc20-cu

Solidity
21
star
30

8-vault-guardians-audit

Solidity
21
star
31

7-boss-bridge-audit

Solidity
20
star
32

alchemy_sdk_py

An SDK to use the Alchemy API
Python
19
star
33

1-horse-store-s23

C++
19
star
34

2023-07-beedle

Solidity
18
star
35

audit-repo-cloner

A Python package to clone a repo and automatically prepare it for audit report generation
Python
18
star
36

6-thunder-loan-audit

Solidity
18
star
37

5-t-swap-audit

Solidity
18
star
38

html-fund-me-cu

JavaScript
17
star
39

trello_to_audit_report

Python
17
star
40

2023-07-escrow

Solidity
16
star
41

3-passwordstore-audit

Makefile
16
star
42

gaboon

Python
16
star
43

codehawks-docs

🦅 CodeHawks documentation
15
star
44

foundry-dao-cu

Solidity
13
star
45

2023-09-ditto

Solidity
13
star
46

chainlink_feeds

This gets the data from the Chainlink Price feeds in an easy way. Can use either an RPC_URL or the Chainlink Subgraph.
Python
13
star
47

2023-11-Thunder-Loan

Solidity
11
star
48

2023-10-PasswordStore

Solidity
11
star
49

2024-05-Sablier

Solidity
11
star
50

2024-07-zaros

Solidity
11
star
51

2023-08-sparkn

Solidity
10
star
52

foundry-era-contracts

Solidity
10
star
53

brownie-stablecoin-v23

Python
9
star
54

2023-10-SteadeFi

Solidity
9
star
55

zksync-contracts

Solidity
9
star
56

2023-12-the-standard

JavaScript
8
star
57

2-math-master-audit

Solidity
8
star
58

js-backend-engineer

7
star
59

2023-09-vyper-compiler

Vyper Compiler Audit competition
Python
7
star
60

2023-10-Puppy-Raffle

Solidity
7
star
61

diverge-converge-audit

TeX
7
star
62

2024-04-beanstalk-2

TypeScript
7
star
63

2024-07-ark-project

TypeScript
7
star
64

foundry-merkle-airdrop-cu

Solidity
7
star
65

3-gas-bad-nft-marketplace-audit

Solidity
6
star
66

2024-04-Beanstalk-DIB

Solidity
6
star
67

ccip-contracts

Solidity
6
star
68

2024-07-templegold

TypeScript
6
star
69

2024-02-Beanstalk-1

TypeScript
6
star
70

flux-link

View and withdraw your LINK in one command
Python
5
star
71

2024-05-Beanstalk-3

TypeScript
5
star
72

2024-05-beanstalk-the-finale

TypeScript
5
star
73

demo_code

Python
4
star
74

gas-optimization-tips

Contracts and Test for Gas optimization Article
Solidity
4
star
75

remix-favorites-cu

Vyper
4
star
76

2024-07-CL-CCIP

Solidity
4
star
77

2024-07-biconomy

Solidity
4
star
78

2024-08-tadle

Solidity
4
star
79

2024-08-fjord

Solidity
4
star
80

2023-12-stake-link

TypeScript
4
star
81

2024-01-Morpheus

TypeScript
4
star
82

chainlink-gmx-automation

High Frequency Price Automation for GMX, Using Chainlink Keeper Data Streams
Solidity
3
star
83

2024-03-Moonwell

Solidity
3
star
84

2023-11-Boss-Bridge

Solidity
3
star
85

2024-02-soulmate

Solidity
3
star
86

2023-11-Santas-List

Solidity
3
star
87

2023-12-Voting-Booth

Solidity
3
star
88

2024-06-Dussehra

Solidity
3
star
89

2024-05-TSender

Solidity
3
star
90

2024-04-Baba-Marta

Solidity
3
star
91

2024-07-Mondrian-Wallet_v2

Solidity
3
star
92

2024-08-steaking

Solidity
3
star
93

2024-08-kitty-fi

Solidity
3
star
94

2024-03-snek-raffle

Python
3
star
95

dup-hawk

AI Triage Bot - Groups and labels issues submitted to a CodeHawks audits
Python
2
star
96

2024-02-one-shot

Solidity
2
star
97

2024-01-horse-store

Solidity
2
star
98

2024-01-math-master

Solidity
2
star
99

2024-03-kitty-connect

Solidity
2
star
100

2024-05-Mondrian-Wallet

Solidity
2
star