@@ -26,43 +26,24 @@ class Block {
26
26
}
27
27
static fromBuffer ( buffer ) {
28
28
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 ) ;
44
30
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 ( ) ;
51
37
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
- } ;
57
38
const readTransaction = ( ) => {
58
39
const tx = transaction_1 . Transaction . fromBuffer (
59
- buffer . slice ( offset ) ,
40
+ bufferReader . buffer . slice ( bufferReader . offset ) ,
60
41
true ,
61
42
) ;
62
- offset += tx . byteLength ( ) ;
43
+ bufferReader . offset += tx . byteLength ( ) ;
63
44
return tx ;
64
45
} ;
65
- const nTransactions = readVarInt ( ) ;
46
+ const nTransactions = bufferReader . readVarInt ( ) ;
66
47
block . transactions = [ ] ;
67
48
for ( let i = 0 ; i < nTransactions ; ++ i ) {
68
49
const tx = readTransaction ( ) ;
@@ -154,32 +135,20 @@ class Block {
154
135
// TODO: buffer, offset compatibility
155
136
toBuffer ( headersOnly ) {
156
137
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 ) ;
176
145
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 ;
179
148
this . transactions . forEach ( tx => {
180
149
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 ;
183
152
} ) ;
184
153
return buffer ;
185
154
}
0 commit comments