├── anvil.sh ├── impersonate.py ├── erc20-transfer.s.sol └── Makefile /anvil.sh: -------------------------------------------------------------------------------- 1 | anvil \ 2 | --chain-id 31337 \ 3 | --fork-url $RPC \ 4 | --auto-impersonate 5 | -------------------------------------------------------------------------------- /impersonate.py: -------------------------------------------------------------------------------- 1 | from web3 import Web3 2 | 3 | ADDRESS = "0x176F3DAb24a159341c0509bB36B833E7fdd0a132" 4 | RPC = "http://127.0.0.1:8545" 5 | 6 | if __name__ == "__main__": 7 | web3 = Web3(Web3.HTTPProvider(RPC)) 8 | web3.provider.make_request("anvil_impersonateAccount", [ADDRESS]) 9 | 10 | -------------------------------------------------------------------------------- /erc20-transfer.s.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity =0.8.17; 3 | 4 | import "forge-std/Script.sol"; 5 | import "forge-std/console.sol"; 6 | 7 | import {ERC20} from "@solmate/src/tokens/ERC20.sol"; 8 | 9 | address TOKEN = 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0; 10 | address RECIPIENT = 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266; 11 | uint AMOUNT = 200e18; 12 | 13 | contract Transfer is Script { 14 | function run() public { 15 | 16 | vm.startBroadcast(); // ---------------------- 17 | 18 | ERC20 token = ERC20(TOKEN); 19 | token.transfer(RECIPIENT, AMOUNT); 20 | 21 | vm.stopBroadcast(); // ---------------------------- 22 | 23 | console.log("balance of recipient", token.balanceOf(RECIPIENT)); 24 | } 25 | } 26 | 27 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | include .env 2 | 3 | ifdef FILE 4 | matchFile = --match-contract $(FILE) 5 | endif 6 | ifdef FUNC 7 | matchFunction = --match $(FUNC) 8 | endif 9 | 10 | test = forge test $(matchFile) $(matchFunction) 11 | # fork-block-number = --fork-block-number 18941929 #16386958 12 | 13 | # test locally 14 | t: 15 | $(test) -vv 16 | tt: 17 | $(test) -vvv 18 | ttt: 19 | $(test) -vvvv 20 | 21 | # test on fork 22 | ft: 23 | $(test) -vv --fork-url $(RPC) $(fork-block-number) 24 | ftt: 25 | $(test) -vvv --fork-url $(RPC) $(fork-block-number) 26 | fttt: 27 | $(test) -vvvv --fork-url $(RPC) $(fork-block-number) 28 | 29 | # deploy on goerli 30 | gdeploy: 31 | forge script script/deploy/Deploy.Goerli.s.sol --rpc-url $(GOERLI_RPC) --sender $(PUBLIC_KEY) --broadcast --verify -i 1 -vvvv 32 | 33 | # deploy on mainnet 34 | mdeploy: 35 | forge script script/deploy/Deploy.Mainnet.s.sol --rpc-url $(MAINNET_RPC) --sender $(PUBLIC_KEY) --broadcast --verify -i 1 -vvvv 36 | 37 | pdeploy: 38 | forge script script/deploy/Deploy.Payments.s.sol --rpc-url $(MAINNET_RPC) --sender 0x7FCeD590Ae09843F32F6118382f67cC01CFcf511 --broadcast --verify -i 1 -vvvv 39 | 40 | read: 41 | forge script script/Read.s.sol --rpc-url $(GOERLI_RPC) --fork-block-number 8416091 42 | 43 | ldeploy: 44 | forge script script/deploy/Deploy.Mainnet.s.sol --fork-url http://localhost:8545 --sender 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --broadcast --verify -i 1 -vvvv 45 | 46 | gdeployVault: 47 | forge script script/deploy/Deploy.Vault.Goerli.s.sol --rpc-url $(GOERLI_RPC) --sender $(PUBLIC_KEY) --broadcast --verify -i 1 -vvvv 48 | 49 | transferWsteth: 50 | forge script script/anvil/transfer.wsteth.s.sol --rpc-url http://127.0.0.1:8545 --broadcast --sender 0x176F3DAb24a159341c0509bB36B833E7fdd0a132 --unlocked 51 | --------------------------------------------------------------------------------