Build EVM 及 console.log
在以太坊上建立智慧合約看起來越來越像人類可以做的事情,這一切正在發生。
在 19 年 10 月, 我們推出了Buidler EVM[3]:一種ganache-cli替代方案,其實現了Solidity的堆疊跟蹤功能。這是邁向更好的開發人員體驗的重要一步,現在我們釋出了另一個備受期待的Buidler EVM功能:用於Solidity的 console.log()。
譯者注: 用 npx buidler node啟動 Builder EVM後,其他就和使用 Ganache 完全一樣。
從此 Debug 有了雙眼
Buidler EVM是為開發而設計的本地以太坊網路。它允許您部署合約,執行測試和除錯程式碼, 並且Buidler EVM是被設計為可啟用高階工具的平臺。
當前從Solidity記錄資料的主要方法是觸發事件(emitting events),但是這種方法有很大限制:它僅適用於成功的交易。這是因為EVM不會在交易失敗時觸發事件。而往往是交易失敗時,開發人員需要了解發生了什麼情況,因此這對開發來說是很悲慘的。
Buidler EVM擁有強大的執行檢查架構,使我們能夠實現可靠console.log ,它將始終可用,即使在交易失敗的時候,它還可以與您選擇的測試工具一起使用 。
使用 console.sol
使用它很簡單。只需匯入@nomiclabs/buidler/console.sol ,然後在函式中加入console.sol,就像在JavaScript中一樣使用它即可,例如:
然後使用Builder EVM作為開發網路使用Builder執行測試。
可以使用任何工具(不僅是Buidler)編譯合約,因此需要,可以放心的保留著log的呼叫。諸如Tenderly[4]之類的工具將整合日誌的抓取功能,因此,您甚至可以根據需要將日誌記錄程式碼部署到測試網和主網。在其他網路中執行時,呼叫console.log不會執行任何操作,但會產生gas費用。
Buidler EVM的最新版本還增加了對Solidity 0.6支援以及新的JSON-RPC方法evm_snapshot和evm_revert ,從而允許專案使用快照遷移到Buidler並繼續其測試最佳化。
結合堆疊跟蹤功能,標誌著智慧合約開發生產力的新篇章。
帶著 Builder EVM的console.log去兜兜風!
mkdir console/
cd console/
npm init -y
npm install --save-dev @nomiclabs/buidler
npx buidler # and create a sample project
npx buidler test
使用Builder,你很快會忘記Solidity除錯給你的挫敗感
在Truffle專案中使用console.log
在現有的 truffle 專案中也可以非常容易的使用console.log,先在專案下安裝 buidler :
npm install --save-dev @nomiclabs/buidler
// 或
yarn add @nomiclabs/buidler
然後在合約檔案中引入 import "@nomiclabs/buidler/console.sol";,然後在需要的地方加入console.log()列印即可
接著就是部署和測試,在 truffle 專案,一般使用的是 Ganache 網路,現在我們使用Builder EVM替代Ganache,修改truffle-config.js 配置:
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*"
}
}
Ganache的預設 RPC 埠通常是 7545, Builder EVM 預設 RPC 埠是8545,因此我們修改development網路的埠為8545。
啟動Builder EVM後,就可以進行部署了,使用命令npx buidler node啟動Builder EVM ,Builder EVM 會為我們分配 20 個賬號、每個賬號有 10000 個以太幣。
如果是第一次啟動,會提示我們建立一個專案,可以選擇"Create an empty buidler.config.js",即建立一個空的buidler.config.js 。
之前就可以和之前開發 Truffle 專案完全一致了,開啟另一個命令終端,使用truffle migrate命令進行部署,如果我們在建構函式中加入了console.log(),那麼在Builder EVM終端裡,就可以參看到日誌了。
參考資料
[1]登鏈翻譯計劃: https://github.com/lbc-team/Pioneer
[2]Tiny熊: https://learnblockchain.cn/people/15
[3]我們推出了Buidler EVM: https://medium.com/nomic-labs-blog/better-solidity-debugging-stack-traces-are-finally-here-dd80a56f92bb
[4]Tenderly: https://tenderly.dev/
[5]Patricio Palladino: https://medium.com/@alcuadrado?source=post_page-----fc66c54f2c4a----------------------