Truffle
松露控制台:無法從 SC 程式碼中檢索 Solidity 發送(..)和轉移(..)
我已經為 Truffle 控制台編寫了一個程序。我的程式碼訪問該字元串並應返回與 Solidity 發送和傳輸相關的語句。當我如下所示測試 Solidity SC 的每一行時,我得到了正確的結果,但是當我使用儲存在“字元串”變數中的整個程式碼進行測試時,錯誤條件不起作用或存在其他問題我得到了所有的 Solidity 程式碼行,而不僅僅是發送和傳輸語句。例如:
Str[ctr] = "bool sent = _to.send(msg.value);".includes(keyWords[keyWordCtr])//true
我的完整程式碼是:
var assert = require('assert'); const path = require("path"); module.exports = async function(callback) { try { string = `contract SendEther { function sendViaTransfer(address payable _to) public payable { _to.transfer(msg.value);} function sendViaSend(address payable _to) public payable { bool sent = _to.send(msg.value); require(sent, "Failed to send Ether");} function sendViaCall(address payable _to) public payable { (bool sent, bytes memory data) = _to.call{value: msg.value}(""); require(sent, "Failed to send Ether");}}` const Str=[]; let ctr=0; lines = string.split(/\r\n|\n/); const keyWords = new Array( ".send(", "transfer("); for (let keyWordCtr = 0; keyWordCtr <1; ++keyWordCtr){ for(let line = 0; line < lines.length-1; line++){ if (lines[line].includes(keyWords[keyWordCtr]) == false)//Note replacing search by includes not working continue; Str[ctr] = (lines[line].includes(keyWords[keyWordCtr])? lines.toString() : false); ctr++; } } for(let i = 0; i< Str.length; i++) console.log(Str[i]) }//try catch (error) { console.log(error) } callback(); }
當我執行程序時,我得到了整個程式碼,否則,我發現只有以下兩個語句返回真值:
_to.transfer(msg.value); bool sent = _to.send(msg.value);
有人請指導我如何修復我的程式碼,使其僅返回 Solidity 程序的上述兩個語句。現在它正在返回整個 Solidity 程式碼。
祖爾菲。
我已經解決了這個問題。我的字元串有問題:
Str[ctr] = (lines[line].includes(keyWords[keyWordCtr])? lines.toString() : false);
當我將其更改為:
Str[ctr] = (lines[line].includes(keyWords[keyWordCtr])? lines[line].toString() : false);
我的程序正在執行。