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