Transactions
如何編碼空交易欄位?
我想對一個(n 無符號)交易進行 RLP 編碼。交易的某些欄位可以為空/空/零。不過,我想知道它們是如何編碼的。
讓我們假設以下交易欄位:
signer_nonce = 0 gas_price = 0 gas_limit = 21000 destination = nil amount = 0 payload = nil
Nonce、gas 價格、限制和數量可以使用任何 RLP 編碼器輕鬆編碼,並且 的值
0x00
非常好。但是,如果我沒有任何數據或任何收件人地址,如何對空欄位進行編碼?
Eth::Util.bin_to_hex(RLP.encode(nil)) /home/user/.gem/ruby/3.0.0/gems/rlp-0.7.3/lib/rlp/sedes.rb:31:in `infer': Did not find sedes handling type NilClass (TypeError) from /home/user/.gem/ruby/3.0.0/gems/rlp-0.7.3/lib/rlp/encode.rb:51:in `encode' from (irb):14:in `<main>' from /usr/lib/ruby/gems/3.0.0/gems/irb-1.3.6/exe/irb:11:in `<top (required)>' from /bin/irb:23:in `load' from /bin/irb:23:in `<main>'
我無法將地址設置為,
0x00
因為這將是一個有效的地址 afaik。我應該使用空字元串字節0x80
嗎?我如何區分零字節和空字元串0x80
?Eth::Util.bin_to_hex(RLP.encode("")) => "80" Eth::Util.bin_to_hex(RLP.encode(0)) => "80"
如何編碼空交易欄位,例如空數據或無收件人地址?
所有這些欄位都必須提供且不應提供
nil
。使用 RLP 對交易進行編碼時,通常有 2 種不同的類型:256 位數字和字節。因此,如果我們有一個
data
空字節,我們會將其編碼為一個空字節(例如0x
)。在這種情況下,空字元串和空字節是相同的,因為字元串會在 RLP 編碼之前轉換為字節。對於地址,它有點棘手。它被定義為長度為 20 的字節。除非您有創建事務,否則它是一個空字節。
您可以在 Kethereum 儲存庫中找到一個範例:
您可以在第 5 頁開頭的乙太坊黃皮書中找到更正式的定義。
例如,可以在EIP-1559中找到最新格式的應在事務中編碼的所有欄位的列表。