更好Solidity合約除錯工具: console.log

買賣虛擬貨幣
Builder EVM 是一個用於本地開發的以太坊網路,提供了更好的堆疊跟蹤功能和console.log() 輸出日誌。

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----------------------

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;