以太坊PHP离线交易签名生成,以太坊web3.sendRawTransaction离线签名交易
工作中需要复现短地址攻击和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包来进行配置。按照上面的步骤来就可以成功.
以太坊PHP离线交易签名生成,以太坊web3.sendRawTransaction离线签名交易相关推荐
- 北京大学肖臻老师《区块链技术与应用》公开课笔记:以太坊原理(一):以太坊概述、账户、状态树、交易树和收据树
1.ETH-以太坊概述 比特币和以太坊是两种最主要的加密货币,比特币被称为区块链1.0,以太坊被称为区块链2.0 以太坊在系统设计上针对比特币运行过程中出现的问题进行了改进,比如: 出块时间,比特币的 ...
- 以太坊原理分析(一)以太坊工作(交易)原理
简介 不管你们知不知道以太坊(Ethereum blockchain)是什么,但是你们大概都听说过以太坊.最近在新闻里出现过很多次,包括一些专业杂志的封面,但是如果你们对以太坊到底是什么没有一个基本的 ...
- 以太坊教程:入门学习开发以太坊dapp
一.区块链 1. 分布式去中心化 比特币设计的初衷就是要避免依赖中心化的机构,没有发行机构,也不可能操纵发行数量.既然没有中心化的信用机构,在电子货币运行的过程中,也势必需要一种机制来认可运行在区块链 ...
- 以太坊智能合约开发-《精通以太坊智能合约开发》学习总结实践
文章目录 一.初探以太访智能合约 1. remix小demo 2. 写智能合约用的编程语言 二.以太坊核心概念 1. 交易/事务( Transaction ) 2. 区块 3. 共识协议:工作量证明( ...
- 张家口以太坊智能合约开发实战pdf_以太坊的再次腾飞,你看得懂么?
最近以太坊涨势明显,主要原因来源于一个平台对他的推广.那么,我们就来了解一下,这个平台是怎么回事儿.对以太坊的生态,会有什么样的帮助. ------------------------ FORSAGE ...
- 以太坊代币事件监控_以太坊程序员的常见误解
最近,我偶然读到了一篇题为<程序员关于时区的误解>的文章,让我爆笑不已.这篇文章让我想到了程序员在其它方面的误解,如人名和时间,于是我开始寻找有没有关于以太坊的.奈何寻觅无果,我只得尽自己 ...
- 以太坊开发攻略五:以太坊的编程接口web3.js API的使用上:转账
以太坊开发攻略一:准备篇上:各种相关工具安装和环境配置 以太坊开发攻略二:准备篇下:以太坊的编译.安装 以太坊开发攻略三:以太坊私有链的搭建(基于ethash共识挖矿) 以太坊开发攻略四:以太坊私有链 ...
- 以太坊同步节点_如何同步以太坊节点而不会犯我的错误
以太坊同步节点 by Zack 由Zack 如何同步以太坊节点而不会犯我的错误 (How to sync an Ethereum node without making the mistakes I ...
- java和以太坊交互_java类库web3j开发以太坊智能合约快速入门
web3j简介 web3j是一个轻量级.高度模块化.响应式.类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成. 可以通过它进行以太坊 ...
最新文章
- 小鹏,该兑现PPT了
- Head First JSP---随笔九(Web应用安全)
- Boost:fork守护程序的测试程序
- currentdate mysql_Mysql】Mysql中CURRENT_TIMESTAMP,CURRENT_DATE,CURRENT_TIME,now(),sysdate()各项值的区别...
- .net 数据存储 mysql_asp.net实现存储和读取数据库图片
- 淘宝海报字体素材模板,让你的海报字体活起来!
- 车仪表台上的装饰_给车“纹身”贴这些的注意,有人挨罚啦!扣不扣分?!看这里...
- C语言之extern关键字探究
- 一起谈.NET技术,Silverlight动态加载DLL
- Eclipse启动莫名报错处理
- Mac的反编译工具一:otool (objdump工具的OSX对应工具)。
- Java 基础入门训练
- 【luogu P3802】小魔女帕琪(概率期望)
- 汇编语言期末复习总结
- WTL 自绘控件库 (CQsRadioBox)
- /专访/对话堵俊平:最好的开源生态模型,是亚马逊的原始森林
- 删掉nd array数组中的所有零元素
- 【数据结构】二叉树的节点总个数、叶子节点个数、第K层节点个数、二叉树的深度
- 按Enter键起到Tab键的效果
- LibreOJ10082. 「一本通 3.3 例 1」Word Rings【二分+SPFA】