This is a minimal project allowing users to fund the contract owner with donations.
-
The smart contract accepts ETH as donations, denominated in USD.
-
Donations have a minimal USD value, otherwise they are rejected.
-
The value is priced using a Chainlink price feed, and the smart contract keeps track of doners in case they are to be rewarded in the future.
forge script script/DeployFundMe.s.sol
forge test
or
forge test --mt testFunctionName
or
forge test --fork-url $SEPOLIA_RPC_URL
forge coverage
The instructions here will allow you to work with this repo on zkSync.
In addition to the requirements above, you'll need:
- foundry-zksync
- You'll know you did it right if you can run
forge --version
and you see a response likeforge 0.0.2 (816e00b 2023-03-16T00:05:26.396218Z)
.
- You'll know you did it right if you can run
Run the following:
npx zksync-cli dev config
And select: In memory node
and do not select any additional modules.
Then run:
npx zksync-cli dev start
And you'll get an output like:
In memory node started v0.1.0-alpha.22:
- zkSync Node (L2):
- Chain ID: 260
- RPC URL: http://127.0.0.1:8011
- Rich accounts: https://era.zksync.io/docs/tools/testing/era-test-node.html#use-pre-configured-rich-wallets
make deploy-zk
This will deploy a mock price feed and a fund me contract to the zkSync node.
- 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.
- Deploy
forge script script/DeployFundMe.s.sol --rpc-url $SEPOLIA_RPC_URL --private-key $PRIVATE_KEY --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY
After deploying to a testnet or local net, you can run the scripts.
Using cast deployed locally example:
cast send <FUNDME_CONTRACT_ADDRESS> "fund()" --value 0.1ether --private-key <PRIVATE_KEY>
or
forge script script/Interactions.s.sol:FundFundMe --rpc-url sepolia --private-key $PRIVATE_KEY --broadcast
forge script script/Interactions.s.sol:WithdrawFundMe --rpc-url sepolia --private-key $PRIVATE_KEY --broadcast
cast send <FUNDME_CONTRACT_ADDRESS> "withdraw()" --private-key <PRIVATE_KEY>
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
The frontend for this project already exists in the /web
directory.
- Open a terminal and navigate to the
web
directory:cd web
- Install dependencies (if you haven't already):
pnpm install
- Start the development server:
pnpm run dev
- Visit the local address shown in your terminal (usually http://localhost:3000).
- Use libraries like (wagmi) in your Nuxt app to interact with your deployed contracts.
- You may want to store contract addresses and ABIs in the frontend directory for easy access.
- The backend (Foundry) and frontend (Nuxt) manage their dependencies separately. Use
npm
oryarn
inweb/
, and Foundry tools in the root.
Document any additional frontend setup or environment variables in this README as needed.