Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dannweeeee/foundry-erc20-f23

A Foundry ERC20 Project
https://github.com/dannweeeee/foundry-erc20-f23

deploy-scripts erc20 foundry smart-contracts solidity

Last synced: 19 days ago
JSON representation

A Foundry ERC20 Project

Awesome Lists containing this project

README

        

# Foundry ERC20

A Foundry ERC20 Project that is part of Cyfrin Solidity Blockchain Course.

## Getting Started

### 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`
- [foundry](https://getfoundry.sh/)
- 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)`

### Quick Start

```
git clone https://github.com/dannweeeee/foundry-erc20-f23
cd foundry-erc20-f23
forge install
forge build
```

## Usage

### OpenZeppelin

[OpenZeppelin Contracts Docs](https://docs.openzeppelin.com/contracts/4.x/)



[OpenZeppelin GitHub Repo](https://github.com/OpenZeppelin/openzeppelin-contracts)

#### Installing OpenZeppelin Contracts Package

```bash
forge install OpenZeppelin/openzeppelin-contracts --no-commit
```

### 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](#deployment-to-a-testnet-or-mainnet)

### Testing

1. Unit Testing
2. Forked Testing

```
forge test
```

or

```
forge test --fork-url $SEPOLIA_RPC_URL
```

#### Test Coverage

```
forge coverage
```

## 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](https://metamask.io/)). **NOTE:** FOR DEVELOPMENT, PLEASE USE A KEY THAT DOESN'T HAVE ANY REAL FUNDS ASSOCIATED WITH IT.
- You can [learn how to export it here](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key).
- `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](https://alchemy.com/?a=673c802981)

Optionally, add your `ETHERSCAN_API_KEY` if you want to verify your contract on [Etherscan](https://etherscan.io/).

1. Get testnet ETH

Head over to [faucets.chain.link](https://faucets.chain.link/) and get some testnet ETH. You should see the ETH show up in your metamask.

2. Deploy

```
make deploy ARGS="--network sepolia"
```

### Scripts

After deploy to a testnet or local net, you can run the scripts.

Using cast deployed locally example:

```
cast send "transfer()" --value 0.1ether --private-key --rpc-url $SEPOLIA_RPC_URL
```

or, to create a ChainlinkVRF Subscription:

```
make createSubscription ARGS="--network sepolia"
```

### Estimate Gas

You can estimate how much gas things cost by running:

```
forge snapshot
```

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

## Formatting

To run code formatting:
```
forge fmt
```