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