写到以太坊 wiithout 元狐狸钱包



我正在尝试在不使用元掩码的情况下将一些数据写入以太坊 Rinkeby 测试网络,但是在调用该方法时,我收到以下错误,但我的参数计数是正确的

未处理的承诺拒绝

警告:未处理的承诺拒绝(拒绝 ID:246(:错误:Solidity 函数的参数数无效

节点代码

var Web3        = require('web3')
var contract    = require("truffle-contract")
var quickBooks    = require('../build/contracts/quickBooks.json')
Web3.providers.HttpProvider.prototype.sendAsync = Web3.providers.HttpProvider.prototype.send;
var provider    = new Web3.providers.HttpProvider("https://rinkeby.infura.io/v3/KEY")
var quickBooksContract = contract(quickBooks);
quickBooksContract.setProvider(provider);

var writeToEthereum = async function(_json){
//console.log(_json)
var instance = await quickBooksContract.at('ADDRESS')
var result = await instance.write.call(_json,_json.txhash,_json.createdt,"1",_json.write_set[0].set,{
from : "ADDRESS"
})
console.log(result);
}

坚固

pragma experimental ABIEncoderV2;
contract quickBooks{
struct Tx{
string txId;
string timeStamp;
string blockHash;
string payLoad;
string json;
}

mapping(string => Tx) private data;
function write(string _json,string _txId,string _timeStamp,string _blockHash,string _payLoad) public returns(bool success){
data[_txId] = Tx(_txId,_timeStamp,_blockHash,_payLoad,_json);
return true;
}
function read(string _txId)public returns(Tx){
return data[_txId];
} 
}

call合约函数是错误的,你应该在函数名称之后将参数传递给函数。您这样做的方式是传递参数来代替call()选项。

await instance.write(<params here>).call();

您可以在文档中阅读有关此内容的更多信息:https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html

这可能与 https://github.com/ethereum/web3.js/issues/1043 有关

查看那里的讨论。

如果您使用的是松露,请尝试:

伙计们,删除您的构建文件夹,然后运行命令。

npm run truffle migrate --reset --compile-all

我发现在本地将松露运行到文件夹时效果最好,而不是 比全球,由于测试版和不同版本更新 最近很快。如果您更喜欢全局方法,请尝试

truffle migrate --reset --compile-all

如果这没有帮助,请确保提供正确的数据类型。可能是您提供的是一个字符串而不是一个整数。

如果这也没有帮助,我将需要有关您正在使用的 web3 版本以及您是否正在使用松露以及它是哪个版本的更多信息。

相关内容

最新更新