要了解以太币(ETH)或是比特币(BTC)是如何运作,从一笔交易来切入是很好的著力点,因为几乎所有的概念与原理都是围绕著交易来发生的。
本篇文章将从一笔普通的 ETH 交易与一笔 BTC 交易来检视架构上的异同,藉以了解各自之运作原理。
下方是一笔在 Etherscan( 以太坊的区块浏览器,任何在链上发生的交易都可以在 Etherscan 一览无遗 )上随机撷取的交易,我们先来解析一下这笔交易内容包含的资讯。
以太坊上的一笔普通交易
第1点“交易杂凑值”,即这笔交易的 id,是唯一识别值,如我们的身分证字号一般。这个值是由这笔交易的所有资讯杂凑而成。
第2点“所在区块”,为这笔交易位在的区块,亦即“区块高度”。后方灰标籤中的 “13 Block Confirmations”代表在这个区块之后已经接了 12 个区块(包含本区块共有 13 个区块已经确认)。因为有可能有分叉的问题,故通常在一笔交易出块后,要等到 5 个以上的区块确认,才较能确保本交易是在最长的区块链之上,相关资讯不会再被更动。
第3点“时间戳记”,为矿工打包本笔交易上链的时间,时间以 UTC(世界协调时间)表示,和台湾有 8 个小时的时差。
第4点“来自地址”,表示本笔交易是从哪个地址送出。
第5点“接收地址”,表示本笔交易的金额将被哪个地址接收。
第6点“交易金额”,表示本笔交易中所转移了多少颗以太币,后方会以检视时的时价来换算。
第7点“手续费”,在以太坊中进行交易,必须经由矿工运算打包后上链,故需要支付给矿工手续费。一笔一般的以太坊转帐交易会使用 21,000 的 Gas(燃料),可以理解成点对点网路要花多少资源去做这笔交易的运算。
[注]以太坊交易手续费公式:
Tx Fee(7手续费)= Gas Used(7-2燃料用量) * Gas Price(7-3单位燃料价格)
用比喻来说明的话,可以理解成台北开车至台中的油钱:“油钱 = 使用公升数 * 每公升油价”
而 Gas Limit 比较像是出发前你要加多少公升的油,如果加的油不足你旅程需要的油,那这趟旅程(这笔交易)就会失败。
发送交易时,部分钱包的 Gas Price & Gas Limit 是可以自己设定的,Gas Limit 基本上只要大过交易所需的用量,不要交易失败即可。比较需要注意的是,在以太坊如果因为 Gas Limit 设不够等原因交易失败,那麽手续费还是会被收取,不会退回。(因为矿工还是花资源下去帮你算了)
因为交易的 Gas Used 是矿工实际在运算时才会被决定的,故 Gas Price 成为决定要支付给矿工多少手续费的决定因子。原则上手续费越高会越优先被矿工打包上链,交易的等待时间会越短。由于以太坊上交易量会随时间改变,欲知道当前即时状况以决定手续费要设多少,可以到 ETH gas station 查看。
第8点“Nonce”,目前比较没有一个比较统一的翻译,我个人觉得可以理解为序次,前方的值 “22954”表示这个“来自地址”截至本交易为止,已发送了 22954 笔交易。
后方的值 “210” 则表示这笔交易是在这个“所在区块”中的第 210 笔交易。
第9点“额外注记”,则是可以写上额外的文字作为这笔交易的注记,也会牵涉到以太坊与比特币最大的不同处之一:智慧合约,我们会在后续详述。
介绍完了以太坊的一笔交易,接下来我们要先来谈谈以太坊和比特币的架构,才能来介绍比特币的交易。因为比特币的交易长相比较特别一些,不像以太坊这麽直觉。 以太坊的架构类似银行帐户,有资料库在记录每个帐号和帐号的馀额,透过交易来更新。如下图所示,地址 14c5f8ba 在一笔交易中发送了 10 个 eth 给 地址 bb75a980 ,于是在交易过后双方的以太币数量便被更新了。 然而,比特币是採用了另外一种,叫作 UTXO(Unspent Transaction Output,Transaction 简称 Tx)的架构,如下图所示: 我们可以想像比特币是一坨一坨的钱堆,我们的地址比较像是能够操控这些钱堆的钥匙。可以把钱堆凑在一起做交易;也可以把一坨钱堆拆开来交易。 每一笔交易可以有多个 input(钱堆),交易后也可以变成一或多个新的钱堆。我们直接透过 Blockstream Bitcoin Explorer( 比特币的区块浏览器,任何在链上发生的交易都可以在这一览无遗 )上的随机一笔比特币交易来一探究竟: 可以发现,这笔交易动用了三个钱堆,推测可能是这三个钱堆的所有者想要发送四颗比特币给别人,但他想动用的前两个钱堆总额不足四颗,所以便再动用了第三个钱堆,凑足四颗发送给别人。而多出的比特币则会变为“Unspent (未花费)”的钱堆回到所有者身上。 打开 Details 查看交易的细节后便可以发现,右下方的 #1 钱堆中有标注 Unspent 的字样,这笔钱堆在交易后会返回到发送交易的地址中。 此外,我们可以发现 input 的三笔钱堆,总额是 6.1446498 BTC;而 output 的两笔钱堆,总额却只有 6.1442275 BTC。中间有 0.0004223 BTC 的差额,原因是比特币交易需要付手续费给帮忙验证打包上链的矿工,故这 0.0004223 BTC 便是这笔交易手续费的金额。 UTXO 的架构,其实是解决了 Account model 同一个地址(帐户)无法同时进行两笔交易的问题(Account model 一定会有先后顺序,即 Nonce)。以太币为了避免双重花费(Double Spending:同一笔钱被花了两次),会以 Nonce 来标注每一笔交易的先后次序,若同时发送多笔交易,一但前面有一笔交易卡住,则后面的交易也都会跟著塞住。 比特币 UTXO 的架构可以同时进行多笔交易,一个地址可以“同时”将多个钱堆发送给多个不同的地址,在同一个区块,甚至同一笔交易中完成。可以把多个钱堆同时进行交易,算是让交易变得更加有效率。(虽然比特币出一个块依然要10分钟⋯⋯) 至此,我们对于比特币和以太币的架构都有初步的认识了。接著便要来介绍以太币和比特币最核心的差异:智慧合约。我们再来重新检视一下比特币和以太币的交易。 还记得在以太坊交易的第9点中,有个额外注记的部分,我们在前面跳过了。其实这个部分不只可以作为额外注记,要在以太坊上发佈智慧合约、操作智慧合约也都是要透过这个栏位来输入程式码,被矿工执行。 其实比特币也可以在交易中做额外注记,会标注在“OP_RETURN”的栏位中,但比特币这个额外备注的栏位并无法被解释为程式码,故在此便只能单纯作为交易的注记。比特币的UTXO模型
比特币的一笔普通交易
结论