Transactions

乙太坊中的 nonce 是什麼?它如何防止雙重支出?

  • October 11, 2020

最近迷上了區塊鏈,開始學習乙太坊。我在乙太坊中遇到了 nonce 的概念。

經過研究,我發現 nonce 有兩個用途。

一種。保持與帳戶相關的交易井然有序。即,如果存在與 txpool 中的某個帳戶相關的 nonce 3 交易並且某些交易將 nonce 4 到達,那麼該交易將不會被探勘,直到並且除非具有 nonce 3 的交易被探勘。

我明白這一點。

但是我有一些我無法找到的問題?

i)nonce 值與地址有關,對嗎?所以兩個地址可以同時擁有相同的隨機數,即地址 A 的賬戶可以擁有最新的隨機數 2,同樣地址 B 的賬戶也可以擁有最新的隨機數 2。

ii) 網路中的所有節點對於網路中可用的所有帳戶是否都具有相同的最新 nonce 值?

也就是說,如果有 3 個賬戶和 2 個礦工,那麼三個賬戶的 nonce 值分別為 1、2、3,那麼兩個礦工將擁有相同的 nonce。

假設:兩個礦工同步

b) 如何使用 nonce 來防止雙花?

乙太坊中的 nonce 是什麼?

如果您參考Github Wiki上的詞彙表,乙太坊中使用了兩種類型的 nonce。

  1. 帳戶隨機數 - 它只是一個帳戶的交易計數

**賬戶隨機數:**每個賬戶中的一個交易計數器。這可以防止重放攻擊,例如發送事務。A 到 B 的 20 個硬幣可以被 B 一遍又一遍地重放,以不斷消耗 A 的餘額。

  1. 工作證明隨機數 - 使用的塊中的隨機值使工作證明得到滿足(取決於當時的難度)。

**Proof of work nonce:**區塊中無意義的值,可以調整以嘗試滿足工作量證明條件

在這裡,您指的是帳戶 nonce,即來自該帳戶的交易計數。

i)Nonce 值與地址有關,對嗎?所以兩個地址可以同時擁有相同的隨機數,即地址 A 的賬戶可以擁有最新的隨機數 2,同樣地址 B 的賬戶也可以擁有最新的隨機數 2。

是的,如上所述,它是交易計數,因此它與帳戶有關。由於它是一個遞增的數字,因此兩個帳戶可以同時具有相同的 nonce。

ii) 網路中的所有節點對於網路中可用的所有帳戶是否都具有相同的最新 nonce 值?

當節點與區塊鏈同步時,它們最終會同步。由於一個節點接受最長的有效鏈,因此在交易被探勘的那一刻,所有節點都沒有更新為最新的 nonce 值,這是沒有問題的。同步後,它們將為帳戶具有相同的 nonce 值。(很明顯,因為在區塊鏈中所有節點都應該具有相同的塊數據。所以在一定時間後,您可以非常確定交易已被確認,因此是 nonce 值)

b)nonce 是如何用來防止雙花的?

避免雙重支出意味著停止兩次使用相同的金額。如果 nonce 設置為相同,則只會探勘其中一項交易,並且大多數情況下可能是 gas 價格較高的交易,但不會發生雙花,因為在任一交易結束時都只會發生一筆交易案子。

nonce 避免的另一個技巧是使用更高的 gas 價格來讓稍後發送的交易在來自同一賬戶的較早交易之前被探勘。

考慮這樣一種情況,A 向 B 發送一筆 X ETH 的交易作為付款,而 A 的賬戶中只有 X ETH。一旦交易被發送以進行探勘,A 可以將另一筆 X ETH 的交易以更高的 gas 價格發送到他的另一個賬戶,通過在待處理的交易隊列中獲得更高的優先級,讓第一筆交易稍後被探勘。但由於乙太坊考慮了 nonce,這是不允許的,因為後面交易的 nonce 高於前一個。

你也可以參考這個問題

引用自:https://ethereum.stackexchange.com/questions/27432