首页>>区块链>>web3->web3怎么提取私钥

web3怎么提取私钥

时间:2023-12-08 本站 点击:0

【ETH钱包开发03】web3j转账ETH

在之前的文章中,讲解了创建、导出、导入钱包。

【ETH钱包开发01】创建、导出钱包

【ETH钱包开发02】导入钱包

本文主要讲解以太坊转账相关的一些知识。交易分为ETH转账和ERC-20 Token转账,本篇先讲一下ETH转账。

1、解锁账户发起交易。钱包keyStore文件保存在geth节点上,用户发起交易需要解锁账户,适用于中心化的交易所。

2、钱包文件离线签名发起交易。钱包keyStore文件保存在本地,用户使用密码+keystore的方式做离线交易签名来发起交易,适用于dapp,比如钱包。

本文主要讲一下第二种方式,也就是钱包离线签名转账的方式。

交易流程

1、通过keystore加载转账所需的凭证Credentials

2、创建一笔交易RawTransaction

3、使用Credentials对象对交易签名

4、发起交易

注意以下几点:

1、Credentials

这里,我是通过获取私钥的方式来加载 Credentials

还有另外一种方式,通过密码+钱包文件keystore方式来加载 Credentials

2、nonce

nonce是指发起交易的账户下的交易笔数,每一个账户nonce都是从0开始,当nonce为0的交易处理完之后,才会处理nonce为1的交易,并依次加1的交易才会被处理。

可以通过 eth_gettransactioncount 获取nonce

3、gasPrice和gasLimit

交易手续费由gasPrice 和gasLimit来决定,实际花费的交易手续费是 gasUsed * gasPrice 。所有这两个值你可以自定义,也可以使用系统参数获取当前两个值

关于 gas ,你可以参考我之前的一篇文章。

以太坊(ETH)GAS详解

gasPrice和gasLimit影响的是转账的速度,如果gas过低,矿工会最后才打包你的交易。在app中,通常给定一个默认值,并且允许用户自己选择手续费。

如果不需要自定义的话,还有一种方式来获取。获取以太坊网络最新一笔交易的 gasPrice ,转账的话, gasLimit 一般设置为21000就可以了。

Web3j还提供另外一种简单的方式来转账以太币,这种方式的好处是不需要管理nonce,不需要设置gasPrice和gasLimit,会自动获取最新一笔交易的gasPrice,gasLimit 为21000(转账一般设置成这个值就够用了)。

这个问题,我想是很多朋友所关心的吧。但是到目前为止,我还没有看到有讲解这方面的博客。

之前问过一些朋友,他们说可以通过区块号、区块哈希来判断,也可以通过Receipt日志来判断。但是经过我的一番尝试,只有 BlockHash 是可行的,在web3j中根据 blocknumber 和 transactionReceipt 都会报空指针异常。

原因大致是这样的:在发起一笔交易之后,会返回 txHash ,然后我们可以根据这个 txHash 去查询这笔交易相关的信息。但是刚发起交易的时候,由于手续费问题或者以太网络拥堵问题,会导致你的这笔交易还没有被矿工打包进区块,因此一开始是查不到的,通常需要几十秒甚至更长的时间才能获取到结果。我目前的解决方案是轮询的去刷 BlockHash ,一开始的时候 BlockHash 的值为0x00000000000,等到打包成功的时候就不再是0了。

这里我使用的是rxjava的方式去轮询刷的,5s刷新一次。

正常情况下,几十秒内就可以获取到区块信息了。

区块确认数=当前区块高度-交易被打包时的区块高度。

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

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

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

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

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

4.遇到的坑,百度出来的步骤是有问题的或者过时了,当时是参考的这篇文章,

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

如何从交易所获取私钥

进入货币圈,买卖代币是不可避免的。交换是大多数人选择的对象。代币通常存储在交易所或钱包中。对于普通投资者来说,代币通常存储在交易所。在这里,Lone Bird简要介绍了存储在交易所中的代币是如何保存或转移的。

以比特币为例;交易平台每天都有巨大的比特币交易活动,用户在平台上拥有数万个比特币。为了保证比特币的安全性,交易所每天都会将比特币存储在主机服务器上,将比特币放入冷库钱包,只在服务器上保存少量比特币,以应对正常的取款请求。还有一件事。如果交易所将用户的比特币用于其他目的,用户将没有硬币可以提取。

为什么把它放在冰冷的钱包里是出于安全考虑。即使电脑被黑客入侵,黑客也无法获得比特币的私钥。私钥不会出现在其他在线终端或网络上;交换将生成大量的私钥。以及保存用户比特币的地址。

那么,交换机是如何执行冷库和取款的呢?首先是私钥的生成和备份,

1)在完全脱机的计算机上生成10000个私钥和对应的地址,使用AES加密私钥,然后删除原私钥。

2)将AES密码保存在属于不同地方的两个人手中。

3)使用加密私钥和明文地址生成QR码加密文件,并扫描一台完全脱机的电脑生成该地址文件的QR码供日常使用。

要将硬币从热钱包转移到冷钱包,每次必须是一个未使用的地址,且每个地址不能重复使用,然后将硬币在线转移到冷钱包,

1)从地址文件中取出对应的地址;

2)根据安全级别,每个地址不超过1000个比特币,每个地址使用一次,不使用。

最后,从冰冷的钱包里取出硬币。取币过程如下:

1)通过二维码将私钥密文扫描到一台完全离线的电脑中;

2)拥有AES密码的人在完全脱机的计算机上解密它,并获得私钥的明文。扫描二维码,将私钥导入另一台计算机,进行交易签名,并通过二维码将签名交易同步到所有网络计算机,并进行广播。

web3js导入私钥

web3js导入私钥:

1、将使用web3提供的函数sendRawTransaction。

2、使用私钥对原始的交易信息进行签名,得到签名后的交易数据。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/web3/18962.html