Skip to content

basic IPFS NFT + SVG Mood NFT that can switch mood

Notifications You must be signed in to change notification settings

Mepsss/foundry-nft-f23

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

##probably slightly broken
## error when converting base64 svg stuff, in tokenURI instead of data/Image still gettign date/application, too lazy to fix so far

# Foundry NFT

This is a section of the Cyfrin Foundry Solidity Course.

*[⭐️ (7:40:56) | Lesson 11: Foundry NFT](https://www.youtube.com/watch?v=sas02qSFZ74&t=27656s)*

We go through creating 2 different kinds of NFTs.

1. An IPFS Hosted NFT
2. An SVG NFT (Hosted 100% on-chain)

- [Foundry NFT](#foundry-nft)
- [Getting Started](#getting-started)
- [Requirements](#requirements)
- [Quickstart](#quickstart)
- [Usage](#usage)
- [Start a local node](#start-a-local-node)
- [Deploy](#deploy)
- [Deploy - Other Network](#deploy---other-network)
- [Testing](#testing)
- [Test Coverage](#test-coverage)
- [Deployment to a testnet or mainnet](#deployment-to-a-testnet-or-mainnet)
- [Scripts](#scripts)
- [Base64](#base64)
- [Estimate gas](#estimate-gas)
- [Formatting](#formatting)
- [Thank you!](#thank-you)

# 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)`


## Quickstart

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

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

## Testing

We talk about 4 test tiers in the video.

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

This repo we cover #1 and #3.

```
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 goerli 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 tesnet ETH. You should see the ETH show up
in your metamask.

2. Deploy (IPFS NFT)

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

3. Deploy (SVG NFT)

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

## Scripts

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

Using cast deployed locally example:

```
cast send <RAFFLE_CONTRACT_ADDRESS> "enterRaffle()" --value 0.1ether --private-key <PRIVATE_KEY> --rpc-url
        $SEPOLIA_RPC_URL
        ```

        or, to create a ChainlinkVRF Subscription:

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

        ## Base64

        To get the base64 of an image, you can use the following command:

        ```
        echo "data:image/svg+xml;base64,$(base64 -i ./images/dynamicNft/happy.svg)"
        ```

        Then, you can get the base64 encoding of the json object by placing the imageURI into `happy_image_uri.json`
        then running:

        ```
        echo "data:application/json;base64,$(base64 -i ./images/dynamicNft/happy_image_uri.json)"
        ```


        ## 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
        ```

About

basic IPFS NFT + SVG Mood NFT that can switch mood

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published