@@ -26,43 +26,24 @@ class Block {
2626 }
2727 static fromBuffer ( buffer ) {
2828 if ( buffer . length < 80 ) throw new Error ( 'Buffer too small (< 80 bytes)' ) ;
29- let offset = 0 ;
30- const readSlice = n => {
31- offset += n ;
32- return buffer . slice ( offset - n , offset ) ;
33- } ;
34- const readUInt32 = ( ) => {
35- const i = buffer . readUInt32LE ( offset ) ;
36- offset += 4 ;
37- return i ;
38- } ;
39- const readInt32 = ( ) => {
40- const i = buffer . readInt32LE ( offset ) ;
41- offset += 4 ;
42- return i ;
43- } ;
29+ const bufferReader = new bufferutils_1 . BufferReader ( buffer ) ;
4430 const block = new Block ( ) ;
45- block . version = readInt32 ( ) ;
46- block . prevHash = readSlice ( 32 ) ;
47- block . merkleRoot = readSlice ( 32 ) ;
48- block . timestamp = readUInt32 ( ) ;
49- block . bits = readUInt32 ( ) ;
50- block . nonce = readUInt32 ( ) ;
31+ block . version = bufferReader . readInt32 ( ) ;
32+ block . prevHash = bufferReader . readSlice ( 32 ) ;
33+ block . merkleRoot = bufferReader . readSlice ( 32 ) ;
34+ block . timestamp = bufferReader . readUInt32 ( ) ;
35+ block . bits = bufferReader . readUInt32 ( ) ;
36+ block . nonce = bufferReader . readUInt32 ( ) ;
5137 if ( buffer . length === 80 ) return block ;
52- const readVarInt = ( ) => {
53- const vi = varuint . decode ( buffer , offset ) ;
54- offset += varuint . decode . bytes ;
55- return vi ;
56- } ;
5738 const readTransaction = ( ) => {
5839 const tx = transaction_1 . Transaction . fromBuffer (
59- buffer . slice ( offset ) ,
40+ bufferReader . buffer . slice ( bufferReader . offset ) ,
6041 true ,
6142 ) ;
62- offset += tx . byteLength ( ) ;
43+ bufferReader . offset += tx . byteLength ( ) ;
6344 return tx ;
6445 } ;
65- const nTransactions = readVarInt ( ) ;
46+ const nTransactions = bufferReader . readVarInt ( ) ;
6647 block . transactions = [ ] ;
6748 for ( let i = 0 ; i < nTransactions ; ++ i ) {
6849 const tx = readTransaction ( ) ;
@@ -154,32 +135,20 @@ class Block {
154135 // TODO: buffer, offset compatibility
155136 toBuffer ( headersOnly ) {
156137 const buffer = Buffer . allocUnsafe ( this . byteLength ( headersOnly ) ) ;
157- let offset = 0 ;
158- const writeSlice = slice => {
159- slice . copy ( buffer , offset ) ;
160- offset += slice . length ;
161- } ;
162- const writeInt32 = i => {
163- buffer . writeInt32LE ( i , offset ) ;
164- offset += 4 ;
165- } ;
166- const writeUInt32 = i => {
167- buffer . writeUInt32LE ( i , offset ) ;
168- offset += 4 ;
169- } ;
170- writeInt32 ( this . version ) ;
171- writeSlice ( this . prevHash ) ;
172- writeSlice ( this . merkleRoot ) ;
173- writeUInt32 ( this . timestamp ) ;
174- writeUInt32 ( this . bits ) ;
175- writeUInt32 ( this . nonce ) ;
138+ const bufferWriter = new bufferutils_1 . BufferWriter ( buffer ) ;
139+ bufferWriter . writeInt32 ( this . version ) ;
140+ bufferWriter . writeSlice ( this . prevHash ) ;
141+ bufferWriter . writeSlice ( this . merkleRoot ) ;
142+ bufferWriter . writeUInt32 ( this . timestamp ) ;
143+ bufferWriter . writeUInt32 ( this . bits ) ;
144+ bufferWriter . writeUInt32 ( this . nonce ) ;
176145 if ( headersOnly || ! this . transactions ) return buffer ;
177- varuint . encode ( this . transactions . length , buffer , offset ) ;
178- offset += varuint . encode . bytes ;
146+ varuint . encode ( this . transactions . length , buffer , bufferWriter . offset ) ;
147+ bufferWriter . offset += varuint . encode . bytes ;
179148 this . transactions . forEach ( tx => {
180149 const txSize = tx . byteLength ( ) ; // TODO: extract from toBuffer?
181- tx . toBuffer ( buffer , offset ) ;
182- offset += txSize ;
150+ tx . toBuffer ( buffer , bufferWriter . offset ) ;
151+ bufferWriter . offset += txSize ;
183152 } ) ;
184153 return buffer ;
185154 }
0 commit comments