本文作者為賴彥廷,於區塊鏈解決方案服務商 Pelith 沛理科技擔任專案經理,本系列文章並不會談到太深的技術鑽研,而是以深入淺出的方式,讓每一個想要了解區塊鏈技術的讀者,都可以在讀完後說出:原來如此!
要了解以太幣(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模型
然而,比特幣是採用了另外一種,叫作 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」的欄位中,但比特幣這個額外備註的欄位並無法被解釋為程式碼,故在此便只能單純作為交易的註記。
結論
- 以太坊採用 Account Model 架構;比特幣則是採用 UTXO 架構。
- 以太坊同一個地址 (帳戶) 發送出的交易必有先後順序之分(Nonce);比特幣則是類似錢堆的架構。
- 以太坊可以在「Input Data」欄位輸入程式碼,部署或操作智慧合約;比特幣則只能在「OP_RETURN DATA」欄位單純做備註。
?相關報導?
以太坊創辦人 Vitalik 在台北分享「哈伯格稅法」與以太坊域名應用
以太坊(Ethereum)區塊鏈在「隱私、匿名功能」上,矛盾的現在與未來
《BlockTempo動區動趨》LINE官方號開通囉~立即加入獲得第一手區塊鏈、加密貨幣新聞報導!