Truffle

松露控制台:無法從 SC 程式碼中檢索 Solidity 發送(..)和轉移(..)

  • April 12, 2022

我已經為 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);

我的程序正在執行。

引用自:https://ethereum.stackexchange.com/questions/125910