88 "math/big"
99
1010 libcommon "github.com/ledgerwatch/erigon-lib/common"
11+ rlp2 "github.com/ledgerwatch/erigon-lib/rlp"
1112 "github.com/ledgerwatch/erigon/rlp"
1213)
1314
@@ -65,18 +66,31 @@ func (s *BlobSidecar) EncodeRLP(w io.Writer) error {
6566 if err := s .BlobTxSidecar .EncodeRLP (w ); err != nil {
6667 return err
6768 }
68- if err := rlp .Encode (w , s .BlockNumber ); err != nil {
69+
70+ if err := rlp .EncodeBigInt (s .BlockNumber , w , b [:]); err != nil {
71+ return err
72+ }
73+
74+ b [0 ] = 128 + 32
75+ if _ , err := w .Write (b [:1 ]); err != nil {
76+ return err
77+ }
78+ if _ , err := w .Write (s .BlockHash .Bytes ()); err != nil {
6979 return err
7080 }
71- if err := rlp .Encode (w , s .BlockHash ); err != nil {
81+
82+ if err := rlp .EncodeInt (s .TxIndex , w , b [:]); err != nil {
7283 return err
7384 }
74- if err := rlp .Encode (w , s .TxIndex ); err != nil {
85+
86+ b [0 ] = 128 + 32
87+ if _ , err := w .Write (b [:1 ]); err != nil {
7588 return err
7689 }
77- if err := rlp . Encode ( w , s .TxHash ); err != nil {
90+ if _ , err := w . Write ( s .TxHash . Bytes () ); err != nil {
7891 return err
7992 }
93+
8094 return nil
8195}
8296
@@ -89,14 +103,20 @@ func (sc *BlobSidecar) DecodeRLP(s *rlp.Stream) error {
89103 if err := sc .BlobTxSidecar .DecodeRLP (s ); err != nil {
90104 return err
91105 }
106+
92107 var b []byte
93- if b , err = s .Bytes (); err != nil {
108+
109+ if b , err = s .Uint256Bytes (); err != nil {
94110 return err
95111 }
96112 sc .BlockNumber = new (big.Int ).SetBytes (b )
113+
97114 if b , err = s .Bytes (); err != nil {
98115 return err
99116 }
117+ if len (b ) != 32 {
118+ return fmt .Errorf ("invalid block hash length: %d" , len (b ))
119+ }
100120 sc .BlockHash = libcommon .BytesToHash (b )
101121
102122 if sc .TxIndex , err = s .Uint (); err != nil {
@@ -106,6 +126,9 @@ func (sc *BlobSidecar) DecodeRLP(s *rlp.Stream) error {
106126 if b , err = s .Bytes (); err != nil {
107127 return err
108128 }
129+ if len (b ) != 32 {
130+ return fmt .Errorf ("invalid tx hash length: %d" , len (b ))
131+ }
109132 sc .TxHash = libcommon .BytesToHash (b )
110133
111134 if err = s .ListEnd (); err != nil {
@@ -116,10 +139,17 @@ func (sc *BlobSidecar) DecodeRLP(s *rlp.Stream) error {
116139
117140func (s * BlobSidecar ) payloadSize () int {
118141 size := s .BlobTxSidecar .payloadSize ()
142+ size += rlp2 .ListPrefixLen (size ) // size of payload size encoding
143+
144+ size ++
119145 size += rlp .BigIntLenExcludingHead (s .BlockNumber )
120- size += 32
121- size += 8
122- size += 32
146+
147+ size += rlp2 .StringLen (s .BlockHash .Bytes ())
148+
149+ size ++
150+ size += rlp .IntLenExcludingHead (s .TxIndex )
151+
152+ size += rlp2 .StringLen (s .TxHash .Bytes ())
123153 return size
124154}
125155
0 commit comments