首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在经典上重放交易?

如何在经典上重放交易?
EN

Ethereum用户
提问于 2016-10-22 01:06:58
回答 1查看 1.5K关注 0票数 6

我一直期待着分裂和出售我的等,并已成功地分裂与测试事务重放的经典,但主要交易没有重播24小时,我想强制重播。我有两个区块链可用。

我尝试过在ETH上使用web3.eth.getTransaction(hash)的输出,并尝试用ethereumjs-tx在经典上签名和未签名来重新创建它,但没有成功。

我还没有见过在geth中获取事务的原始十六进制来通过web3.eth.sendRawTransaction注入事务的方法

我的替代方案是执行与ETH相同的事务,但在ETC上执行。

EN

回答 1

Ethereum用户

发布于 2018-07-11 07:44:35

假设我们有这样的tx:https://etherscan.io/tx/0x1f3f3ced1fde1cbc638b3e1ba2b12d890157977208442e8686d03fc4d332225c

  1. 获取相同的输入原始数据并在不更改chaindId的情况下重新提交:让我们获取原始的tx数据:

https://etherscan.io/getRawTx?tx=0x1f3f3ced1fde1cbc638b3e1ba2b12d890157977208442e8686d03fc4d332225c

所以我们得到:

0xf8708352d1d685028fa6ae0083015f909465f4dc1a4aef2842c1ae61dfa3db7a69f25b7aff8802e45e9ccc5e1af28026a0ba87b88da31453501f9738e35d6c4f416524f92ea215d6f07b3df5f4216a41f8a0578c288d369a6f9ee073e25e745888f9099e54b604411bce1b456a6dcf3937af

现在,让我们尝试将其发送到POA.network链cURL:

代码语言:javascript
复制
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

代码语言:javascript
复制
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 '.'

-

代码语言:javascript
复制
{
  "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

代码语言:javascript
复制
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节点。

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/9504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档