Ⅰ 以太坊转账流程
发起:用户在本地的以太坊钱包软件中选择要发送的交易地址(From)、输入目标地址(To)、金额(Value)、是否部署或调用合(Data)、手续费单价(Gasprice)等,确认发送至以太坊节点节点和钱包可以是同一台
广播:节点收到(或自己发起)交易后,会对交易进行验证。验证:交易的签名、发起账号的余额是否能支付转账余额与手续费、Nonce是否为账号已发出的交易数。验证为合法后,将交易加入节点的交易池中交易池中存储着待打包的交
安装以太坊浏览器钱包插件,创建钱包,获取虚拟以太币,进行转账交易。 实验内容 学习 初识以太坊,发送交易 1.学习《初始以太坊,发送交易》,虚拟以太币交易。
Ⅱ 关于交易确认数的来龙去脉
在使用 imToken 进行转账的时候,如果注意查看交易记录,会看到一个进度条,进度条右边有个如下图所示 “4/12” 字样的数字,并且过几秒钟这个数字会变为 “5/12”,“6/12” ... 一直到 “12/12”。这里显示的就是确认数,“4/12” 表示这笔交易需要 12 个确认,当前已经有了 4 个确认。
在 etherscan 上查看交易的时候,如果注意观察,在 Block Height 这一栏,会显示 xxxx(xxx block confirmations) 的字样,在下图这个例子中,显示的就是 6246347(21325 block confirmations)。这里面的 “21325 block confirmations” 就是说明该交易已经有了 21325 个区块确认,过段时间再看同一个交易,这个确认数会不断增加。
上面我们看到 imToken 和 etherscan 上显示的都有交易的确认数。那么究竟什么是 “确认”,我们该如何理解它呢?
这就和区块链的链式结构有关了,一个极度抽象的区块链的链式结构是下面这个样子的。
当我们提交一个交易,正常情况下,这个交易最终会被矿工放到某个区块中,这个时候,我们可以说,这笔交易获得了 0 个确认。当有另外一个区块链到这笔交易所在区块,也就是把这笔交易所在区块为父区块时,我们就说这笔交易获得了 1 个确认,以此类推。一笔交易获得了多少个确认,就是这笔交易所在区块后面又链接了多少个区块。
那问题又来了,交易被打包到交易里面不就可以了么?为啥还要关注确认数呢?
因为区块链有可能分叉啊!!!
公式很简单:确认数 = 当前区块高度 - 指定交易所在区块高度
有的同学可能直接就知道怎么做了:
有毛病么?
毛病大了
这样去算确认数,和不算没有区别。
正确的做法是怎样的呢?
看到差别了么?
比特币是 6 个确认,以太坊是 12 个确认,EOS 是 15 个确认。
一般来说,发生跨主体资产转移的交易,最好都进行确认数监控。常见的场景是从第三方接收一笔转账。
像通过智能合约批量给用户空投代币这种场景,我看就算了吧,你说呢?
实际做项目的时候,很多同学都不知道怎么去算这个确认数。写下此文,希望能给你带来一些帮助。还有什么不清楚的,欢迎给我留言或加我微信联系。
Ⅲ 【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刷新一次。
正常情况下,几十秒内就可以获取到区块信息了。
区块确认数=当前区块高度-交易被打包时的区块高度。
Ⅳ 以太币转帐速度
两小时至24小时以内。
可根据转账支付的矿工费,快的一分钟能到,慢的也能在几分钟到。一般来说转账BTC,ETH等其它代币到账的时间在两个小时以内,快的情况也大概需要30分钟,所以转账请把握好到账时间。
以太坊已经做到了每秒处理5次交易,如果它超过6,那么它也处于峰值容量。另一方面,Uber平均每秒钟有12次乘车,PayPal几百次,Visa数千次,大型股票交易所成千上万,而在物联网中,讨论的是每秒数十万。
Ⅳ 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
Ⅵ 浠ュお鍧婂備綍鎵归噺杞璐﹀憿
浠ュお鍧婃壒閲忚浆璐︾殑杩囩▼濡備笅锛1.鐢ㄦ埛鎵撳紑姣旂壒娲撅紝鍦ㄥ乏涓婅掑垏鎹㈠埌鈥淓TH 浣撶郴鈥濈偣鍑 鈥滄壒閲忚浆璐︹濄傜敤鎴疯繘鍏ユ搷浣滈〉闈㈠悗锛岄栧厛纭璁よ嚜宸辩敤鏉ヤ粯娆剧殑鐨勫竵绉嶃佸湴鍧銆傜劧鍚庣偣鍑烩滃姞鍙封濇潵娣诲姞鏀舵炬柟淇℃伅銆2.鐢ㄦ埛鍙浠ラ夋嫨鈥滀粠鍓璐存澘鑾峰彇鈥濇垨鑰呪滄墜鍔ㄨ緭鍏モ濇敹娆炬柟淇℃伅銆傚綋鐢ㄦ埛閫夋嫨浠庡壀璐存澘鑾峰彇鏃讹細鐢ㄦ埛闇瑕佹寜鍥哄畾鏍煎紡鎻愬墠澶嶅埗濂界浉鍏冲唴瀹癸紝鍐嶇偣鍑绘ゆ寜閽鎵嶅彲娣诲姞鎴愬姛銆傚傛灉鐢ㄦ埛瑕佸勭悊鐨勫湴鍧杈冨氾紝寤鸿浣跨敤鐢佃剳琛ㄦ牸杞浠惰繘琛屾暣鐞嗭紝鏁寸悊瀹屾垚鍚庯紝鍙閫氳繃寰淇$瓑鍏朵粬杞浠跺皢鍐呭瑰彂閫佸埌鎵嬫満骞跺嶅埗锛屾墦寮鎵归噺杞璐﹂〉闈㈢偣鍑诲姞鍙+锛岄夋嫨浠庡壀璐存澘澶嶅埗锛屽嵆鍙鎵归噺娣诲姞鏀舵句俊鎭銆傚綋鐢ㄦ埛閫夋嫨鎵嬪姩杈撳叆鏃讹細鍙浠ユ墜鍔ㄨ緭鍏ュ湴鍧銆侀噾棰濄備篃鍙浠ラ氳繃鎵鐮併佸湴鍧绨挎坊鍔犵瓑鏂瑰紡娣诲姞鍦板潃銆3.鍦板潃淇℃伅娣诲姞瀹屾垚骞剁‘璁ゆ棤璇鍚庯紝鐐瑰嚮纭璁よ浆璐︼紝鏍稿瑰ソ鐩稿叧淇℃伅鍚庣偣鍑荤‘璁わ紝鍗冲彲鍙戝嚭銆傜瓑寰呭悎绾︾‘璁ゅ悗锛屼究鍙鏌ョ湅鎵鏈夌殑杞璐﹁︽儏銆
鎴戜滑閫氳繃浠ヤ笂鍏充簬浠ュお鍧婂備綍鎵归噺杞璐﹀憿鍐呭逛粙缁嶅悗,鐩镐俊澶у朵細瀵逛互澶鍧婂備綍鎵归噺杞璐﹀憿鏈変竴瀹氱殑浜嗚В,鏇村笇鏈涘彲浠ュ逛綘鏈夋墍甯鍔┿
Ⅶ 楸兼睜閲岀殑浠ュお鍧婃庝箞鏍蜂氦
楸兼睜閲岀殑浠ュお鍧婃庝箞浜ゆ槗
濡傛灉浣犲湪楸兼睜閲岀殑浠ュお鍧婇挶鍖呴噷鏈変竴瀹氱殑浠ュお甯侊紝浣犲彲浠ュ湪閽卞寘閲岃繘琛屼氦鏄撱
鍏蜂綋姝ラゅ備笅锛
1.鎵撳紑浠ュお鍧婇挶鍖咃紝杩涘叆鈥滀氦鏄撯濋〉闈銆
2.鐐瑰嚮鈥滃彂閫佲濇寜閽锛屽~鍐欎氦鏄撶殑鐩鏍囧湴鍧鍜岃浆璐﹂噾棰濈瓑淇℃伅銆
3.纭璁や氦鏄撲俊鎭鏃犺鍚庯紝鐐瑰嚮鈥滃彂閫佷氦鏄撯濇寜閽銆
4.绯荤粺浼氭彁绀轰綘杈撳叆閽卞寘瀵嗙爜杩涜岀‘璁わ紝杈撳叆瀵嗙爜鍚庣‘璁や氦鏄撱
5.浜ゆ槗鍙戦佹垚鍔熷悗锛屼綘鍙浠ュ湪鈥滀氦鏄撹板綍鈥濋〉闈㈡煡鐪嬩氦鏄撶殑鐘舵佸拰浜ゆ槗璇︽儏銆
闇瑕佹敞鎰忕殑鏄锛屽湪杩涜屼互澶鍧婁氦鏄撴椂锛岄渶瑕佹敮浠樹竴瀹氱殑鐕冩皵璐癸紙GasFee锛夛紝杩欐槸鐢ㄦ潵鏀浠樹氦鏄撴墜缁璐圭殑銆傜噧姘旇垂鐨勫ぇ灏忓彇鍐充簬浜ゆ槗鐨勫嶆潅绋嬪害鍜岀綉缁滄嫢鍫垫儏鍐电瓑鍥犵礌锛岀噧姘旇垂瓒婇珮锛屼氦鏄撶殑澶勭悊閫熷害瓒婂揩銆傚洜姝わ紝濡傛灉浣犲笇鏈涗氦鏄撹兘澶熷敖蹇寰楀埌澶勭悊锛屽彲浠ラ傚綋鎻愰珮鐕冩皵璐圭殑閲戦濄
Ⅷ 别人转账给我,结果显示资金冻结了24小时后,等待账户自动恢复,该怎么办
日常生活中的转账和区块链转账有着本质上的不同,这种不同造成了区块链转账状态理解上的复杂。
我们会看到「等待确认」「确认中」「交易失败」「成功」等状态,其中有些属于区块链转账的特有状态。
银行转账
日常生活中的转账往往有两个步骤:支付和清算。
平常我们通过支付宝消费、银行卡转账,都属于「支付」,本质是信息的记录,记下一个债权债务凭证。而这种凭证需要被落实,也就是「清算」,本质是资金的流动。
一个常见的情形:
从我的招行卡往你的工行卡上转账 200 块。
这个过程有两个步骤:
当我成功转给你 200 块,这一步对你和我来说是「支付」,本质是信息流;对招行和工行而言,则是建立债权债务关系,它记了一张欠条:招行欠工行 200 块。
然后是银行们定期在央行清算系统中落实彼此间复杂的债权关系(第一步中的「招行欠工行 200 块」是千丝万缕之一)。这时,就是通过「清算」将信息流变成了真实的资金流。
对我们来说,第一步中转账按钮一确定,你放心我也放心。可实际到这里,只是第一步,往后真正耗时的操作无声无息地隐藏在整个金融基础设施和系统的周期运转中。它们不为常人道,却是我们便利金融生活的基石。
Photo by José Martín Ramírez C on Unsplash
区块链转账
它有支付和清算吗?这个概念其实在这里不存在了。区块链转账将这两步骤合二为一,链上的每一笔转账都记录着真实的资金流动。
区块链作为一个公共账本,公开透明,不可篡改。
也正因此,在它上面的转账有更复杂的状态,这个账本不容有错,必须谨慎记录。
所以我们看到这些状态:「等待确认」「确认中」「交易失败」与「成功」
「等待确认」:等待矿工确认转账信息,打包到区块中;
「确认中」:一个区块确认不够安全,需要多些确认,这样我们就能理解为什么以太坊转账需要 12 个区块确认才算作成功;
「交易失败」:如果你给的矿工费不够,不足以让矿工确认转账信息,就会失败(也可能是其他原因导致);
「成功」:此时,你的转账记录就在区块链账本上,不可篡改,记录可查。