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

JavaScript012

以太坊web3.sendRawTransaction离线签名交易,第1张

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

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

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

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

4.遇到的坑,百度出来的步骤是有问题的或者过时了,当时是参考的这篇文章, https://www.freebuf.com/articles/blockchain-articles/199903.html

,在控制台通过eth.sendRawTransaction发送签名好的交易,我遇到了这个错误 **sendRawTransactioninvalid sender**

简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念,web3.js中提供了以太坊地址和iban地址之间的转换方法。

iban这个概念源于传统的银行系统,其英文全称为 International Bank Account Number ,即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:

iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban

中包含以下信息:

以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。

direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊地址 00c5496aee77c1ba1f0854206a26dda82a81d6d8 转换为direct方案的BBAN账号,就得到 XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS 。

可以使用web3.js中的 web3.eth.Iban.fromEthereumAddress()

方法来执行这一转换:

basic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案不兼容IBAN。

indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:

例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:

前面的 XE 表示国别码, 81 为校验和,后面的16个字符就是indrect编码的BBAN,其中:

如前所述,使用 web3.eth.Iban.fromEthereumAddress() 方法,可以将一个以太坊地址转换为direct编码方案的iban账号。与之对应的,可以使用 web3.eth.Iban.toAddress 方法,将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:

iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用web3.js中的 web3.eth.Iban.isValid()

来进行执行校验。例如:

原文: http://blog.hubwiz.com/2018/06/03/ethereum-iban/

可以加密货币。web3js是以太坊提供的一个Javascript库,批量创建钱包用web3js的原因是可以加密货币。web3js可以查看网络状态,查看本地账户、查看交易和区块、发送交易、部署智能合约、调用智能合约等。