Contract-Development

XMLHttpRequest() 在 Truffle 項目中可能不起作用

  • May 22, 2021

我想在一個 Truffle 項目中連接到我的智能合約並從中獲取一些資訊。智能合約的名稱是“TEST”。以下是我的 app.js 程式碼,它應該與我的智能合約進行通信:

var Web3=require("web3");
var web3= new Web3('ws://localhost:8545');
  web3.eth.getAccounts().then(console.log);
let request=new XMLHttpRequest();
   request.open("GET","E:\Emrooz\build\contracts\TEST.json");
   request.send(null);
var jsonFile=JSON.parse(request.responseText);
var myContract=new 
   web3.eth.Contract(jsonFile,"0xC8129A44979263D578A8BD52d403d6537820e969",{ 
   account:"0xeB2a9E0338616e35B5e844Bd38924C79D99d7346", balance:"99.98990494"});
var acc=myContract.defaultAccount;
   console.log(acc.toString());

這裡,“Emrooz”是 Truffle 項目的文件名。但是當我使用 Nodejs 編譯 app.js 時,會發生以下錯誤:

在此處輸入圖像描述

甚至,我添加var XMLHttpRequest=require('xmlhttprequest').XMLHttpRequest;到程式碼中,但該錯誤再次發生。有什麼問題?我該怎麼辦?

XMLHttpRequest();不需要連接智能合約並從中接收資訊。所提供程式碼的目的是接收存在於

new web3.eth.Contract(…)

為此,我們可以使用

myContract.options.accoun

代替

myContract.defaultAccount

以下程式碼是輸出所需結果的問題程式碼的更改版本:

var Web3=require("web3");
var fs=require('fs');//fs module added in solution.
var web3= new Web3('ws://localhost:8545');
web3.eth.getAccounts().then(console.log);// shows all accounts exist in the project
var JsonFile=fs.readFileSync("E:/Emrooz/build/contracts/TEST.json");
var JsFile=JSON.parse(JsonFile);
var myContract=new web3.eth.Contract(JsFile.abi," 0xC8129A44979263D578A8BD52d403d6537820e969
",{ account:" 0xeB2a9E0338616e35B5e844Bd38924C79D99d7346
", balance:"99.98990494"});
console.log(myContract.options.account);//shows the desirable result.

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