Raw-Transaction
了解序列化的未簽名原始交易
我目前正在學習 RLP(ethereum-under-the-hood-part-ii,wiki-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
從這裡,我得到了一些問題:
- 第一個字節
0xe6
or230
是乾什麼用的?它是如何計算的?- 為什麼 ChainId 是
0x1c
or28
?鑑於此列表,它不明白。
部分回答。
為什麼 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