我试着用恩弗拉在Ropsten网络上发送一些测试以太,但是我不能进行交易。代码在本地与testrpc一起工作,但不适用于英弗拉。
var Web3 = require('web3');
var util = require('ethereumjs-util');
var tx = require('ethereumjs-tx');
var lightwallet = require('eth-lightwallet');
var txutils = lightwallet.txutils;
var web3 = new Web3(
new Web3.providers.HttpProvider('https://ropsten.infura.io/<token>')
//new Web3.providers.HttpProvider('http://localhost:8545')
);
var address = '0xadaD904F70ec8323fEd1734614d78D2145222322';
var address2 = '0x5858599f16c46fa33238313A412eE9f0491EBef3';
var key = '<KEY>';
var key2 = '<KEY>';
var amount = web3.toWei(1, "ether");
var balance = web3.eth.getBalance(address);
var value = web3.fromWei(balance, 'ether');
console.log(value);
function sendRaw(rawTx) {
var privateKey = new Buffer(key, 'hex');
var transaction = new tx(rawTx);
transaction.sign(privateKey);
var serializedTx = transaction.serialize().toString('hex');
web3.eth.sendRawTransaction(
'0x' + serializedTx, function(err, result) {
if(err) {
console.log('error');
console.log(err);
} else {
console.log('success');
console.log(result);
}
});
}
var rawTx = {
nonce: web3.toHex(web3.eth.getTransactionCount(address)),
gasLimit: web3.toHex(21000),
to: address2,
from:address,
value: web3.toHex(web3.toBigNumber(amount))
}
sendRaw(rawTx);正如您注意到的,我正在地址上记录乙醚,但是无论我发送多少次事务,它都保持eq到1th。
你知道我做错了什么吗?
发布于 2017-02-17 23:01:59
这看起来基本上是正确的,但是有几个可选的tx参数可能会产生不同的结果:
// EIP 155 chainId - mainnet: 1, ropsten: 3
chainId: 3,
gasPrice: "0x9184e72a000", // 10000000000000此外,nonce可能需要转换为十六进制。getTransactionCount方法返回一个javascript编号,因此您可能需要首先将其转换为十六进制。
我还建议在发送之前记录参数。如果您正在连接到一个不同步的节点,那么您的当前状态可能是错误的,这也会导致这些事务失败。
我看你拿到了一个tx,这让我觉得一个错误的现在可能阻止了你。https://testnet.etherscan.io/tx/0x17c6e7e318a181cc729207ebe2bc203b4df71657b845aaf551892f20de42bc62
发布于 2017-02-17 22:58:32
发布于 2019-03-05 20:57:59
我们经历了一个类似的问题,一个因弗拉节点不同步。由于负载均衡器后面有多个因弗拉节点,我们的getTransactionCount击中了一个不同步的节点,并返回了一个不正确的数字。只是想标记它,因为这样可以节省您在未来情况下进行调试的时间。
https://ethereum.stackexchange.com/questions/12054
复制相似问题