Я недавно перенес свой смарт-контракт с Ropsten (изменив только узел Infura) на Kovan, и первое, с чем я столкнулся, была ошибка:
Ошибка при развертывании транзакции Ошибка: Возвращенная ошибка:Недостаточно средств.На счете, с которого вы пытались отправить транзакцию, недостаточно средств.Требуется 5596500000000000000 и получено: 4747259100000000000.
Средства, которые у меня были, были 4,7 ETH, таким образом, больше, чем требовалась транзакция.Таким образом, я получил больше эфира от Kovan Faucet и снова протолкнул транзакцию, и оказалось, что ему нужен только 0,0160552 Ether.Я немного запутался, откуда взялось это искусственное требование, так как и gasPrice, и gasLimit намного меньше.Эта проблема в настоящее время частично решена благодаря наличию баланса выше, чем 5,5 ETH, но я хотел бы узнать причину, по которой она должна быть устранена, прежде чем переходить в основную сеть.Мой код в NodeJS для развертывания транзакции выглядит так:
function deploying_transaction(event, callback){
console.log("Data raw", event.dataContractCallRaw)
web3.eth.getGasPrice(function(err,gasPriceWei){
if (err){
console.log("Error by getting Gas price", err)
callback(err)
}else {
console.log("gasPrice", gasPriceWei)
web3.eth.getBlock("latest", function(err,block){
if(err){
console.log("Error by getting gas limit", err)
callback(err)
} else {
console.log("Block Gas Limit", block.gasLimit)
web3.eth.getTransactionCount(event.addressSender,function(err,result){
if (!err){
var rawTx = {
nonce: web3.utils.toHex(result),
to: event.addressContract,
gasPrice: web3.utils.toHex(web3.utils.toWei('700','gwei')), // gasPriceWei in the future we can use gasPrice wei, but it is fucked up for now
gasLimit: web3.utils.toHex(block.gasLimit - 5000),
value: 0,
data: event.dataContractCallRaw
}
console.log("rawTx", rawTx)
web3.eth.accounts.signTransaction(rawTx, event.privateKeySigner).then(signed => {
web3.eth.sendSignedTransaction(signed.rawTransaction, function(err, response, receipt){
if(err){
callback(err)
} else {
console.log("Response from network", response)
callback(null,response)
}
})
});
}else{
console.log('Error in getting transaction count ' + JSON.stringify(err));
callback(err)
}
});
}
});
}
})
}