Skip to content

Commit c8fdfae

Browse files
committed
Add BufferReader tests
1 parent 06674b1 commit c8fdfae

File tree

4 files changed

+486
-340
lines changed

4 files changed

+486
-340
lines changed

src/block.js

Lines changed: 21 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

test/buffer_writer.spec.ts

Lines changed: 0 additions & 231 deletions
This file was deleted.

0 commit comments

Comments
 (0)