來源:傳感學人
譯者 | 崔皓
審校 | 孫淑娟
(相關資料圖)
如果你是Solidity的開發者,你會很高興聽到Truffle現在支持Solidity智能合約的控制臺記錄。讓我們來看看是如何實現的吧。雖然 Truffle 長期以來處于智能合約開發工具領導者的地位--為創建、測試和調試智能合約提供使用環境--直接集成控Console.log是它需要開發的一項功能。
但現在不需要了! 開發人員現在可以輕松地記錄信息和調試智能合約,所有這些都在Truffle(Ganache)環境中。讓我們來看看它是如何實現的。
Console.log是JavaScript中一個非常流行的功能,被開發人員用于輸出日志信息,并直接從代碼中提取細節。在Web3和智能合約開發的背景下,console.log扮演著類似的角色,允許開發者從他們的智能合約中打印出Solidity變量和其他信息。
例如,您可以使用 console.log 來顯示一個變量的值或智能合約中的一個函數調用的輸出。在調試或測試你的智能合約時,這可能是非常有用的。
console.log("Console Logging: The Smart Contract Developer"s Best Friend");
使用其console.log非常簡單。首先,確保電腦上運行的是最新的Truffle版本。如果存在任何問題,可能需要完全卸載軟件包,然后再重新安裝它。在這篇文章中使用的命令,我們將使用NPM作為我們的包管理器。
$ npm install -g truffle
安裝成功后,我建議你修改truffle配置文件(即truffle-config.js),如下所示:
module.exports = {displayPrefix:裝飾來自console.log的輸出,使其與CLI顯示的其他內容相區別。preventConsoleLogMigration:當在測試時,阻止合同部署的進行。如果你希望在部署合同時包含console.log,你可以選擇不這樣做。然而,如果你選擇這樣做,請記住console.log在使用Gas時有不可預知的行為。(編者注明:Gas在使用了智能合約時,交易要是按照智能合約的規定一步一步執行命令,每執行一個命令都會產生一定的消耗,這個消耗用Gas作為單位). . .
solidityLog: {
displayPrefix: " :", // defaults to ""
preventConsoleLogMigration: true, // defaults to false
}
如果你準備好了,可以試一試了。像往常一樣將 contract.sol 合同導入你的 Solidity 代碼中?,F在你已經準備好像在 JavaScript 中那樣使用 console.log() 命令。
這包括使用字符串替換,如%s和%f:
pragma solidity ^0.8.9;import "truffle/console.sol";
contract BookStore {
//...
function transfer(address to, uint256 amount) external {
console.log("Transferring %s tokens to %s", amount, to);
require(balances[msg.sender] >= amount, "Not enough tokens");
balances[msg.sender] -= amount;
balances[to] += amount;
emit Transfer(amount, to, msg.sender);
}
}
上面的轉移函數顯示了console.log的作用。想象一下,對轉移函數的調用因 "Not enough tokens"錯誤而失敗。在這種情況下,console.log行將顯示該調用試圖轉移的代幣數量。這使得開發者可以看到正在轉移的地址和代幣數量。該消息看起來像這樣。
...Transferring 10 tokens to 0x377bbcae5327695b32a1784e0e13bedc8e078c9c
一個更好的調試方法是將余額[msg.sender]加入到console.log語句中,或將其單獨打印出來。這樣一來,發件人的余額在控制臺中也是可見的。就是這么簡單!
你也可以在測試和主網中留下日志;這樣一來,你就有了一個觀察你的智能合約的好方法。而且值得一提的是,像Tenderly這樣的工具會整合日志的報廢,這在生產環境中調試和測試智能合約時很有用。(編者注明:主網就是發生實際交易的地方,在主網上會記錄在特定的分布式賬本上。 例如,以太坊主網是公共區塊鏈,能進行網絡驗證和交易。)
最后,在使用控制臺日志時,重要的是要遵循你已經知道的所有良好的使用規則,例如使用清晰和描述性的日志信息。這將使其更容易理解,并識別可能出現的任何問題。
雖然控制臺日志是調試智能合約的強大工具,但請記住,Truffle也提供其他調試工具。Truffle有一個強大的內置調試器CLI工具,可用于逐步執行智能合約并檢查執行中不同點的變量狀態。此外,針對事件可以進行記錄信息和跟蹤智能合約行為。
也就是說,只為變量輸出使用調試器可能是矯枉過正。同樣,事件記錄只有在交易成功時才會發揮作用,這在某些情況下可能是一種限制。
console.log 中的Bottomline功能與Truffle中的其他調試工具相結合,使調試工作更加簡單易用,為開發者提供更好的體驗。它使開發人員能夠快速、輕松地記錄信息并監控其智能合約的行為,而其他調試工具可用于更高級的調試和故障排除。
Truffle的新控制臺記錄功能是對智能合約開發的寶貴補充。它容易使用,可以簡化調試和測試過程。記錄信息和實時跟蹤智能合約行為的能力可以減少效率低下和頭痛的問題。它將會成為你工具箱中的一個偉大工具。
崔皓,51CTO社區編輯,資深架構師,擁有18年的軟件開發和架構經驗,10年分布式架構經驗。
原文標題:??Easy Smart Contract Debugging With Truffle’s Console.log??,作者:Michael Bogan
還在苦苦尋找優秀經典的名言嗎?為大家整理的關于法律的名言警句
關于法律的名言警句(精選220句)在日常學習、工作或生活中,大家都有令自己印象深刻的名言吧,巧用名言有助于我們正確對待學習、生活、成長
怎樣寫方案才更能起到其作用呢?整理的項目合作實施方案
項目合作實施方案5篇為保證事情或工作高起點、高質量、高水平開展,往往需要預先進行方案制定工作,方案指的是為某一次行動所制定的計劃類
楚辭影響最大的作品 《離騷》全文對照翻譯
《離騷》全文對照翻譯《離騷》是屈原的代表作,創作于楚懷王時期屈原遭讒被疏之時,是楚辭影響最大的作品。下面是《離騷》全文對照翻譯...
寫申請書時理由總是不夠充分?為大家整理的退學申請書
退學申請書(精選12篇)在一步步向前發展的社會中,申請書在現實生活中使用廣泛,申請書不同于其他書信,是一種專用書信。寫申請書時理由總是
都有哪些類型的話語呢?為大家收集的感恩老師的話精選150句
感恩老師的話在生活、工作和學習中,越來越多人喜歡發表話語,話語是特定社會語境中人與人之間從事溝通的具體言語行為。那么都有哪些類...