@@ -336,8 +336,7 @@ cast block-number --rpc-url=$RPC_MAIN
336336```
33733715769241
338338```
339-
340- > 将环境变量的` ETH_RPC_URL ` 设置为 ` --rpc-url ` 你就不需要在每个命令行后面增加 ` --rpc-url=$RPC_MAIN ` 我这里直接设置为主网
339+ > 将环境变量的ETH_RPC_URL设置为 --rpc-url 你就不需要在每个命令行后面增加 --rpc-url=$RPC_MAIN 我这里直接设置为主网
341340
342341### 查询区块信息
343342
@@ -596,9 +595,9 @@ cast etherscan-source 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 --etherscan-api
596595cast etherscan-source $WETH -d ~ /Downloads
597596```
598597
599- ### 调用合约
598+ ### 调用合约(读数据)
600599
601- 调用 WETH合约的 ` balanceOf ` 方法,查看` 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 ` 账号的余额
600+ ` cast call ` 用于从区块链上读取数据(调用只读函数),该操作不会改变区块链状态,也不需要支付 Gas 费用。下面我们调用 ` WETH ` 合约的 ` balanceOf ` 方法,查看 ` 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 ` 账号的余额
602601
603602``` shell
604603# cast call [OPTIONS] [TO] [SIG] [ARGS]... [COMMAND] --rpc-url=$RPC
@@ -617,6 +616,18 @@ cast call $WETH "balanceOf(address)(uint256)" 0xC02aaA39b223FE8D0A0e5C4F27eAD908
617616
618617```
619618
619+ ### 调用合约(写数据)
620+
621+ ` cast send ` 用于发送交易并修改区块链状态(调用改变状态的函数),该操作会消耗 Gas 费用,需要签名并发送交易。
622+
623+ ``` shell
624+ # cast send [OPTIONS] [TO] [SIG] [ARGS]... [COMMAND] --rpc-url=$RPC
625+
626+ cast send 0x... " deposit(address,uint256)" 0x... 1 --rpc-url=$RPC
627+
628+ ```
629+
630+
620631### 解析ABI
621632
622633可以根据ABI反向解析出solidity代码
@@ -645,7 +656,13 @@ cast --from-rlp
645656## Tips
646657
647658### 设置ETH_RPC_URL
648- 将环境变量的` ETH_RPC_URL ` 设置为 ` --rpc-url ` 你就不需要在每个命令行后面增加 ` --rpc-url=$RPC_MAIN ` 我这里直接设置为主网
659+ 将环境变量的` ETH_RPC_URL ` 设置为 ` --rpc-url ` 的值,这样你就不需要在每个命令行后面增加 ` --rpc-url=$RPC_MAIN ` ,我这里直接设置为主网,如下:
660+ ``` shell
661+ export ETH_RPC_URL=your_rpc_url
662+ source ~ /.bashrc # 如果你使用的是 Bash
663+ source ~ /.zshrc # 如果你使用的是 Zsh
664+ cast block-number # 不用再配置 --rpc-url 参数
665+ ```
649666
650667### 设置ETHERSCAN_API_KEY
651668设置` ETHERSCAN_API_KEY ` 环境变量可以直接代替 ` --etherscan-api-key `
@@ -1114,7 +1131,7 @@ forge script script/Counter.s.sol -vvvv --rpc-url=http://127.0.0.1:8545
11141131正式部署:
11151132
11161133```
1117- forge script script/Counter.s.sol -vvvv --rpc-url=http://127.0.0.1:8545 --broadcast --private-key=privete_key
1134+ forge script script/Counter.s.sol -vvvv --rpc-url=$RPC_MAIN --broadcast --private-key=privete_key
11181135```
11191136
11201137部署完成之后会多一个broadcast文件夹,查看该文件夹有` run-latest.json ` 可以看到部署的相应信息。
@@ -1128,6 +1145,18 @@ forge script script/Counter.s.sol -vvvv --rpc-url=http://127.0.0.1:8545 --broadc
11281145uint256 mainnet = vm .createFork (rpc);
11291146```
11301147
1148+ ## 命令行部署合约
1149+
1150+ 部署并开源合约,其中 ` --etherscan-api-key ` 为以太坊浏览器(或其他 EVM 浏览器)中申请的 API key,` --verify ` 为部署后开源合约。
1151+ ``` solidity
1152+ # forge create --rpc-url <your_rpc_url> --private-key <your_private_key> --etherscan-api-key <KEY> --verify src/YourContract.sol:YourContract --constructor-args <constructor_args>
1153+ forge create --rpc-url $RPC_MAIN \
1154+ --private-key privete_key \
1155+ --etherscan-api-key xxxx \
1156+ --verify \
1157+ src/Counter.sol:Counter
1158+ ```
1159+
11311160## Tips:
11321161
11331162``` shell
@@ -1160,4 +1189,4 @@ forge run --debug
11601189## 参考
11611190[ 使用 foundry 框架加速智能合约开发] ( https://www.youtube.com/watch?v=EXYeltwvftw )
11621191[ cast Commands - Foundry Book] ( https://book.getfoundry.sh/reference/cast/ )
1163- [ https://twitter.com/wp__lai ] ( https://twitter.com/wp__lai )
1192+ [ https://twitter.com/wp__lai ] ( https://twitter.com/wp__lai )
0 commit comments