From fce548c9b058fa1debe6191741c8935afc51e799 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 25 Feb 2019 17:26:22 +0100 Subject: [PATCH 01/23] feat(crypto): Switch block id to full SHA256 After some predetermined block height, blocks' ids would be generated as full SHA256, encoded as a hex string. Both Block.getIdHex() and Block.getId() return the full SHA256 hex string after the predetermined height. It does not make any sense to represent 256-bit numbers in decimal. Resolves #1566 Change block id to full sha256 --- .../src/transport/codecs/core/index.ts | 1 - .../crypto/__tests__/models/block.test.ts | 8 ------ packages/crypto/src/models/block.ts | 26 +++++++++---------- .../src/networks/devnet/milestones.json | 6 +++++ .../src/networks/mainnet/milestones.json | 6 +++++ .../src/networks/testnet/milestones.json | 6 +++++ .../src/networks/unitnet/milestones.json | 6 +++++ .../src/transactions/deserializers/block.ts | 2 +- 8 files changed, 37 insertions(+), 24 deletions(-) diff --git a/packages/core-snapshots/src/transport/codecs/core/index.ts b/packages/core-snapshots/src/transport/codecs/core/index.ts index efce42f9a7..a7e9cb62cb 100644 --- a/packages/core-snapshots/src/transport/codecs/core/index.ts +++ b/packages/core-snapshots/src/transport/codecs/core/index.ts @@ -10,7 +10,6 @@ export const blockEncode = blockRecord => { export const blockDecode = bufferData => { const blockData = Block.deserialize(bufferData.toString("hex"), true); - blockData.id = Block.getIdFromSerialized(bufferData); blockData.totalAmount = (blockData.totalAmount as Bignum).toFixed(); blockData.totalFee = (blockData.totalFee as Bignum).toFixed(); diff --git a/packages/crypto/__tests__/models/block.test.ts b/packages/crypto/__tests__/models/block.test.ts index 702e6864ea..42f90ab567 100644 --- a/packages/crypto/__tests__/models/block.test.ts +++ b/packages/crypto/__tests__/models/block.test.ts @@ -353,14 +353,6 @@ describe("Models - Block", () => { }); }); - describe("getIdFromSerialized", () => { - it("should get the id from serialized buffer", () => { - const serialized = Block.serialize(data); - - expect(Block.getIdFromSerialized(serialized)).toBe(data.id); - }); - }); - describe("serializeFull", () => { describe("genesis block", () => { describe.each([["mainnet", 468048], ["devnet", 14492], ["testnet", 46488]])("%s", (network, length) => { diff --git a/packages/crypto/src/models/block.ts b/packages/crypto/src/models/block.ts index 026d813d54..558cb3cb23 100644 --- a/packages/crypto/src/models/block.ts +++ b/packages/crypto/src/models/block.ts @@ -107,10 +107,17 @@ export class Block implements IBlock { } public static getIdHex(data): string { + const constants = configManager.getMilestone(data.id); const payloadHash: any = Block.serialize(data); + const hash = createHash("sha256") .update(payloadHash) .digest(); + + if (constants.block.idFullSha256) { + return hash.toString("hex"); + } + const temp = Buffer.alloc(8); for (let i = 0; i < 8; i++) { @@ -124,23 +131,14 @@ export class Block implements IBlock { return "0".repeat(16 - temp.length) + temp; } - /** - * Get block id from already serialized buffer - */ - public static getIdFromSerialized(serializedBuffer: Buffer): string { - const hash = createHash("sha256") - .update(serializedBuffer) - .digest(); - const temp = Buffer.alloc(8); + public static getId(data): string { + const constants = configManager.getMilestone(data.id); + const idHex = Block.getIdHex(data); - for (let i = 0; i < 8; i++) { - temp[i] = hash[7 - i]; + if (constants.block.idFullSha256) { + return idHex; } - return new Bignum(temp.toString("hex"), 16).toFixed(); - } - public static getId(data): string { - const idHex = Block.getIdHex(data); return new Bignum(idHex, 16).toFixed(); } diff --git a/packages/crypto/src/networks/devnet/milestones.json b/packages/crypto/src/networks/devnet/milestones.json index 33f0c4bd85..ca111b9371 100644 --- a/packages/crypto/src/networks/devnet/milestones.json +++ b/packages/crypto/src/networks/devnet/milestones.json @@ -46,5 +46,11 @@ { "height": 950000, "ignoreInvalidSecondSignatureField": false + }, + { + "height": 1610000, + "block": { + "idFullSha256": true + } } ] diff --git a/packages/crypto/src/networks/mainnet/milestones.json b/packages/crypto/src/networks/mainnet/milestones.json index 6154db5dee..10a47088cf 100644 --- a/packages/crypto/src/networks/mainnet/milestones.json +++ b/packages/crypto/src/networks/mainnet/milestones.json @@ -34,5 +34,11 @@ "maxTransactions": 150, "maxPayload": 6300000 } + }, + { + "height": 7400000, + "block": { + "idFullSha256": true + } } ] diff --git a/packages/crypto/src/networks/testnet/milestones.json b/packages/crypto/src/networks/testnet/milestones.json index 51c32313cf..98c4716e5e 100644 --- a/packages/crypto/src/networks/testnet/milestones.json +++ b/packages/crypto/src/networks/testnet/milestones.json @@ -27,5 +27,11 @@ { "height": 75600, "reward": 200000000 + }, + { + "height": 76000, + "block": { + "idFullSha256": true + } } ] diff --git a/packages/crypto/src/networks/unitnet/milestones.json b/packages/crypto/src/networks/unitnet/milestones.json index 51c32313cf..98c4716e5e 100644 --- a/packages/crypto/src/networks/unitnet/milestones.json +++ b/packages/crypto/src/networks/unitnet/milestones.json @@ -27,5 +27,11 @@ { "height": 75600, "reward": 200000000 + }, + { + "height": 76000, + "block": { + "idFullSha256": true + } } ] diff --git a/packages/crypto/src/transactions/deserializers/block.ts b/packages/crypto/src/transactions/deserializers/block.ts index a6c9c3bb5e..e08df70d98 100644 --- a/packages/crypto/src/transactions/deserializers/block.ts +++ b/packages/crypto/src/transactions/deserializers/block.ts @@ -22,7 +22,7 @@ class BlockDeserializer { } block.idHex = Block.getIdHex(block); - block.id = new Bignum(block.idHex, 16).toFixed(); + block.id = Block.getId(block); const { outlookTable } = configManager.config.exceptions; if (outlookTable && outlookTable[block.id]) { From 3915086a8527f471cd69ea09b1ecbe8decbe5819 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Wed, 27 Feb 2019 16:59:23 +0100 Subject: [PATCH 02/23] fix(crypto): Use block height to query milestones, not id --- packages/crypto/src/models/block.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/crypto/src/models/block.ts b/packages/crypto/src/models/block.ts index a11645588c..a846aa35ec 100644 --- a/packages/crypto/src/models/block.ts +++ b/packages/crypto/src/models/block.ts @@ -104,7 +104,7 @@ export class Block implements IBlock { } public static getIdHex(data): string { - const constants = configManager.getMilestone(data.id); + const constants = configManager.getMilestone(data.height); const payloadHash: any = Block.serialize(data); const hash = HashAlgorithms.sha256(payloadHash); @@ -127,7 +127,7 @@ export class Block implements IBlock { } public static getId(data): string { - const constants = configManager.getMilestone(data.id); + const constants = configManager.getMilestone(data.height); const idHex = Block.getIdHex(data); if (constants.block.idFullSha256) { From cb221380b77ca385ae0c222629af19c1beb2daf7 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Wed, 27 Feb 2019 17:00:56 +0100 Subject: [PATCH 03/23] feat(crypto): Handle previous block id wrt idFullSha256 --- .../src/transactions/deserializers/block.ts | 13 +++++++++++-- .../crypto/src/transactions/serializers/block.ts | 16 +++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/crypto/src/transactions/deserializers/block.ts b/packages/crypto/src/transactions/deserializers/block.ts index e08df70d98..568baba453 100644 --- a/packages/crypto/src/transactions/deserializers/block.ts +++ b/packages/crypto/src/transactions/deserializers/block.ts @@ -38,8 +38,17 @@ class BlockDeserializer { block.version = buf.readUint32(); block.timestamp = buf.readUint32(); block.height = buf.readUint32(); - block.previousBlockHex = buf.readBytes(8).toString("hex"); - block.previousBlock = new Bignum(block.previousBlockHex, 16).toFixed(); + + const constants = configManager.getMilestone(block.height - 1); + + if (constants.block.idFullSha256) { + block.previousBlockHex = buf.readBytes(32).toString("hex"); + block.previousBlock = block.previousBlockHex; + } else { + block.previousBlockHex = buf.readBytes(8).toString("hex"); + block.previousBlock = new Bignum(block.previousBlockHex, 16).toFixed(); + } + block.numberOfTransactions = buf.readUint32(); block.totalAmount = new Bignum(buf.readUint64().toString()); block.totalFee = new Bignum(buf.readUint64().toString()); diff --git a/packages/crypto/src/transactions/serializers/block.ts b/packages/crypto/src/transactions/serializers/block.ts index 22ff08332b..7b7242cb6f 100644 --- a/packages/crypto/src/transactions/serializers/block.ts +++ b/packages/crypto/src/transactions/serializers/block.ts @@ -1,4 +1,5 @@ import ByteBuffer from "bytebuffer"; +import { configManager } from "../../managers/config"; import { Block, IBlockData } from "../../models/block"; import { Bignum } from "../../utils"; import { Transaction } from "../types"; @@ -36,7 +37,20 @@ class BlockSerializer { } private serializeHeader(block: IBlockData, buffer: ByteBuffer): any { - block.previousBlockHex = Block.toBytesHex(block.previousBlock); + const constants = configManager.getMilestone(block.height - 1); + + if (constants.block.idFullSha256) { + if (block.previousBlock.length !== 64) { + throw new Error( + `The config denotes that the block at height ${block.height - 1} ` + + `must use full SHA256 block id, however the next block (at ${block.height}) ` + + `contains previousBlock="${block.previousBlock}"`, + ); + } + block.previousBlockHex = block.previousBlock; + } else { + block.previousBlockHex = Block.toBytesHex(block.previousBlock); + } buffer.writeUint32(block.version); buffer.writeUint32(block.timestamp); From 9ed5b224a6b139a10bc62e144bbbb41a6779cb7c Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Thu, 28 Feb 2019 13:57:17 +0100 Subject: [PATCH 04/23] test(core-forger): adjust sampleBlock --- __tests__/unit/core-forger/__fixtures__/block.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/__tests__/unit/core-forger/__fixtures__/block.ts b/__tests__/unit/core-forger/__fixtures__/block.ts index 58780a3a8b..1e9c98d876 100644 --- a/__tests__/unit/core-forger/__fixtures__/block.ts +++ b/__tests__/unit/core-forger/__fixtures__/block.ts @@ -1,11 +1,10 @@ import { models } from "@arkecosystem/crypto"; export const sampleBlock = new models.Block({ - id: "4398082439836560423", version: 0, timestamp: 35751416, height: 3342573, - previousBlock: "14909996519459393858", + previousBlock: "0000000000000000000000000000000000000000000000000000000000000000", numberOfTransactions: 0, totalAmount: 0, totalFee: 0, From b5e93bf50ff7da576584eaa773205bad402c8258 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Thu, 28 Feb 2019 15:52:14 +0100 Subject: [PATCH 05/23] test(core-p2p): adjust fixture and validation schemas --- .../integration/core-p2p/fixtures/block.json | 7 ++----- .../unit/crypto/validation/ajv-wrapper.test.ts | 17 ----------------- .../core-api/src/versions/2/blocks/schema.ts | 11 ++++++----- .../core-api/src/versions/2/delegates/schema.ts | 5 +++-- .../src/versions/2/shared/schemas/block-id.ts | 11 +++++++++++ .../src/versions/2/transactions/schema.ts | 5 +++-- .../core-api/src/versions/2/votes/schema.ts | 3 ++- .../core-api/src/versions/2/wallets/schema.ts | 7 ++++--- packages/crypto/src/validation/schemas.ts | 8 +------- 9 files changed, 32 insertions(+), 42 deletions(-) create mode 100644 packages/core-api/src/versions/2/shared/schemas/block-id.ts diff --git a/__tests__/integration/core-p2p/fixtures/block.json b/__tests__/integration/core-p2p/fixtures/block.json index ec148aa9e2..d3f3aebe31 100644 --- a/__tests__/integration/core-p2p/fixtures/block.json +++ b/__tests__/integration/core-p2p/fixtures/block.json @@ -1,10 +1,9 @@ { "data": { - "id": "7176646138626297930", "version": 0, "height": 2243161, "timestamp": 24760440, - "previousBlock": "3112633353705641986", + "previousBlock": "0000000000000000000000000000000000000000000000000000000000000000", "numberOfTransactions": 7, "totalAmount": "3890300", "totalFee": "70000000", @@ -134,7 +133,5 @@ "blockId": "7176646138626297930" } ] - }, - "serialized": "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", - "serializedFull": "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29ff000000fe00000000010000ff000000ff000000ff000000ff000000ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e40fad23d21da7a4fd4decb5c49726ea22f5e6bf6304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb97830450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e79c579fb08f448879c22fe965906b4e3b88d02ed304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9ff011e0064d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874fa7a080000000000000000001e84fee45dde2b11525afe192a2e991d014ff93a36304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099fff011e0061d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e1d69583ede5ee82d220e74bffb36bae2ce762dfb3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e56f9a37a859f4f84e93ce7593e809b15a524db2930450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e830440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64ff011e0063d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e0232a083c16aba4362dddec1b3050ffdd6d43f2e3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001eccc4fce0dc95f9951ee40c09a7ae807746cf51403045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb" + } } diff --git a/__tests__/unit/crypto/validation/ajv-wrapper.test.ts b/__tests__/unit/crypto/validation/ajv-wrapper.test.ts index 02f36cb114..9f2335a1d9 100644 --- a/__tests__/unit/crypto/validation/ajv-wrapper.test.ts +++ b/__tests__/unit/crypto/validation/ajv-wrapper.test.ts @@ -82,23 +82,6 @@ describe("AjvWrapper", () => { }); }); - describe("numericString", () => { - it("should be ok", () => { - expect(AjvWrapper.validate("numericString", "1234").error).toBeNull(); - }); - - it("should not be ok", () => { - expect(AjvWrapper.validate("numericString", "+12").error).not.toBeNull(); - expect(AjvWrapper.validate("numericString", ".1").error).not.toBeNull(); - expect(AjvWrapper.validate("numericString", "1.0").error).not.toBeNull(); - expect(AjvWrapper.validate("numericString", "€").error).not.toBeNull(); - expect(AjvWrapper.validate("numericString", 1).error).not.toBeNull(); - expect(AjvWrapper.validate("numericString", "").error).not.toBeNull(); - expect(AjvWrapper.validate("numericString", null).error).not.toBeNull(); - expect(AjvWrapper.validate("numericString", undefined).error).not.toBeNull(); - }); - }); - describe("alphanumeric", () => { it("should be ok", () => { expect(AjvWrapper.validate("alphanumeric", "abcDE1234").error).toBeNull(); diff --git a/packages/core-api/src/versions/2/blocks/schema.ts b/packages/core-api/src/versions/2/blocks/schema.ts index d8f70e1098..50759691e9 100644 --- a/packages/core-api/src/versions/2/blocks/schema.ts +++ b/packages/core-api/src/versions/2/blocks/schema.ts @@ -1,4 +1,5 @@ import * as Joi from "joi"; +import { blockId } from "../shared/schemas/block-id"; import { pagination } from "../shared/schemas/pagination"; export const index: object = { @@ -6,14 +7,14 @@ export const index: object = { ...pagination, ...{ orderBy: Joi.string(), - id: Joi.string().regex(/^[0-9]+$/, "numbers"), + id: blockId, version: Joi.number() .integer() .min(0), timestamp: Joi.number() .integer() .min(0), - previousBlock: Joi.string().regex(/^[0-9]+$/, "numbers"), + previousBlock: blockId, height: Joi.number() .integer() .positive(), @@ -58,7 +59,7 @@ export const transactions: object = { id: Joi.string() .hex() .length(66), - blockId: Joi.string().regex(/^[0-9]+$/, "numbers"), + blockId, type: Joi.number() .integer() .min(0), @@ -91,11 +92,11 @@ export const transactions: object = { export const search: object = { query: pagination, payload: { - id: Joi.string().regex(/^[0-9]+$/, "numbers"), + id: blockId, version: Joi.number() .integer() .min(0), - previousBlock: Joi.string().regex(/^[0-9]+$/, "numbers"), + previousBlock: blockId, payloadHash: Joi.string().hex(), generatorPublicKey: Joi.string() .hex() diff --git a/packages/core-api/src/versions/2/delegates/schema.ts b/packages/core-api/src/versions/2/delegates/schema.ts index 68d43b6c70..06d5e4db86 100644 --- a/packages/core-api/src/versions/2/delegates/schema.ts +++ b/packages/core-api/src/versions/2/delegates/schema.ts @@ -1,5 +1,6 @@ import { app } from "@arkecosystem/core-container"; import * as Joi from "joi"; +import { blockId } from "../shared/schemas/block-id"; import { pagination } from "../shared/schemas/pagination"; const config = app.getConfig(); @@ -79,14 +80,14 @@ export const blocks: object = { ...pagination, ...{ orderBy: Joi.string(), - id: Joi.string().regex(/^[0-9]+$/, "numbers"), + id: blockId, version: Joi.number() .integer() .min(0), timestamp: Joi.number() .integer() .min(0), - previousBlock: Joi.string().regex(/^[0-9]+$/, "numbers"), + previousBlock: blockId, height: Joi.number() .integer() .positive(), diff --git a/packages/core-api/src/versions/2/shared/schemas/block-id.ts b/packages/core-api/src/versions/2/shared/schemas/block-id.ts new file mode 100644 index 0000000000..731799ad1f --- /dev/null +++ b/packages/core-api/src/versions/2/shared/schemas/block-id.ts @@ -0,0 +1,11 @@ +import * as Joi from "joi"; + +export const blockId = Joi.alternatives().try( + Joi.string() + .min(1) + .max(20) + .regex(/^[0-9]+$/, "decimal non-negative integer"), + Joi.string() + .length(64) + .hex(), +); diff --git a/packages/core-api/src/versions/2/transactions/schema.ts b/packages/core-api/src/versions/2/transactions/schema.ts index 4cc9936380..fcad7d6393 100644 --- a/packages/core-api/src/versions/2/transactions/schema.ts +++ b/packages/core-api/src/versions/2/transactions/schema.ts @@ -1,5 +1,6 @@ import { app } from "@arkecosystem/core-container"; import joi from "joi"; +import { blockId } from "../shared/schemas/block-id"; import { pagination } from "../shared/schemas/pagination"; export const index: object = { @@ -11,7 +12,7 @@ export const index: object = { .string() .hex() .length(64), - blockId: joi.string().regex(/^[0-9]+$/, "numbers"), + blockId, type: joi .number() .integer() @@ -97,7 +98,7 @@ export const search: object = { .string() .hex() .length(64), - blockId: joi.string().regex(/^[0-9]+$/, "numbers"), + blockId, type: joi .number() .integer() diff --git a/packages/core-api/src/versions/2/votes/schema.ts b/packages/core-api/src/versions/2/votes/schema.ts index 1f9acde79d..840ff8cb37 100644 --- a/packages/core-api/src/versions/2/votes/schema.ts +++ b/packages/core-api/src/versions/2/votes/schema.ts @@ -1,4 +1,5 @@ import * as Joi from "joi"; +import { blockId } from "../shared/schemas/block-id"; import { pagination } from "../shared/schemas/pagination"; export const index: object = { @@ -9,7 +10,7 @@ export const index: object = { id: Joi.string() .hex() .length(64), - blockId: Joi.string().regex(/^[0-9]+$/, "numbers"), + blockId, version: Joi.number() .integer() .positive(), diff --git a/packages/core-api/src/versions/2/wallets/schema.ts b/packages/core-api/src/versions/2/wallets/schema.ts index 7e9bd48747..6f283692b8 100644 --- a/packages/core-api/src/versions/2/wallets/schema.ts +++ b/packages/core-api/src/versions/2/wallets/schema.ts @@ -1,4 +1,5 @@ import * as Joi from "joi"; +import { blockId } from "../shared/schemas/block-id"; import { pagination } from "../shared/schemas/pagination"; export const index: object = { @@ -50,7 +51,7 @@ export const transactions: object = { id: Joi.string() .hex() .length(64), - blockId: Joi.string().regex(/^[0-9]+$/, "numbers"), + blockId, type: Joi.number() .integer() .min(0), @@ -94,7 +95,7 @@ export const transactionsSent: object = { id: Joi.string() .hex() .length(64), - blockId: Joi.string().regex(/^[0-9]+$/, "numbers"), + blockId, type: Joi.number() .integer() .min(0), @@ -132,7 +133,7 @@ export const transactionsReceived: object = { id: Joi.string() .hex() .length(64), - blockId: Joi.string().regex(/^[0-9]+$/, "numbers"), + blockId, type: Joi.number() .integer() .min(0), diff --git a/packages/crypto/src/validation/schemas.ts b/packages/crypto/src/validation/schemas.ts index 1fea0bf367..426d93f530 100644 --- a/packages/crypto/src/validation/schemas.ts +++ b/packages/crypto/src/validation/schemas.ts @@ -11,12 +11,6 @@ export const schemas = { pattern: "^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$", }, - numericString: { - $id: "numericString", - type: "string", - pattern: "^[0-9]+$", - }, - alphanumeric: { $id: "alphanumeric", type: "string", @@ -40,7 +34,7 @@ export const schemas = { blockId: { $id: "blockId", - $ref: "numericString", + $ref: "hex", }, publicKey: { From 6df24fcdaef601809b903e7ab48697e66c471bbb Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Thu, 28 Feb 2019 17:01:09 +0100 Subject: [PATCH 06/23] test(core-debugger-cli): Adjust block fixture --- __tests__/unit/core-debugger-cli/__fixtures__/block.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/__tests__/unit/core-debugger-cli/__fixtures__/block.json b/__tests__/unit/core-debugger-cli/__fixtures__/block.json index ec148aa9e2..4f927cf5b7 100644 --- a/__tests__/unit/core-debugger-cli/__fixtures__/block.json +++ b/__tests__/unit/core-debugger-cli/__fixtures__/block.json @@ -1,10 +1,9 @@ { "data": { - "id": "7176646138626297930", "version": 0, "height": 2243161, "timestamp": 24760440, - "previousBlock": "3112633353705641986", + "previousBlock": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "numberOfTransactions": 7, "totalAmount": "3890300", "totalFee": "70000000", @@ -135,6 +134,6 @@ } ] }, - "serialized": "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", - "serializedFull": "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29ff000000fe00000000010000ff000000ff000000ff000000ff000000ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e40fad23d21da7a4fd4decb5c49726ea22f5e6bf6304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb97830450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e79c579fb08f448879c22fe965906b4e3b88d02ed304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9ff011e0064d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874fa7a080000000000000000001e84fee45dde2b11525afe192a2e991d014ff93a36304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099fff011e0061d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e1d69583ede5ee82d220e74bffb36bae2ce762dfb3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e56f9a37a859f4f84e93ce7593e809b15a524db2930450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e830440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64ff011e0063d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e0232a083c16aba4362dddec1b3050ffdd6d43f2e3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001eccc4fce0dc95f9951ee40c09a7ae807746cf51403045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb" + "serialized": "0000000078d07901593a2200e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", + "serializedFull": "0000000078d07901593a2200e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29ff000000fe00000000010000ff000000ff000000ff000000ff000000ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e40fad23d21da7a4fd4decb5c49726ea22f5e6bf6304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb97830450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e79c579fb08f448879c22fe965906b4e3b88d02ed304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9ff011e0064d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874fa7a080000000000000000001e84fee45dde2b11525afe192a2e991d014ff93a36304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099fff011e0061d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e1d69583ede5ee82d220e74bffb36bae2ce762dfb3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e56f9a37a859f4f84e93ce7593e809b15a524db2930450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e830440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64ff011e0063d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e0232a083c16aba4362dddec1b3050ffdd6d43f2e3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001eccc4fce0dc95f9951ee40c09a7ae807746cf51403045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb" } From 8b480c59a51667bad23c776b891fc4b3909f7712 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Fri, 1 Mar 2019 13:47:47 +0100 Subject: [PATCH 07/23] feat(crypto): Strengthen the block id check --- packages/crypto/src/validation/keywords.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/crypto/src/validation/keywords.ts b/packages/crypto/src/validation/keywords.ts index 55193e7540..f642d71425 100644 --- a/packages/crypto/src/validation/keywords.ts +++ b/packages/crypto/src/validation/keywords.ts @@ -121,7 +121,16 @@ const blockId = (ajv: Ajv) => { return false; } - return /^[0123456789A-Fa-f]+$/.test(data); + // Old/legacy block id, before the switch to full SHA256. 8 byte decimal integer. + const isPartial = /^[0-9]{1,20}$/.test(data); + const isFullSha256 = /^[0-9a-f]{64}$/i.test(data); + + if (parentObject && parentObject.height) { + const constants = configManager.getMilestone(parentObject.height); + return constants.block.idFullSha256 ? isFullSha256 : isPartial; + } + + return isPartial || isFullSha256; }; }, errors: false, From 75d8952490b0116251d7d7a829686fa8a6ff44c7 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 4 Mar 2019 08:38:15 +0100 Subject: [PATCH 08/23] Revert fixtures changes, new tests to be added for the new block id --- __tests__/integration/core-p2p/fixtures/block.json | 7 +++++-- __tests__/unit/core-forger/__fixtures__/block.ts | 3 ++- __tests__/unit/core-tester-cli/__fixtures__/block.json | 7 ++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/__tests__/integration/core-p2p/fixtures/block.json b/__tests__/integration/core-p2p/fixtures/block.json index d3f3aebe31..ec148aa9e2 100644 --- a/__tests__/integration/core-p2p/fixtures/block.json +++ b/__tests__/integration/core-p2p/fixtures/block.json @@ -1,9 +1,10 @@ { "data": { + "id": "7176646138626297930", "version": 0, "height": 2243161, "timestamp": 24760440, - "previousBlock": "0000000000000000000000000000000000000000000000000000000000000000", + "previousBlock": "3112633353705641986", "numberOfTransactions": 7, "totalAmount": "3890300", "totalFee": "70000000", @@ -133,5 +134,7 @@ "blockId": "7176646138626297930" } ] - } + }, + "serialized": "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", + "serializedFull": "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29ff000000fe00000000010000ff000000ff000000ff000000ff000000ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e40fad23d21da7a4fd4decb5c49726ea22f5e6bf6304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb97830450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e79c579fb08f448879c22fe965906b4e3b88d02ed304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9ff011e0064d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874fa7a080000000000000000001e84fee45dde2b11525afe192a2e991d014ff93a36304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099fff011e0061d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e1d69583ede5ee82d220e74bffb36bae2ce762dfb3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e56f9a37a859f4f84e93ce7593e809b15a524db2930450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e830440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64ff011e0063d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e0232a083c16aba4362dddec1b3050ffdd6d43f2e3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001eccc4fce0dc95f9951ee40c09a7ae807746cf51403045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb" } diff --git a/__tests__/unit/core-forger/__fixtures__/block.ts b/__tests__/unit/core-forger/__fixtures__/block.ts index 1e9c98d876..58780a3a8b 100644 --- a/__tests__/unit/core-forger/__fixtures__/block.ts +++ b/__tests__/unit/core-forger/__fixtures__/block.ts @@ -1,10 +1,11 @@ import { models } from "@arkecosystem/crypto"; export const sampleBlock = new models.Block({ + id: "4398082439836560423", version: 0, timestamp: 35751416, height: 3342573, - previousBlock: "0000000000000000000000000000000000000000000000000000000000000000", + previousBlock: "14909996519459393858", numberOfTransactions: 0, totalAmount: 0, totalFee: 0, diff --git a/__tests__/unit/core-tester-cli/__fixtures__/block.json b/__tests__/unit/core-tester-cli/__fixtures__/block.json index 4f927cf5b7..ec148aa9e2 100644 --- a/__tests__/unit/core-tester-cli/__fixtures__/block.json +++ b/__tests__/unit/core-tester-cli/__fixtures__/block.json @@ -1,9 +1,10 @@ { "data": { + "id": "7176646138626297930", "version": 0, "height": 2243161, "timestamp": 24760440, - "previousBlock": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "previousBlock": "3112633353705641986", "numberOfTransactions": 7, "totalAmount": "3890300", "totalFee": "70000000", @@ -134,6 +135,6 @@ } ] }, - "serialized": "0000000078d07901593a2200e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", - "serializedFull": "0000000078d07901593a2200e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29ff000000fe00000000010000ff000000ff000000ff000000ff000000ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e40fad23d21da7a4fd4decb5c49726ea22f5e6bf6304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb97830450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e79c579fb08f448879c22fe965906b4e3b88d02ed304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9ff011e0064d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874fa7a080000000000000000001e84fee45dde2b11525afe192a2e991d014ff93a36304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099fff011e0061d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e1d69583ede5ee82d220e74bffb36bae2ce762dfb3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e56f9a37a859f4f84e93ce7593e809b15a524db2930450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e830440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64ff011e0063d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e0232a083c16aba4362dddec1b3050ffdd6d43f2e3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001eccc4fce0dc95f9951ee40c09a7ae807746cf51403045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb" + "serialized": "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", + "serializedFull": "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29ff000000fe00000000010000ff000000ff000000ff000000ff000000ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e40fad23d21da7a4fd4decb5c49726ea22f5e6bf6304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb97830450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e79c579fb08f448879c22fe965906b4e3b88d02ed304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9ff011e0064d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874fa7a080000000000000000001e84fee45dde2b11525afe192a2e991d014ff93a36304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099fff011e0061d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e1d69583ede5ee82d220e74bffb36bae2ce762dfb3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e56f9a37a859f4f84e93ce7593e809b15a524db2930450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e830440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64ff011e0063d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e0232a083c16aba4362dddec1b3050ffdd6d43f2e3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001eccc4fce0dc95f9951ee40c09a7ae807746cf51403045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb" } From 6bac1a89d501a882685d0220cded968867284d7d Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 4 Mar 2019 11:11:34 +0100 Subject: [PATCH 09/23] fix(crypto): Accept old/partial hex block id --- packages/crypto/src/validation/keywords.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/crypto/src/validation/keywords.ts b/packages/crypto/src/validation/keywords.ts index f642d71425..fa08cbe3b0 100644 --- a/packages/crypto/src/validation/keywords.ts +++ b/packages/crypto/src/validation/keywords.ts @@ -121,8 +121,9 @@ const blockId = (ajv: Ajv) => { return false; } - // Old/legacy block id, before the switch to full SHA256. 8 byte decimal integer. - const isPartial = /^[0-9]{1,20}$/.test(data); + // Partial SHA256 block id (old/legacy), before the switch to full SHA256. + // 8 byte integer either decimal without leading zeros or hex with leading zeros. + const isPartial = /^[0-9]{1,20}$/.test(data) || /^[0-9a-f]{16}$/i.test(data); const isFullSha256 = /^[0-9a-f]{64}$/i.test(data); if (parentObject && parentObject.height) { From 4b08c95f9c0fd9c4c98476e7fbd5d7c34cb2452f Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 4 Mar 2019 11:11:58 +0100 Subject: [PATCH 10/23] feat(crypto): increase the height for activating full SHA256 block ids The bumped heights are excessively high, in order to get all tests passing. Then an exact height is to be picked up for each network. --- packages/crypto/src/networks/devnet/milestones.json | 2 +- packages/crypto/src/networks/mainnet/milestones.json | 2 +- packages/crypto/src/networks/testnet/milestones.json | 2 +- packages/crypto/src/networks/unitnet/milestones.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/crypto/src/networks/devnet/milestones.json b/packages/crypto/src/networks/devnet/milestones.json index ffd5a39a08..3478e85f83 100644 --- a/packages/crypto/src/networks/devnet/milestones.json +++ b/packages/crypto/src/networks/devnet/milestones.json @@ -53,7 +53,7 @@ "vendorFieldLength": 255 }, { - "height": 1750001, + "height": 10000000000, "block": { "idFullSha256": true } diff --git a/packages/crypto/src/networks/mainnet/milestones.json b/packages/crypto/src/networks/mainnet/milestones.json index 00ac119c37..9823c042e9 100644 --- a/packages/crypto/src/networks/mainnet/milestones.json +++ b/packages/crypto/src/networks/mainnet/milestones.json @@ -41,7 +41,7 @@ "vendorFieldLength": 255 }, { - "height": 8000001, + "height": 10000000000, "block": { "idFullSha256": true } diff --git a/packages/crypto/src/networks/testnet/milestones.json b/packages/crypto/src/networks/testnet/milestones.json index 9b794122a0..5112d351ff 100644 --- a/packages/crypto/src/networks/testnet/milestones.json +++ b/packages/crypto/src/networks/testnet/milestones.json @@ -34,7 +34,7 @@ "vendorFieldLength": 255 }, { - "height": 100001, + "height": 1000000000, "block": { "idFullSha256": true } diff --git a/packages/crypto/src/networks/unitnet/milestones.json b/packages/crypto/src/networks/unitnet/milestones.json index 9b794122a0..5112d351ff 100644 --- a/packages/crypto/src/networks/unitnet/milestones.json +++ b/packages/crypto/src/networks/unitnet/milestones.json @@ -34,7 +34,7 @@ "vendorFieldLength": 255 }, { - "height": 100001, + "height": 1000000000, "block": { "idFullSha256": true } From 20af8c5936f273e5580c2ea56294ba0d7274ec4d Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 4 Mar 2019 11:49:35 +0100 Subject: [PATCH 11/23] test(crypto): fix and extend blockId validation test "AFFE" is not a valid block id, neither with the old scheme, nor with the new one. Same for 63-chars long hex string. --- __tests__/unit/crypto/validation/keywords.test.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/__tests__/unit/crypto/validation/keywords.test.ts b/__tests__/unit/crypto/validation/keywords.test.ts index c9670ce4c9..cd07b7f5b9 100644 --- a/__tests__/unit/crypto/validation/keywords.test.ts +++ b/__tests__/unit/crypto/validation/keywords.test.ts @@ -67,11 +67,18 @@ describe("keyword blockId", () => { const schema = { blockId: {} }; const validate = ajv.compile(schema); - expect(validate("15654541800058894516")).toBeTrue(); + expect(validate("1")).toBeTrue(); expect(validate("1234")).toBeTrue(); expect(validate("15654541800058894516")).toBeTrue(); - expect(validate("AFFE")).toBeTrue(); - expect(validate("94c220691e711c39c79d437ce185748a0018940e1a4144293af9d05627d2eb4")).toBeTrue(); + expect(validate("156545418000588945160")).toBeFalse(); + + expect(validate("e3b0c44298fc1c14")).toBeTrue(); + expect(validate("e3b0c44298fc1c1")).toBeFalse(); + expect(validate("e3b0c44298fc1c140")).toBeFalse(); + + expect(validate("94c220691e711c39c79d437ce185748a0018940e1a4144293af9d05627d2eb40")).toBeTrue(); + expect(validate("94c220691e711c39c79d437ce185748a0018940e1a4144293af9d05627d2eb4")).toBeFalse(); + expect(validate("94c220691e711c39c79d437ce185748a0018940e1a4144293af9d05627d2eb400")).toBeFalse(); }); it("should not be ok", () => { From 70386da91aafc3777b261361d4e5b9e80d135770 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Wed, 6 Mar 2019 12:14:56 +0100 Subject: [PATCH 12/23] test(core-forger): Don't use devnet config from unit tests The problem is that using devnet config would render the fixture blocks invalid wrt full sha256 block id when devnet config is modified and the switch-to-full-sha256 height is lowered. Use "unitnet" instead. --- __tests__/unit/core-forger/__fixtures__/block.ts | 4 +++- packages/crypto/src/networks/unitnet/milestones.json | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/__tests__/unit/core-forger/__fixtures__/block.ts b/__tests__/unit/core-forger/__fixtures__/block.ts index 58780a3a8b..2df42e9c66 100644 --- a/__tests__/unit/core-forger/__fixtures__/block.ts +++ b/__tests__/unit/core-forger/__fixtures__/block.ts @@ -1,4 +1,6 @@ -import { models } from "@arkecosystem/crypto"; +import { client, models } from "@arkecosystem/crypto"; + +client.getConfigManager().setFromPreset("unitnet"); export const sampleBlock = new models.Block({ id: "4398082439836560423", diff --git a/packages/crypto/src/networks/unitnet/milestones.json b/packages/crypto/src/networks/unitnet/milestones.json index 5112d351ff..00c4fac52a 100644 --- a/packages/crypto/src/networks/unitnet/milestones.json +++ b/packages/crypto/src/networks/unitnet/milestones.json @@ -34,7 +34,7 @@ "vendorFieldLength": 255 }, { - "height": 1000000000, + "height": 4000000, "block": { "idFullSha256": true } From dddcb6e9413a964dc2a87e29bde09b925be42e30 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Wed, 6 Mar 2019 14:27:53 +0100 Subject: [PATCH 13/23] feat(crypto): Lower devnet block.idFullSha256 milestone --- packages/crypto/src/networks/devnet/milestones.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/crypto/src/networks/devnet/milestones.json b/packages/crypto/src/networks/devnet/milestones.json index 3478e85f83..1fbdaecfc0 100644 --- a/packages/crypto/src/networks/devnet/milestones.json +++ b/packages/crypto/src/networks/devnet/milestones.json @@ -53,7 +53,7 @@ "vendorFieldLength": 255 }, { - "height": 10000000000, + "height": 1860000, "block": { "idFullSha256": true } From 2466311e00fd24c5c051e4f7316259fc86069b79 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Fri, 8 Mar 2019 13:55:57 +0100 Subject: [PATCH 14/23] Try to tweak the fixture block Now yarn --cwd ~/core test /unit/core-tester-cli/commands/debug fails because the block does not pass validation --- __tests__/unit/core-tester-cli/__fixtures__/block.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/__tests__/unit/core-tester-cli/__fixtures__/block.json b/__tests__/unit/core-tester-cli/__fixtures__/block.json index ec148aa9e2..d828facaac 100644 --- a/__tests__/unit/core-tester-cli/__fixtures__/block.json +++ b/__tests__/unit/core-tester-cli/__fixtures__/block.json @@ -2,7 +2,7 @@ "data": { "id": "7176646138626297930", "version": 0, - "height": 2243161, + "height": 1760000, "timestamp": 24760440, "previousBlock": "3112633353705641986", "numberOfTransactions": 7, @@ -135,6 +135,6 @@ } ] }, - "serialized": "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", - "serializedFull": "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29ff000000fe00000000010000ff000000ff000000ff000000ff000000ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e40fad23d21da7a4fd4decb5c49726ea22f5e6bf6304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb97830450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e79c579fb08f448879c22fe965906b4e3b88d02ed304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9ff011e0064d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874fa7a080000000000000000001e84fee45dde2b11525afe192a2e991d014ff93a36304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099fff011e0061d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e1d69583ede5ee82d220e74bffb36bae2ce762dfb3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e56f9a37a859f4f84e93ce7593e809b15a524db2930450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e830440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64ff011e0063d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e0232a083c16aba4362dddec1b3050ffdd6d43f2e3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001eccc4fce0dc95f9951ee40c09a7ae807746cf51403045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb" + "serialized": "0000000078d0790100db1a002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", + "serializedFull": "0000000078d0790100db1a002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29ff000000fe00000000010000ff000000ff000000ff000000ff000000ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e40fad23d21da7a4fd4decb5c49726ea22f5e6bf6304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb97830450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e79c579fb08f448879c22fe965906b4e3b88d02ed304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9ff011e0064d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874fa7a080000000000000000001e84fee45dde2b11525afe192a2e991d014ff93a36304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099fff011e0061d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e1d69583ede5ee82d220e74bffb36bae2ce762dfb3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e56f9a37a859f4f84e93ce7593e809b15a524db2930450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e830440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64ff011e0063d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e0232a083c16aba4362dddec1b3050ffdd6d43f2e3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001eccc4fce0dc95f9951ee40c09a7ae807746cf51403045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb" } From 5fdc05c00ba5b5cad0beef27a7d35669f7c0e19c Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 11 Mar 2019 18:31:05 +0100 Subject: [PATCH 15/23] test(core-tester-cli): adjust block fixture --- .../core-tester-cli/__fixtures__/block.json | 198 ++++++++---------- 1 file changed, 92 insertions(+), 106 deletions(-) diff --git a/__tests__/integration/core-tester-cli/__fixtures__/block.json b/__tests__/integration/core-tester-cli/__fixtures__/block.json index d828facaac..7c33aa01a1 100644 --- a/__tests__/integration/core-tester-cli/__fixtures__/block.json +++ b/__tests__/integration/core-tester-cli/__fixtures__/block.json @@ -1,140 +1,126 @@ { "data": { - "id": "7176646138626297930", + "id": "17605317082329008056", "version": 0, "height": 1760000, - "timestamp": 24760440, + "timestamp": 62222080, "previousBlock": "3112633353705641986", "numberOfTransactions": 7, - "totalAmount": "3890300", + "totalAmount": "10500000000", "totalFee": "70000000", "reward": "200000000", "payloadLength": 224, - "payloadHash": "3784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282", - "generatorPublicKey": "020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a325", - "blockSignature": "3045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", + "payloadHash": "de56269cae3ab156f6979b94a04c30b82ed7d6f9a97d162583c98215c18c65db", + "generatorPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "blockSignature": "30450221008c59bd2379061ad3539b73284fc0bbb57dbc97efd54f55010ba3f198c04dde7402202e482126b3084c6313c1378d686df92a3e2ef5581323de11e74fe07eeab339f3", "transactions": [ { + "version": 1, + "network": 30, "type": 0, - "amount": 555760, - "fee": 10000000, - "recipientId": "DB4gFuDztmdGALMb8i1U4Z4R5SktxpNTAY", - "timestamp": 24760418, - "asset": {}, - "vendorField": "Goose Voter - True Block Weight", - "senderPublicKey": "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - "signature": "304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb978", - "secondSignature": "30450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717", - "id": "170543154a3b79459cbaa529f9f62b6f1342682799eb549dbf09fcca2d1f9c11", - "senderId": "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - "hop": 2, - "broadcast": false, - "blockId": "7176646138626297930" + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1300000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "30440220714c2627f0e9c3bd6bf13b8b4faa5ec2d677694c27f580e2f9e3875bde9bc36f02201c33faacab9eafd799d9ceecaa153e3b87b4cd04535195261fd366e552652549", + "id": "188b4d9d95a58e4e18d9ce9db28f2010323b90b5afd36a474d7ae7bf70772bb0", + "blockId": "17605317082329008056", + "sequence": 0 }, { + "version": 1, + "network": 30, "type": 0, - "amount": 555750, - "fee": 10000000, - "recipientId": "DGExsNogZR7JFa2656ZFP9TMWJYJh5djzQ", - "timestamp": 24760416, - "asset": {}, - "vendorField": "Goose Voter - True Block Weight", - "senderPublicKey": "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - "signature": "304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727", - "secondSignature": "304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9", - "id": "1da153f37eceda233ff1b407ac18e47b3cae47c14cdcd5297d929618a916c4a7", - "senderId": "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - "hop": 2, - "broadcast": false, - "blockId": "7176646138626297930" + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1700000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "3045022100e6039f810684515c0d6b31039040a76c98f3624b6454cb156a0a2137e5f8dba7022001ada19bcca5798e1c7cc8cc39bab5d4019525e3d72a42bd2c4129352b8ead87", + "id": "23084f2cc566f6144a8f447bc784de64a0b0646776060482d8550856145e11e2", + "blockId": "17605317082329008056", + "sequence": 1 }, { + "version": 1, + "network": 30, "type": 0, - "amount": 555770, - "fee": 10000000, - "recipientId": "DHGK5np6LuMMErfRfC5CmjpGu3ME85c25n", - "timestamp": 24760420, - "asset": {}, - "vendorField": "Goose Voter - True Block Weight", - "senderPublicKey": "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - "signature": "304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a", - "secondSignature": "3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099f", - "id": "1e255f07dc25ce22d900ea81663c8f00d05a7b7c061e6fc3c731b05d642fa0b9", - "senderId": "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - "hop": 2, - "broadcast": false, - "blockId": "7176646138626297930" + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1500000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "3045022100c2b5ef772b36e468e95ec2e457bfaba7bad0e13b3faf57e229ff5d67a0e017c902202339664595ea5c70ce20e4dd182532f7fa385d86575b0476ff3eda9f9785e1e9", + "id": "743ce0a590c2af90e4734db3630b52d7a7cbc2bc228d75ae6409c0b6d184bfad", + "blockId": "17605317082329008056", + "sequence": 2 }, { + "version": 1, + "network": 30, "type": 0, - "amount": 555750, - "fee": 10000000, - "recipientId": "D7pcLJNGe197ibmWEmT8mM9KKU1htrcDyW", - "timestamp": 24760417, - "asset": {}, - "vendorField": "Goose Voter - True Block Weight", - "senderPublicKey": "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - "signature": "3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11", - "secondSignature": "304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79", - "id": "66336c61d6ec623f8a1d2fd156a0fac16a4fe93bb3fba337859355c2119923a8", - "senderId": "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - "hop": 2, - "broadcast": false, - "blockId": "7176646138626297930" + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1600000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "30450221009ceb56688705e6b12000bde726ca123d84982231d7434f059612ff5f987409c602200d908667877c902e7ba35024951046b883e0bce9103d4717928d94ecc958884a", + "id": "877780706b62b437913ef4ea30c6e370f8877ef7a5bac58d8cebca83b7e20060", + "blockId": "17605317082329008056", + "sequence": 3 }, { + "version": 1, + "network": 30, "type": 0, - "amount": 555760, - "fee": 10000000, - "recipientId": "DD4yhwzryQdNGqKtezmycToQv63g27Tqqq", - "timestamp": 24760418, - "asset": {}, - "vendorField": "Goose Voter - True Block Weight", - "senderPublicKey": "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - "signature": "30450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e8", - "secondSignature": "30440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64", - "id": "78db36f7d79f51c67d7210ee3819dfb8d0d47b16a7484ebf55c5a055b17209a3", - "senderId": "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - "hop": 2, - "broadcast": false, - "blockId": "7176646138626297930" + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1200000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "30440220464beac6d49943ad8afaac4fdc863c9cd7cf3a84f9938c1d7269ed522298f11a02203581bf180de1966f86d914afeb005e1e818c9213514f96a34e1391c2a08514fa", + "id": "947fe8745eeed8fa6e5ad62a8dad29bcf3d50ce001907926c486460d1cc1f1c0", + "blockId": "17605317082329008056", + "sequence": 4 }, { + "version": 1, + "network": 30, "type": 0, - "amount": 555760, - "fee": 10000000, - "recipientId": "D5LiYGXL5keycWuTF6AFFwSRc6Mt4uEHMu", - "timestamp": 24760419, - "asset": {}, - "vendorField": "Goose Voter - True Block Weight", - "senderPublicKey": "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - "signature": "3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e", - "secondSignature": "3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739", - "id": "83c80bb58777bb43f5037544b44ef69f191d3548fd1b2a00bed368f9f0d694c5", - "senderId": "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - "hop": 2, - "broadcast": false, - "blockId": "7176646138626297930" + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1800000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "3045022100c7b40d7134d909762d18d6bfb7ac1c32be0ee8c047020131f499faea70ca0b2b0220117c0cf026f571f5a85e3ae800a6fd595185076ff38e64c7a4bd14f34e1d4dd1", + "id": "98387933d65fabffe2642464d4c7b1ff5fe1fa5a35992f834b0ac145dff462ea", + "blockId": "17605317082329008056", + "sequence": 5 }, { + "version": 1, + "network": 30, "type": 0, - "amount": 555750, - "fee": 10000000, - "recipientId": "DPopNLwMvv4zSjdZnqUk8HFH13Mcb7NbEK", - "timestamp": 24760416, - "asset": {}, - "vendorField": "Goose Voter - True Block Weight", - "senderPublicKey": "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - "signature": "3045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4", - "secondSignature": "304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb", - "id": "d2faf992fdd5da96d6d15038b6ddb65230338fa2096e45e44da51daad5e2f3ca", - "senderId": "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - "hop": 2, - "broadcast": false, - "blockId": "7176646138626297930" + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1400000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "304402206a4a8e4e6918fbc15728653b117f51db716aeb04e5ee1de047f80b0476ee4efb02200f486dfaf0def3f3e8636d46ee75a2c07de9714ce4283a25fde9b6218b5e7923", + "id": "e93345dd9a87ac4e84d9bfd892dfbfeb02e546e5bd7822168d0f72c7662e6176", + "blockId": "17605317082329008056", + "sequence": 6 } ] }, - "serialized": "0000000078d0790100db1a002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", - "serializedFull": "0000000078d0790100db1a002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29ff000000fe00000000010000ff000000ff000000ff000000ff000000ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e40fad23d21da7a4fd4decb5c49726ea22f5e6bf6304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb97830450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e79c579fb08f448879c22fe965906b4e3b88d02ed304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9ff011e0064d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874fa7a080000000000000000001e84fee45dde2b11525afe192a2e991d014ff93a36304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099fff011e0061d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e1d69583ede5ee82d220e74bffb36bae2ce762dfb3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e56f9a37a859f4f84e93ce7593e809b15a524db2930450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e830440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64ff011e0063d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e0232a083c16aba4362dddec1b3050ffdd6d43f2e3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001eccc4fce0dc95f9951ee40c09a7ae807746cf51403045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb" + "serialized": "00000000006fb50300db1a002b324b8b33a85802070000000049d97102000000801d2c040000000000c2eb0b00000000e0000000de56269cae3ab156f6979b94a04c30b82ed7d6f9a97d162583c98215c18c65db03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3730450221008c59bd2379061ad3539b73284fc0bbb57dbc97efd54f55010ba3f198c04dde7402202e482126b3084c6313c1378d686df92a3e2ef5581323de11e74fe07eeab339f3", + "serializedFull": "00000000006fb50300db1a002b324b8b33a85802070000000049d97102000000801d2c040000000000c2eb0b00000000e0000000de56269cae3ab156f6979b94a04c30b82ed7d6f9a97d162583c98215c18c65db03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3730450221008c59bd2379061ad3539b73284fc0bbb57dbc97efd54f55010ba3f198c04dde7402202e482126b3084c6313c1378d686df92a3e2ef5581323de11e74fe07eeab339f3990000009a0000009a0000009a000000990000009a00000099000000ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000006d7c4d00000000000000001e46550551e12d2531ea9d2968696b75f68ae7f29530440220714c2627f0e9c3bd6bf13b8b4faa5ec2d677694c27f580e2f9e3875bde9bc36f02201c33faacab9eafd799d9ceecaa153e3b87b4cd04535195261fd366e552652549ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3780969800000000000000f1536500000000000000001e46550551e12d2531ea9d2968696b75f68ae7f2953045022100e6039f810684515c0d6b31039040a76c98f3624b6454cb156a0a2137e5f8dba7022001ada19bcca5798e1c7cc8cc39bab5d4019525e3d72a42bd2c4129352b8ead87ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000002f685900000000000000001e46550551e12d2531ea9d2968696b75f68ae7f2953045022100c2b5ef772b36e468e95ec2e457bfaba7bad0e13b3faf57e229ff5d67a0e017c902202339664595ea5c70ce20e4dd182532f7fa385d86575b0476ff3eda9f9785e1e9ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3780969800000000000000105e5f00000000000000001e46550551e12d2531ea9d2968696b75f68ae7f29530450221009ceb56688705e6b12000bde726ca123d84982231d7434f059612ff5f987409c602200d908667877c902e7ba35024951046b883e0bce9103d4717928d94ecc958884aff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000008c864700000000000000001e46550551e12d2531ea9d2968696b75f68ae7f29530440220464beac6d49943ad8afaac4fdc863c9cd7cf3a84f9938c1d7269ed522298f11a02203581bf180de1966f86d914afeb005e1e818c9213514f96a34e1391c2a08514faff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3780969800000000000000d2496b00000000000000001e46550551e12d2531ea9d2968696b75f68ae7f2953045022100c7b40d7134d909762d18d6bfb7ac1c32be0ee8c047020131f499faea70ca0b2b0220117c0cf026f571f5a85e3ae800a6fd595185076ff38e64c7a4bd14f34e1d4dd1ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000004e725300000000000000001e46550551e12d2531ea9d2968696b75f68ae7f295304402206a4a8e4e6918fbc15728653b117f51db716aeb04e5ee1de047f80b0476ee4efb02200f486dfaf0def3f3e8636d46ee75a2c07de9714ce4283a25fde9b6218b5e7923" } From 0cd7177880b2ac1c05d35b4d238a40f91f097090 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 11 Mar 2019 18:52:56 +0100 Subject: [PATCH 16/23] test(core-forger): adjust block fixture --- .../integration/core-forger/__fixtures__/block.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/__tests__/integration/core-forger/__fixtures__/block.ts b/__tests__/integration/core-forger/__fixtures__/block.ts index 58780a3a8b..871d131cd5 100644 --- a/__tests__/integration/core-forger/__fixtures__/block.ts +++ b/__tests__/integration/core-forger/__fixtures__/block.ts @@ -1,19 +1,19 @@ import { models } from "@arkecosystem/crypto"; export const sampleBlock = new models.Block({ - id: "4398082439836560423", + id: "7686497416922799951", version: 0, - timestamp: 35751416, - height: 3342573, - previousBlock: "14909996519459393858", + timestamp: 62225384, + height: 1760011, + previousBlock: "1111111111111111111", numberOfTransactions: 0, totalAmount: 0, totalFee: 0, reward: 200000000, payloadLength: 0, payloadHash: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - generatorPublicKey: "03806036bc1bb470144184b10f815431c580ae2b806d5fd0ba2118dca823c5c4a6", + generatorPublicKey: "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", blockSignature: // tslint:disable-next-line:max-line-length - "3045022100d0ad616575b1039b89ae22bb8efbce80dd14f52d193ef7a1d0a76fab0253aa4f02206a347bb5d4dc372e5a7ad3f16ae44409d9190fbd8138e9b4e99f83ca3236f91d", + "304402205b5da8a3cfb28398baaa50e299d735226c4455bdfdf5cb650afb53b0f22a93c60220572c4a4652edcd1bb85720884a7b0732add4dd50e7a0984325807770c99939bd", }); From ab2a49378f915ab2db64a4d71f362eb410510a0f Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 11 Mar 2019 19:40:28 +0100 Subject: [PATCH 17/23] test(crypto): adjust block fixtures --- __tests__/unit/crypto/fixtures/block.ts | 399 +++++------------- __tests__/unit/crypto/models/block.test.ts | 2 +- .../transactions/deserializers/block.test.ts | 1 - 3 files changed, 111 insertions(+), 291 deletions(-) diff --git a/__tests__/unit/crypto/fixtures/block.ts b/__tests__/unit/crypto/fixtures/block.ts index fb8b168d60..049e475c82 100644 --- a/__tests__/unit/crypto/fixtures/block.ts +++ b/__tests__/unit/crypto/fixtures/block.ts @@ -1,311 +1,132 @@ export const dummyBlock = { - id: "7176646138626297930", - version: 0, - height: 2243161, - timestamp: 24760440, - previousBlock: "3112633353705641986", - numberOfTransactions: 7, - totalAmount: "3890300", - totalFee: "70000000", - reward: "200000000", - payloadLength: 224, - payloadHash: "3784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282", - generatorPublicKey: "020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a325", - blockSignature: - "3045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", - transactions: [ + "id": "17605317082329008056", + "version": 0, + "height": 1760000, + "timestamp": 62222080, + "previousBlock": "3112633353705641986", + "numberOfTransactions": 7, + "totalAmount": "10500000000", + "totalFee": "70000000", + "reward": "200000000", + "payloadLength": 224, + "payloadHash": "de56269cae3ab156f6979b94a04c30b82ed7d6f9a97d162583c98215c18c65db", + "generatorPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "blockSignature": "30450221008c59bd2379061ad3539b73284fc0bbb57dbc97efd54f55010ba3f198c04dde7402202e482126b3084c6313c1378d686df92a3e2ef5581323de11e74fe07eeab339f3", + "transactions": [ { - type: 0, - amount: 555760, - fee: 10000000, - recipientId: "DB4gFuDztmdGALMb8i1U4Z4R5SktxpNTAY", - timestamp: 24760418, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb978", - secondSignature: - "30450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717", - id: "170543154a3b79459cbaa529f9f62b6f1342682799eb549dbf09fcca2d1f9c11", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", + "version": 1, + "network": 30, + "type": 0, + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1300000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "30440220714c2627f0e9c3bd6bf13b8b4faa5ec2d677694c27f580e2f9e3875bde9bc36f02201c33faacab9eafd799d9ceecaa153e3b87b4cd04535195261fd366e552652549", + "id": "188b4d9d95a58e4e18d9ce9db28f2010323b90b5afd36a474d7ae7bf70772bb0", + "blockId": "17605317082329008056", + "sequence": 0 }, { - type: 0, - amount: 555750, - fee: 10000000, - recipientId: "DGExsNogZR7JFa2656ZFP9TMWJYJh5djzQ", - timestamp: 24760416, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727", - secondSignature: - "304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9", - id: "1da153f37eceda233ff1b407ac18e47b3cae47c14cdcd5297d929618a916c4a7", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", + "version": 1, + "network": 30, + "type": 0, + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1700000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "3045022100e6039f810684515c0d6b31039040a76c98f3624b6454cb156a0a2137e5f8dba7022001ada19bcca5798e1c7cc8cc39bab5d4019525e3d72a42bd2c4129352b8ead87", + "id": "23084f2cc566f6144a8f447bc784de64a0b0646776060482d8550856145e11e2", + "blockId": "17605317082329008056", + "sequence": 1 }, { - type: 0, - amount: 555770, - fee: 10000000, - recipientId: "DHGK5np6LuMMErfRfC5CmjpGu3ME85c25n", - timestamp: 24760420, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a", - secondSignature: - "3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099f", - id: "1e255f07dc25ce22d900ea81663c8f00d05a7b7c061e6fc3c731b05d642fa0b9", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", + "version": 1, + "network": 30, + "type": 0, + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1500000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "3045022100c2b5ef772b36e468e95ec2e457bfaba7bad0e13b3faf57e229ff5d67a0e017c902202339664595ea5c70ce20e4dd182532f7fa385d86575b0476ff3eda9f9785e1e9", + "id": "743ce0a590c2af90e4734db3630b52d7a7cbc2bc228d75ae6409c0b6d184bfad", + "blockId": "17605317082329008056", + "sequence": 2 }, { - type: 0, - amount: 555750, - fee: 10000000, - recipientId: "D7pcLJNGe197ibmWEmT8mM9KKU1htrcDyW", - timestamp: 24760417, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11", - secondSignature: - "304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79", - id: "66336c61d6ec623f8a1d2fd156a0fac16a4fe93bb3fba337859355c2119923a8", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", + "version": 1, + "network": 30, + "type": 0, + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1600000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "30450221009ceb56688705e6b12000bde726ca123d84982231d7434f059612ff5f987409c602200d908667877c902e7ba35024951046b883e0bce9103d4717928d94ecc958884a", + "id": "877780706b62b437913ef4ea30c6e370f8877ef7a5bac58d8cebca83b7e20060", + "blockId": "17605317082329008056", + "sequence": 3 }, { - type: 0, - amount: 555760, - fee: 10000000, - recipientId: "DD4yhwzryQdNGqKtezmycToQv63g27Tqqq", - timestamp: 24760418, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "30450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e8", - secondSignature: - "30440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64", - id: "78db36f7d79f51c67d7210ee3819dfb8d0d47b16a7484ebf55c5a055b17209a3", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", + "version": 1, + "network": 30, + "type": 0, + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1200000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "30440220464beac6d49943ad8afaac4fdc863c9cd7cf3a84f9938c1d7269ed522298f11a02203581bf180de1966f86d914afeb005e1e818c9213514f96a34e1391c2a08514fa", + "id": "947fe8745eeed8fa6e5ad62a8dad29bcf3d50ce001907926c486460d1cc1f1c0", + "blockId": "17605317082329008056", + "sequence": 4 }, { - type: 0, - amount: 555760, - fee: 10000000, - recipientId: "D5LiYGXL5keycWuTF6AFFwSRc6Mt4uEHMu", - timestamp: 24760419, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e", - secondSignature: - "3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739", - id: "83c80bb58777bb43f5037544b44ef69f191d3548fd1b2a00bed368f9f0d694c5", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", + "version": 1, + "network": 30, + "type": 0, + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1800000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "3045022100c7b40d7134d909762d18d6bfb7ac1c32be0ee8c047020131f499faea70ca0b2b0220117c0cf026f571f5a85e3ae800a6fd595185076ff38e64c7a4bd14f34e1d4dd1", + "id": "98387933d65fabffe2642464d4c7b1ff5fe1fa5a35992f834b0ac145dff462ea", + "blockId": "17605317082329008056", + "sequence": 5 }, { - type: 0, - amount: 555750, - fee: 10000000, - recipientId: "DPopNLwMvv4zSjdZnqUk8HFH13Mcb7NbEK", - timestamp: 24760416, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "3045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4", - secondSignature: - "304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb", - id: "d2faf992fdd5da96d6d15038b6ddb65230338fa2096e45e44da51daad5e2f3ca", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", - }, - ], + "version": 1, + "network": 30, + "type": 0, + "timestamp": 62222080, + "senderPublicKey": "03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37", + "fee": "10000000", + "amount": "1400000000", + "expiration": 0, + "recipientId": "DBYyh2vXcigrJGUHfvmYxVxEqeH7vomw6x", + "signature": "304402206a4a8e4e6918fbc15728653b117f51db716aeb04e5ee1de047f80b0476ee4efb02200f486dfaf0def3f3e8636d46ee75a2c07de9714ce4283a25fde9b6218b5e7923", + "id": "e93345dd9a87ac4e84d9bfd892dfbfeb02e546e5bd7822168d0f72c7662e6176", + "blockId": "17605317082329008056", + "sequence": 6 + } + ] }; export const dummyBlock2 = { - data: { - id: "7176646138626297930", - version: 0, - height: 2243161, - timestamp: 24760440, - previousBlock: "3112633353705641986", - numberOfTransactions: 7, - totalAmount: "3890300", - totalFee: "70000000", - reward: "200000000", - payloadLength: 224, - payloadHash: "3784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282", - generatorPublicKey: "020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a325", - blockSignature: - "3045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", - transactions: [ - { - type: 0, - amount: 555760, - fee: 10000000, - recipientId: "DB4gFuDztmdGALMb8i1U4Z4R5SktxpNTAY", - timestamp: 24760418, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb978", - secondSignature: - "30450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717", - id: "170543154a3b79459cbaa529f9f62b6f1342682799eb549dbf09fcca2d1f9c11", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", - }, - { - type: 0, - amount: 555750, - fee: 10000000, - recipientId: "DGExsNogZR7JFa2656ZFP9TMWJYJh5djzQ", - timestamp: 24760416, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727", - secondSignature: - "304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9", - id: "1da153f37eceda233ff1b407ac18e47b3cae47c14cdcd5297d929618a916c4a7", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", - }, - { - type: 0, - amount: 555770, - fee: 10000000, - recipientId: "DHGK5np6LuMMErfRfC5CmjpGu3ME85c25n", - timestamp: 24760420, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a", - secondSignature: - "3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099f", - id: "1e255f07dc25ce22d900ea81663c8f00d05a7b7c061e6fc3c731b05d642fa0b9", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", - }, - { - type: 0, - amount: 555750, - fee: 10000000, - recipientId: "D7pcLJNGe197ibmWEmT8mM9KKU1htrcDyW", - timestamp: 24760417, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11", - secondSignature: - "304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79", - id: "66336c61d6ec623f8a1d2fd156a0fac16a4fe93bb3fba337859355c2119923a8", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", - }, - { - type: 0, - amount: 555760, - fee: 10000000, - recipientId: "DD4yhwzryQdNGqKtezmycToQv63g27Tqqq", - timestamp: 24760418, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "30450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e8", - secondSignature: - "30440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64", - id: "78db36f7d79f51c67d7210ee3819dfb8d0d47b16a7484ebf55c5a055b17209a3", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", - }, - { - type: 0, - amount: 555760, - fee: 10000000, - recipientId: "D5LiYGXL5keycWuTF6AFFwSRc6Mt4uEHMu", - timestamp: 24760419, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e", - secondSignature: - "3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739", - id: "83c80bb58777bb43f5037544b44ef69f191d3548fd1b2a00bed368f9f0d694c5", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", - }, - { - type: 0, - amount: 555750, - fee: 10000000, - recipientId: "DPopNLwMvv4zSjdZnqUk8HFH13Mcb7NbEK", - timestamp: 24760416, - asset: {}, - vendorField: "Goose Voter - True Block Weight", - senderPublicKey: "0265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c0", - signature: - "3045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4", - secondSignature: - "304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb", - id: "d2faf992fdd5da96d6d15038b6ddb65230338fa2096e45e44da51daad5e2f3ca", - senderId: "DB8LnnQqYvHpG4WkGJ9AJWBYEct7G3yRZg", - hop: 2, - broadcast: false, - blockId: "7176646138626297930", - }, - ], - }, + data: dummyBlock, serialized: - "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29", + "00000000006fb50300db1a002b324b8b33a85802070000000049d97102000000801d2c040000000000c2eb0b00000000e0000000de56269cae3ab156f6979b94a04c30b82ed7d6f9a97d162583c98215c18c65db03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3730450221008c59bd2379061ad3539b73284fc0bbb57dbc97efd54f55010ba3f198c04dde7402202e482126b3084c6313c1378d686df92a3e2ef5581323de11e74fe07eeab339f3", serializedFull: - "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29ff000000fe00000000010000ff000000ff000000ff000000ff000000ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e40fad23d21da7a4fd4decb5c49726ea22f5e6bf6304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb97830450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e79c579fb08f448879c22fe965906b4e3b88d02ed304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9ff011e0064d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874fa7a080000000000000000001e84fee45dde2b11525afe192a2e991d014ff93a36304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099fff011e0061d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e1d69583ede5ee82d220e74bffb36bae2ce762dfb3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e56f9a37a859f4f84e93ce7593e809b15a524db2930450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e830440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64ff011e0063d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e0232a083c16aba4362dddec1b3050ffdd6d43f2e3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001eccc4fce0dc95f9951ee40c09a7ae807746cf51403045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb", + "00000000006fb50300db1a002b324b8b33a85802070000000049d97102000000801d2c040000000000c2eb0b00000000e0000000de56269cae3ab156f6979b94a04c30b82ed7d6f9a97d162583c98215c18c65db03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3730450221008c59bd2379061ad3539b73284fc0bbb57dbc97efd54f55010ba3f198c04dde7402202e482126b3084c6313c1378d686df92a3e2ef5581323de11e74fe07eeab339f3990000009a0000009a0000009a000000990000009a00000099000000ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000006d7c4d00000000000000001e46550551e12d2531ea9d2968696b75f68ae7f29530440220714c2627f0e9c3bd6bf13b8b4faa5ec2d677694c27f580e2f9e3875bde9bc36f02201c33faacab9eafd799d9ceecaa153e3b87b4cd04535195261fd366e552652549ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3780969800000000000000f1536500000000000000001e46550551e12d2531ea9d2968696b75f68ae7f2953045022100e6039f810684515c0d6b31039040a76c98f3624b6454cb156a0a2137e5f8dba7022001ada19bcca5798e1c7cc8cc39bab5d4019525e3d72a42bd2c4129352b8ead87ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000002f685900000000000000001e46550551e12d2531ea9d2968696b75f68ae7f2953045022100c2b5ef772b36e468e95ec2e457bfaba7bad0e13b3faf57e229ff5d67a0e017c902202339664595ea5c70ce20e4dd182532f7fa385d86575b0476ff3eda9f9785e1e9ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3780969800000000000000105e5f00000000000000001e46550551e12d2531ea9d2968696b75f68ae7f29530450221009ceb56688705e6b12000bde726ca123d84982231d7434f059612ff5f987409c602200d908667877c902e7ba35024951046b883e0bce9103d4717928d94ecc958884aff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000008c864700000000000000001e46550551e12d2531ea9d2968696b75f68ae7f29530440220464beac6d49943ad8afaac4fdc863c9cd7cf3a84f9938c1d7269ed522298f11a02203581bf180de1966f86d914afeb005e1e818c9213514f96a34e1391c2a08514faff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3780969800000000000000d2496b00000000000000001e46550551e12d2531ea9d2968696b75f68ae7f2953045022100c7b40d7134d909762d18d6bfb7ac1c32be0ee8c047020131f499faea70ca0b2b0220117c0cf026f571f5a85e3ae800a6fd595185076ff38e64c7a4bd14f34e1d4dd1ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000004e725300000000000000001e46550551e12d2531ea9d2968696b75f68ae7f295304402206a4a8e4e6918fbc15728653b117f51db716aeb04e5ee1de047f80b0476ee4efb02200f486dfaf0def3f3e8636d46ee75a2c07de9714ce4283a25fde9b6218b5e7923", }; export const dummyBlock3 = { diff --git a/__tests__/unit/crypto/models/block.test.ts b/__tests__/unit/crypto/models/block.test.ts index 33dc52d428..33caa2f63e 100644 --- a/__tests__/unit/crypto/models/block.test.ts +++ b/__tests__/unit/crypto/models/block.test.ts @@ -375,7 +375,7 @@ describe("Models - Block", () => { // @ts-ignore const s = Block.serializeFull(dummyBlock).toString("hex"); const serialized = - "0000000078d07901593a22002b324b8b33a85802070000007c5c3b0000000000801d2c040000000000c2eb0b00000000e00000003784b953afcf936bdffd43fdf005b5732b49c1fc6b11e195c364c20b2eb06282020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a3253045022100eee6c37b5e592e99811d588532726353592923f347c701d52912e6d583443e400220277ffe38ad31e216ba0907c4738fed19b2071246b150c72c0a52bae4477ebe29ff000000fe00000000010000ff000000ff000000ff000000ff000000ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e40fad23d21da7a4fd4decb5c49726ea22f5e6bf6304402204f12469157b19edd06ba25fcad3d4a5ef5b057c23f9e02de4641e6f8eef0553e022010121ab282f83efe1043de9c16bbf2c6845a03684229a0d7c965ffb9abdfb97830450221008327862f0b9178d6665f7d6674978c5caf749649558d814244b1c66cdf945c40022015918134ef01fed3fe2a2efde3327917731344332724522c75c2799a14f78717ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e79c579fb08f448879c22fe965906b4e3b88d02ed304402205f82feb8c5d1d79c565c2ff7badb93e4c9827b132d135dda11cb25427d4ef8ac02205ff136f970533c4ec4c7d0cd1ea7e02d7b62629b66c6c93265f608d7f2389727304402207e912031fcc700d8a55fbc415993302a0d8e6aea128397141b640b6dba52331702201fd1ad3984e42af44f548907add6cb7ad72ca0070c8cc1d8dc9bbda208c56bd9ff011e0064d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874fa7a080000000000000000001e84fee45dde2b11525afe192a2e991d014ff93a36304502210083216e6969e068770e6d2fe5c244881002309df84d20290ddf3f858967ed010202202a479b3da5080ea475d310ff13494654b42db75886a8808bd211b4bdb9146a7a3045022100e1dcab3406bbeb968146a4a391909ce41df9b71592a753b001e7c2ee1d382c5102202a74aeafd4a152ec61854636fbae829c41f1416c1e0637a0809408394973099fff011e0061d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001e1d69583ede5ee82d220e74bffb36bae2ce762dfb3045022100cd4fa9855227be11e17201419dacfbbd5d9946df8d6792a9488160025693821402207fb83969bad6a26959f437b5bb88e255b0a48eb04964d0c0d29f7ee94bd15e11304402205f50c2991a17743d17ffbb09159cadc35a3f848044261842879ccf5be9d81c5e022023bf21c32fb6e94494104f15f8d3a942ab120d0abd6fb4c93790b68e1b307a79ff011e0062d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e56f9a37a859f4f84e93ce7593e809b15a524db2930450221009c792062e13399ac6756b2e9f137194d06e106360ac0f3e24e55c7249cee0b3602205dc1d9c76d0451d1cb5a2396783a13e6d2d790ccfd49291e3d0a78349f7ea0e830440220083ba8a9af49b8be6e93794d71ec43ffc96a158375810e5d9f2478e71655315b0220278402ecaa1d224dab9f0f3b28295bbaea339c85c7400edafdc49df87439fc64ff011e0063d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874f07a080000000000000000001e0232a083c16aba4362dddec1b3050ffdd6d43f2e3044022063c65263e42be02bd9831b375c1d76a88332f00ed0557ecc1e7d2375ca40070902206797b5932c0bad68444beb5a38daa7cadf536ee2144e0d9777b812284d14374e3045022100b04da6692f75d43229ffd8486c1517e8952d38b4c03dfac38b6b360190a5c33e0220776622e5f09f92a1258b4a011f22181c977b622b8d1bbb2f83b42f4126d00739ff011e0060d079010265c1f6b8c1966a90f3fed7bc32fd4f42238ab4938fdb2a4e7ddd01ae8b58b4c080969800000000001f476f6f736520566f746572202d205472756520426c6f636b20576569676874e67a080000000000000000001eccc4fce0dc95f9951ee40c09a7ae807746cf51403045022100d4513c3608c2072e38e7a0e3bb8daf2cd5f7cc6fec9a5570dccd1eda696c591902202ecbbf3c9d0757be7b23c8b1cc6481c51600d158756c47fcb6f4a7f4893e31c4304402201fed4858d0806dd32220960900a871dd2f60e1f623af75feef9b1034a9a0a46402205a29b27c63fcc3e1ee1e77ecbbf4dd6e7db09901e7a09b9fd490cd68d62392cb"; + "00000000006fb50300db1a002b324b8b33a85802070000000049d97102000000801d2c040000000000c2eb0b00000000e0000000de56269cae3ab156f6979b94a04c30b82ed7d6f9a97d162583c98215c18c65db03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3730450221008c59bd2379061ad3539b73284fc0bbb57dbc97efd54f55010ba3f198c04dde7402202e482126b3084c6313c1378d686df92a3e2ef5581323de11e74fe07eeab339f3990000009a0000009a0000009a000000990000009a00000099000000ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000006d7c4d00000000000000001e46550551e12d2531ea9d2968696b75f68ae7f29530440220714c2627f0e9c3bd6bf13b8b4faa5ec2d677694c27f580e2f9e3875bde9bc36f02201c33faacab9eafd799d9ceecaa153e3b87b4cd04535195261fd366e552652549ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3780969800000000000000f1536500000000000000001e46550551e12d2531ea9d2968696b75f68ae7f2953045022100e6039f810684515c0d6b31039040a76c98f3624b6454cb156a0a2137e5f8dba7022001ada19bcca5798e1c7cc8cc39bab5d4019525e3d72a42bd2c4129352b8ead87ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000002f685900000000000000001e46550551e12d2531ea9d2968696b75f68ae7f2953045022100c2b5ef772b36e468e95ec2e457bfaba7bad0e13b3faf57e229ff5d67a0e017c902202339664595ea5c70ce20e4dd182532f7fa385d86575b0476ff3eda9f9785e1e9ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3780969800000000000000105e5f00000000000000001e46550551e12d2531ea9d2968696b75f68ae7f29530450221009ceb56688705e6b12000bde726ca123d84982231d7434f059612ff5f987409c602200d908667877c902e7ba35024951046b883e0bce9103d4717928d94ecc958884aff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000008c864700000000000000001e46550551e12d2531ea9d2968696b75f68ae7f29530440220464beac6d49943ad8afaac4fdc863c9cd7cf3a84f9938c1d7269ed522298f11a02203581bf180de1966f86d914afeb005e1e818c9213514f96a34e1391c2a08514faff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac3780969800000000000000d2496b00000000000000001e46550551e12d2531ea9d2968696b75f68ae7f2953045022100c7b40d7134d909762d18d6bfb7ac1c32be0ee8c047020131f499faea70ca0b2b0220117c0cf026f571f5a85e3ae800a6fd595185076ff38e64c7a4bd14f34e1d4dd1ff011e00006fb50303287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37809698000000000000004e725300000000000000001e46550551e12d2531ea9d2968696b75f68ae7f295304402206a4a8e4e6918fbc15728653b117f51db716aeb04e5ee1de047f80b0476ee4efb02200f486dfaf0def3f3e8636d46ee75a2c07de9714ce4283a25fde9b6218b5e7923"; const block1 = new Block(dummyBlock); const block2 = new Block(Block.deserialize(serialized)); diff --git a/__tests__/unit/crypto/transactions/deserializers/block.test.ts b/__tests__/unit/crypto/transactions/deserializers/block.test.ts index 7854878b8f..76963a48b9 100644 --- a/__tests__/unit/crypto/transactions/deserializers/block.test.ts +++ b/__tests__/unit/crypto/transactions/deserializers/block.test.ts @@ -50,7 +50,6 @@ describe("block deserializer", () => { "fee", "amount", "recipientId", - "vendorField", "signature", ]; deserialized.transactions.forEach(tx => { From 5b278e4c3c09c1c32c7cd52658b43e553cb8d83c Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Tue, 12 Mar 2019 10:14:23 +0100 Subject: [PATCH 18/23] misc(crypto): adjust height to switch to full sha256 block ids Assuming no block misses: devnet: Height 1895000 at Mon Mar 25 11:29:01 CET 2019 mainnet: Height 8050000 at Thu Apr 18 08:11:27 CEST 2019 --- packages/crypto/src/networks/devnet/milestones.json | 2 +- packages/crypto/src/networks/mainnet/milestones.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/crypto/src/networks/devnet/milestones.json b/packages/crypto/src/networks/devnet/milestones.json index 1fbdaecfc0..0398935c4d 100644 --- a/packages/crypto/src/networks/devnet/milestones.json +++ b/packages/crypto/src/networks/devnet/milestones.json @@ -53,7 +53,7 @@ "vendorFieldLength": 255 }, { - "height": 1860000, + "height": 1895000, "block": { "idFullSha256": true } diff --git a/packages/crypto/src/networks/mainnet/milestones.json b/packages/crypto/src/networks/mainnet/milestones.json index 9823c042e9..0188f69328 100644 --- a/packages/crypto/src/networks/mainnet/milestones.json +++ b/packages/crypto/src/networks/mainnet/milestones.json @@ -41,7 +41,7 @@ "vendorFieldLength": 255 }, { - "height": 10000000000, + "height": 8050000, "block": { "idFullSha256": true } From 4f6edad3199393a648869550df82f11f02a9a8a1 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Tue, 12 Mar 2019 17:55:15 +0100 Subject: [PATCH 19/23] fix(crypto): Properly handle the first block with full sha256 id The first block to contain full sha256 id will have previousBlock id in the old format. When checking whether the block id is in legit format we must use "milestone height" for id and "milestone height - 1" for previous block id. --- packages/crypto/src/validation/keywords.ts | 4 +++- packages/crypto/src/validation/schemas.ts | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/crypto/src/validation/keywords.ts b/packages/crypto/src/validation/keywords.ts index fa08cbe3b0..dcc20b21f6 100644 --- a/packages/crypto/src/validation/keywords.ts +++ b/packages/crypto/src/validation/keywords.ts @@ -127,7 +127,8 @@ const blockId = (ajv: Ajv) => { const isFullSha256 = /^[0-9a-f]{64}$/i.test(data); if (parentObject && parentObject.height) { - const constants = configManager.getMilestone(parentObject.height); + const h = schema.previousBlock ? parentObject.height - 1 : parentObject.height; + const constants = configManager.getMilestone(h); return constants.block.idFullSha256 ? isFullSha256 : isPartial; } @@ -139,6 +140,7 @@ const blockId = (ajv: Ajv) => { type: "object", properties: { allowNullWhenGenesis: { type: "boolean" }, + previousBlock: { type: "boolean" }, }, additionalItems: false, }, diff --git a/packages/crypto/src/validation/schemas.ts b/packages/crypto/src/validation/schemas.ts index 03cead9cd7..436b55db2f 100644 --- a/packages/crypto/src/validation/schemas.ts +++ b/packages/crypto/src/validation/schemas.ts @@ -71,8 +71,8 @@ export const schemas = { idHex: { blockId: {} }, version: { type: "integer", minimum: 0 }, timestamp: { type: "integer", minimum: 0 }, - previousBlock: { blockId: { allowNullWhenGenesis: true } }, - previousBlockHex: { blockId: { allowNullWhenGenesis: true } }, + previousBlock: { blockId: { allowNullWhenGenesis: true, previousBlock: true } }, + previousBlockHex: { blockId: { allowNullWhenGenesis: true, previousBlock: true } }, height: { type: "integer", minimum: 1 }, numberOfTransactions: { type: "integer" }, totalAmount: { bignumber: { minimum: 0, bypassGenesis: true, block: true } }, From a8b40858d6c369902ca98e74bc8dae162ef03cc7 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Wed, 13 Mar 2019 08:39:53 +0100 Subject: [PATCH 20/23] misc(crypto): Lower devnet milestone for full sha256 block id Previous one: Height 1895000 at Mon Mar 25 12:14:46 CET 2019 New one: Height 1840000 at Wed Mar 20 10:01:23 CET 2019 --- packages/crypto/src/networks/devnet/milestones.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/crypto/src/networks/devnet/milestones.json b/packages/crypto/src/networks/devnet/milestones.json index 0398935c4d..9eb4bd378b 100644 --- a/packages/crypto/src/networks/devnet/milestones.json +++ b/packages/crypto/src/networks/devnet/milestones.json @@ -53,7 +53,7 @@ "vendorFieldLength": 255 }, { - "height": 1895000, + "height": 1840000, "block": { "idFullSha256": true } From f7449416b16b4dfcaa3bf6480901d11711f708c5 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Wed, 13 Mar 2019 08:54:27 +0100 Subject: [PATCH 21/23] misc(crypto): Introduce custom error class for prev block id mismatch --- packages/crypto/src/errors.ts | 10 ++++++++++ packages/crypto/src/transactions/serializers/block.ts | 7 ++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/crypto/src/errors.ts b/packages/crypto/src/errors.ts index dc9a9052c8..2d4f0d6367 100644 --- a/packages/crypto/src/errors.ts +++ b/packages/crypto/src/errors.ts @@ -125,3 +125,13 @@ export class BlockSchemaError extends CryptoError { super(what); } } + +export class PreviousBlockIdFormatError extends CryptoError { + constructor(thisBlockHeight: number, previousBlockId: string) { + super( + `The config denotes that the block at height ${thisBlockHeight - 1} ` + + `must use full SHA256 block id, but the next block (at ${thisBlockHeight}) ` + + `contains previous block id "${previousBlockId}"`, + ); + } +} diff --git a/packages/crypto/src/transactions/serializers/block.ts b/packages/crypto/src/transactions/serializers/block.ts index 5b1c99ec40..3c2825f8f6 100644 --- a/packages/crypto/src/transactions/serializers/block.ts +++ b/packages/crypto/src/transactions/serializers/block.ts @@ -2,6 +2,7 @@ import ByteBuffer from "bytebuffer"; import { configManager } from "../../managers/config"; import { Block, IBlockData } from "../../models/block"; import { Bignum } from "../../utils"; +import { PreviousBlockIdFormatError } from "../../errors"; import { Transaction } from "../types"; class BlockSerializer { @@ -41,11 +42,7 @@ class BlockSerializer { if (constants.block.idFullSha256) { if (block.previousBlock.length !== 64) { - throw new Error( - `The config denotes that the block at height ${block.height - 1} ` + - `must use full SHA256 block id, however the next block (at ${block.height}) ` + - `contains previousBlock="${block.previousBlock}"`, - ); + throw new PreviousBlockIdFormatError(block.height, block.previousBlock); } block.previousBlockHex = block.previousBlock; } else { From 306463eea71dfd1a2f452671474a9efa40deb888 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Wed, 13 Mar 2019 08:56:05 +0100 Subject: [PATCH 22/23] chore(crypto): rename a variable for readability --- packages/crypto/src/validation/keywords.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/crypto/src/validation/keywords.ts b/packages/crypto/src/validation/keywords.ts index dcc20b21f6..2b8d81b1b4 100644 --- a/packages/crypto/src/validation/keywords.ts +++ b/packages/crypto/src/validation/keywords.ts @@ -127,8 +127,8 @@ const blockId = (ajv: Ajv) => { const isFullSha256 = /^[0-9a-f]{64}$/i.test(data); if (parentObject && parentObject.height) { - const h = schema.previousBlock ? parentObject.height - 1 : parentObject.height; - const constants = configManager.getMilestone(h); + const height = schema.previousBlock ? parentObject.height - 1 : parentObject.height; + const constants = configManager.getMilestone(height); return constants.block.idFullSha256 ? isFullSha256 : isPartial; } From d91fdf01206c4a7eb46b4e138a7a9840e13285ab Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Wed, 13 Mar 2019 08:59:54 +0100 Subject: [PATCH 23/23] chore(crypto): Rename schema keyword for clarity --- packages/crypto/src/validation/keywords.ts | 4 ++-- packages/crypto/src/validation/schemas.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/crypto/src/validation/keywords.ts b/packages/crypto/src/validation/keywords.ts index 2b8d81b1b4..ff5729872d 100644 --- a/packages/crypto/src/validation/keywords.ts +++ b/packages/crypto/src/validation/keywords.ts @@ -127,7 +127,7 @@ const blockId = (ajv: Ajv) => { const isFullSha256 = /^[0-9a-f]{64}$/i.test(data); if (parentObject && parentObject.height) { - const height = schema.previousBlock ? parentObject.height - 1 : parentObject.height; + const height = schema.isPreviousBlock ? parentObject.height - 1 : parentObject.height; const constants = configManager.getMilestone(height); return constants.block.idFullSha256 ? isFullSha256 : isPartial; } @@ -140,7 +140,7 @@ const blockId = (ajv: Ajv) => { type: "object", properties: { allowNullWhenGenesis: { type: "boolean" }, - previousBlock: { type: "boolean" }, + isPreviousBlock: { type: "boolean" }, }, additionalItems: false, }, diff --git a/packages/crypto/src/validation/schemas.ts b/packages/crypto/src/validation/schemas.ts index 436b55db2f..bf66c292f2 100644 --- a/packages/crypto/src/validation/schemas.ts +++ b/packages/crypto/src/validation/schemas.ts @@ -71,8 +71,8 @@ export const schemas = { idHex: { blockId: {} }, version: { type: "integer", minimum: 0 }, timestamp: { type: "integer", minimum: 0 }, - previousBlock: { blockId: { allowNullWhenGenesis: true, previousBlock: true } }, - previousBlockHex: { blockId: { allowNullWhenGenesis: true, previousBlock: true } }, + previousBlock: { blockId: { allowNullWhenGenesis: true, isPreviousBlock: true } }, + previousBlockHex: { blockId: { allowNullWhenGenesis: true, isPreviousBlock: true } }, height: { type: "integer", minimum: 1 }, numberOfTransactions: { type: "integer" }, totalAmount: { bignumber: { minimum: 0, bypassGenesis: true, block: true } },