美文网首页
以太坊web3.sendRawTransaction离线签名交易

以太坊web3.sendRawTransaction离线签名交易

作者: 风吹而散 | 来源:发表于2019-12-26 19:50 被阅读0次

工作中需要复现短地址攻击和thedao重入攻击,重入攻击可以直接通过eth.sendTransaction和remix来发送交易,但是短地址攻击由于钱包和remix这些都对input做了长度检测,无法通过这些方式来复现,只能通过发离线签名交易来实现。

1.环境依赖:nodejs , keythereum , ethereumjs-common , ethereumjs-tx 。

npm install  keythereum
npm install ethereumjs-common
npm insall ethereumjs-tx

2.进入Node控制台,获取相应账户私钥。

获得需要发送交易账户的私钥
 var keyth=require('keythereum');
//这里的privateChain1是我的私链路径
 var keyobj=keyth.importFromFile('0x53698724b12fa829619e0742933a886a415a7c61','/home/ch/gopath/src/github.com/ethereum/go-ethereum/build/bin/privateChain1');
var pkey=keyth.recover("1",keyobj)
console.log(pkey.toString('hex'))
Screenshot from 2020-01-03 17-11-19.png

3.签名交易,进入Node,这里注意nonce问题,需要Nonce是实际可执行的nonce,Nonce不对会发送交易失败,关于如何获取input data百度比较多就不详述了。

 const privateKey = Buffer.from(
  '975776452a74921c0fb79fb2febc340a7de9a665f04fe6d2adaaca33d838fdf0',
   'hex',
 )
const Common=require('ethereumjs-common').default
const customCommon = Common.forCustomChain(
  'mainnet',
  {
    name: 'my-network',
    networkId: 5,
    chainId: 5,
  },
  'petersburg',
)

const txParams={ 
  nonce:'0x3b',
  gasPrice:'0x05',
  gasLimit:'0x4ffff',
  from: '0x53698724b12fa829619e0742933a886a415a7c61',
  to:'0x16fe2bf1d3b1ccdbafe5233f281940ccab5448ba',
  value:'0x00',      
data:'0xa9059cbb000000000000000000000000b7990a950b1d0280107485651e7dd130a460365000000000000000000000000000000000000000000000000000000000000001',
 chainId:'5'
  }

const EthereumTx = require('ethereumjs-tx').Transaction
const tx = new EthereumTx(txParams, {common:customCommon})
tx.sign(privateKey)
const serializedTx = tx.serialize()
console.log('0x'+serializedTx.toString('hex'))
Screenshot from 2020-01-03 17-43-36.png

4.遇到的坑,百度出来的步骤是有问题的或者过时了,当时是参考的这篇文章,https://www.freebuf.com/articles/blockchain-articles/199903.html
,在控制台通过eth.sendRawTransaction发送签名好的交易,我遇到了这个错误 ** sendRawTransaction invalid sender **

微信图片_20191226195227.png
这个文章少了一个步骤。出现这个问题的最根本原因是没有设置chainId和networkId,这两个数值需要保证跟你的私链一致,还有Networkid不等于chainId,具体看你配置。百度这个问题根本找不到,通过谷歌Github上很多都说是chainId的问题,其实也包括Networkid,都需要保证一致,如果不设置的话默认是签名到公网交易,到私链上会报上面这个错误。通过参考 https://github.com/ethereumjs/ethereumjs-tx ,官方的定制方法,需要引入ethereumjs-common包来进行配置。按照上面的步骤来就可以成功.

相关文章

  • 以太坊web3.sendRawTransaction离线签名交易

    工作中需要复现短地址攻击和thedao重入攻击,重入攻击可以直接通过eth.sendTransaction和rem...

  • 以太坊交易签名解析源码解读

    上篇文章《以太坊交易签名过程源码解析》从源码角度分析了一个合约调用的的签名过程,签名后的交易发送到以太坊节点后,节...

  • 《精通以太坊》-交易

    原文:Transactions 交易是由外部拥有的账户发起的签名消息,由以太坊网络传输,并记录(挖掘)在以太坊区块...

  • 一个数字引发的探索——ECDSA解析

    FISCO BCOS交易签名算法基于ECDSA原理进行设计,ECDSA也是比特币和以太坊采用的交易签名算法。本文介...

  • 以太坊交易签名

    以太坊的Transcation结构如下: 对交易签名步骤如下: 对交易本身进行rlp编码,再对rlp编码进行kec...

  • 以太坊交易及流转

    以太坊的交易 以太坊的交易最直观解释:从外部账户发送到区块链上的另一个账户的消息和签名的数据包。 包含如下内容: ...

  • 区块链-以太坊转账离线签名

    前两篇文章中,我们讲到如何创建和解锁以太坊钱包.本章我们将讲解转账相关的内容. 为了良好的阅读体验, 请阅读原文 ...

  • 理解以太坊的椭圆曲线签名

    原理 以太坊数字签名和比特币的关系 以太坊数字签名,几乎完全沿用了比特币的数字签名算法ECDSA-secp256k...

  • ETH交易源码

    006 以太坊源码解析 - 交易源码分析 以太坊交易基本流程: 完整流程分为以下几个步骤: 发起交易:指定目标地址...

  • 吐槽君烤仔 | Layer 2恐将割裂以太坊生态,Layer 1

    近来,随着以太坊上 DeFi 生态的活跃,以太坊的交易处理能力捉襟见肘。当前,以太坊的交易费用越来越高,以致于一次...

网友评论

      本文标题:以太坊web3.sendRawTransaction离线签名交易

      本文链接:https://www.haomeiwen.com/subject/domloctx.html