簡單的乙太坊交易與比特幣交易的大小(字節)是多少?
Alice 擁有一個空的乙太坊錢包。收到 1 ETH 然後將 1 ETH 發送給 Bob。
Alice 擁有一個空的比特幣錢包。收到 1 個 BTC,然後將 1 個 BTC 發送給 Bob。
在這兩種情況下,以字節為單位的交易大小(Alice->Bob)是多少?如果乙太坊更低,這就是乙太坊可以比比特幣做更多 tx/sec 的主要原因嗎?
這篇文章包含幾個問題。讓我們一一解決。
在回答問題之前,文章的假設有一個錯誤:它沒有考慮交易費用。如果 Alice 有 1 個 Ether 或 1 個 BTC,Bob 將無法收到全部金額(也許在 BTC 零交易費用的時代他可以,但現在肯定不行),因為需要扣除交易費用來自愛麗絲的賬戶。
簡單乙太坊交易的大小
從乙太坊黃皮書,我們知道一筆交易的邏輯結構如下。
----------------------------- | Nonce | Up to 32 bytes | ----------------------------- | GasPrice | Up to 32 bytes | ----------------------------- | GasLimit | Up to 32 bytes | ----------------------------- | To | 20 bytes addr | ----------------------------- | Value | Up to 32 bytes | ----------------------------- | Data | 0 - unlimited | ----------------------------- | V | 1 (usually) | ----------------------------- | R | 32 bytes | ----------------------------- | S | 32 bytes | -----------------------------
筆記:
- 這只是邏輯結構。實際數據以RLP格式編碼,因此由於添加了長度前綴而更長。
- V 欄位總是在EIP-155之前 1 個字節。可以肯定地說,每個主要客戶都實施了 EIP-155。對於主網、測試網,即使使用 EIP-155,該欄位也保持為 1 個字節。對於具有較大值的“鏈 ID”的專用網路,該欄位可以更長。看到這個問題。
我們可以使用荒謬的數據來給出理論上的“最小”大小,例如通過給出零 gas 價格。但是,這並不是很有意義,因為這些天無法開採此類交易。相反,我們將此交易用作分析的樣本,因為它實際上是簡單的 Alice-to-Bob 支付。
從 web3 控制台,執行以下命令(取決於客戶端,可能需要使用 ’eth.getRawTransaction’ 代替)
eth.getTransaction(‘‘0x14a298c1eea89f42285948b7d51eeac2876ca7406c9784b9b90dd3591d156d64’).raw
這應該給
“0xf86b80850ba43b7400825208947917bc33eea648809c285607579c9919fb864f8f8703baf82d03a0008025a0067940651530790861714b2e8fd8b080361d1ada048189000c07a6684896fdebdec45acc679c04ac4ac697afb3
這是109個字節。如果我們解析數據
f86b length 80 nonce (0: this is the minimum an account can have) 85 0ba43b7400 gas price 82 5208 gas limit (this is fixed for simple payments) 94 7917bc33eea648809c285607579c9919fb864f8f (address, always 20 bytes) 87 03baf82d03a000 (value, in theory this can be shrunken to zero) 80 (data, already zero length) 25 (V, one byte) a0 067940651530790861714b2e8fd8b080361d1ada048189000c07a66848afde46 (R) a0 69b041db7c29dbcc6becf42017ca7ac086b12bd53ec8ee494596f790fb6a0a69 (S)
從這個範例中,沒有太多要縮短的內容了。較小的值可以將值欄位減少到一個字節。較低的 gas 價格可能會進一步縮小一兩個字節。因此,看起來現實的“最小”事務大小應該大於 100 字節(109 - 7 -2)。
簡單比特幣交易的規模
比特幣交易的情況更為複雜(此處解釋的結構)。假設“經典”交易,即沒有 SegregatedWitness:
- 比特幣交易總是引用它之前的 UTXO(未使用的交易)雜湊。簡單的假設“Alice 收到 1 BTC”並不意味著有多少 UTXO 加起來等於 1 BTC。它的範圍可以從 1 到任何數字。
- 以類似的方式,假設“Alice 支付 Bob 1 BTC”並不意味著交易輸出的數量。可能只有 1 個輸出,這意味著任何剩餘餘額都流向了礦工,或者任意數量的輸出,Alice 的剩餘餘額分為多個“分支”(輸出)。
- 當我們考慮 scriptSig 和 scriptPubKey(如前所述,假設沒有 SegWit)時,事情變得更加複雜。Alice 的 UTXO 可能包含一個簡單的 P2PKH 腳本、多重簽名或 P2SH,或者,在極端情況下,一個愚蠢的“任何人都可以花錢”的腳本(參見此處的範例)。交易輸出也是如此,將上述兩點中可能組合的數量相乘,就會出現太多的可能性。
粗略估計,這篇很棒的部落格文章中描述的可能是一個很好的範例事務,字節數為 247。
這就是乙太坊可以做更多交易的主要原因
這個問題假設乙太坊的塊大小限制是由字節長度決定的。這不是真的。塊大小實際上是由塊的氣體限制決定的。有關更多詳細資訊,請參閱此問題。所以這個問題的簡單答案是“不”。
讓我們快速回顧一下乙太坊網路上平均交易規模的信封估計。
簡化假設:
- 如果被事務佔用,則大部分塊大小
- 大多數交易都是簡單的交易,只是轉移乙太幣(我知道這個假設是有問題的……)
結石:
- 一小時內的平均交易次數 ~ 20,000
- 平均每小時 # 塊 = 261
- => 平均每塊 20,000/261 ~ 76 筆交易
- => 15kb/76 ~ 0.2kb
比特幣的平均交易大小約為 0.6kb(是乙太坊的 3 倍)
所以是的,乙太坊交易平均規模較小,但它並不能單獨解釋卓越的處理能力。比特幣比特幣和乙太坊的一個主要區別在於,乙太坊本身沒有塊大小限制,而是有一個gas限制,即它只能執行最大數量的計算。因此,根據交易的規模和計算密集型交易的大小,一個乙太坊區塊可以容納更多或更少的交易。另一個考慮因素是,對於乙太坊來說,目標區塊時間約為 17 秒,而比特幣則為 10 分鐘。
資料來源: