55namespace ArkEcosystem \Crypto \Transactions ;
66
77use ArkEcosystem \Crypto \ByteBuffer \ByteBuffer ;
8+ use ArkEcosystem \Crypto \Configuration \Network ;
89use ArkEcosystem \Crypto \Enums \AbiFunction ;
9- use ArkEcosystem \Crypto \Enums \Constants ;
1010use ArkEcosystem \Crypto \Enums \ContractAbiType ;
1111use ArkEcosystem \Crypto \Helpers ;
1212use ArkEcosystem \Crypto \Transactions \Types \AbstractTransaction ;
@@ -42,7 +42,7 @@ public function __construct(string $serialized)
4242 ? ByteBuffer::fromHex ($ serialized )
4343 : ByteBuffer::fromBinary ($ serialized );
4444
45- $ this ->encodedRlp = '0x ' .mb_substr ( $ this ->buffer ->toString ('hex ' ), 2 );
45+ $ this ->encodedRlp = '0x ' .$ this ->buffer ->toString ('hex ' );
4646 }
4747
4848 /**
@@ -62,23 +62,24 @@ public function deserialize(): AbstractTransaction
6262
6363 $ data = [];
6464
65- $ data ['network ' ] = $ this ->parseNumber ($ decodedRlp [0 ]);
66- $ data ['nonce ' ] = $ this ->parseBigNumber ($ decodedRlp [1 ]);
67- $ data ['gasPrice ' ] = $ this ->parseNumber ($ decodedRlp [3 ]);
68- $ data ['gas ' ] = $ this ->parseNumber ($ decodedRlp [4 ]);
69- $ data ['to ' ] = $ this ->parseAddress ($ decodedRlp [5 ]);
70- $ data ['value ' ] = $ this ->parseBigNumber ($ decodedRlp [6 ]);
71- $ data ['data ' ] = $ this ->parseHex ($ decodedRlp [7 ]);
72-
73- if (count ($ decodedRlp ) === 12 ) {
74- $ data ['v ' ] = $ this ->parseNumber ($ decodedRlp [9 ]) + 27 ;
75- $ data ['r ' ] = $ this ->parseHex ($ decodedRlp [10 ]);
76- $ data ['s ' ] = $ this ->parseHex ($ decodedRlp [11 ]);
65+ $ data ['nonce ' ] = $ this ->parseBigNumber ($ decodedRlp [0 ]);
66+ $ data ['gasPrice ' ] = $ this ->parseNumber ($ decodedRlp [1 ]);
67+ $ data ['gasLimit ' ] = $ this ->parseNumber ($ decodedRlp [2 ]);
68+ $ data ['to ' ] = $ this ->parseAddress ($ decodedRlp [3 ]);
69+ $ data ['value ' ] = $ this ->parseBigNumber ($ decodedRlp [4 ]);
70+ $ data ['data ' ] = $ this ->parseHex ($ decodedRlp [5 ]);
71+
72+ if (count ($ decodedRlp ) >= 9 ) {
73+ $ data ['v ' ] = $ this ->parseNumber ($ decodedRlp [6 ]) - (Network::get ()->chainId () * 2 + 35 );
74+ $ data ['r ' ] = $ this ->parseHex ($ decodedRlp [7 ]);
75+ $ data ['s ' ] = $ this ->parseHex ($ decodedRlp [8 ]);
7776 }
7877
78+ // TODO: second signature handling
79+
7980 $ transaction = $ this ->guessTransactionFromData ($ data );
8081
81- $ serializedHex = sprintf ( ' %s%s ' , Constants:: EIP_1559_PREFIX , mb_substr ($ this ->encodedRlp , 2 ) );
82+ $ serializedHex = mb_substr ($ this ->encodedRlp , 2 );
8283
8384 $ transaction ->serialized = new Buffer (hex2bin ($ serializedHex ));
8485
0 commit comments