以太坊賬戶vs比特幣UTXO,誰能為你的交易保駕護航?

作者:devopsguy

來源:hackernoon

編譯:陳一晚風

眾所周知,比特幣和以太坊在很多方面都有很多不同之處。例如在追蹤用戶擁有多少代幣方面,比特幣和以太坊就是通過兩種完全不同的方式來進行。比特幣使用基于未花費交易輸出UTXO(Unspent Transaction Outputs)的模型,而以太坊則采用基于賬戶的方法,

比特幣:未花費交易輸出UTXO

比特幣交易主要由幾個部分組成,之前運用到UTXO的只有兩點:

1、交易輸入,即我們將要花費的代幣;

2、交易輸出,即誰將收到我們的代幣。

一筆交易必須至少有一個輸入和至少一個輸出,也就是一筆交易的輸出成為另一筆交易的輸入,通過這種方式,代幣的歷史才可以追溯到它被開采的區塊。

要理解這個系統是如何工作的一個很好的類比是,想象我們正在用現金購買產品,50美元的鈔票。付款時,你可能會遇到以下情況之一:

1、產品售價10美元

你可以選擇用一張10美元的鈔票來支付,這樣一來,這個交易就只有一個輸入(10美元的鈔票)和一個輸出(收銀員收到10美元的鈔票)。

2、產品售價30美元

你仍然可以選擇付款,但這次需要兩張不同的鈔票(10美元和20美元),在這種情況下,交易有多個輸入(10美元和20美元的鈔票)和一個輸出(收銀員收到30美元鈔票),

3、產品售價45美元

你可以選擇用50美元的鈔票付款,這樣收銀員就會退給你5美元,這種情況相當于一個輸入(50美元鈔票)和多個輸出(收銀員45美元,返還5美元),

4、產品售價55美元

你支付10美元和50美元,即60美元。收銀員退給你5美元。這種情況相當于多個輸入(10美元和50美元的鈔票)和多個輸出(收銀員55美元,返還5美元),

正如你所看到的,你給收銀員的賬單(以及你收到的賬單)將在未來用于其他付款。同樣,比特幣交易的輸出成為未來交易的輸入。在它們被使用之前,它們是未花費的,因此被稱為未花費交易輸出(UTXO),

如果你想知道你擁有多少現金,那么就需要將你錢包中所有紙幣和硬幣的價值相加。而在比特幣的情況下,錢包會跟蹤與用戶密鑰相關聯的UTXO。這樣他們就知道用戶擁有多少代幣。

以太坊:賬戶模型

理解以太坊基于賬戶模型的一個很好的類比是假設一個銀行賬戶,客戶的賬戶中有一定數量的資金,如果客戶A向客戶B轉賬5美元,假設客戶A至少有5美元,則客戶A的賬戶將借記5美元,客戶B的賬戶將貸記5美元。簡而言之,這就是以太坊賬戶的工作方式。

此外,還有兩種類型的帳戶:

外部擁有賬戶(EOA):它們由用戶通過私鑰控制。

合約賬戶:這些賬戶由智能合約代碼控制,由于它們不受私鑰控制, 因此無法發起交易,發送到智能合約的交易可能會導致該合約調用其他合約的函數,

所有帳戶都有以下字段:

1、余額:賬戶所擁有的ETH余額;

2、Nonce : 賬戶產生的確認交易數量。

3、存儲:永久數據存儲,僅供智能合約使用(對EOA不適用);

4、代碼:僅用于智能合約(EOA沒有任何代碼)。

以太坊中的所有交易都是由EOA發起的,EOA和合約賬戶都可以接收和發送ETH:

1、如果收款賬戶是EOA,其余額會增加;

2、如果接收賬戶是合約賬戶,其代碼將被執行,反過來,這個智能合約可以調用另一個智能合約。例如,將ETH發送到另一個智能合約,或者將ETH發送到EOA等等,

合約僅在帳戶調用時運行,它們可以從EOA或其他智能合約中調用,但最終,一切都源于由EOA創建的交易。

雙花攻擊

當同一代幣被多次使用時,就會發生雙花攻擊。如果你有一張10美元的鈔票,你不能花兩次,因為一旦你付了錢并把它交給別人,那么它就不會在你的控制之下。但是,對于數字貨幣該如何確保相同的代幣不會在不同的交易中使用呢?

比特幣如何解決雙花攻擊

當在交易中使用代幣時,該代幣就會從UTXO集中刪除,類似地,當新交易出現時,它們的輸出就被添加到UTXO集合中。因此,避免雙花攻擊就像檢查您嘗試花費的代幣是否是UTXO集和的一部分一樣簡單。如果是,你可以放心地使用它。否則,它就已經被花掉了。并且每個完整節點維護所有UTXO的列表,這使得驗證變得非常快速。

重放攻擊

由于您無法在以太坊中跟蹤單個代幣,因此雙花攻擊的概念在以太坊中并不適用,而在以太坊中最需要防止的則是重放攻擊(Replay Attacks)。

以太坊如何防止重放攻擊

想象一下,假設你想買一輛車,你向經銷商發送了10個ETH后收到了汽車,經銷商收到了10個ETH,你們都很高興。而在這筆有效的交易中,如果經銷商一遍又一遍地向以太坊網路發送相同的交易,以此來有效地耗盡您的賬戶,那么這就是所謂的重放攻擊,

以太坊使用Nonce的概念來解決這個問題。在密碼學中,Nonce是一個在密碼通信中只能使用一次的數字 。在以太坊中,Nonce是一個與賬戶相關聯的數字,代表從該賬戶發送的交易數量,如果是合約賬戶,則代表合約已創建(未調用)的合約數量,

Nonce是如何工作的

在交易進行時,你的交易將包含一個Nonce值,使其獨一無二。如果攻擊者嘗試重放相同的交易,節點將看到從你的地址到具有該Nonce的經銷商地址的該數量的ETH的交易已經被處理,然后該交易就被視為重復交易。

需要注意的是,攻擊者只能嘗試創建完全相同數量的交易 ,如果攻擊者要更改數量,這將使簽名無效,使其成為節點將拒絕的無效交易,另外,無論你將ETH發送到哪個地址,你的下一筆交易都會增加Nonce 。

這種機制不僅可以防止重放攻擊,而且還允許事務按特定順序執行,如果你發送一系列Nonce 為3、4和5的交易,即使先收到Nonce為4和5的交易,它們也會留在內存池中,直到帶有Nonce 3的交易被確認,除非你正在編寫代碼來發送交易,否則不需要擔心這個問題。一切都將由你的錢包處理,

UTXO模型&賬戶模型優缺點

UTXO模型

優點:

1、可以很容易地檢查輸出是否已經被花費,從而避免雙花攻擊;

2、交易可以輕松地并行處理,從而帶來更好的可擴展性;

3、隱私性好,用戶每次交易都可以使用一個新地址。

缺點:

1、新用戶很難掌握;

2、更難實施智能合約,因為UTXO不跟蹤任何狀態,

帳戶模型

優點:

1、易于實施智能合約;

2、交易更加緊密,節省空間。

缺點:

1、實現并發交易很棘手,因為存在受不同交易影響的全局狀態;

2、隱私度低,交易都綁定在一個帳戶中;

3、依靠Nonces來防止重放攻擊。

結論

從上述內容中我們可以看出,UTXO模式使用起來會很復雜,而以太坊的賬戶模型相較簡單。但實際上,UTXO的模型會讓整個賬本非常“輕”,因為UTXO的數據不會因為賬戶的增加而膨脹,也不會因為每筆交易的更新而更新所有人的余額資訊。這在很大程度上減少了比特幣網路需要更新和保存的數據。而以太坊網路就因為保存了大量無用數據使得空間內存不夠,從而造成交易速度緩慢,

但是在對交易進行驗證時,以太坊賬戶模型效率卻顯得更高。因為UTXO模型中,如果交易中存在多個輸入,則每個輸入都需要分別簽名,每次查詢需要也要遍歷相關的UTXO,效率相對會低一些。而以太坊賬戶模型因為不用對過去的UTXO進行簽名,所以可以從任何一個時間點開始更新區塊鏈狀態,讓輕節點的驗證更簡單可行,

那么在對比完比特幣UTXO模式與以太坊賬戶模型后,你更看好哪一個呢?

0 条回复 A文章作者 M管理員
    暫無討論,說說你的看法吧