A. 一步一步教你使用以太坊钱包
下面开始介绍myetherwallet
记住,这个钱包只支持如下几种
ETH、ETC、和符合ERC20协议的token,
其他 不支持的币不要转进来(转进来会丢失)
浏览器打开网站:
https://www.myetherwallet.com
在页面右上角选择你喜欢的语言,如下图所示
第一步 创建钱包
输入密码(至少9位)
下载keystore文件(这里保存你的公钥和私钥)
保存你的私钥
初次解锁钱包(建议一定要多试下第二步,不要立马就转币进去,否则有可能你没记住密码或者keystore没放好,多试几次可以让你更加熟悉)
一般初次点击解锁之后,页面可能不刷新,直接鼠标往下滚下来就看到你的钱包信息了
第二步 查看钱包信息
当你完成了第一步,钱包就已经建好了。
这一步只是教你平时怎么打开钱包看看里面的余额之类的
你的ETH的余额和交易历史
你的所有代币token的余额和交易历史
第三步 接收和发送ETH及其他token代币
接收ETH和其他的代币token(这个钱包所支持的,点击show all tokens看所有支持的代币)
都用同一个地址即可,不需要任何额外的标记或操作
点击左上角 发送以太币/发送代币,选择keystoreFile,
上传keystore文件,填写密码,解锁账号
3.发送给别人ETH或代币的时候,你就要输入对方对应的ETH地址或代币地址,不要填错,
比如你要发送到你的交易平台,如果发送EOS,这里就要放你交易平台的EOS的充值地址,
而不是放ETH充值地址,当然你还需要在下面这个下拉菜单这里选择一下相应的代币类型,
比如EOS
B. 以太坊转账流程
发起:用户在本地的以太坊钱包软件中选择要发送的交易地址(From)、输入目标地址(To)、金额(Value)、是否部署或调用合(Data)、手续费单价(Gasprice)等,确认发送至以太坊节点节点和钱包可以是同一台
广播:节点收到(或自己发起)交易后,会对交易进行验证。验证:交易的签名、发起账号的余额是否能支付转账余额与手续费、Nonce是否为账号已发出的交易数。验证为合法后,将交易加入节点的交易池中交易池中存储着待打包的交
安装以太坊浏览器钱包插件,创建钱包,获取虚拟以太币,进行转账交易。 实验内容 学习 初识以太坊,发送交易 1.学习《初始以太坊,发送交易》,虚拟以太币交易。
C. 【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刷新一次。
正常情况下,几十秒内就可以获取到区块信息了。
区块确认数=当前区块高度-交易被打包时的区块高度。
D. 怎么把币存到以太坊
在交易平台点击以太坊提币把币存到以太坊。
如何将比特网交易平台里的以太坊转到以太钱包。
首先你需要有以太钱包帐号和地址,那你在交易平台上个人资产或者个人账户里面有币种显示,点击以太坊提币,把你钱包的地址填入进去,即可。
E. ETH转账的2种方式的对比
web3j支持使用以太坊钱包文件(推荐)和以太网客户端管理命令来发起一笔交易。当你创建了一个拥有以太币的账户后,你可以通过以下两种交易机制,和以太坊网络(私网/公网)交易:
这里主要讲一下 线下签名交易(Offline transaction signing) 。线下签名交易允许你使用web3j提供的钱包账户发起交易,你完全控制自己的私钥,交易发送到网络上的其它节点并广播。
线下签名交易使用 RawTransaction 对象来完成,一共有如下几步:
1、通过私钥或密码+钱包文件(keystore)来加载转账凭证Credentials
2、获取发起转账账户的nonce 值,也就是第几笔交易
3、创建 RawTransaction交易 对象
4、签名 RawTransaction 对象,也就是对交易做签名
5、发送交易( RawTransaction 对象)给节点处理。
6、获取交易哈希值TxHash
以太坊实战-再谈nonce使用陷阱: https://blog.csdn.net/wo541075754/article/details/79054937
此外,还有一种简单的转账方式
这种方式,不需要自己管理nonce。
这2种方式都是离线交易,先组装交易,然后发送到链上。
参考:
https://docs.web3j.io/getting_started.html#transactions
https://www.jianshu.com/p/6650d2a3aea9
F. 【ETH钱包开发04】web3j转账ERC-20 Token
在上一篇文章中讲解了ETH转账,这一篇讲一下ERC-20 Token转账。
【ETH钱包开发03】web3j转账ETH
1、直接用web3j的API
2、java/Android调用合约的 transfer 方法
不管用哪种方式来转账,你都需要先写一个solidity智能合约文件来创建ERC-20 Token,然后部署合约,最后才是通过客户端来调用。
注意:erc-20 token转账和eth转账的区别如下:
1、erc-20 token创建交易对象用的是这个方法 createTransaction
2、erc-20 token需要构建 Function ,它其实对应的就是erc-20 token合约中的那些方法。它的第一个参数就是ERC20中那几个方法的名称,第二个参数的话就是对应合约方法中的参数,第三个参数是和第二个参数对应的,按照我那样就行了。转账的话就是 transfer ,我们从合约的 transfer 可以看到第一个参数是收款地址,第二个参数是金额,所以 Function 这里对应起来就好。
这种方法不需要使用web3j封装的方法,而是直接调用solidity合约的方法。
步骤
1、web3j加载一个已经部署的合约
2、验证合约是否加载成功 isValid
3、如何加载合约成功,则调用合约的 transfer 方法
注意:
1、这里的 TokenERC20 是根据solidity智能合约生成的对应的Java类,用于java/Android和智能合约交互的,如果你对这里不太清楚,不妨看看我之前的一篇文章。
以太坊Web3j命令行生成Java版本的智能合约
2、如果加载合约失败,可能的一个原因是合约对应的Java类中的 BINARY 的值不对,这个值是你部署合约成功之后的bytecode,你最好检查对比一下。
我发送一笔交易,可以通过这个地址查询
https://rinkeby.etherscan.io/tx/
G. 楸兼睜閲岀殑浠ュお鍧婃庝箞鏍蜂氦
楸兼睜閲岀殑浠ュお鍧婃庝箞浜ゆ槗
濡傛灉浣犲湪楸兼睜閲岀殑浠ュお鍧婇挶鍖呴噷鏈変竴瀹氱殑浠ュお甯侊紝浣犲彲浠ュ湪閽卞寘閲岃繘琛屼氦鏄撱
鍏蜂綋姝ラゅ備笅锛
1.鎵撳紑浠ュお鍧婇挶鍖咃紝杩涘叆鈥滀氦鏄撯濋〉闈銆
2.鐐瑰嚮鈥滃彂閫佲濇寜閽锛屽~鍐欎氦鏄撶殑鐩鏍囧湴鍧鍜岃浆璐﹂噾棰濈瓑淇℃伅銆
3.纭璁や氦鏄撲俊鎭鏃犺鍚庯紝鐐瑰嚮鈥滃彂閫佷氦鏄撯濇寜閽銆
4.绯荤粺浼氭彁绀轰綘杈撳叆閽卞寘瀵嗙爜杩涜岀‘璁わ紝杈撳叆瀵嗙爜鍚庣‘璁や氦鏄撱
5.浜ゆ槗鍙戦佹垚鍔熷悗锛屼綘鍙浠ュ湪鈥滀氦鏄撹板綍鈥濋〉闈㈡煡鐪嬩氦鏄撶殑鐘舵佸拰浜ゆ槗璇︽儏銆
闇瑕佹敞鎰忕殑鏄锛屽湪杩涜屼互澶鍧婁氦鏄撴椂锛岄渶瑕佹敮浠樹竴瀹氱殑鐕冩皵璐癸紙GasFee锛夛紝杩欐槸鐢ㄦ潵鏀浠樹氦鏄撴墜缁璐圭殑銆傜噧姘旇垂鐨勫ぇ灏忓彇鍐充簬浜ゆ槗鐨勫嶆潅绋嬪害鍜岀綉缁滄嫢鍫垫儏鍐电瓑鍥犵礌锛岀噧姘旇垂瓒婇珮锛屼氦鏄撶殑澶勭悊閫熷害瓒婂揩銆傚洜姝わ紝濡傛灉浣犲笇鏈涗氦鏄撹兘澶熷敖蹇寰楀埌澶勭悊锛屽彲浠ラ傚綋鎻愰珮鐕冩皵璐圭殑閲戦濄