Полный playbook (шаг 0, 4–5, verify, claim): README.md § Playbook. Константы деплоя: script/README.md.
- Foundry (
forge,cast) — installed via Git Bash:foundryup - Sepolia ETH on deployer wallet
.envfrom.env.example
In Git Bash (or terminal where forge is in PATH):
cd /c/Users/d_nik/pypro/cryptoops
forge install foundry-rs/forge-std --no-commit
forge install OpenZeppelin/openzeppelin-contracts --no-commitforge buildsource .env # or export PRIVATE_KEY and SEPOLIA_RPC_URL
forge script script/Deploy.s.sol:Deploy --rpc-url sepolia --broadcast -vvvvSave printed TestToken and MerkleClaim addresses.
If you change whitelist.csv, rerun npm run build-tree && npm run get-proof, update MERKLE_ROOT in script/Deploy.s.sol, and deploy again.
- Network: Sepolia
- Contract:
MerkleClaimaddress - Function:
claim(uint256 amount, bytes32[] proof) - Args from
campaigns/eftihia-sepolia-001/output/proof.json→claims["0x<your address lowercase>"]:amount: e.g.1800000000000proof: array of hex strings
# Read root (immutable)
cast call <MERKLE_CLAIM> "merkleRoot()(bytes32)" --rpc-url $SEPOLIA_RPC_URL
# Check if address claimed
cast call <MERKLE_CLAIM> "hasClaimed(address)(bool)" <YOUR_ADDRESS> --rpc-url $SEPOLIA_RPC_URLcryptoops/
contracts/ TestToken.sol, MerkleClaim.sol
script/ Deploy.s.sol
lib/ forge-std, openzeppelin (after forge install)
scripts/ Node Merkle builders
campaigns/{id}/output/ tree.json, proof.json