Skip to content

A template repo to work with huff smart contracts and learn about low level EVM opcodes. Also Horse ♘.

Notifications You must be signed in to change notification settings

smartcontractkit/huff-starter-kit

Repository files navigation


Chainlink Huff logo


A template repository for building a huff based smart contract project with Foundry.

For more information on using foundry with solidity, check out the foundry-starter-kit

Implementation of the following 2 Chainlink features using the Foundry & Huff development environment:

Table Of Contents

Getting Started

Requirements

Please install the following:

  • Git
    • You'll know you've done it right if you can run git --version
  • Foundry / Foundryup
    • This will install forge, cast, and anvil
    • You can test you've installed them right by running forge --version and get an output like: forge 0.2.0 (f016135 2022-07-04T00:15:02.930499Z)
    • To get the latest of each, just run foundryup
  • Huff Compiler
    • You'll know you've done it right if you can run huffc --version and get an output like: huffc 0.2.0

Quickstart

git clone https://github.com/smartcontractkit/huff-starter-kit
cd huff-starter-kit
make # This installs the project's dependencies.
make test

Testing

make test

or

forge test

Usage

Deploying to a network uses the foundry scripting system, where you write your deploy scripts in solidity!

Deploying to a local network

Foundry comes with local network anvil baked in, and allows us to deploy to our local network for quick testing locally.

To start a local network run:

make anvil

This will spin up a local blockchain with a determined private key, so you can use the same private key each time.

Then, you can deploy it with:

make deploy-anvil contract=<CONTRACT_NAME>

Deploying to a testnet or mainnet network

Setup

We'll demo using the Sepolia testnet. (Go here for testnet sepolia ETH.)

You'll need to add the following variables to a .env file:

  • SEPOLIA_RPC_URL: A URL to connect to the blockchain. You can get one for free from Infura.
  • PRIVATE_KEY: A private key from your wallet. You can get a private key from a new Metamask account
    • Additionally, if you want to deploy to a testnet, you'll need test ETH and/or LINK. You can get them from faucets.chain.link.
  • Optional ETHERSCAN_API_KEY: If you want to verify on etherscan.

Deploying

make deploy-sepolia contract=<CONTRACT_NAME>

For example:

make deploy-sepolia contract=PriceFeedConsumer

This will run the forge script, the script it's running is:

@forge script script/${contract}.s.sol:Deploy${contract} --rpc-url ${SEPOLIA_RPC_URL}  --private-key ${PRIVATE_KEY} --broadcast --verify --etherscan-api-key ${ETHERSCAN_API_KEY}  -vvvv

If you don't have an ETHERSCAN_API_KEY, you can also just run:

@forge script script/${contract}.s.sol:Deploy${contract} --rpc-url ${SEPOLIA_RPC_URL}  --private-key ${PRIVATE_KEY} --broadcast

These pull from the files in the script folder.

Misc

Disclaimer

None of the contacts have been audited, use at your own risk.

Acknowledgments

Contributing

Contributions are always welcome! Open a PR or an issue!

Thank You!

Resources

Helpful Debugging Resources:

About

A template repo to work with huff smart contracts and learn about low level EVM opcodes. Also Horse ♘.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •