智能合約開發
Foundry 開發框架
Foundry 是一套快速、以 Solidity 為母語的工具,用於建構、測試與部署合約。它的決定性選擇是:你用 Solidity 本身而非 JavaScript 撰寫測試,且測試在一個以 Rust 寫成的內建 EVM 中執行,所以「修改—測試」的循環非常快。對許多團隊而言,它已成為預設的開發環境。
它是一組命令列工具。forge 編譯你的專案、執行測試套件,並進行基於屬性的模糊測試與不變量測試。cast 是命令列上的瑞士刀——編碼/解碼資料、讀取狀態、透過 RPC 送出交易。anvil 是本地開發節點(相當於 Ganache 或 Hardhat 網路)。chisel 是用於快速實驗的 Solidity REPL。測試透過保留的 vm 位址上的「作弊碼」(cheatcode)取得 EVM 的特殊能力:vm.prank 為下一次呼叫偽造 msg.sender、vm.expectRevert 斷言一次呼叫會失敗、vm.warp 移動 block.timestamp、vm.deal 設定餘額、vm.roll 改變區塊號。
有兩項功能讓 Foundry 在安全工作上很強。它的模糊測試器會為任何帶參數的測試函數自動產生大量隨機值,揭露固定測試會錯過的邊界情況。它的不變量測試器則對你的合約發射長串的隨機呼叫序列,並檢查所宣告的屬性(例如「總供給等於所有餘額之和」)是否恆成立。由於它跑在以 Rust 寫成的 revm 上而非 JavaScript 引擎,大型套件通常比舊有的工具鏈快得多。
function testIncrement() public {
vm.prank(alice); // next call comes from alice
counter.increment();
assertEq(counter.count(), 1);
}
function testFuzz_Add(uint96 x) public { /* forge fuzzes x */ }Solidity 測試、原生作弊碼、內建模糊測試。
作弊碼只存在於 Foundry 的測試 EVM 中——vm.prank、vm.warp 之流是測試工具,而非操作碼。它們在真實鏈上毫無意義。
另見