This contract allows users(buyers or players) to buy a ticket from the contract. And after the raffle interval is over, a winner will be drawn at random and all the ticket prices accumulated during that raffle interval will go to that particular winner. A user can buy more than one ticket, but by calling the the buyTicket function repeatedly.
This project was done as part of the Foundry 2023 course by Patrick Collins. So the repo is very similar to his. Though I have skipped some steps, and I still have a TODO list to complete it fully.
- git
- You'll know you did it right if you can run
git --version
and you see a response likegit version x.x.x
- You'll know you did it right if you can run
- foundry
- You'll know you did it right if you can run
forge --version
and you see a response likeforge 0.2.0 (816e00b 2023-03-16T00:05:26.396218Z)
- You'll know you did it right if you can run
git clone https://github.com/El-Ku/Raffle-F23
cd Raffle-F23
forge build
Deploy:
forge script script/DeployRaffle.s.sol
# Test everything without any log messages
forge test
# Test everything with emitted events and console messages
forge test -vv
# Test everything with information printed out on each individual transaction
forge test -vvvv
or
# Only run test functions matching the specified regex pattern.
forge test --match-test testFunctionName
# (OR)
forge test --mt testFunctionName
or
# Test on forked version of the specified network
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.
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 tesnet ETH. You should see the ETH show up in your metamask.
- Deploy
forge script script/DeployRaffle.s.sol --rpc-url $SEPOLIA_RPC_URL --private-key $PRIVATE_KEY --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY
You can estimate how much gas things cost by running:
forge snapshot
And you'll see and output file called .gas-snapshot
To run code formatting:
forge fmt