Raw-Transaction

了解序列化的未簽名原始交易

  • July 27, 2019

我目前正在學習 RLP(ethereum-under-the-hood-part-iiwiki-eth-rlp)和乙太坊交易結構,我的目標是創建一個未簽名的原始 tx,然後對其進行簽名。

現在我正在玩一些我認為正在工作的程式碼片段,例如raw_tx_demo,它會產生:

  • RLP 編碼 Tx:0xe6808609184e72a0008303000094b0920c523d582040f2bcb1bd7fb1c7c1ecebdb3480801c8080
  • 發送雜湊:0x3a2fd1a5ea9ffee477f449be53a49398533d2c006a5815023920d1c397298df3

給定乙太坊 tx 結構,下面是我從RLP-Encoded Tx中提取的內容:

0x {e6} {80} {86 09 18 4e 72 a0 00} {83 03 00 00} {94 b0 92 0c 52 3d 58 20 40 f2 bc b1 bd 7f b1 c7 c1 ec eb db 34} {80} {80} {1c} {80} {80}

{e6} - ?: 230
{80} - nonce: 0
gasPrice: 10000000000000
gasLimit: 196608
to: "0xb0920c523d582040f2bcb1bd7fb1c7c1ecebdb34"
{80} - value: 0
{80} - data: 0
{1c} - v: 28
{80} - r: 0
{80} - s: 0 

從這裡,我得到了一些問題:

  • 第一個字節0xe6or230是乾什麼用的?它是如何計算的?
  • 為什麼 ChainId 是0x1cor 28?鑑於此列表,它不明白。

部分回答。

為什麼 ChainId 是 0x1c 或 28 ?鑑於此列表,它不明白。

您指向的連結顯示網路 ID,這與鏈 ID 不同

此外,28不是鏈 ID,而是v價值。有關預期值的詳細資訊,請參閱EIP-155 ,以及有關、和的定義答案。v``v``r``s

字節 0xe6 只是遵循描述序列化 rlp 列表的第三條規則。

tx = new ethTx({});
console.log('RLP-Encoded Tx: 0x' + tx.serialize().toString('hex'))

給出:0x c9 808080808080808080和有效載荷808080808080808080是 9 個字節或 0x09 所以低於 55 個字節,序列化 rlp 列表只是 0xc0 + 0x09 -> 0xc9

在我的範例中,有效負載為 38 字節或 0x26 和 0xc0 + 0x26 -> 0xe6

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