我一直期待着分裂和出售我的等,并已成功地分裂与测试事务重放的经典,但主要交易没有重播24小时,我想强制重播。我有两个区块链可用。
我尝试过在ETH上使用web3.eth.getTransaction(hash)的输出,并尝试用ethereumjs-tx在经典上签名和未签名来重新创建它,但没有成功。
我还没有见过在geth中获取事务的原始十六进制来通过web3.eth.sendRawTransaction注入事务的方法
我的替代方案是执行与ETH相同的事务,但在ETC上执行。
发布于 2018-07-11 07:44:35
假设我们有这样的tx:https://etherscan.io/tx/0x1f3f3ced1fde1cbc638b3e1ba2b12d890157977208442e8686d03fc4d332225c
https://etherscan.io/getRawTx?tx=0x1f3f3ced1fde1cbc638b3e1ba2b12d890157977208442e8686d03fc4d332225c
所以我们得到:
0xf8708352d1d685028fa6ae0083015f909465f4dc1a4aef2842c1ae61dfa3db7a69f25b7aff8802e45e9ccc5e1af28026a0ba87b88da31453501f9738e35d6c4f416524f92ea215d6f07b3df5f4216a41f8a0578c288d369a6f9ee073e25e745888f9099e54b604411bce1b456a6dcf3937af
现在,让我们尝试将其发送到POA.network链cURL:
curl --data '{"method":"eth_sendRawTransaction","params":["0xf8708352d1d685028fa6ae0083015f909465f4dc1a4aef2842c1ae61dfa3db7a69f25b7aff8802e45e9ccc5e1af28026a0ba87b88da31453501f9738e35d6c4f416524f92ea215d6f07b3df5f4216a41f8a0578c288d369a6f9ee073e25e745888f9099e54b604411bce1b456a6dcf3937af"],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST https://poa.infura.io响应:{"jsonrpc":"2.0","error":{"code":-32010,"message":"Invalid chain id."},"id":1},这是因为POA.network链受EIP-155保护,不允许我们发送.
因此,让我们使用相同的tx并更改chainId值来重新提交tx。如果我们问rpc服务器getTransactionByHash
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x1f3f3ced1fde1cbc638b3e1ba2b12d890157977208442e8686d03fc4d332225c"],"id":1}' -H "Content-Type: application/json" -X POST https://mainnet.infura.io | jq '.'-
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"blockHash": "0x35af3597e1496acef6eb972c68243709ffc214c4b4a6f160581c4e670f67dd94",
"blockNumber": "0x5ab068",
"from": "0x829bd824b016326a401d083b33d092293333a830",
"gas": "0x15f90",
"gasPrice": "0x28fa6ae00",
"hash": "0x1f3f3ced1fde1cbc638b3e1ba2b12d890157977208442e8686d03fc4d332225c",
"input": "0x",
"nonce": "0x52d1d6",
"to": "0x65f4dc1a4aef2842c1ae61dfa3db7a69f25b7aff",
"transactionIndex": "0x52",
"value": "0x2e45e9ccc5e1af2",
"v": "0x26",
"r": "0xba87b88da31453501f9738e35d6c4f416524f92ea215d6f07b3df5f4216a41f8",
"s": "0x578c288d369a6f9ee073e25e745888f9099e54b604411bce1b456a6dcf3937af"
}
}现在,让我们用ethereumjs-tx将相同的tx重新发送到ETC链: POA.network有chainId = 99。
const EthereumTx = require('ethereumjs-tx')
const chain = 99;
const txParams = {
nonce: '0x52d1d6',
gasPrice: '0x28fa6ae00',
gasLimit: '0x15f90',
to: '0x65f4dc1a4aef2842c1ae61dfa3db7a69f25b7aff',
value: '0x2e45e9ccc5e1af2',
data: '0x',
chainId: chain,
r: "0xba87b88da31453501f9738e35d6c4f416524f92ea215d6f07b3df5f4216a41f8",
s: "0x578c288d369a6f9ee073e25e745888f9099e54b604411bce1b456a6dcf3937af",
v: chain * 2 + 35
}
const tx = new EthereumTx(txParams)
const serializedTx = tx.serialize()
console.log('0x' + serializedTx.toString('hex'))请注意我们如何重新计算v值: v: chain *2+ 35或您可以这样做: v: chain *2+ 36 (参考:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md)
现在让我们运行它:node txGenerator.js和我们
0xf8718352d1d685028fa6ae0083015f909465f4dc1a4aef2842c1ae61dfa3db7a69f25b7aff8802e45e9ccc5e1af28081e9a0ba87b88da31453501f9738e35d6c4f416524f92ea215d6f07b3df5f4216a41f8a0578c288d369a6f9ee073e25e745888f9099e54b604411bce1b456a6dcf3937af
因此,让我们将其发送到rpc节点。
curl --data '{"method":"eth_sendRawTransaction","params":["0xf8718352d1d685028fa6ae0083015f909465f4dc1a4aef2842c1ae61dfa3db7a69f25b7aff8802e45e9ccc5e1af28081e9a0ba87b88da31453501f9738e35d6c4f416524f92ea215d6f07b3df5f4216a41f8a0578c288d369a6f9ee073e25e745888f9099e54b604411bce1b456a6dcf3937af"],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST https://poa.infura.io答复:{"jsonrpc":"2.0","error":{"code":-32010,"message":"Insufficient funds. The account you tried to send transaction from does not have enough funds. Required 209385510302513906 and got: 0."},"id":1}
所以我们成功地改变了V值,但是这个账户没有资金去做一个tx
类似的方式可以用于任何其他的链ID。
https://ethereum.stackexchange.com/questions/9504
复制相似问题