爲什麼要⽤ Foundry

Foundry 

爲什麼要⽤ Foundry 

快 - 加速開發 

Solidity - 減少上下⽂切換 

功能豐富 

⾜夠輕量 

Foundry 的組件 

forge 

cast 

anvil 

安裝 

https://getfoundry.sh/ 

curl -L https://foundry.paradigm.xyz | bash foundryup 

Cast - 與鏈交互的⼯具箱 RPC 

cast rpc <METHOD> <PARAMS> --rpc-url=$RPC 

區塊查詢 

cast block-number --rpc-url=$RPC 

cast find-block <TIMESTAMP> --rpc-url=$RPC 

cast block <BLOCK> --rpc-url=$RPC 

cast block <BLOCK> [FIELD] --json --rpc-url=$RPC

交易查詢 

cast tx <HASH> [FIELD] --rpc-url=$RPC 

cast receipt <HASH> [FIELD] --rpc-url=$RPC 

交易解析 

cast 4byte <SELECTOR> 

cast sig <SIG> 

cast upload-signature <SIG> 

cast pretty-calldata <CALLDATA> 

cast calldata <SIG> <ARGS> 

cast 4byte-event <TOPIC_0> 

cast keccak <DATA> 

賬戶管理 

cast wallet new [OUT_DIR] 

cast wallet sign <MESSAGE> --keystore=<PATH> 

cast wallet verify --address <ADDRESS> <MESSAGE> <SIGNATURE> 

合約查詢 

cast etherscan-source <ADDRESS> --chain=<CHAIN> --etherscan-api-key=<KEY> -d=<OUT_DIR> cast interface <PATH_OR_ADDRESS> --chain=<CHAIN> --etherscan-api-key=<KEY> 

cast storage <ADDRESS> <SLOT> --rpc-url=$RPC 

cast index <KEY_TYPE> <KEY> <SLOT_NUMBER> 

合約交互 

cast call <ADDRESS> <SIG> [ARGS] --rpc-url=$RPC 

cast send <TO> <SIG> [ARGS] --rpc-url=$RPC --keystore=<PATH> 

ENS 

cast resolve-name <NAME> --rpc-url=$RPC 

cast lookup-address <ADDRESS> --rpc-url=$RPC

編碼解碼 

cast --to-hex 

cast --to-dec 

cast --to-unit 

cast --to-wei 

cast --to-rlp 

cast --from-rlp 

本地模擬鏈上交易 

cast run <HASH> --rpc-url=$RPC 

Traces: 

 [<Gas Usage>] <Contract>::<Function>(<Parameters>)  ├─ [<Gas Usage>] <Contract>::<Function>(<Parameters>)  │ └─ ← <Return Value> 

 └─ ← <Return Value> 

Green: For calls that do not revert 

Red: For reverting calls 

Blue: For calls to cheat codes 

Cyan: For emitted logs 

Yellow: For contract deployments 

Anvil - 本地節點 

anvil 

anvim --accounts=<NUM> --balance=<NUM> 

anvil --mnemonic=<MNEMONIC> 

anvil --fork-url=$RPC --fork-block-number=<BLOCK> 特殊 RPC ⽅法 

anvil_* -> hardhat_* 

anvil_impersonateAccount 

anvil_setStorageAt

Forge - 智能合約開發框架 初始化項⽬ 

forge init <dir_name> 

forge init --template <template_path> <dir_name> 

依賴管理 

forge install <gh_user/gh_repo> 

forge update <dep> 

forge remove <dep> 

依賴映射 

forge remappings 

forge remappings > remappings.txt 

代碼美化 

forge fmt 

編譯項⽬ 

forge build 

forge build --watch 

FOUNDRY_PROFILE=release forge build 

獲取更多細節 

forge build --extra-output=<SELECTOR> 

forge inspect <CONTRACT> <FIELD> 

代碼測試

forge test 

forge test -vvvv 

forge test -w 

forge test --match-test/--match-contract/--match-path forge test --fork-url=$RPC 

測試代碼的結構 

斷⾔庫的使⽤ 

使⽤ cheatcode 改變 vm 狀態 

ffi 的使⽤ 

fuzz 測試 

invariant 測試 

code coverage 

gas 報告 

forge test --gas-report 

forge snapshot 

⽤ solidity 寫腳本 

forge script <PATH> 

部署合約 

forge script <PATH> --broadcast 

Debugger 

forge script <PATH> --debug 

cast run <HASH> --debug 

集成 GitHub actions 

continous-integration

 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章