我可以通过 sendSignedTransaction 将原始交易发送到 BSC 测试网上的合约地址,它成功了,但这只是一个标准交易;这不是我想要的合同电话。
但是在 BSC 主网上,它总是失败并出现错误:警告!合约执行过程中遇到错误[执行恢复]
请帮我检查下面的代码,然后告诉我哪里有问题,任何评论,回复或猜测欢迎;非常感谢。
对于 testnet,它总是成功,但它是一个标准交易,链接到 image。虽然我想与合同互动,但结果应显示与(至)互动的字段
var minABI = [
{
"constant": true,
"inputs": [
{
"name": "_claimer",
"type": "uint256"
},
{
"name": "_amount",
"type": "uint256"
},
{
"name": "_sig",
"type": "bytes"
}
],
"name": "claim",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"type": "function"
}
];
var web3 = new Web3('https://data-seed-prebsc-1-s1.binance.org:8545'); // testnet
//var web3 = new Web3('https://bsc-dataseed.binance.org:443'); // mainnet
var _from = '0x2151...';
var _to = '0x7f617...';
var _sign = '0x5eddd...';
var PRIVATE_KEY = 'da65f...';
var contract = new web3.eth.Contract(minABI, _to, {from: _from});
var _nonce = await web3.eth.getTransactionCount(_from, 'latest');
var _signEncoded = contract.methods.claim(_nonce, '17390000000000000000', _sign).encodeABI();
var esGas = await web3.eth.estimateGas({
"from" : _from,
"nonce" : _nonce,
"to" : _to,
"data" : _signEncoded
});
var sentValue = gasPrice * esGas;
var transaction = {
'to': _to,
'value': sentValue,
'gas': esGas,
'nonce': _nonce,
'data': _signEncoded,
};
var signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);
var tx = await web3.eth.sendSignedTransaction(signedTx.rawTransaction);
对于 mainet,如果我在web3.eth.estimateGas中使用_signEncoded它会返回错误:执行恢复:无效签名,我必须使用_sign发送交易,但它仍然总是失败并出现错误警告!合约执行过程中遇到的错误 [执行恢复] 链接到图像
var esGas = await web3.eth.estimateGas({
"from" : _from,
"nonce" : _nonce,
"to" : _to,
"data" : _sign
});