我试图在不使用 meta掩码的情况下将一些数据写入以太坊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];
}
}
2条答案
按热度按时间t1qtbnec1#
你的
call
合约函数是错误的,你应该在函数名之后传递参数给函数。你这样做的方式是在call()
选项的位置传递参数。await instance.write(<params here>).call();
你可以在docs上阅读更多关于这方面的内容:https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html
lyr7nygr2#
这可能与https://github.com/ethereum/web3.js/issues/1043有关
看看那里的讨论。
如果您正在使用松露,请尝试:
伙计们,删除你的构建文件夹,然后运行命令。
我发现在本地运行truffle比全局运行truffle效果更好,因为测试版和不同版本最近更新得很快
如果这没有帮助,请确保您提供了正确的数据类型。可能是您提供的是字符串而不是int。
如果这没有帮助,我将需要更多的信息,你使用的是什么版本的web3,如果你使用的是truffle,哪个版本是它。