要了解以太幣(ETH)或是比特幣(BTC)是如何運作,從一筆交易來切入是很好的著力點,因為幾乎所有的概念與原理都是圍繞著交易來發(fā)生的。
本篇文章將從一筆普通的ETH 交易與一筆BTC 交易來檢視架構上的異同,借以了解各自之運作原理。
下方是一筆在 Etherscan(以太坊的區(qū)塊瀏覽器,任何在鏈上發(fā)生的交易都可以在Etherscan一覽無遺)上隨機擷取的交易,我們先來解析一下這筆交易內容包含的資訊。
以太坊上的一筆普通交易
第1點「交易雜湊值」,即這筆交易的id,是唯一識別值,如我們的身分證字號一般。這個值是由這筆交易的所有資訊雜湊而成。
第2點「所在區(qū)塊」,為這筆交易位在的區(qū)塊,亦即「區(qū)塊高度」。后方灰標簽中的「13 Block Confirmations」代表在這個區(qū)塊之后已經接了12個區(qū)塊(包含本區(qū)塊共有13個區(qū)塊已經確認)。因為有可能有分叉的問題,故通常在一筆交易出塊后,要等到5個以上的區(qū)塊確認,才較能確保本交易是在最長的區(qū)塊鏈之上,相關資訊不會再被更動。
第3點「時間戳記」,為礦工打包本筆交易上鏈的時間,時間以UTC(世界協(xié)調時間)表示,和***有8個小時的時差。
第4點「來自地址」,表示本筆交易是從哪個地址送出。
第5點「接收地址」,表示本筆交易的金額將被哪個地址接收。
第6點「交易金額」,表示本筆交易中所轉移了多少顆以太幣,后方會以檢視時的時價來換算。
第7點「手續(xù)費」,在以太坊中進行交易,必須經由礦工運算打包后上鏈,故需要支付給礦工手續(xù)費。一筆一般的以太坊轉帳交易會使用21,000的Gas(燃料),可以理解成點對點網路要花多少資源去做這筆交易的運算。
[注]以太坊交易手續(xù)費公式:
Tx Fee(7手續(xù)費)= Gas Used(7-2燃料用量) * Gas Price(7-3單位燃料價格)
用比喻來說明的話,可以理解成臺北開車至臺中的油錢:「油錢= 使用公升數(shù)* 每公升油價」
而Gas Limit 比較像是出發(fā)前你要加多少公升的油,如果加的油不足你旅程需要的油,那這趟旅程(這筆交易)就會失敗。
發(fā)送交易時,部分錢包的Gas Price & Gas Limit 是可以自己設定的,Gas Limit 基本上只要大過交易所需的用量,不要交易失敗即可。比較需要注意的是,在以太坊如果因為Gas Limit 設不夠等原因交易失敗,那么手續(xù)費還是會被收取,不會退回。(因為礦工還是花資源下去幫你算了)
因為交易的Gas Used是礦工實際在運算時才會被決定的,故Gas Price成為決定要支付給礦工多少手續(xù)費的決定因子。原則上手續(xù)費越高會越優(yōu)先被礦工打包上鏈,交易的等待時間會越短。由于以太坊上交易量會隨時間改變,欲知道當前即時狀況以決定手續(xù)費要設多少,可以到ETH gas station查看。
第8點「Nonce」,目前比較沒有一個比較統(tǒng)一的翻譯,我個人覺得可以理解為序次,前方的值“22954”表示這個「來自地址」截至本交易為止,已發(fā)送了22954筆交易。
后方的值“210”則表示這筆交易是在這個「所在區(qū)塊」中的第210筆交易。
第9點「額外注記」,則是可以寫上額外的文字作為這筆交易的注記,也會牽涉到以太坊與比特幣最大的不同處之一:智慧合約,我們會在后續(xù)詳述。
介紹完了以太坊的一筆交易,接下來我們要先來談談以太坊和比特幣的架構,才能來介紹比特幣的交易。因為比特幣的交易長相比較特別一些,不像以太坊這么直覺。
以太坊的架構類似銀行帳戶,有資料庫在記錄每個帳號和帳號的余額,透過交易來更新。如下圖所示,地址14c5f8ba在一筆交易中發(fā)送了10個eth給地址bb75a980 ,于是在交易過后雙方的以太幣數(shù)量便被更新了。
比特幣的UTXO模型
然而,比特幣是采用了另外一種,叫作 UTXO(Unspent Transaction Output,Transaction簡稱Tx)的架構,如下圖所示:
我們可以想像比特幣是一坨一坨的錢堆,我們的地址比較像是能夠操控這些錢堆的鑰匙。可以把錢堆湊在一起做交易;也可以把一坨錢堆拆開來交易。
每一筆交易可以有多個input(錢堆),交易后也可以變成一或多個新的錢堆。我們直接透過 Blockstream Bitcoin Explorer(比特幣的區(qū)塊瀏覽器,任何在鏈上發(fā)生的交易都可以在這一覽無遺)上的隨機一筆比特幣交易來一探究竟:
比特幣的一筆普通交易
可以發(fā)現(xiàn),這筆交易動用了三個錢堆,推測可能是這三個錢堆的所有者想要發(fā)送四顆比特幣給別人,但他想動用的前兩個錢堆總額不足四顆,所以便再動用了第三個錢堆,湊足四顆發(fā)送給別人。而多出的比特幣則會變?yōu)椤窾nspent (未花費)」的錢堆回到所有者身上。
打開Details 查看交易的細節(jié)后便可以發(fā)現(xiàn),右下方的#1 錢堆中有標注Unspent 的字樣,這筆錢堆在交易后會返回到發(fā)送交易的地址中。
此外,我們可以發(fā)現(xiàn)input 的三筆錢堆,總額是6.1446498 BTC;而output 的兩筆錢堆,總額卻只有6.1442275 BTC。中間有0.0004223 BTC 的差額,原因是比特幣交易需要付手續(xù)費給幫忙驗證打包上鏈的礦工,故這0.0004223 BTC 便是這筆交易手續(xù)費的金額。
UTXO的架構,其實是解決了Account model同一個地址(帳戶)無法同時進行兩筆交易的問題(Account model一定會有先后順序,即Nonce)。以太幣為了避免雙重花費(Double Spending:同一筆錢被花了兩次),會以Nonce來標注每一筆交易的先后次序,若同時發(fā)送多筆交易,一但前面有一筆交易卡住,則后面的交易也都會跟著塞住。
比特幣UTXO的架構可以同時進行多筆交易,一個地址可以「同時」將多個錢堆發(fā)送給多個不同的地址,在同一個區(qū)塊,甚至同一筆交易中完成??梢园讯鄠€錢堆同時進行交易,算是讓交易變得更加有效率。(雖然比特幣出一個塊依然要10分鐘??)
至此,我們對于比特幣和以太幣的架構都有初步的認識了。接著便要來介紹以太幣和比特幣最核心的差異:智慧合約。我們再來重新檢視一下比特幣和以太幣的交易。
還記得在以太坊交易的第9點中,有個額外注記的部分,我們在前面跳過了。其實這個部分不只可以作為額外注記,要在以太坊上發(fā)布智慧合約、操作智慧合約也都是要透過這個欄位來輸入程式碼,被礦工執(zhí)行。
其實比特幣也可以在交易中做額外注記,會標注在「OP_RETURN」的欄位中,但比特幣這個額外備注的欄位并無法被解釋為程式碼,故在此便只能單純作為交易的注記。
結論
1. 以太坊采用Account Model 架構;比特幣則是采用UTXO 架構。
2. 以太坊同一個地址(帳戶) 發(fā)送出的交易必有先后順序之分(Nonce);比特幣則是類似錢堆的架構。
3. 以太坊可以在「Input Data」欄位輸入程式碼,部署或操作智慧合約;比特幣則只能在「OP_RETURN DATA」欄位單純做備注。
評論
查看更多