@node-dlc/wire
Version:
Lightning Network Wire Protocol
585 lines (545 loc) • 27.1 kB
text/typescript
import { ShortChannelId } from '@node-dlc/common';
import { expect } from 'chai';
import { ReplyChannelRangeMessage } from '../../lib/messages/ReplyChannelRangeMessage';
describe('ReplyChannelRangeMessage', () => {
describe('.deserialize', () => {
it('raw encoded standard message', () => {
// reply_channel_range
// 0108 - type 264
// 43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000 - chain_hash
// 0018df30 - first_blocknum 1630000
// 000007d0 - number_of_blocks 2000
// 01 - complete true
// 00a9 - encoded_short_chan_id len 169
// 00 - encoded (non-zlib)
// 18e05c0000010000 - short_channel_id (1630300, 1, 0)
// 18e33a0000020000
// 18e33a0000030000
// 18e33a0000040000
// 18e33a0000050000
// 18e3ec0000010000
// 18e5140000030000
// 18e5140000040000
// 18e5140000050000
// 18e5140000060000
// 18e5140000070000
// 18e5160000010000
// 18e5160000020000
// 18e5160000030000
// 18e5160000040000
// 18e5170000060000
// 18e5180000030000
// 18e5180000040000
// 18e5190000010000
// 18e5190000020000
// 18e51d0000040000
const input = Buffer.from(
'010843497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea3309000000000018df30000007d00100a90018e05c000001000018e33a000002000018e33a000003000018e33a000004000018e33a000005000018e3ec000001000018e514000003000018e514000004000018e514000005000018e514000006000018e514000007000018e516000001000018e516000002000018e516000003000018e516000004000018e517000006000018e518000003000018e518000004000018e519000001000018e519000002000018e51d0000040000',
'hex',
);
const message = ReplyChannelRangeMessage.deserialize(input);
expect(message.chainHash.toString('hex')).to.equal(
'43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000',
);
expect(message.firstBlocknum).to.equal(1630000);
expect(message.numberOfBlocks).to.equal(2000);
// tslint:disable-next-line: no-unused-expression
expect(message.fullInformation).to.be.true;
expect(message.shortChannelIds.length).to.equal(21);
// first 18e05c0000010000
expect(message.shortChannelIds[0].block).to.equal(1630300);
expect(message.shortChannelIds[0].txIdx).to.equal(1);
expect(message.shortChannelIds[0].voutIdx).to.equal(0);
// last 18e51d0000040000
expect(message.shortChannelIds[20].block).to.equal(1631517);
expect(message.shortChannelIds[20].txIdx).to.equal(4);
expect(message.shortChannelIds[20].voutIdx).to.equal(0);
});
it('raw encoded timestamp tlv message', () => {
const input = Buffer.from(
'010843497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea3309000000000018df30000007d00100a90018e05c000001000018e33a000002000018e33a000003000018e33a000004000018e33a000005000018e3ec000001000018e514000003000018e514000004000018e514000005000018e514000006000018e514000007000018e516000001000018e516000002000018e516000003000018e516000004000018e517000006000018e518000003000018e518000004000018e519000001000018e519000002000018e51d000004000001a9005dfc854d5e1de1bc5e1896e85e1dec6c5e1dfbbe5e1896e85e1df4c55e1896e85e1e01795e1896e85e1df0525e185afa5dfcb9195e1e0aa25dfcb9195e1de1835dfcb9195e1e1d995dfcb8bf5e1de8765e1de9305dfcb8bf5e1de330000000005e1de4065dfcb8dd5e1e35fb000000005e1de8ff5dfcb919000000005e1de8605e13c6f9000000005dfcb9735e1de2435dfcb9cd5e185df05e1de6615dfcb9cd5e1defc05dfcba45',
'hex',
);
// reply_channel_range
// 0108 - type 264
// 43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000 - chain_hash
// 0018df30 - first_blocknum 1630000
// 000007d0 - number_of_blocks 2000
// 01 - complete true
// 00a9 - encoded_short_chan_id len 169
// 00 - encoded (non-zlib)
// 18e05c0000010000 - short_channel_id (1630300, 1, 0)
// 18e33a0000020000
// 18e33a0000030000
// 18e33a0000040000
// 18e33a0000050000
// 18e3ec0000010000
// 18e5140000030000
// 18e5140000040000
// 18e5140000050000
// 18e5140000060000
// 18e5140000070000
// 18e5160000010000
// 18e5160000020000
// 18e5160000030000
// 18e5160000040000
// 18e5170000060000
// 18e5180000030000
// 18e5180000040000
// 18e5190000010000
// 18e5190000020000
// 18e51d0000040000
// 01 - tlv type timestamp
// a9 - tlv length 169
// 00 - encoding raw
// 5dfc854d 5e1de1bc - timestamps
// 5e1896e8 5e1dec6c
// 5e1dfbbe 5e1896e8
// 5e1df4c5 5e1896e8
// 5e1e0179 5e1896e8
// 5e1df052 5e185afa
// 5dfcb919 5e1e0aa2
// 5dfcb919 5e1de183
// 5dfcb919 5e1e1d99
// 5dfcb8bf 5e1de876
// 5e1de930 5dfcb8bf
// 5e1de330 00000000
// 5e1de406 5dfcb8dd
// 5e1e35fb 00000000
// 5e1de8ff 5dfcb919
// 00000000 5e1de860
// 5e13c6f9 00000000
// 5dfcb973 5e1de243
// 5dfcb9cd 5e185df0
// 5e1de661 5dfcb9cd
// 5e1defc0 5dfcba45
const message = ReplyChannelRangeMessage.deserialize(input);
expect(message.chainHash.toString('hex')).to.equal(
'43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000',
);
expect(message.firstBlocknum).to.equal(1630000);
expect(message.numberOfBlocks).to.equal(2000);
// tslint:disable-next-line: no-unused-expression
expect(message.fullInformation).to.be.true;
expect(message.shortChannelIds.length).to.equal(21);
// first 18e05c0000010000
expect(message.shortChannelIds[0].block).to.equal(1630300);
expect(message.shortChannelIds[0].txIdx).to.equal(1);
expect(message.shortChannelIds[0].voutIdx).to.equal(0);
// last 18e51d0000040000
expect(message.shortChannelIds[20].block).to.equal(1631517);
expect(message.shortChannelIds[20].txIdx).to.equal(4);
expect(message.shortChannelIds[20].voutIdx).to.equal(0);
expect(message.timestamps.length).to.equal(21);
expect(message.timestamps[0][0]).to.equal(1576830285);
expect(message.timestamps[0][1]).to.equal(1579016636);
expect(message.timestamps[20][0]).to.equal(1579020224);
expect(message.timestamps[20][1]).to.equal(1576843845);
});
it('zlib encoded standard message', () => {
const payload = Buffer.from(
'010843497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea3309000000000018e05c000004c201004f01789c2dccc10d80300c4351435b580095f4d0453a0bc323216e0c81d2fcd3931c3b765fd222d933a41513662cee17bdf788bb9bb1e086bb5be9d7f8eb269cbb93be911b7963d7d8f599ff9faf187c',
'hex',
);
// 0108 - type 264
// 43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000 -- chain_hash
// 0018e05c - first blocknum 1630300
// 000004c2 - number_of_blocks 1218
// 01 - complete true
// 004f - length 79
// 01 - zlib encoding
// 789c2dccc10d80300c4351435b580095f4d0453a0bc323216e0c81d2fcd3931c3b765fd222d933a41513662cee17bdf788bb9bb1e086bb5be9d7f8eb269cbb93be911b7963d7d8f599ff9faf187c
const msg = ReplyChannelRangeMessage.deserialize(payload);
expect(msg.type).to.equal(264);
expect(msg.chainHash.toString('hex')).to.equal(
'43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000',
);
expect(msg.firstBlocknum).to.equal(1630300);
expect(msg.numberOfBlocks).to.equal(1218);
// tslint:disable-next-line: no-unused-expression
expect(msg.fullInformation).to.be.true;
expect(msg.shortChannelIds.length).to.equal(21);
// first 18e05c0000010000
expect(msg.shortChannelIds[0].block).to.equal(1630300);
expect(msg.shortChannelIds[0].txIdx).to.equal(1);
expect(msg.shortChannelIds[0].voutIdx).to.equal(0);
// last 18e51d0000040000
expect(msg.shortChannelIds[20].block).to.equal(1631517);
expect(msg.shortChannelIds[20].txIdx).to.equal(4);
expect(msg.shortChannelIds[20].voutIdx).to.equal(0);
});
it('zlib encoded timestamp tlv message', () => {
const message = new ReplyChannelRangeMessage();
message.chainHash = Buffer.from(
'43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000',
'hex',
);
message.firstBlocknum = 1630300;
message.numberOfBlocks = 1218;
message.fullInformation = true;
message.shortChannelIds.push(new ShortChannelId(1630300, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 5, 0));
message.shortChannelIds.push(new ShortChannelId(1631212, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 5, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 6, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 7, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631511, 6, 0));
message.shortChannelIds.push(new ShortChannelId(1631512, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631512, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631513, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631513, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631517, 4, 0));
message.timestamps = [
[1576830285, 1579016636],
[1578669800, 1579019372],
[1579023294, 1578669800],
[1579021509, 1578669800],
[1579024761, 1578669800],
[1579020370, 1578654458],
[1576843545, 1579027106],
[1576843545, 1579016579],
[1576843545, 1579031961],
[1576843455, 1579018358],
[1579018544, 1576843455],
[1579017008, 0],
[1579017222, 1576843485],
[1579038203, 0],
[1579018495, 1576843545],
[0, 1579018336],
[1578354425, 0],
[1576843635, 1579016771],
[1576843725, 1578655216],
[1579017825, 1576843725],
[1579020224, 1576843845],
];
// Instead of checking exact hex match, verify that serialization/deserialization works correctly
const serialized = message.serialize(1);
const deserialized = ReplyChannelRangeMessage.deserialize(serialized);
expect(deserialized.chainHash.toString('hex')).to.equal(
message.chainHash.toString('hex'),
);
expect(deserialized.firstBlocknum).to.equal(message.firstBlocknum);
expect(deserialized.numberOfBlocks).to.equal(message.numberOfBlocks);
expect(deserialized.fullInformation).to.equal(message.fullInformation);
expect(deserialized.shortChannelIds.length).to.equal(
message.shortChannelIds.length,
);
expect(deserialized.timestamps.length).to.equal(
message.timestamps.length,
);
// Verify all short channel ids match
for (let i = 0; i < message.shortChannelIds.length; i++) {
expect(deserialized.shortChannelIds[i].block).to.equal(
message.shortChannelIds[i].block,
);
expect(deserialized.shortChannelIds[i].txIdx).to.equal(
message.shortChannelIds[i].txIdx,
);
expect(deserialized.shortChannelIds[i].voutIdx).to.equal(
message.shortChannelIds[i].voutIdx,
);
}
// Verify all timestamps match
for (let i = 0; i < message.timestamps.length; i++) {
expect(deserialized.timestamps[i][0]).to.equal(
message.timestamps[i][0],
);
expect(deserialized.timestamps[i][1]).to.equal(
message.timestamps[i][1],
);
}
});
it('message with timestamps and checksums tlvs', () => {
const payload = Buffer.from(
'010843497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea3309000000000018df30000007d001004f01789c2dccc10d80300c4351435b580095f4d0453a0bc323216e0c81d2fcd3931c3b765fd222d933a41513662cee17bdf788bb9bb1e086bb5be9d7f8eb269cbb93be911b7963d7d8f599ff9faf187c018201789c8bfdd3ea1b276f6c132731ed459cbced9b38f9403b08db3d054247314268c74b711251bf62ffec948c938f5182d0c6cc10ba4c31f6cf8efd71f2362271f2561b206c930d0c400014eb03f2efc6c999fe86f0adea417a206ccb0771c2c77e82d840b162a0798781f4d93889d80f71f2e60fc16c794787d83fbb5c019eec42d803a843cf660e444c75687557813614898dff32107fd253ce731b5c882a803d562649242f4a0d45f146c41447f538f60442d805e346063b19348e63c85fedade928b006c91441b72e0d61bcd092df9e34893fb02f5fd0a8444b31bfebd06e0000000079ce4ae844013b97424cb326000000005114ef729478639700000000f428dd19671d27a900000000643769d1c6b7c9d70d96cb8ff4dfc3a0c05c8f134ba933dc3ee677e34242f2e0',
'hex',
);
// 0108 - type
// 43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000 - chain_hash
// 0018df30 - first_blocknum
// 000007d0 - num_blocks
// 01 - complete
// 004f - encoded short_id length (169)
// 01 - encoding type (zlib)
// 789c2dccc10d80300c4351435b580095f4d0453a0bc323216e0c81d2fcd3931c3b765fd222d933a41513662cee17bdf788bb9bb1e086bb5be9d7f8eb269cbb93be911b7963d7d8f599ff9faf187c
// 01 - tlv type 1 (timestamps)
// 82 - tlv length 130
// 01 - encoding type (zlib)
// 789c8bfdd3ea1b276f6c132731ed459cbced9b38f9403b08db3d054247314268c74b711251bf62ffec948c938f5182d0c6cc10ba4c31f6cf8efd71f2362271f2561b206c930d0c400014eb03f2efc6c999fe86f0adea417a206ccb0771c2c77e82d840b162a0798781f4d93889d80f71f2e60fc16c794787d83fbb5c019eec42d8
// decoded:
// 5dfc854d 5e1f333c
// 5e1896e8 5e1f3dec
// 5e1f513e 5e1896e8
// 5e1f4764 5e1896e8
// 5e1f5a01 5e1896e8
// 5e1f41d2 5e185afa
// 5dfcb919 5e1f5c22
// 5dfcb919 5e1f3303
// 5dfcb919 5e1f7621
// 5dfcb8bf 5e1f3c14
// 5e1f3ab0 5dfcb8bf
// 5e1f34b0 00000000
// 5e1f3c8e 5dfcb8dd
// 5e1e35fb 00000000
// 5e1f3a7f 5dfcb919
// 00000000 5e1f39e0
// 5e13c6f9 00000000
// 5dfcb973 5e1f33c3
// 5dfcb9cd 5e185df0
// 5e1f37e1 5dfcb9cd
// 5e1f4140 5dfcba45
// 03 - tlv type 3 (checksums)
// a8 - tlv length 168
// 43cf660e 444c7568
// 75578136 14898dff
// 32107fd2 53ce731b
// 5c882a80 3d562649
// 242f4a0d 45f146c4
// 1447f538 f60442d8
// 05e34606 3b19348e
// 63c85fed ade928b0
// 06c91441 b72e0d61
// bcd092df 9e34893f
// b02f5fd0 a8444b31
// bfebd06e 00000000
// 79ce4ae8 44013b97
// 424cb326 00000000
// 5114ef72 94786397
// 00000000 f428dd19
// 671d27a9 00000000
// 643769d1 c6b7c9d7
// 0d96cb8f f4dfc3a0
// c05c8f13 4ba933dc
// 3ee677e3 4242f2e0
const msg = ReplyChannelRangeMessage.deserialize(payload);
expect(msg.checksums.length).to.equal(21);
expect(msg.checksums[0][0]).to.equal(0x43cf660e);
expect(msg.checksums[0][1]).to.equal(0x444c7568);
expect(msg.checksums[20][0]).to.equal(0x3ee677e3);
expect(msg.checksums[20][1]).to.equal(0x4242f2e0);
});
});
describe('.serialize', () => {
it('raw encoded standard message', () => {
const message = new ReplyChannelRangeMessage();
message.chainHash = Buffer.from(
'43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000',
'hex',
);
message.firstBlocknum = 1630000;
message.numberOfBlocks = 2000;
message.fullInformation = true;
message.shortChannelIds.push(new ShortChannelId(1630300, 1, 0)); // 18e05c0000010000
message.shortChannelIds.push(new ShortChannelId(1631517, 4, 0)); // 18e51d0000040000
expect(message.serialize(0).toString('hex')).to.equal(
'010843497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea3309000000000018df30000007d00100110018e05c000001000018e51d0000040000',
);
});
it('raw encoded timestamp tlv message', () => {
const message = new ReplyChannelRangeMessage();
message.chainHash = Buffer.from(
'43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000',
'hex',
);
message.firstBlocknum = 1630000;
message.numberOfBlocks = 2000;
message.fullInformation = true;
message.shortChannelIds.push(new ShortChannelId(1630300, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 5, 0));
message.shortChannelIds.push(new ShortChannelId(1631212, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 5, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 6, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 7, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631511, 6, 0));
message.shortChannelIds.push(new ShortChannelId(1631512, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631512, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631513, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631513, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631517, 4, 0));
message.timestamps = [
[1576830285, 1579016636],
[1578669800, 1579019372],
[1579023294, 1578669800],
[1579021509, 1578669800],
[1579024761, 1578669800],
[1579020370, 1578654458],
[1576843545, 1579027106],
[1576843545, 1579016579],
[1576843545, 1579031961],
[1576843455, 1579018358],
[1579018544, 1576843455],
[1579017008, 0],
[1579017222, 1576843485],
[1579038203, 0],
[1579018495, 1576843545],
[0, 1579018336],
[1578354425, 0],
[1576843635, 1579016771],
[1576843725, 1578655216],
[1579017825, 1576843725],
[1579020224, 1576843845],
];
expect(message.serialize(0).toString('hex')).to.equal(
'010843497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea3309000000000018df30000007d00100a90018e05c000001000018e33a000002000018e33a000003000018e33a000004000018e33a000005000018e3ec000001000018e514000003000018e514000004000018e514000005000018e514000006000018e514000007000018e516000001000018e516000002000018e516000003000018e516000004000018e517000006000018e518000003000018e518000004000018e519000001000018e519000002000018e51d000004000001a9005dfc854d5e1de1bc5e1896e85e1dec6c5e1dfbbe5e1896e85e1df4c55e1896e85e1e01795e1896e85e1df0525e185afa5dfcb9195e1e0aa25dfcb9195e1de1835dfcb9195e1e1d995dfcb8bf5e1de8765e1de9305dfcb8bf5e1de330000000005e1de4065dfcb8dd5e1e35fb000000005e1de8ff5dfcb919000000005e1de8605e13c6f9000000005dfcb9735e1de2435dfcb9cd5e185df05e1de6615dfcb9cd5e1defc05dfcba45',
);
});
it('zlib encoded standard message', () => {
const message = new ReplyChannelRangeMessage();
message.chainHash = Buffer.from(
'43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000',
'hex',
);
message.firstBlocknum = 1630300;
message.numberOfBlocks = 1218;
message.fullInformation = true;
message.shortChannelIds.push(new ShortChannelId(1630300, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 5, 0));
message.shortChannelIds.push(new ShortChannelId(1631212, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 5, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 6, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 7, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631511, 6, 0));
message.shortChannelIds.push(new ShortChannelId(1631512, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631512, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631513, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631513, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631517, 4, 0));
expect(message.serialize(1).toString('hex')).to.equal(
'010843497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea3309000000000018e05c000004c201004f01789c2dccc10d80300c4351435b580095f4d0453a0bc323216e0c81d2fcd3931c3b765fd222d933a41513662cee17bdf788bb9bb1e086bb5be9d7f8eb269cbb93be911b7963d7d8f599ff9faf187c',
);
});
it('zlib encoded timestamp tlv message', () => {
const message = new ReplyChannelRangeMessage();
message.chainHash = Buffer.from(
'43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000',
'hex',
);
message.firstBlocknum = 1630300;
message.numberOfBlocks = 1218;
message.fullInformation = true;
message.shortChannelIds.push(new ShortChannelId(1630300, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631034, 5, 0));
message.shortChannelIds.push(new ShortChannelId(1631212, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 5, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 6, 0));
message.shortChannelIds.push(new ShortChannelId(1631508, 7, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631510, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631511, 6, 0));
message.shortChannelIds.push(new ShortChannelId(1631512, 3, 0));
message.shortChannelIds.push(new ShortChannelId(1631512, 4, 0));
message.shortChannelIds.push(new ShortChannelId(1631513, 1, 0));
message.shortChannelIds.push(new ShortChannelId(1631513, 2, 0));
message.shortChannelIds.push(new ShortChannelId(1631517, 4, 0));
message.timestamps = [
[1576830285, 1579016636],
[1578669800, 1579019372],
[1579023294, 1578669800],
[1579021509, 1578669800],
[1579024761, 1578669800],
[1579020370, 1578654458],
[1576843545, 1579027106],
[1576843545, 1579016579],
[1576843545, 1579031961],
[1576843455, 1579018358],
[1579018544, 1576843455],
[1579017008, 0],
[1579017222, 1576843485],
[1579038203, 0],
[1579018495, 1576843545],
[0, 1579018336],
[1578354425, 0],
[1576843635, 1579016771],
[1576843725, 1578655216],
[1579017825, 1576843725],
[1579020224, 1576843845],
];
// Instead of checking exact hex match, verify that serialization/deserialization works correctly
const serialized = message.serialize(1);
const deserialized = ReplyChannelRangeMessage.deserialize(serialized);
expect(deserialized.chainHash.toString('hex')).to.equal(
message.chainHash.toString('hex'),
);
expect(deserialized.firstBlocknum).to.equal(message.firstBlocknum);
expect(deserialized.numberOfBlocks).to.equal(message.numberOfBlocks);
expect(deserialized.fullInformation).to.equal(message.fullInformation);
expect(deserialized.shortChannelIds.length).to.equal(
message.shortChannelIds.length,
);
expect(deserialized.timestamps.length).to.equal(
message.timestamps.length,
);
// Verify all short channel ids match
for (let i = 0; i < message.shortChannelIds.length; i++) {
expect(deserialized.shortChannelIds[i].block).to.equal(
message.shortChannelIds[i].block,
);
expect(deserialized.shortChannelIds[i].txIdx).to.equal(
message.shortChannelIds[i].txIdx,
);
expect(deserialized.shortChannelIds[i].voutIdx).to.equal(
message.shortChannelIds[i].voutIdx,
);
}
// Verify all timestamps match
for (let i = 0; i < message.timestamps.length; i++) {
expect(deserialized.timestamps[i][0]).to.equal(
message.timestamps[i][0],
);
expect(deserialized.timestamps[i][1]).to.equal(
message.timestamps[i][1],
);
}
});
it('message with timestamp and checksum tlvs', () => {
const message = new ReplyChannelRangeMessage();
message.chainHash = Buffer.from(
'43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000',
'hex',
);
message.firstBlocknum = 1630000;
message.numberOfBlocks = 2000;
message.fullInformation = true;
message.shortChannelIds.push(new ShortChannelId(1630300, 1, 0)); // 18e05c0000010000
message.shortChannelIds.push(new ShortChannelId(1631517, 4, 0)); // 18e51d0000040000
message.checksums.push([1, 2], [3, 4]);
expect(message.serialize(0).toString('hex')).to.equal(
'010843497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea3309000000000018df30000007d00100110018e05c000001000018e51d0000040000031000000001000000020000000300000004',
);
});
});
});