Go-Ethereum

交易如何知道如何根據創世塊表現?

  • April 2, 2022

假設我是一名礦工,並且我在主網上的創世塊具有配置 X。一個交易進來讓我開採。我的乙太坊客戶端如何確認交易符合我的創世區塊中設定的所有標準?

我的理解是,交易發送者的創世塊和礦工的創世塊必須相同,才能驗證交易。我如何僅從交易中判斷發送者的創世塊是什麼?對整個協議的技術解釋將非常好。

首先,您不探勘交易,而是探勘交易塊。

我相信從您的問題來看,對三個不同的概念存在混淆:

  1. 網路行為:在創世塊中初始化。
  2. 創建一個新區塊(通過工作證明、權威證明、堆棧證明)通常簡稱為挖礦。目前的乙太坊工作證明在此處描述https://github.com/ethereum/wiki/wiki/Ethash
  3. 關於接受(或不接受)通過網路廣播的新探勘塊的共識算法。儘管不是每個節點都在挖礦,但每個節點都參與共識。

創世塊定義了初始化網路本身的規則。例如看

https://github.com/ethereum/go-ethereum/wiki/Private-network

我們看到如下參數:

  • GasLimit(塊中使用的最大氣體量)
  • 難度(難以開採以強制執行或多或少恆定的新區塊開採期)

以下是 geth 客戶端解析和了解這些參數的方式: https ://github.com/ethereum/go-ethereum/blob/master/params/config.go

sender 和 miner 的創世塊本身不需要相同,只要交易有效,地址有足夠的 ether,nonce 比上一個傳出交易多一個,chainId 匹配,並且有足夠的 gas分配執行。

除非交易符合一個創世塊的規則而不是另一個,否則它將起作用。交易本身不引用創世區塊。使用 chainId 和 nonce 的原因是明確阻止此類情況在重放攻擊中被惡意使用。但是,如果您能夠協調使所有這些變數首先匹配,那麼您就不是攻擊者並且一無所獲。

另外,請注意,如果發送者和礦工有不同的創世塊,它們將完全位於不同的區塊鏈上。礦工將根據其已知狀態檢查發送者是否有足夠的餘額,而不是根據發送者的已知狀態。如果它們恰好匹配,此類交易將是有效的。

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