Truffle

通過腳本呼叫 Truffle 命令

  • September 20, 2018

我使用 Visual Studio 程式碼簽訂了以下契約

pragma solidity ^0.4.17;

contract IDSCheck {

   mapping( string => string ) PersonHash;

   function AddHash(string name, string hash) {
       PersonHash[name] = hash;

   }

   function GetHash (string name) public returns (string) {
       return PersonHash[name];
   }
}

現在我想使用 exec 命令從松露中呼叫這個函式。

我使用以下命令編寫了一個名為 idscheck.js 的 js 文件

var IDSCheck = artifacts.require("./IDSCheck.sol");
module.exports = function (deployer) {
 var ss;
 IDSCheck.deployed().then(function(deployed){ ss=deployed; });
 ss.GetHash.call("sal");
}

我得到一個輸出錯誤說

類型錯誤:無法讀取未定義的屬性“GetHash”……

我正在嘗試這樣做是在松露控制台中。主要目標是創建一個腳本,該腳本使用 truffle 控制台通過批處理文件執行,以獲取上述合約的 GetHash 函式的輸出。

您的問題是由IDSCheck.deployed(). 如果您之後立即呼叫,該變數ss可能不會被初始化ss.GetHash()

.then()在確定它在函式內正確初始化後,您可以通過執行呼叫來修復它。

var IDSCheck = artifacts.require("./IDSCheck.sol");
module.exports = function (callback) {
 var ss;
 IDSCheck.deployed().then(function(deployed){
   ss = deployed;
   // Here we are sure `ss` is initialized and it is safe to call `.GetHash()`
   ss.GetHash.call("sal");
 });
 // This code 'might' be excuted before the code inside `.then()`
 // ss.GetHash.call("sal");
}

改變這個:

var IDSCheck = artifacts.require("./IDSCheck.sol");

對此:

var IDSCheck = artifacts.require("./IDSCheck.sol").new();

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