我有一些代码可以与Ropsten上的现有智能合约进行交互。我过去多次运行它,没有问题。
我将发布完整的代码以及尝试对代码进行一些更改时遇到的两个错误。
var Tx = require("ethereumjs-tx");
const Web3 = require("web3");
const web3 = new Web3(
"https://ropsten.infura.io/v3/d55489f8ea264a1484c293b05ed7eb85"
);
const abi = [...];
const contractAddress = "0x15E1ff7d97CB0D7C054D19bCF579e3147FC9009b";
const myAccount = "0x59f568176e21EF86017EfED3660625F4397A2ecE";
const privateKey1 = new Buffer(
"__PrivateKey__",
"hex"
);
hashValue = "newly updated value";
const contract = new web3.eth.Contract(abi, contractAddress, {
from: myAccount
});
web3.eth.getTransactionCount(myAccount, (err, txCount) => {
//Smart contract data
const data = contract.methods.setHashValue(hashValue).encodeABI();
// Build the transaction
const txObject = {
nonce: web3.utils.toHex(txCount),
gasLimit: web3.utils.toHex(1000000),
gasPrice: 100000,
data: data,
from: myAccount,
to: contractAddress
};
// Sign the transaction
const tx = new Tx(txObject);
tx.sign(privateKey1);
const serializedTx = tx.serialize();
// Broadcast the transaction
web3.eth
.sendSignedTransaction("0x" + serializedTx.toString("hex"))
.on("receipt", console.log);
});
如果我部署此代码,它将创建一个无限期挂起的事务。
如果我再次运行它,将得到Returned error: replacement transaction underpriced
。
如果我像这样nonce: web3.utils.toHex(txCount + 1)
那样更改要添加到现时的代码,则会返回错误消息,表明它是已知事务(挂起的事务)。
非常令人沮丧的是,几天前这段代码运行良好!
我想知道我是否可能偶然更改了Web3模块...版本更改有什么问题。还是Ropsten有问题?昨晚它没有显示任何阻止或交易。
两个待处理的交易是
0xc57316782bb34608b16c7f5ebd1cfb4404a0c8f1b0d5b3e6db6a2f973c527bc3
0xe0d4c513c03c3dba5e853ac0511ee6cf06be6728ba0e054b703cdc49086aa5f7
谢谢!
答案 0 :(得分:0)
我用待处理的随机数手动替换了随机数字段,并给了交易20000000000汽油价格。这取代了挂起的事务。突然,原始代码又可以正常工作了...