A foundry-f23 lottery project with transparent smart contracts
This code is to create a proveably random smart contract lottery
- Users can enter by paying a ticket
- The ticket fees are going to the winner during the draw
- After X period of time, the lottery will automatically draw a winner
- And this one will be done programmatically
- Usind chainlink VRFV and Chainlink Automation
- Chainlink VRF -> Randomness
- Chainlink Automation -> Time based trigger
- Write some deploy scripts
- Write our tests
- Work on local chain
- Forked testnet
- Forked Mainnet
forge coverage --report debug
forge test --debug function_Name
forge coverage --report debug > coverage.txt
Unit tests
Integration tests
Forked tests
Staging tests -> On a mainnet
forge test
forge test -m function_Name -vvv
make test
- foundry-f23-lottery
make anvil
If you're having a hard time installing the chainlink library, you can optionally run this command.
forge install smartcontractkit/[email protected] --no-commit
This will default to your local node. You need to have it running in another terminal in order for it to deploy.
make deploy
- Unit
- Integration
- Forked
- Staging
This repo I cover #1 and #3.
forge test
or
forge test --fork-url $SEPOLIA_RPC_URL
forge coverage
- 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.- You can learn how to export it here.
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.
- Get testnet ETH
Head over to 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"
This will setup a ChainlinkVRF Subscription for you. If you already have one, update it in the scripts/HelperConfig.s.sol
file. It will also automatically add your contract as a consumer.
3.Register a Chainlink Automation Upkeep
You can follow the documentation if you get lost.
Go to automation.chain.link and register a new upkeep. Choose Custom logic
as your trigger mechanism for automation. Your UI will look something like this once completed:
After deploying 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"
You can estimate how much gas things cost by running:
forge snapshot
And you'll see an output file called .gas-snapshot
To run code formatting:
forge fmt
@0xJonaseb11