From 7235e809790967f9c813cc8f8e2c161c3af85574 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Mar 2022 10:32:52 -0300 Subject: [PATCH 01/72] added: type block added --- src/server/blocks/block.types.ts | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/server/blocks/block.types.ts b/src/server/blocks/block.types.ts index efca421..5e7f3f6 100644 --- a/src/server/blocks/block.types.ts +++ b/src/server/blocks/block.types.ts @@ -1,18 +1,44 @@ + +interface INxtConsensus { + baseTarget: number, + generationSignature: string +} interface ITransaction { type: number, id: string, + sender: string, + senderPublicKey: string, + fee: number, + timestamp: number, + signature: string, + recipient: string, + assetId: string, + amount: number, + feeAsset: string } interface IHeader { version: number + timestamp: number, + reference: string, + features: Array, // features: string[], + generator: string, + signature: string, + blocksize: number, + transactionCount: number, + fee: number, + height: number } export interface IBlock { header: IHeader, - transactions: Array + transactions: Array, + nxtConsensus: Array } +/* inicio dos comentários + const transaction = { "type": 4, "id": "Eo79FyfgVD6pCdTPAJ6L6KcShV5WircNs16E3rT3V61U", @@ -44,4 +70,6 @@ const block = { transaction ], "height": 1885581 -} \ No newline at end of file +} + +*/ \ No newline at end of file From fa4472118c7fcbcd79a8909118deeccc81972283 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Mar 2022 12:08:42 -0300 Subject: [PATCH 02/72] added: features correction array --- src/server/blocks/block.types.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/blocks/block.types.ts b/src/server/blocks/block.types.ts index 5e7f3f6..c19f1e0 100644 --- a/src/server/blocks/block.types.ts +++ b/src/server/blocks/block.types.ts @@ -21,7 +21,7 @@ interface IHeader { version: number timestamp: number, reference: string, - features: Array, // features: string[], + features: Array, // features: string[], generator: string, signature: string, blocksize: number, @@ -37,7 +37,7 @@ export interface IBlock { } -/* inicio dos comentários + const transaction = { "type": 4, @@ -72,4 +72,3 @@ const block = { "height": 1885581 } -*/ \ No newline at end of file From ae6eaaf20143d29fbd185f2a38ca06ff50f88d0d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Mar 2022 12:09:20 -0300 Subject: [PATCH 03/72] added: skeleton blocks fetch --- src/server/blocks/service.blocks.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index cc96e4e..2278db1 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -10,3 +10,9 @@ function blockByHeight(height: number): IBlock { "GET" ).json() } + +// fazer o fetch +// pegar o data +// converter ou pegar o iblock da resposta + +// explicação do andré vioto From 33d7d5f09675b08d9fe6ac84203a9a76ea9204a8 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Mar 2022 16:04:48 -0300 Subject: [PATCH 04/72] added: tests jest for block, function block types --- package.json | 3 ++- src/server/blocks/block.types.ts | 31 +++++++++++++++-------------- src/server/blocks/service.blocks.ts | 19 ++++++++++++------ test/server/blocks/blocks.test.ts | 27 +++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 22 deletions(-) create mode 100644 test/server/blocks/blocks.test.ts diff --git a/package.json b/package.json index 6bbad8a..20b6177 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "typescript": "^4.5.4" }, "dependencies": { + "axios": "^0.26.1", "base-x": "^3.0.9", "lunesrs": "1.5.5" }, @@ -67,4 +68,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/server/blocks/block.types.ts b/src/server/blocks/block.types.ts index c19f1e0..1410fb4 100644 --- a/src/server/blocks/block.types.ts +++ b/src/server/blocks/block.types.ts @@ -1,43 +1,43 @@ interface INxtConsensus { - baseTarget: number, - generationSignature: string + generationSignature: string, + baseTarget: number } interface ITransaction { - type: number, - id: string, - sender: string, senderPublicKey: string, - fee: number, timestamp: number, signature: string, recipient: string, + feeAsset: string, assetId: string, amount: number, - feeAsset: string + sender: string, + type: number, + fee: number, + id: string } interface IHeader { - version: number + nxtConsensus: Array, + transactionCount: number, + features: Array, timestamp: number, reference: string, - features: Array, // features: string[], generator: string, signature: string, blocksize: number, - transactionCount: number, - fee: number, - height: number + version: number, + height: number, + fee: number } export interface IBlock { header: IHeader, - transactions: Array, - nxtConsensus: Array + body: Array } - +/* const transaction = { "type": 4, @@ -72,3 +72,4 @@ const block = { "height": 1885581 } +*/ \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 2278db1..01309d9 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -1,18 +1,25 @@ import { IBlock } from "./block.types" - +import axios from "axios" /* * This function get `height` e return a full block */ -function blockByHeight(height: number): IBlock { - return fetch( - "url", - "GET" - ).json() +export async function blockByHeight(height: number):Promise { + + const response = await axios.get(`https://lunesnode.lunes.io/blocks/at/${height}`); + return response.data; + } + + +//https://lunesnode.lunes.io/blocks/at/10 +//https://lunesnode.lunes.io/blocks/at/$height + // fazer o fetch // pegar o data // converter ou pegar o iblock da resposta // explicação do andré vioto + +// fazer uma requisição diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts new file mode 100644 index 0000000..04f8c5e --- /dev/null +++ b/test/server/blocks/blocks.test.ts @@ -0,0 +1,27 @@ +import {blockByHeight} from "../../../src/server/blocks/service.blocks" + +describe ("test block service" , () => { + + it("receive number 10 param to get fetch" , async() => { + const result = await blockByHeight(10); + expect(result).toStrictEqual({ + "version": 3, + "timestamp": 1528116159255, + "reference": "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", + "nxt-consensus": { + "base-target": 112701916, + "generation-signature": "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" + }, + "features": [2], + "generator": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + "signature": "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + "blocksize": 227, + "transactionCount": 0, + "fee": 0, + "transactions": [], + "height": 10 + }); + + } ) + +} ) From c1cd754591a10e61a4b3d22bc108963d19198a4c Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Mar 2022 16:25:47 -0300 Subject: [PATCH 05/72] added: refactor code, clean code on blocks and test --- junit.xml | 7 +++++++ src/server/blocks/service.blocks.ts | 15 +-------------- test/server/blocks/blocks.test.ts | 29 ++++++++++++++--------------- 3 files changed, 22 insertions(+), 29 deletions(-) create mode 100644 junit.xml diff --git a/junit.xml b/junit.xml new file mode 100644 index 0000000..475dd79 --- /dev/null +++ b/junit.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 01309d9..900ce6e 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -9,17 +9,4 @@ export async function blockByHeight(height: number):Promise { const response = await axios.get(`https://lunesnode.lunes.io/blocks/at/${height}`); return response.data; -} - - - -//https://lunesnode.lunes.io/blocks/at/10 -//https://lunesnode.lunes.io/blocks/at/$height - -// fazer o fetch -// pegar o data -// converter ou pegar o iblock da resposta - -// explicação do andré vioto - -// fazer uma requisição +} \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 04f8c5e..4d851d8 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -5,21 +5,20 @@ describe ("test block service" , () => { it("receive number 10 param to get fetch" , async() => { const result = await blockByHeight(10); expect(result).toStrictEqual({ - "version": 3, - "timestamp": 1528116159255, - "reference": "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", - "nxt-consensus": { - "base-target": 112701916, - "generation-signature": "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" - }, - "features": [2], - "generator": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - "signature": "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - "blocksize": 227, - "transactionCount": 0, - "fee": 0, - "transactions": [], - "height": 10 + "version": 3, + "timestamp": 1528116159255, + "reference": "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", + "nxt-consensus": { + "base-target": 112701916, + "generation-signature": "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT"}, + "features": [2], + "generator": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + "signature": "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + "blocksize": 227, + "transactionCount": 0, + "fee": 0, + "transactions": [], + "height": 10 }); } ) From e42edbfae14f481209bac2696fc5ce597df7a6e8 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Mar 2022 19:41:13 -0300 Subject: [PATCH 06/72] added: correction test --- .vscode/settings.json | 3 +++ junit.xml | 17 ++++++++++++++--- src/server/blocks/service.blocks.ts | 12 ++++++++++-- test/server/blocks/blocks.test.ts | 9 ++++++++- 4 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..68b01f1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.renderWhitespace": "trailing" +} \ No newline at end of file diff --git a/junit.xml b/junit.xml index 475dd79..378ce05 100644 --- a/junit.xml +++ b/junit.xml @@ -1,7 +1,18 @@ - - - + + + + + + + Error: expect(received).toEqual(expected) // deep equality + +Expected: 200 +Received: undefined + at /workspaces/lunesjs/test/server/blocks/blocks.test.ts:30:31 + at Generator.next (<anonymous>) + at fulfilled (/workspaces/lunesjs/test/server/blocks/blocks.test.ts:5:58) + at processTicksAndRejections (node:internal/process/task_queues:96:5) \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 900ce6e..862d62b 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -5,8 +5,16 @@ import axios from "axios" * This function get `height` e return a full block */ export async function blockByHeight(height: number):Promise { - + const response = await axios.get(`https://lunesnode.lunes.io/blocks/at/${height}`); return response.data; -} \ No newline at end of file +} + +export async function blockHeight():Promise { + + const response = await axios.get(`https://lunesnode.lunes.io/blocks/height`); + return response.data; + +} + diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 4d851d8..a707069 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,4 +1,4 @@ -import {blockByHeight} from "../../../src/server/blocks/service.blocks" +import {blockByHeight, blockHeight} from "../../../src/server/blocks/service.blocks" describe ("test block service" , () => { @@ -23,4 +23,11 @@ describe ("test block service" , () => { } ) + it("see height block from node ", async() => { + + const result = await blockHeight(); + expect(200); + //expect(result.statusCode).toEqual(200); + }) + } ) From facb61e08fc3e07440a6df44714e206489d1bb85 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Mar 2022 22:03:26 -0300 Subject: [PATCH 07/72] added: test ok form blockHeight() --- junit.xml | 14 +++----------- src/server/blocks/service.blocks.ts | 4 ++++ test/server/blocks/blocks.test.ts | 16 +++++++++++++--- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/junit.xml b/junit.xml index 378ce05..998d56a 100644 --- a/junit.xml +++ b/junit.xml @@ -1,18 +1,10 @@ - - + + - - Error: expect(received).toEqual(expected) // deep equality - -Expected: 200 -Received: undefined - at /workspaces/lunesjs/test/server/blocks/blocks.test.ts:30:31 - at Generator.next (<anonymous>) - at fulfilled (/workspaces/lunesjs/test/server/blocks/blocks.test.ts:5:58) - at processTicksAndRejections (node:internal/process/task_queues:96:5) + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 862d62b..f55f405 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -11,9 +11,13 @@ export async function blockByHeight(height: number):Promise { } +/* +* This function return full block +*/ export async function blockHeight():Promise { const response = await axios.get(`https://lunesnode.lunes.io/blocks/height`); + //return response.data; return response.data; } diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index a707069..8ab11f6 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -25,9 +25,19 @@ describe ("test block service" , () => { it("see height block from node ", async() => { - const result = await blockHeight(); - expect(200); - //expect(result.statusCode).toEqual(200); + const result = await blockHeight(); + //expect(200); + //expect(result.statusCode).toEqual(200); + /*expect(result).toBeCalledWith( + expect.objectContaining({ + height: expect.any(Number), + }), + );*/ + + expect(result).toMatchObject({ + height: expect.any(Number) + }); + }) } ) From 08eb422cd5515738e3245f965b5f65a1bc5de894 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Mar 2022 23:52:11 -0300 Subject: [PATCH 08/72] added: average delay function, test case --- junit.xml | 11 ++++++----- src/server/blocks/service.blocks.ts | 14 ++++++++++++-- test/server/blocks/blocks.test.ts | 22 +++++++++++++++++++--- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/junit.xml b/junit.xml index 998d56a..2cb1315 100644 --- a/junit.xml +++ b/junit.xml @@ -1,10 +1,11 @@ - - - - + + + - + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index f55f405..43ae9bf 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -2,7 +2,7 @@ import { IBlock } from "./block.types" import axios from "axios" /* -* This function get `height` e return a full block +* This function get blockchain `height` e return a full block */ export async function blockByHeight(height: number):Promise { @@ -12,7 +12,7 @@ export async function blockByHeight(height: number):Promise { } /* -* This function return full block +* This function get a blockchain height */ export async function blockHeight():Promise { @@ -22,3 +22,13 @@ export async function blockHeight():Promise { } +/* +* Average delay in milliseconds between last blockNum blocks starting from block with signature + signature = signature block + blockNum = 1 to 9 +*/ + +export async function blockAverageDelay(signature: string, blockNum: number):Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/delay/${signature}/${blockNum}`); + return response.data; +} \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 8ab11f6..dacd8cc 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,4 +1,4 @@ -import {blockByHeight, blockHeight} from "../../../src/server/blocks/service.blocks" +import {blockByHeight, blockHeight, blockAverageDelay} from "../../../src/server/blocks/service.blocks" describe ("test block service" , () => { @@ -32,12 +32,28 @@ describe ("test block service" , () => { expect.objectContaining({ height: expect.any(Number), }), - );*/ + );*/ // estudar melhor o código expect(result).toMatchObject({ - height: expect.any(Number) + height: expect.any(Number) }); }) + + it("see Average delay ", async() => { + const result = await blockAverageDelay( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + 1); + expect(result).toMatchObject({ + delay: expect.any(Number) + + }); + + }) + + + + + } ) From 4ff1e9d5c04ea8cd02373b5b479cb1367a1ed359 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Mar 2022 00:23:16 -0300 Subject: [PATCH 09/72] added: blockSeq function, test case jest --- junit.xml | 12 +++++++----- src/server/blocks/service.blocks.ts | 9 +++++++++ test/server/blocks/blocks.test.ts | 13 +++++++++++-- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/junit.xml b/junit.xml index 2cb1315..cdd8dde 100644 --- a/junit.xml +++ b/junit.xml @@ -1,11 +1,13 @@ - - - + + + - + - + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 43ae9bf..2023b29 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -31,4 +31,13 @@ export async function blockHeight():Promise { export async function blockAverageDelay(signature: string, blockNum: number):Promise { const response = await axios.get(`https://lunesnode.lunes.io/blocks/delay/${signature}/${blockNum}`); return response.data; +} + +/* +* Get block at specified heights +*/ +//GET /blocks/seq/{from}/{to} +export async function blockSeq(from: number , to: number):Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/seq/${from}/${to}`); + return response.data; } \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index dacd8cc..d2e99ae 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,4 +1,4 @@ -import {blockByHeight, blockHeight, blockAverageDelay} from "../../../src/server/blocks/service.blocks" +import {blockByHeight, blockHeight, blockAverageDelay, blockSeq} from "../../../src/server/blocks/service.blocks" describe ("test block service" , () => { @@ -53,7 +53,16 @@ describe ("test block service" , () => { }) + it("Get block at specified heights ", async() => { + const result = await blockSeq(1,2) + expect(result).toStrictEqual( + + [{"blocksize": 312, "fee": 0, "generator": "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", "height": 1, "nxt-consensus": {"base-target": 153722867, "generation-signature": "11111111111111111111111111111111"}, "reference": "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", "signature": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", "timestamp": 1528077600000, "transactionCount": 2, "transactions": [{"amount": 5072853761500800, "fee": 0, "id": "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", "recipient": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", "signature": "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", "timestamp": 1528077600000, "type": 1}, {"amount": 10000000000000000, "fee": 0, "id": "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", "recipient": "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", "signature": "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", "timestamp": 1528077600000, "type": 1}], "version": 1}, {"blocksize": 227, "features": [2], "fee": 0, "generator": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", "height": 2, "nxt-consensus": {"base-target": 153722867, "generation-signature": "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q"}, "reference": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", "signature": "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", "timestamp": 1528116151053, "transactionCount": 0, "transactions": [], "version": 3}] + + ); + + }) + - } ) From fd9de60ca93bdaaf73e4aab863f258df444fcbd1 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Mar 2022 01:50:17 -0300 Subject: [PATCH 10/72] added: blockLast function, test case --- junit.xml | 18 ++++++++++++------ src/server/blocks/service.blocks.ts | 11 ++++++++++- test/server/blocks/blocks.test.ts | 11 ++++++++++- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/junit.xml b/junit.xml index cdd8dde..4c93251 100644 --- a/junit.xml +++ b/junit.xml @@ -1,13 +1,19 @@ - - - + + + + - + + - + + - + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 2023b29..22d1b96 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -40,4 +40,13 @@ export async function blockAverageDelay(signature: string, blockNum: number):Pro export async function blockSeq(from: number , to: number):Promise { const response = await axios.get(`https://lunesnode.lunes.io/blocks/seq/${from}/${to}`); return response.data; -} \ No newline at end of file +} + + +/* +* Get last block data +*/ +export async function blockLast():Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/last`); + return response.data; +} diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index d2e99ae..7d63500 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,4 +1,4 @@ -import {blockByHeight, blockHeight, blockAverageDelay, blockSeq} from "../../../src/server/blocks/service.blocks" +import {blockByHeight, blockHeight, blockAverageDelay, blockSeq, blockLast} from "../../../src/server/blocks/service.blocks" describe ("test block service" , () => { @@ -64,5 +64,14 @@ describe ("test block service" , () => { }) + it("Get last block data ", async() => { + + const result = await blockLast(); + expect(result).toMatchObject(result) + //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values + + }) + + } ) From 9fb4fa02c0d678da8fe3a16c8933d94579365353 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Mar 2022 02:09:00 -0300 Subject: [PATCH 11/72] added: blockChild function, test case --- junit.xml | 9 ++++--- src/server/blocks/service.blocks.ts | 8 +++++++ test/server/blocks/blocks.test.ts | 37 ++++++++++++++++++++++++++++- 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/junit.xml b/junit.xml index 4c93251..130d9dc 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -13,7 +13,10 @@ - + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 22d1b96..6952bf7 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -50,3 +50,11 @@ export async function blockLast():Promise { const response = await axios.get(`https://lunesnode.lunes.io/blocks/last`); return response.data; } + +/* +* Get children of specified block +*/ +export async function blockChild(signature: string):Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/child/${signature}`); + return response.data; +} \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 7d63500..2adba2c 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,4 +1,6 @@ -import {blockByHeight, blockHeight, blockAverageDelay, blockSeq, blockLast} from "../../../src/server/blocks/service.blocks" +import { blockByHeight, blockHeight, blockAverageDelay, blockSeq, blockLast, + blockChild + } from "../../../src/server/blocks/service.blocks" describe ("test block service" , () => { @@ -74,4 +76,37 @@ describe ("test block service" , () => { + it("Get children of specified block ", async() => { + const result = await blockChild("3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f"); + expect(result).toStrictEqual( + { + "version": 3, + "timestamp": 1648064056012, + "reference": "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f", + "nxt-consensus": { + "base-target": 39, + "generation-signature": "EKoXAqLn4ij3936rxtESW3EAjHtuJXDiFuTYrKNa4uku" + }, + "features": [], + "generator": "37nX3hdCt1GWeSsAMNFmWgbQWZZhbvBG3mX", + "signature": "2jeAT1NG4XeH48ckeuPVj4Ejmxg4ZU4VYzpHNCMeq2WTZvcrtBt1RraXq7mtu5pphiiwdyWfVTPxcAZXQcm6V99a", + "blocksize": 225, + "transactionCount": 0, + "fee": 0, + "transactions": [] + } + + ); + + }) + + + + + + + + + + } ) From b22959afa43cf4afe66a75b57859da0c6a070032 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Mar 2022 02:21:23 -0300 Subject: [PATCH 12/72] added: blockHeightEncoded function, test case --- junit.xml | 9 ++++++--- src/server/blocks/service.blocks.ts | 9 +++++++++ test/server/blocks/blocks.test.ts | 10 +++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/junit.xml b/junit.xml index 130d9dc..0821e23 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -16,7 +16,10 @@ - + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 6952bf7..3286cfa 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -57,4 +57,13 @@ export async function blockLast():Promise { export async function blockChild(signature: string):Promise { const response = await axios.get(`https://lunesnode.lunes.io/blocks/child/${signature}`); return response.data; +} + + +/* +* Get height of a block by its Base58-encoded signature +*/ +export async function blockHeightEncoded(signature: string):Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/height/${signature}`); + return response.data; } \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 2adba2c..7675157 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,5 +1,5 @@ import { blockByHeight, blockHeight, blockAverageDelay, blockSeq, blockLast, - blockChild + blockChild, blockHeightEncoded } from "../../../src/server/blocks/service.blocks" describe ("test block service" , () => { @@ -104,7 +104,15 @@ describe ("test block service" , () => { + it("Get height of a block by its Base58-encoded signature ", async() => { + const result = await blockHeightEncoded("3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f") + expect(result).toStrictEqual( + { + "height": 1887361 + } + ); + }) From 18f70fb2f82a8061a4048012ca37d3deb89d7465 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Mar 2022 09:44:35 -0300 Subject: [PATCH 13/72] added: correction test, blockHeightEncoded --- junit.xml | 6 +++--- test/server/blocks/blocks.test.ts | 20 +++++++++----------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/junit.xml b/junit.xml index 0821e23..693329c 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -19,7 +19,7 @@ - + \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 7675157..41b1eea 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -102,17 +102,15 @@ describe ("test block service" , () => { - - - it("Get height of a block by its Base58-encoded signature ", async() => { - const result = await blockHeightEncoded("3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f") - expect(result).toStrictEqual( - { - "height": 1887361 - } - ); - - }) + it("Get height of a block by its Base58-encoded signature ", async() => { + const result = await blockHeightEncoded("3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f") + expect(result).toStrictEqual( + { + "height": 1887361 + } + ); + + }) From 70bf8d2345d1b495906c496f7d3fb42d9aed6ceb Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Mar 2022 10:05:32 -0300 Subject: [PATCH 14/72] added: blockAtHeaderOnly function and test --- junit.xml | 9 ++++++--- src/server/blocks/service.blocks.ts | 13 ++++++++++++- test/server/blocks/blocks.test.ts | 26 +++++++++++++++++++++++++- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/junit.xml b/junit.xml index 693329c..e01aebb 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -19,7 +19,10 @@ - + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 3286cfa..bd52866 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -66,4 +66,15 @@ export async function blockChild(signature: string):Promise { export async function blockHeightEncoded(signature: string):Promise { const response = await axios.get(`https://lunesnode.lunes.io/blocks/height/${signature}`); return response.data; -} \ No newline at end of file +} + + +/* +* Get block at specified height without transactions payload +*/ +export async function blockAtHeaderOnly(height: number):Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/headers/at/${height}`); + return response.data; +} + + diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 41b1eea..60277eb 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,5 +1,5 @@ import { blockByHeight, blockHeight, blockAverageDelay, blockSeq, blockLast, - blockChild, blockHeightEncoded + blockChild, blockHeightEncoded, blockAtHeaderOnly } from "../../../src/server/blocks/service.blocks" describe ("test block service" , () => { @@ -113,6 +113,30 @@ describe ("test block service" , () => { }) + it("Get block at specified height without transactions payload ", async() => { + const result = await blockAtHeaderOnly(1) + expect(result).toStrictEqual( + { + + "version": 1, + "timestamp": 1528077600000, + "reference": "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + "generator": "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + "signature": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + "blocksize": 312, + "transactionCount": 2, + "height": 1 + + } + ); + + }) + + } ) From b6c6f6c7d2f1eda02bea3339a56a3720b1e4cf3d Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Mar 2022 10:19:15 -0300 Subject: [PATCH 15/72] added: blockSeqHeaderOnly test and test case --- junit.xml | 9 ++++++--- src/server/blocks/service.blocks.ts | 8 ++++++++ test/server/blocks/blocks.test.ts | 11 ++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/junit.xml b/junit.xml index e01aebb..f037717 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -22,7 +22,10 @@ - + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index bd52866..7ed2683 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -78,3 +78,11 @@ export async function blockAtHeaderOnly(height: number):Promise { } +/* +* Get block without transactions payload at specified heights +*/ +export async function blockSeqHeaderOnly(from: number , to: number):Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/headers/seq/${from}/${to}`); + return response.data; +} + diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 60277eb..85c3215 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,5 +1,6 @@ import { blockByHeight, blockHeight, blockAverageDelay, blockSeq, blockLast, - blockChild, blockHeightEncoded, blockAtHeaderOnly + blockChild, blockHeightEncoded, blockAtHeaderOnly, blockSeqHeaderOnly + } from "../../../src/server/blocks/service.blocks" describe ("test block service" , () => { @@ -137,6 +138,14 @@ describe ("test block service" , () => { }) + it("blockSeqHeaderOnly test ", async() => { + const result = await blockSeqHeaderOnly(1,2); + expect(result).toStrictEqual( + [{"blocksize": 312, "generator": "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", "height": 1, "nxt-consensus": {"base-target": 153722867, "generation-signature": "11111111111111111111111111111111"}, "reference": "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", "signature": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", "timestamp": 1528077600000, "transactionCount": 2, "version": 1}, {"blocksize": 227, "features": [2], "generator": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", "height": 2, "nxt-consensus": {"base-target": 153722867, "generation-signature": "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q"}, "reference": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", "signature": "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", "timestamp": 1528116151053, "transactionCount": 0, "version": 3}] + ); + }) + + } ) From 1a61f017cb6a2d77348a6dae9bdb3430163a775b Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Mar 2022 10:49:15 -0300 Subject: [PATCH 16/72] added: blockLastHeaderOnly test and function --- junit.xml | 9 ++++++--- src/server/blocks/service.blocks.ts | 9 +++++++++ test/server/blocks/blocks.test.ts | 15 ++++++++++++--- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/junit.xml b/junit.xml index f037717..aada84d 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -25,7 +25,10 @@ - + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 7ed2683..ac3a034 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -86,3 +86,12 @@ export async function blockSeqHeaderOnly(from: number , to: number):Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/headers/last`); + return response.data; +} \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 85c3215..f6f9a4a 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,6 +1,6 @@ -import { blockByHeight, blockHeight, blockAverageDelay, blockSeq, blockLast, - blockChild, blockHeightEncoded, blockAtHeaderOnly, blockSeqHeaderOnly - +import { blockByHeight, blockHeight, blockAverageDelay, blockSeq, blockLast, + blockChild, blockHeightEncoded, blockAtHeaderOnly, blockSeqHeaderOnly, + blockLastHeaderOnly } from "../../../src/server/blocks/service.blocks" describe ("test block service" , () => { @@ -147,5 +147,14 @@ describe ("test block service" , () => { + it("blockLastHeaderOnly test ", async() => { + + const result = await blockLastHeaderOnly(); + //expect(result).toMatchObject(result) + //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values + expect(result).toHaveProperty("height"); // true + }) + + } ) From 0a21f805140122714218af0e515a4117cb7b9f8d Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Mar 2022 11:44:32 -0300 Subject: [PATCH 17/72] added: blockFirst test and function --- junit.xml | 12 ++++++--- src/server/blocks/service.blocks.ts | 30 ++++++++++++++++++++++- test/server/blocks/blocks.test.ts | 38 ++++++++++++++++++++++++++++- 3 files changed, 75 insertions(+), 5 deletions(-) diff --git a/junit.xml b/junit.xml index aada84d..bb0a4c4 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -28,7 +28,13 @@ - + + + + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index ac3a034..d937d59 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -91,7 +91,35 @@ export async function blockSeqHeaderOnly(from: number , to: number):Promise { +export async function blockLastHeaderOnly():Promise { const response = await axios.get(`https://lunesnode.lunes.io/blocks/headers/last`); return response.data; +} + + + +/* +* Get block by a specified Base58-encoded signature +*/ +export async function blockSignature(signature: string):Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/signature/${signature}`); + return response.data; +} + + +/* +* Get genesis block data +*/ +export async function blockFirst():Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/first`); + return response.data; +} + + +/* +* Get list of blocks generated by specified address +*/ +export async function blockAddress(address: string, from: number, to: number):Promise { + const response = await axios.get(`https://lunesnode.lunes.io//blocks/address/{address}/{from}/{to}`); + return response.data; } \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index f6f9a4a..d3397d4 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,6 +1,6 @@ import { blockByHeight, blockHeight, blockAverageDelay, blockSeq, blockLast, blockChild, blockHeightEncoded, blockAtHeaderOnly, blockSeqHeaderOnly, - blockLastHeaderOnly + blockLastHeaderOnly, blockSignature, blockFirst } from "../../../src/server/blocks/service.blocks" describe ("test block service" , () => { @@ -156,5 +156,41 @@ describe ("test block service" , () => { }) + it("blockSignature test" , async() => { + const result = await blockSignature("3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi"); + expect(result).toStrictEqual( + { + "version": 3, + "timestamp": 1528116159255, + "reference": "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", + "nxt-consensus": { + "base-target": 112701916, + "generation-signature": "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" + }, + "features": [ + 2 + ], + "generator": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + "signature": "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + "blocksize": 227, + "transactionCount": 0, + "fee": 0, + "transactions": [], + "height": 10 + } + ); + + } ) + + + + it("blockFirst test ", async() => { + const result = await blockFirst(); + expect(result).toStrictEqual( + {"blocksize": 312, "fee": 0, "generator": "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", "height": 1, "nxt-consensus": {"base-target": 153722867, "generation-signature": "11111111111111111111111111111111"}, "reference": "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", "signature": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", "timestamp": 1528077600000, "transactionCount": 2, "transactions": [{"amount": 5072853761500800, "fee": 0, "id": "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", "recipient": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", "signature": "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", "timestamp": 1528077600000, "type": 1}, {"amount": 10000000000000000, "fee": 0, "id": "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", "recipient": "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", "signature": "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", "timestamp": 1528077600000, "type": 1}], "version": 1} + ); + }) + + } ) From ffefae5fe84401702b22dee6353f0816d3632087 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Mar 2022 12:11:50 -0300 Subject: [PATCH 18/72] added: blockAddress test and function --- junit.xml | 9 ++++++--- src/server/blocks/service.blocks.ts | 2 +- test/server/blocks/blocks.test.ts | 21 +++++++++++++++++++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/junit.xml b/junit.xml index bb0a4c4..233552b 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -34,7 +34,10 @@ - + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index d937d59..1573ac1 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -120,6 +120,6 @@ export async function blockFirst():Promise { * Get list of blocks generated by specified address */ export async function blockAddress(address: string, from: number, to: number):Promise { - const response = await axios.get(`https://lunesnode.lunes.io//blocks/address/{address}/{from}/{to}`); + const response = await axios.get(`https://lunesnode.lunes.io/blocks/address/${address}/${from}/${to}`); return response.data; } \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index d3397d4..8532396 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,6 +1,6 @@ import { blockByHeight, blockHeight, blockAverageDelay, blockSeq, blockLast, blockChild, blockHeightEncoded, blockAtHeaderOnly, blockSeqHeaderOnly, - blockLastHeaderOnly, blockSignature, blockFirst + blockLastHeaderOnly, blockSignature, blockFirst, blockAddress } from "../../../src/server/blocks/service.blocks" describe ("test block service" , () => { @@ -190,7 +190,24 @@ describe ("test block service" , () => { {"blocksize": 312, "fee": 0, "generator": "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", "height": 1, "nxt-consensus": {"base-target": 153722867, "generation-signature": "11111111111111111111111111111111"}, "reference": "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", "signature": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", "timestamp": 1528077600000, "transactionCount": 2, "transactions": [{"amount": 5072853761500800, "fee": 0, "id": "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", "recipient": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", "signature": "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", "timestamp": 1528077600000, "type": 1}, {"amount": 10000000000000000, "fee": 0, "id": "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", "recipient": "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", "signature": "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", "timestamp": 1528077600000, "type": 1}], "version": 1} ); }) - + + + + + + it("blockAddress test ", async() => { + const result = await blockAddress( + "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", + 1889863, + 1889864 + ); + expect(result).toStrictEqual( + + [{"blocksize": 225, "features": [], "fee": 0, "generator": "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", "height": 1889864, "nxt-consensus": {"base-target": 51, "generation-signature": "9iHAgT78TCbzv5HfhxVzzRnM132n45UGqGbvH59FvBoB"}, "reference": "9zvED5KcnvkYsKLFxiCXQDiEsyXrKdtVH23b3qPt2FhAh3BrhUaZbqtndYWCbn4GmPrZvDbwY1vwqrxdgyazGfH", "signature": "353wWZjKZzLiYKkVbgXLrxsK7dzYo9pEgw2pV31rXLnb1EdZbraZThrpg92swhrtQh1J353rPesvcB1mMEAoQtzP", "timestamp": 1648218628090, "transactionCount": 0, "transactions": [], "version": 3}] + ); + }) + + } ) From 7625e2b6429103fb6f1be8bb4bdbb5699dd361e1 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Mar 2022 16:06:38 -0300 Subject: [PATCH 19/72] added: run command prettier -w --- .vscode/settings.json | 2 +- junit.xml | 42 +- package.json | 3 +- src/server/blocks/block.types.ts | 83 +--- src/server/blocks/service.blocks.ts | 181 ++++---- src/utils/crypto.ts | 57 ++- test/client/wallet/service.account.test.ts | 72 ++- test/server/blocks/blocks.test.ts | 491 +++++++++++++-------- 8 files changed, 509 insertions(+), 422 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 68b01f1..620672a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { "editor.renderWhitespace": "trailing" -} \ No newline at end of file +} diff --git a/junit.xml b/junit.xml index 233552b..a079194 100644 --- a/junit.xml +++ b/junit.xml @@ -1,43 +1,31 @@ - - - - + + + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - + \ No newline at end of file diff --git a/package.json b/package.json index 20b6177..c2dd3eb 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "watch": "tsc --watch", "wheel": "nodemon ./build/src/main.js", "postinstall": "husky install", - "commit": "cz" + "commit": "cz", + "fmt": "prettier -w ." }, "devDependencies": { "@commitlint/cli": "^16.1.0", diff --git a/src/server/blocks/block.types.ts b/src/server/blocks/block.types.ts index 1410fb4..da4fc8b 100644 --- a/src/server/blocks/block.types.ts +++ b/src/server/blocks/block.types.ts @@ -1,75 +1,36 @@ - interface INxtConsensus { - generationSignature: string, + generationSignature: string baseTarget: number } interface ITransaction { - senderPublicKey: string, - timestamp: number, - signature: string, - recipient: string, - feeAsset: string, - assetId: string, - amount: number, - sender: string, - type: number, - fee: number, + senderPublicKey: string + timestamp: number + signature: string + recipient: string + feeAsset: string + assetId: string + amount: number + sender: string + type: number + fee: number id: string } interface IHeader { - nxtConsensus: Array, - transactionCount: number, - features: Array, - timestamp: number, - reference: string, - generator: string, - signature: string, - blocksize: number, - version: number, - height: number, + nxtConsensus: Array + transactionCount: number + features: Array + timestamp: number + reference: string + generator: string + signature: string + blocksize: number + version: number + height: number fee: number } export interface IBlock { - header: IHeader, + header: IHeader body: Array } - - -/* - -const transaction = { - "type": 4, - "id": "Eo79FyfgVD6pCdTPAJ6L6KcShV5WircNs16E3rT3V61U", - "sender": "37u4wcAMHRTZQrNnEovsJchVh9UinEe9jiw", - "senderPublicKey": "Cf68DPvtX9TaxWn5zbkcPxc277wBxZbJncXdc628RUtc", - "fee": 100000, - "timestamp": 1647954374597, - "signature": "TpMN6pZN2zLcQgZQzzrEE3FynqutZ7cGPhceFUTvczdSkywRhfF71eZS84j4Htt9jC2nngQB3qzirzaWjJzUgCf", - "recipient": "37uAgCLUyjrzNf2gReck9KmeHK7YG6NXyLW", - "assetId": null, - "amount": 190000000000, - "feeAsset": null -} -const block = { - "version": 3, - "timestamp": 1647954354005, - "reference": "3BueMQfvPxoVDhJHSUTLQAYJsQdfHtYZkcWZa1fZQdgYUzfvk81kffEXiB5Tf1izdLje4kyoWmsjka19XS5i32fg", - "nxt-consensus": { - "base-target": 48, - "generation-signature": "BZKJ1NE2bjKLizDGTDM7n4aQxNFC1Rr5k1vEFaPg4kDA" - }, - "features": [], - "generator": "37nX3hdCt1GWeSsAMNFmWgbQWZZhbvBG3mX", - "signature": "5K2Unr1yDWpzXdRM1UjDFqi9gi2vJQqh8YbCCwRuWRpgyV1zXkBdRp8uD76okrA2MgYNg3TykFSZT7QuQmiv5CXf", - "blocksize": 379, - "transactionCount": 1, - "fee": 100000, - "transactions": [ - transaction - ], - "height": 1885581 -} - -*/ \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 1573ac1..eee371b 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -1,25 +1,32 @@ import { IBlock } from "./block.types" import axios from "axios" -/* -* This function get blockchain `height` e return a full block -*/ -export async function blockByHeight(height: number):Promise { - - const response = await axios.get(`https://lunesnode.lunes.io/blocks/at/${height}`); - return response.data; +const BASEURL = "https://lunesnode.lunes.io/blocks/" +/* + * This function get blockchain `height` e return a full block + */ +export async function blockByHeight(height: number): Promise { + const url = "https://lunesnode.lunes.io/blocks/at/${height}"; + + //verificar o erro, número negativo, string e retonar o erro! + //pesquisar tratamento de erros + //se o número for negativo ou maior que o bloco atual, retorna o erro throw error - estudar try catch + + const response = await axios.get(url) + return response.data } -/* -* This function get a blockchain height -*/ -export async function blockHeight():Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/height`); - //return response.data; - return response.data; + +/* + * This function get a blockchain height + */ +export async function blockHeight(): Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/height`) + //return response.data; + return response.data } /* @@ -28,98 +35,116 @@ export async function blockHeight():Promise { blockNum = 1 to 9 */ -export async function blockAverageDelay(signature: string, blockNum: number):Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/delay/${signature}/${blockNum}`); - return response.data; +export async function blockAverageDelay( + signature: string, + blockNum: number +): Promise { + const response = await axios.get( + `https://lunesnode.lunes.io/blocks/delay/${signature}/${blockNum}` + ) + return response.data } /* -* Get block at specified heights -*/ + * Get block at specified heights + */ //GET /blocks/seq/{from}/{to} -export async function blockSeq(from: number , to: number):Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/seq/${from}/${to}`); - return response.data; +export async function blockSeq(from: number, to: number): Promise { + const response = await axios.get( + `https://lunesnode.lunes.io/blocks/seq/${from}/${to}` + ) + return response.data } - /* -* Get last block data -*/ -export async function blockLast():Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/last`); - return response.data; + * Get last block data + */ +export async function blockLast(): Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/last`) + return response.data } /* -* Get children of specified block -*/ -export async function blockChild(signature: string):Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/child/${signature}`); - return response.data; + * Get children of specified block + */ +export async function blockChild(signature: string): Promise { + const response = await axios.get( + `https://lunesnode.lunes.io/blocks/child/${signature}` + ) + return response.data } - /* -* Get height of a block by its Base58-encoded signature -*/ -export async function blockHeightEncoded(signature: string):Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/height/${signature}`); - return response.data; + * Get height of a block by its Base58-encoded signature + */ +export async function blockHeightEncoded(signature: string): Promise { + const response = await axios.get( + `https://lunesnode.lunes.io/blocks/height/${signature}` + ) + return response.data } - /* -* Get block at specified height without transactions payload -*/ -export async function blockAtHeaderOnly(height: number):Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/headers/at/${height}`); - return response.data; + * Get block at specified height without transactions payload + */ +export async function blockAtHeaderOnly(height: number): Promise { + const response = await axios.get( + `https://lunesnode.lunes.io/blocks/headers/at/${height}` + ) + return response.data } - /* -* Get block without transactions payload at specified heights -*/ -export async function blockSeqHeaderOnly(from: number , to: number):Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/headers/seq/${from}/${to}`); - return response.data; + * Get block without transactions payload at specified heights + */ +export async function blockSeqHeaderOnly( + from: number, + to: number +): Promise { + const response = await axios.get( + `https://lunesnode.lunes.io/blocks/headers/seq/${from}/${to}` + ) + return response.data } - - /* -* Get last block data without transactions payload -*/ -export async function blockLastHeaderOnly():Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/headers/last`); - return response.data; + * Get last block data without transactions payload + */ +export async function blockLastHeaderOnly(): Promise { + const response = await axios.get( + `https://lunesnode.lunes.io/blocks/headers/last` + ) + return response.data } - - /* -* Get block by a specified Base58-encoded signature -*/ -export async function blockSignature(signature: string):Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/signature/${signature}`); - return response.data; + * Get block by a specified Base58-encoded signature + */ +export async function blockSignature(signature: string): Promise { + const response = await axios.get( + `https://lunesnode.lunes.io/blocks/signature/${signature}` + ) + return response.data } - /* -* Get genesis block data -*/ -export async function blockFirst():Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/first`); - return response.data; + * Get genesis block data + */ +export async function blockFirst(): Promise { + const response = await axios.get(`https://lunesnode.lunes.io/blocks/first`) + return response.data } - /* -* Get list of blocks generated by specified address -*/ -export async function blockAddress(address: string, from: number, to: number):Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/address/${address}/${from}/${to}`); - return response.data; -} \ No newline at end of file + * Get list of blocks generated by specified address + */ +export async function blockAddress( + address: string, + from: number, + to: number +): Promise { + const response = await axios.get( + `https://lunesnode.lunes.io/blocks/address/${address}/${from}/${to}` + ) + return response.data +} diff --git a/src/utils/crypto.ts b/src/utils/crypto.ts index b6a94c8..9c2ffc4 100644 --- a/src/utils/crypto.ts +++ b/src/utils/crypto.ts @@ -9,15 +9,9 @@ const cryptoUtils = { chain: WalletTypes.Chain ): IAccount => { const hidden_seed = wasm.hiddenSeed(nonce, seed) - const privateKey = wasm.toPrivateKeyHex( - wasm.fromStrHex(hidden_seed) - ) + const privateKey = wasm.toPrivateKeyHex(wasm.fromStrHex(hidden_seed)) const publicKey = wasm.toPublicKeyHex(wasm.fromStrHex(privateKey)) - const address = wasm.toAddressHex( - 1, - chain, - wasm.fromStrHex(publicKey) - ) + const address = wasm.toAddressHex(1, chain, wasm.fromStrHex(publicKey)) return { nonce: nonce, @@ -33,11 +27,7 @@ const cryptoUtils = { chain: WalletTypes.Chain ): IAccount => { const publicKey = wasm.toPublicKeyHex(wasm.b58ToVec(privateKey)) - const address = wasm.toAddressHex( - 1, - chain, - wasm.fromStrHex(publicKey) - ) + const address = wasm.toAddressHex(1, chain, wasm.fromStrHex(publicKey)) return { chain: chain, @@ -47,11 +37,7 @@ const cryptoUtils = { } }, fromPublicKey: (publicKey: string, chain: WalletTypes.Chain): IAccount => { - const address = wasm.toAddressHex( - 1, - chain, - wasm.b58ToVec(publicKey) - ) + const address = wasm.toAddressHex(1, chain, wasm.b58ToVec(publicKey)) return { chain: chain, @@ -80,12 +66,13 @@ const cryptoUtils = { return cryptoUtils.fromExistingSeed(seed.join(" "), nonce, chain) }, validateAddress: (address: string, chain: WalletTypes.Chain): boolean => { - return wasm.validateAddress( - chain, - wasm.b58ToVec(address) - ) + return wasm.validateAddress(chain, wasm.b58ToVec(address)) }, - validateSignature: (publicKey: string, message: string, signature: string): boolean => { + validateSignature: ( + publicKey: string, + message: string, + signature: string + ): boolean => { return wasm.validateSignature( wasm.toVecu32(wasm.b58ToVec(publicKey)), wasm.stringToVecu32(message), @@ -93,16 +80,24 @@ const cryptoUtils = { ) }, fastSignature: (privateKey: string, message: string) => { - return wasm.hexToB58(wasm.vecu32ToHex(wasm.fastSignature( - wasm.toVecu32(wasm.b58ToVec(privateKey)), - wasm.stringToVecu32(message) - ))) + return wasm.hexToB58( + wasm.vecu32ToHex( + wasm.fastSignature( + wasm.toVecu32(wasm.b58ToVec(privateKey)), + wasm.stringToVecu32(message) + ) + ) + ) }, fullSignature: (privateKey: string, message: string) => { - return wasm.hexToB58(wasm.vecu32ToHex(wasm.fullSignature( - wasm.toVecu32(wasm.b58ToVec(privateKey)), - wasm.stringToVecu32(message) - ))) + return wasm.hexToB58( + wasm.vecu32ToHex( + wasm.fullSignature( + wasm.toVecu32(wasm.b58ToVec(privateKey)), + wasm.stringToVecu32(message) + ) + ) + ) } } diff --git a/test/client/wallet/service.account.test.ts b/test/client/wallet/service.account.test.ts index 8ef533c..f2cd6d9 100644 --- a/test/client/wallet/service.account.test.ts +++ b/test/client/wallet/service.account.test.ts @@ -224,14 +224,12 @@ describe("Validate Account Address", () => { return w.address != undefined ? w.address : "" } - const addressMainnet = Array.from( - new Array(20), - () => createMainnetAccount() + const addressMainnet = Array.from(new Array(20), () => + createMainnetAccount() ) - const addressTestnet = Array.from( - new Array(20), - () => createTestnetAccount() + const addressTestnet = Array.from(new Array(20), () => + createTestnetAccount() ) test.each(addressMainnet)( "Test Validating Mainnet Account Address", @@ -240,9 +238,7 @@ describe("Validate Account Address", () => { addressMainnet, WalletTypes.Chain.Mainnet ) - expect( - result - ).toEqual(true) + expect(result).toEqual(true) } ) @@ -253,9 +249,7 @@ describe("Validate Account Address", () => { addressTestnet, WalletTypes.Chain.Mainnet ) - expect( - result - ).toEqual(false) + expect(result).toEqual(false) } ) }) @@ -293,56 +287,52 @@ describe("Create Signatures", () => { "Test sign and validate signatures for Mainnet random Account with FastSignature function", (message) => { const w = newAccountMainnet() - const signature = cryptoUtils.fastSignature( - w.privateKey, - message + const signature = cryptoUtils.fastSignature(w.privateKey, message) + const result = cryptoUtils.validateSignature( + w.publicKey, + message, + signature ) - const result = cryptoUtils.validateSignature(w.publicKey, message, signature) - expect( - result - ).toEqual(true) + expect(result).toEqual(true) } ) test.each(message)( "Test sign and validate signatures for Testnet random Account with FastSignature function", (message) => { const w = newAccountTestnet() - const signature = cryptoUtils.fastSignature( - w.privateKey, - message + const signature = cryptoUtils.fastSignature(w.privateKey, message) + const result = cryptoUtils.validateSignature( + w.publicKey, + message, + signature ) - const result = cryptoUtils.validateSignature(w.publicKey, message, signature) - expect( - result - ).toEqual(true) + expect(result).toEqual(true) } ) test.each(message)( "Test sign and validate signatures for Mainnet random Account with FullSignature function", (message) => { const w = newAccountMainnet() - const signature = cryptoUtils.fullSignature( - w.privateKey, - message + const signature = cryptoUtils.fullSignature(w.privateKey, message) + const result = cryptoUtils.validateSignature( + w.publicKey, + message, + signature ) - const result = cryptoUtils.validateSignature(w.publicKey, message, signature) - expect( - result - ).toEqual(true) + expect(result).toEqual(true) } ) test.each(message)( "Test sign and validate signatures for Testnet random Account with FullSignature function", (message) => { const w = newAccountTestnet() - const signature = cryptoUtils.fullSignature( - w.privateKey, - message + const signature = cryptoUtils.fullSignature(w.privateKey, message) + const result = cryptoUtils.validateSignature( + w.publicKey, + message, + signature ) - const result = cryptoUtils.validateSignature(w.publicKey, message, signature) - expect( - result - ).toEqual(true) + expect(result).toEqual(true) } ) -}) \ No newline at end of file +}) diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 8532396..439cd5c 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,37 +1,52 @@ -import { blockByHeight, blockHeight, blockAverageDelay, blockSeq, blockLast, - blockChild, blockHeightEncoded, blockAtHeaderOnly, blockSeqHeaderOnly, - blockLastHeaderOnly, blockSignature, blockFirst, blockAddress - } from "../../../src/server/blocks/service.blocks" - -describe ("test block service" , () => { - - it("receive number 10 param to get fetch" , async() => { - const result = await blockByHeight(10); +import { + blockByHeight, + blockHeight, + blockAverageDelay, + blockSeq, + blockLast, + blockChild, + blockHeightEncoded, + blockAtHeaderOnly, + blockSeqHeaderOnly, + blockLastHeaderOnly, + blockSignature, + blockFirst, + blockAddress +} from "../../../src/server/blocks/service.blocks" + +describe("test block service", () => { + it("receive number 10 param to get fetch", async () => { + const result = await blockByHeight(10) expect(result).toStrictEqual({ - "version": 3, - "timestamp": 1528116159255, - "reference": "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", + version: 3, + timestamp: 1528116159255, + reference: + "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", "nxt-consensus": { - "base-target": 112701916, - "generation-signature": "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT"}, - "features": [2], - "generator": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - "signature": "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - "blocksize": 227, - "transactionCount": 0, - "fee": 0, - "transactions": [], - "height": 10 - }); - - } ) - - it("see height block from node ", async() => { - - const result = await blockHeight(); - //expect(200); - //expect(result.statusCode).toEqual(200); - /*expect(result).toBeCalledWith( + "base-target": 112701916, + "generation-signature": + "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" + }, + features: [2], + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + signature: + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + blocksize: 227, + transactionCount: 0, + fee: 0, + transactions: [], + height: 10 + }) + }) + + + + + it("see height block from node ", async () => { + const result = await blockHeight() + //expect(200); + //expect(result.statusCode).toEqual(200); + /*expect(result).toBeCalledWith( expect.objectContaining({ height: expect.any(Number), }), @@ -39,175 +54,287 @@ describe ("test block service" , () => { expect(result).toMatchObject({ height: expect.any(Number) - }); - + }) }) - - it("see Average delay ", async() => { + it("see Average delay ", async () => { const result = await blockAverageDelay( "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - 1); - expect(result).toMatchObject({ - delay: expect.any(Number) - - }); - + 1 + ) + expect(result).toMatchObject({ + delay: expect.any(Number) + }) }) - - it("Get block at specified heights ", async() => { - const result = await blockSeq(1,2) - expect(result).toStrictEqual( - - [{"blocksize": 312, "fee": 0, "generator": "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", "height": 1, "nxt-consensus": {"base-target": 153722867, "generation-signature": "11111111111111111111111111111111"}, "reference": "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", "signature": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", "timestamp": 1528077600000, "transactionCount": 2, "transactions": [{"amount": 5072853761500800, "fee": 0, "id": "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", "recipient": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", "signature": "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", "timestamp": 1528077600000, "type": 1}, {"amount": 10000000000000000, "fee": 0, "id": "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", "recipient": "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", "signature": "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", "timestamp": 1528077600000, "type": 1}], "version": 1}, {"blocksize": 227, "features": [2], "fee": 0, "generator": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", "height": 2, "nxt-consensus": {"base-target": 153722867, "generation-signature": "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q"}, "reference": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", "signature": "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", "timestamp": 1528116151053, "transactionCount": 0, "transactions": [], "version": 3}] - - ); - + it("Get block at specified heights ", async () => { + const result = await blockSeq(1, 2) + expect(result).toStrictEqual([ + { + blocksize: 312, + fee: 0, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + height: 1, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + timestamp: 1528077600000, + transactionCount: 2, + transactions: [ + { + amount: 5072853761500800, + fee: 0, + id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + signature: + "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + timestamp: 1528077600000, + type: 1 + }, + { + amount: 10000000000000000, + fee: 0, + id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", + signature: + "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + timestamp: 1528077600000, + type: 1 + } + ], + version: 1 + }, + { + blocksize: 227, + features: [2], + fee: 0, + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + height: 2, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": + "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" + }, + reference: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + signature: + "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", + timestamp: 1528116151053, + transactionCount: 0, + transactions: [], + version: 3 + } + ]) }) - - it("Get last block data ", async() => { - - const result = await blockLast(); + it("Get last block data ", async () => { + const result = await blockLast() expect(result).toMatchObject(result) //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values - }) - - - it("Get children of specified block ", async() => { - const result = await blockChild("3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f"); - expect(result).toStrictEqual( - { - "version": 3, - "timestamp": 1648064056012, - "reference": "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f", - "nxt-consensus": { - "base-target": 39, - "generation-signature": "EKoXAqLn4ij3936rxtESW3EAjHtuJXDiFuTYrKNa4uku" - }, - "features": [], - "generator": "37nX3hdCt1GWeSsAMNFmWgbQWZZhbvBG3mX", - "signature": "2jeAT1NG4XeH48ckeuPVj4Ejmxg4ZU4VYzpHNCMeq2WTZvcrtBt1RraXq7mtu5pphiiwdyWfVTPxcAZXQcm6V99a", - "blocksize": 225, - "transactionCount": 0, - "fee": 0, - "transactions": [] - } - - ); - + it("Get children of specified block ", async () => { + const result = await blockChild( + "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" + ) + expect(result).toStrictEqual({ + version: 3, + timestamp: 1648064056012, + reference: + "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f", + "nxt-consensus": { + "base-target": 39, + "generation-signature": + "EKoXAqLn4ij3936rxtESW3EAjHtuJXDiFuTYrKNa4uku" + }, + features: [], + generator: "37nX3hdCt1GWeSsAMNFmWgbQWZZhbvBG3mX", + signature: + "2jeAT1NG4XeH48ckeuPVj4Ejmxg4ZU4VYzpHNCMeq2WTZvcrtBt1RraXq7mtu5pphiiwdyWfVTPxcAZXQcm6V99a", + blocksize: 225, + transactionCount: 0, + fee: 0, + transactions: [] + }) }) - - - it("Get height of a block by its Base58-encoded signature ", async() => { - const result = await blockHeightEncoded("3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f") - expect(result).toStrictEqual( - { - "height": 1887361 - } - ); - + it("Get height of a block by its Base58-encoded signature ", async () => { + const result = await blockHeightEncoded( + "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" + ) + expect(result).toStrictEqual({ + height: 1887361 }) + }) - - it("Get block at specified height without transactions payload ", async() => { - const result = await blockAtHeaderOnly(1) - expect(result).toStrictEqual( - { - - "version": 1, - "timestamp": 1528077600000, - "reference": "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - "generator": "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - "signature": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - "blocksize": 312, - "transactionCount": 2, - "height": 1 - - } - ); - + it("Get block at specified height without transactions payload ", async () => { + const result = await blockAtHeaderOnly(1) + expect(result).toStrictEqual({ + version: 1, + timestamp: 1528077600000, + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + blocksize: 312, + transactionCount: 2, + height: 1 }) + }) + it("blockSeqHeaderOnly test ", async () => { + const result = await blockSeqHeaderOnly(1, 2) + expect(result).toStrictEqual([ + { + blocksize: 312, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + height: 1, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + timestamp: 1528077600000, + transactionCount: 2, + version: 1 + }, + { + blocksize: 227, + features: [2], + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + height: 2, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": + "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" + }, + reference: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + signature: + "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", + timestamp: 1528116151053, + transactionCount: 0, + version: 3 + } + ]) + }) - it("blockSeqHeaderOnly test ", async() => { - const result = await blockSeqHeaderOnly(1,2); - expect(result).toStrictEqual( - [{"blocksize": 312, "generator": "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", "height": 1, "nxt-consensus": {"base-target": 153722867, "generation-signature": "11111111111111111111111111111111"}, "reference": "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", "signature": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", "timestamp": 1528077600000, "transactionCount": 2, "version": 1}, {"blocksize": 227, "features": [2], "generator": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", "height": 2, "nxt-consensus": {"base-target": 153722867, "generation-signature": "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q"}, "reference": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", "signature": "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", "timestamp": 1528116151053, "transactionCount": 0, "version": 3}] - ); - }) - - - - it("blockLastHeaderOnly test ", async() => { - - const result = await blockLastHeaderOnly(); - //expect(result).toMatchObject(result) - //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values - expect(result).toHaveProperty("height"); // true - }) - - - it("blockSignature test" , async() => { - const result = await blockSignature("3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi"); - expect(result).toStrictEqual( - { - "version": 3, - "timestamp": 1528116159255, - "reference": "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", - "nxt-consensus": { - "base-target": 112701916, - "generation-signature": "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" - }, - "features": [ - 2 - ], - "generator": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - "signature": "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - "blocksize": 227, - "transactionCount": 0, - "fee": 0, - "transactions": [], - "height": 10 - } - ); - - } ) - - - - it("blockFirst test ", async() => { - const result = await blockFirst(); - expect(result).toStrictEqual( - {"blocksize": 312, "fee": 0, "generator": "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", "height": 1, "nxt-consensus": {"base-target": 153722867, "generation-signature": "11111111111111111111111111111111"}, "reference": "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", "signature": "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", "timestamp": 1528077600000, "transactionCount": 2, "transactions": [{"amount": 5072853761500800, "fee": 0, "id": "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", "recipient": "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", "signature": "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", "timestamp": 1528077600000, "type": 1}, {"amount": 10000000000000000, "fee": 0, "id": "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", "recipient": "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", "signature": "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", "timestamp": 1528077600000, "type": 1}], "version": 1} - ); - }) - - - - - - it("blockAddress test ", async() => { - const result = await blockAddress( - "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - 1889863, - 1889864 - ); - expect(result).toStrictEqual( - - [{"blocksize": 225, "features": [], "fee": 0, "generator": "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", "height": 1889864, "nxt-consensus": {"base-target": 51, "generation-signature": "9iHAgT78TCbzv5HfhxVzzRnM132n45UGqGbvH59FvBoB"}, "reference": "9zvED5KcnvkYsKLFxiCXQDiEsyXrKdtVH23b3qPt2FhAh3BrhUaZbqtndYWCbn4GmPrZvDbwY1vwqrxdgyazGfH", "signature": "353wWZjKZzLiYKkVbgXLrxsK7dzYo9pEgw2pV31rXLnb1EdZbraZThrpg92swhrtQh1J353rPesvcB1mMEAoQtzP", "timestamp": 1648218628090, "transactionCount": 0, "transactions": [], "version": 3}] - ); - }) - + it("blockLastHeaderOnly test ", async () => { + const result = await blockLastHeaderOnly() + //expect(result).toMatchObject(result) + //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values + expect(result).toHaveProperty("height") // true + }) + it("blockSignature test", async () => { + const result = await blockSignature( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi" + ) + expect(result).toStrictEqual({ + version: 3, + timestamp: 1528116159255, + reference: + "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", + "nxt-consensus": { + "base-target": 112701916, + "generation-signature": + "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" + }, + features: [2], + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + signature: + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + blocksize: 227, + transactionCount: 0, + fee: 0, + transactions: [], + height: 10 + }) + }) + it("blockFirst test ", async () => { + const result = await blockFirst() + expect(result).toStrictEqual({ + blocksize: 312, + fee: 0, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + height: 1, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + timestamp: 1528077600000, + transactionCount: 2, + transactions: [ + { + amount: 5072853761500800, + fee: 0, + id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + signature: + "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + timestamp: 1528077600000, + type: 1 + }, + { + amount: 10000000000000000, + fee: 0, + id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", + signature: + "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + timestamp: 1528077600000, + type: 1 + } + ], + version: 1 + }) + }) -} ) + it("blockAddress test ", async () => { + const result = await blockAddress( + "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", + 1889863, + 1889864 + ) + expect(result).toStrictEqual([ + { + blocksize: 225, + features: [], + fee: 0, + generator: "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", + height: 1889864, + "nxt-consensus": { + "base-target": 51, + "generation-signature": + "9iHAgT78TCbzv5HfhxVzzRnM132n45UGqGbvH59FvBoB" + }, + reference: + "9zvED5KcnvkYsKLFxiCXQDiEsyXrKdtVH23b3qPt2FhAh3BrhUaZbqtndYWCbn4GmPrZvDbwY1vwqrxdgyazGfH", + signature: + "353wWZjKZzLiYKkVbgXLrxsK7dzYo9pEgw2pV31rXLnb1EdZbraZThrpg92swhrtQh1J353rPesvcB1mMEAoQtzP", + timestamp: 1648218628090, + transactionCount: 0, + transactions: [], + version: 3 + } + ]) + }) +}) From 80f4f8f837b7dfce0ed75921fea90a132f14f2b0 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 30 Mar 2022 23:24:00 -0300 Subject: [PATCH 20/72] added: blockbyHeight specified errors test --- test/server/blocks/blockOne.test.ts | 40 +++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 test/server/blocks/blockOne.test.ts diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts new file mode 100644 index 0000000..a6e06a2 --- /dev/null +++ b/test/server/blocks/blockOne.test.ts @@ -0,0 +1,40 @@ +import { IBlockError } from "../../../src/server/blocks/block.types" +import { blockByHeight } from "../../../src/server/blocks/service.blocks" + +describe("test block service - validation errors", () => { + it("blockbyHeight - block testing error, passing -1 number", async () => { + // const result = await blockByHeight(-1); + // expect(result).toEqual(1); + // expect().toEqual(error); + // try { + const result = await blockByHeight(-1) + //} catch (error) { + // console.log(error) + //expect(error).toEqual('s'); + // expect(error).toBeInstanceOf(error) + // expect(error).toHaveProperty("cilada") + //} + expect(result).toEqual({ + mensagem: + "o bloco não pode ser menor ou igual a zero ou maior ou igual 2147483647 ", + status: "erro" + }) + expect(result).toMatchObject({ + mensagem: expect.any(String) + }) + }) + + + it("blockbyHeight - block testing error, passing i32Max ", async () => { + const result = await blockByHeight(2147483648) + + expect(result).toEqual({ + mensagem: + "o bloco não pode ser menor ou igual a zero ou maior ou igual 2147483647 ", + status: "erro" + }) + expect(result).toMatchObject({ + mensagem: expect.any(String) + }) + }) +}) From c86698c5355489e6536879ae0ef5261d0eab9ab9 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 30 Mar 2022 23:26:59 -0300 Subject: [PATCH 21/72] added: crash test because block.types --- test/server/blocks/blocks.test.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 439cd5c..0b913f5 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,3 +1,4 @@ +import { IError } from "../../../src/server/blocks/block.types" import { blockByHeight, blockHeight, @@ -39,8 +40,16 @@ describe("test block service", () => { }) }) - - + it.only("block testing error, passing -1 number", async () => { + try { + const result = await blockByHeight(-1) + } catch (error) { + console.log(error) + //expect(error).toEqual(error); + expect(error).toBeInstanceOf(IError) + expect(error).toHaveProperty("status") + } + }) it("see height block from node ", async () => { const result = await blockHeight() From 54d78919ddcfda7aa591151990a588e1a16823d3 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 30 Mar 2022 23:32:25 -0300 Subject: [PATCH 22/72] added: refactored block.types and added validation on function blockbyheight --- junit.xml | 31 +++------------- src/server/blocks/block.types.ts | 33 +++++++++++++++++ src/server/blocks/service.blocks.ts | 57 +++++++++++++++++++++++------ 3 files changed, 84 insertions(+), 37 deletions(-) diff --git a/junit.xml b/junit.xml index a079194..119deaf 100644 --- a/junit.xml +++ b/junit.xml @@ -1,31 +1,10 @@ - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/src/server/blocks/block.types.ts b/src/server/blocks/block.types.ts index da4fc8b..f8ba901 100644 --- a/src/server/blocks/block.types.ts +++ b/src/server/blocks/block.types.ts @@ -34,3 +34,36 @@ export interface IBlock { header: IHeader body: Array } + +/*{ + "status": "error", + "details": "No block for this height" + } + */ + +export interface IBlockError { + status: string + mensagem: string +} + +/* + export class IError extends Error{ + + public readonly status: string; + public readonly code: number; + + constructor ( status:string, code:number) { + super(); + + this.status = status; + this.code = code; + Object.setPrototypeOf(this, new.target.prototype); + Error.captureStackTrace(this); + } + + } +*/ + +// super(description); +//Object.setPrototypeOf(this, new.target.prototype); +//Error.captureStackTrace(this); diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index eee371b..487ba14 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -1,4 +1,4 @@ -import { IBlock } from "./block.types" +import { IBlock, IBlockError } from "./block.types" import axios from "axios" const BASEURL = "https://lunesnode.lunes.io/blocks/" @@ -6,20 +6,55 @@ const BASEURL = "https://lunesnode.lunes.io/blocks/" /* * This function get blockchain `height` e return a full block */ -export async function blockByHeight(height: number): Promise { - const url = "https://lunesnode.lunes.io/blocks/at/${height}"; - +export async function blockByHeight( + height: number +): Promise { + const url = `https://lunesnode.lunes.io/blocks/at/${height}` + //verificar o erro, número negativo, string e retonar o erro! //pesquisar tratamento de erros - //se o número for negativo ou maior que o bloco atual, retorna o erro throw error - estudar try catch - - const response = await axios.get(url) - return response.data + //se o número for negativo ou maior que o bloco atual, retorna o erro throw error - estudar try catch - reponse dentor do try, erro dentro do catch + //promise a partir do axios + + //return await axios.get(url).then(response => response.data).catch(error => error) + + // passar o zero + // passar numero grande + // passar número negativo + // -- FAZER a validação de string + const i32Max = 2147483647 + + if (height <= 0 || height >= i32Max) { + const error: IBlockError = { + status: `erro`, + mensagem: `o bloco não pode ser menor ou igual a zero ou maior ou igual 2147483647 ` + } + return error + //throw new (`Invalid block.`, 404 ); + } else if (typeof height === "string") { + const error: IBlockError = { + status: `erro`, + mensagem: `o bloco não pode receber tipo string ` + } + return error + } else { + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if (response.status === 200) { + resolve(response.data) + } else { + //reject("deu pau") + reject(response.data) + } + }) + } // + + // return response.data + // The requested resource could not be found but may be available again in the future. + + //erro 404 } - - - /* * This function get a blockchain height */ From e6e6845ee871bab87b0de215d28e0bf718f89339 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 31 Mar 2022 14:43:18 -0300 Subject: [PATCH 23/72] refactored: blockByHeight function, tests and type refactored --- junit.xml | 13 ++++--- src/server/blocks/block.types.ts | 2 +- src/server/blocks/service.blocks.ts | 34 ++++++------------ test/server/blocks/blockOne.test.ts | 54 +++++++++++++++++++++++------ test/server/blocks/blocks.test.ts | 35 +------------------ 5 files changed, 64 insertions(+), 74 deletions(-) diff --git a/junit.xml b/junit.xml index 119deaf..9e97b25 100644 --- a/junit.xml +++ b/junit.xml @@ -1,10 +1,13 @@ - - - - + + + - + + + + + \ No newline at end of file diff --git a/src/server/blocks/block.types.ts b/src/server/blocks/block.types.ts index f8ba901..befccf9 100644 --- a/src/server/blocks/block.types.ts +++ b/src/server/blocks/block.types.ts @@ -43,7 +43,7 @@ export interface IBlock { export interface IBlockError { status: string - mensagem: string + message: string } /* diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 487ba14..70ea4ff 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -5,36 +5,28 @@ const BASEURL = "https://lunesnode.lunes.io/blocks/" /* * This function get blockchain `height` e return a full block + * --- validation: zero number, big number and string type */ + export async function blockByHeight( height: number ): Promise { - const url = `https://lunesnode.lunes.io/blocks/at/${height}` - - //verificar o erro, número negativo, string e retonar o erro! - //pesquisar tratamento de erros - //se o número for negativo ou maior que o bloco atual, retorna o erro throw error - estudar try catch - reponse dentor do try, erro dentro do catch - //promise a partir do axios - - //return await axios.get(url).then(response => response.data).catch(error => error) + //const url = `https://lunesnode.lunes.io/blocks/at/${height}` + const url = `${BASEURL}at/${height}` - // passar o zero - // passar numero grande - // passar número negativo - // -- FAZER a validação de string const i32Max = 2147483647 if (height <= 0 || height >= i32Max) { const error: IBlockError = { - status: `erro`, - mensagem: `o bloco não pode ser menor ou igual a zero ou maior ou igual 2147483647 ` + status: `error`, + message: `the block cannot be less than or equal to zero or greater than or equal 2147483647` } return error - //throw new (`Invalid block.`, 404 ); + //throw new error (`Invalid block.`, 404 ); } else if (typeof height === "string") { const error: IBlockError = { - status: `erro`, - mensagem: `o bloco não pode receber tipo string ` + status: `error`, + message: `block cannot receive string type ` } return error } else { @@ -43,16 +35,10 @@ export async function blockByHeight( if (response.status === 200) { resolve(response.data) } else { - //reject("deu pau") reject(response.data) } }) - } // - - // return response.data - // The requested resource could not be found but may be available again in the future. - - //erro 404 + } } /* diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index a6e06a2..ea50474 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -1,7 +1,7 @@ import { IBlockError } from "../../../src/server/blocks/block.types" import { blockByHeight } from "../../../src/server/blocks/service.blocks" -describe("test block service - validation errors", () => { +describe("blockbyHeight - suite test block service", () => { it("blockbyHeight - block testing error, passing -1 number", async () => { // const result = await blockByHeight(-1); // expect(result).toEqual(1); @@ -15,26 +15,60 @@ describe("test block service - validation errors", () => { // expect(error).toHaveProperty("cilada") //} expect(result).toEqual({ - mensagem: - "o bloco não pode ser menor ou igual a zero ou maior ou igual 2147483647 ", - status: "erro" + message: + "the block cannot be less than or equal to zero or greater than or equal 2147483647", + status: "error" }) expect(result).toMatchObject({ - mensagem: expect.any(String) + message: expect.any(String) }) }) - it("blockbyHeight - block testing error, passing i32Max ", async () => { const result = await blockByHeight(2147483648) expect(result).toEqual({ - mensagem: - "o bloco não pode ser menor ou igual a zero ou maior ou igual 2147483647 ", - status: "erro" + message: + "the block cannot be less than or equal to zero or greater than or equal 2147483647", + status: "error" }) expect(result).toMatchObject({ - mensagem: expect.any(String) + message: expect.any(String) + }) + }) + + it("blockbyHeight - receive number 10 param to get fetch", async () => { + const result = await blockByHeight(10) + expect(result).toStrictEqual({ + version: 3, + timestamp: 1528116159255, + reference: + "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", + "nxt-consensus": { + "base-target": 112701916, + "generation-signature": + "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" + }, + features: [2], + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + signature: + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + blocksize: 227, + transactionCount: 0, + fee: 0, + transactions: [], + height: 10 }) }) + + it("blockbyHeight - block testing error, passing -100 number", async () => { + try { + const result = await blockByHeight(-100) + } catch (error) { + console.log(error) + //expect(error).toEqual(error); + //expect(error).toBeInstanceOf(IError) + expect(error).toHaveProperty("status") + } + }) }) diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 0b913f5..dd5dfd2 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -1,4 +1,4 @@ -import { IError } from "../../../src/server/blocks/block.types" +import { IBlockError } from "../../../src/server/blocks/block.types" import { blockByHeight, blockHeight, @@ -16,40 +16,7 @@ import { } from "../../../src/server/blocks/service.blocks" describe("test block service", () => { - it("receive number 10 param to get fetch", async () => { - const result = await blockByHeight(10) - expect(result).toStrictEqual({ - version: 3, - timestamp: 1528116159255, - reference: - "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", - "nxt-consensus": { - "base-target": 112701916, - "generation-signature": - "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" - }, - features: [2], - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - signature: - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - blocksize: 227, - transactionCount: 0, - fee: 0, - transactions: [], - height: 10 - }) - }) - it.only("block testing error, passing -1 number", async () => { - try { - const result = await blockByHeight(-1) - } catch (error) { - console.log(error) - //expect(error).toEqual(error); - expect(error).toBeInstanceOf(IError) - expect(error).toHaveProperty("status") - } - }) it("see height block from node ", async () => { const result = await blockHeight() From 65a9cc102b09acf946ba909b314e471e5aa447e8 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 31 Mar 2022 15:13:34 -0300 Subject: [PATCH 24/72] refactored: blockHeigh test case refactored --- junit.xml | 18 ++++++++++++------ test/server/blocks/blockOne.test.ts | 29 ++++++++++++++++++++++++----- test/server/blocks/blocks.test.ts | 13 ------------- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/junit.xml b/junit.xml index 9e97b25..a3905be 100644 --- a/junit.xml +++ b/junit.xml @@ -1,13 +1,19 @@ - - - + + + + - + + - + + - + + + + \ No newline at end of file diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index ea50474..3623aa5 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -1,8 +1,8 @@ import { IBlockError } from "../../../src/server/blocks/block.types" -import { blockByHeight } from "../../../src/server/blocks/service.blocks" +import { blockByHeight, blockHeight } from "../../../src/server/blocks/service.blocks" -describe("blockbyHeight - suite test block service", () => { - it("blockbyHeight - block testing error, passing -1 number", async () => { +describe("blockByHeight function- suite test block service", () => { + it("blockByHeight - block testing error, passing -1 number", async () => { // const result = await blockByHeight(-1); // expect(result).toEqual(1); // expect().toEqual(error); @@ -37,7 +37,7 @@ describe("blockbyHeight - suite test block service", () => { }) }) - it("blockbyHeight - receive number 10 param to get fetch", async () => { + it("blockByHeight- receive number 10 param to get fetch", async () => { const result = await blockByHeight(10) expect(result).toStrictEqual({ version: 3, @@ -61,7 +61,7 @@ describe("blockbyHeight - suite test block service", () => { }) }) - it("blockbyHeight - block testing error, passing -100 number", async () => { + it("blockByHeight - block testing error, passing -100 number", async () => { try { const result = await blockByHeight(-100) } catch (error) { @@ -72,3 +72,22 @@ describe("blockbyHeight - suite test block service", () => { } }) }) + +describe("blockHeight function - suite test block service", () => { + + it("blockHeight - see height block from node ", async () => { + const result = await blockHeight() + //expect(200); + //expect(result.statusCode).toEqual(200); + /*expect(result).toBeCalledWith( + expect.objectContaining({ + height: expect.any(Number), + }), + );*/ // estudar melhor o código + + expect(result).toMatchObject({ + height: expect.any(Number) + }) + }) + +}) \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index dd5dfd2..29c53db 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -18,20 +18,7 @@ import { describe("test block service", () => { - it("see height block from node ", async () => { - const result = await blockHeight() - //expect(200); - //expect(result.statusCode).toEqual(200); - /*expect(result).toBeCalledWith( - expect.objectContaining({ - height: expect.any(Number), - }), - );*/ // estudar melhor o código - expect(result).toMatchObject({ - height: expect.any(Number) - }) - }) it("see Average delay ", async () => { const result = await blockAverageDelay( From cd9de7c659217aeaf83016e3e4be9bc5626419c1 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 31 Mar 2022 17:32:38 -0300 Subject: [PATCH 25/72] refactored: blockHeight function, tests refactor --- junit.xml | 6 +++--- src/server/blocks/service.blocks.ts | 31 ++++++++++++++++++++++++----- test/server/blocks/blockOne.test.ts | 8 +++++--- test/server/blocks/blocks.test.ts | 4 ---- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/junit.xml b/junit.xml index a3905be..87f1b03 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -13,7 +13,7 @@ - + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 70ea4ff..def0913 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -45,15 +45,36 @@ export async function blockByHeight( * This function get a blockchain height */ export async function blockHeight(): Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/height`) - //return response.data; - return response.data + //const url = `https://lunesnode.lunes.io/blocks/height`; + const url = `${BASEURL}height` + //const response = await axios.get(`${url}`) + //return response.data + + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if ( + response.status === 404 || + response.status === 401 || + response.status === 403 || + response.status === 501 + ) { + const error: IBlockError = { + status: `error`, + message: `system error, come back later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) } /* * Average delay in milliseconds between last blockNum blocks starting from block with signature - signature = signature block - blockNum = 1 to 9 +* signature = signature block +* blockNum = 1 to 9 */ export async function blockAverageDelay( diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index 3623aa5..874d1d8 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -1,5 +1,8 @@ import { IBlockError } from "../../../src/server/blocks/block.types" -import { blockByHeight, blockHeight } from "../../../src/server/blocks/service.blocks" +import { + blockByHeight, + blockHeight +} from "../../../src/server/blocks/service.blocks" describe("blockByHeight function- suite test block service", () => { it("blockByHeight - block testing error, passing -1 number", async () => { @@ -74,7 +77,6 @@ describe("blockByHeight function- suite test block service", () => { }) describe("blockHeight function - suite test block service", () => { - it("blockHeight - see height block from node ", async () => { const result = await blockHeight() //expect(200); @@ -89,5 +91,5 @@ describe("blockHeight function - suite test block service", () => { height: expect.any(Number) }) }) +}) -}) \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 29c53db..a067b7b 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -16,10 +16,6 @@ import { } from "../../../src/server/blocks/service.blocks" describe("test block service", () => { - - - - it("see Average delay ", async () => { const result = await blockAverageDelay( "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", From 2804b11ae9f62f9e04e7d9656066f2d12edf4b6f Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 1 Apr 2022 14:36:29 -0300 Subject: [PATCH 26/72] added: blockAverageDelay function and test refactor --- junit.xml | 11 +++++--- src/server/blocks/service.blocks.ts | 39 +++++++++++++++++++---------- test/server/blocks/blockOne.test.ts | 34 ++++++++++++++++++------- 3 files changed, 59 insertions(+), 25 deletions(-) diff --git a/junit.xml b/junit.xml index 87f1b03..82dea0f 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -13,7 +13,12 @@ - + + + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index def0913..de6f808 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -11,7 +11,6 @@ const BASEURL = "https://lunesnode.lunes.io/blocks/" export async function blockByHeight( height: number ): Promise { - //const url = `https://lunesnode.lunes.io/blocks/at/${height}` const url = `${BASEURL}at/${height}` const i32Max = 2147483647 @@ -22,7 +21,6 @@ export async function blockByHeight( message: `the block cannot be less than or equal to zero or greater than or equal 2147483647` } return error - //throw new error (`Invalid block.`, 404 ); } else if (typeof height === "string") { const error: IBlockError = { status: `error`, @@ -45,10 +43,7 @@ export async function blockByHeight( * This function get a blockchain height */ export async function blockHeight(): Promise { - //const url = `https://lunesnode.lunes.io/blocks/height`; const url = `${BASEURL}height` - //const response = await axios.get(`${url}`) - //return response.data return new Promise(async (resolve, reject) => { const response = await axios.get(url) @@ -72,19 +67,37 @@ export async function blockHeight(): Promise { } /* -* Average delay in milliseconds between last blockNum blocks starting from block with signature -* signature = signature block -* blockNum = 1 to 9 -*/ + * Average delay in milliseconds between last blockNum blocks starting from block with signature + * signature = signature block - Base58-encoded signature + * blockNum = 1 to 9 - Number of blocks to count delay + */ export async function blockAverageDelay( signature: string, blockNum: number ): Promise { - const response = await axios.get( - `https://lunesnode.lunes.io/blocks/delay/${signature}/${blockNum}` - ) - return response.data + const url = `${BASEURL}delay/${signature}/${blockNum}` + + if (blockNum <= 0 || blockNum > 9) { + const error: IBlockError = { + status: `error`, + message: `the blockNum cannot be less than or equal to zero or greater than nine` + } + return error; + } + else { + + //const response = await axios.get(url) + //return response.data + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) + } } /* diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index 874d1d8..2f81157 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -1,7 +1,7 @@ import { IBlockError } from "../../../src/server/blocks/block.types" import { blockByHeight, - blockHeight + blockHeight, blockAverageDelay } from "../../../src/server/blocks/service.blocks" describe("blockByHeight function- suite test block service", () => { @@ -79,17 +79,33 @@ describe("blockByHeight function- suite test block service", () => { describe("blockHeight function - suite test block service", () => { it("blockHeight - see height block from node ", async () => { const result = await blockHeight() - //expect(200); - //expect(result.statusCode).toEqual(200); - /*expect(result).toBeCalledWith( - expect.objectContaining({ - height: expect.any(Number), - }), - );*/ // estudar melhor o código - expect(result).toMatchObject({ height: expect.any(Number) }) }) }) + +describe("blockAverageDelay function - suite test block service", () => { + it("blockAverageDelay - see Average delay ", async () => { + const result = await blockAverageDelay( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + 1 + ) + expect(result).toMatchObject({ + delay: expect.any(Number) + }) + }) + + it("blockAverageDelay - blockNum >9 error ", async () => { + const result = await blockAverageDelay( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + 10 + ) + // expect(result).toMatchObject({ + // delay: expect.any(Number) + // }) + expect(result).toEqual({"message": "the blockNum cannot be less than or equal to zero or greater than nine", "status": "error"}); + }) + +}) \ No newline at end of file From fa01dceee636b4b27cd60277adf90dded57cc10b Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 1 Apr 2022 20:51:35 -0300 Subject: [PATCH 27/72] added: blockSeq test and function refacator --- junit.xml | 18 +++-- src/server/blocks/service.blocks.ts | 49 ++++++++++--- test/server/blocks/blockOne.test.ts | 103 +++++++++++++++++++++++++--- 3 files changed, 150 insertions(+), 20 deletions(-) diff --git a/junit.xml b/junit.xml index 82dea0f..cf7c447 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -16,9 +16,19 @@ - + + + + + + + + + + + - + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index de6f808..8e14eec 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -68,8 +68,8 @@ export async function blockHeight(): Promise { /* * Average delay in milliseconds between last blockNum blocks starting from block with signature - * signature = signature block - Base58-encoded signature - * blockNum = 1 to 9 - Number of blocks to count delay + * --- signature = signature block - Base58-encoded signature + * --- blockNum = 1 to 9 - Number of blocks to count delay */ export async function blockAverageDelay( @@ -102,13 +102,46 @@ export async function blockAverageDelay( /* * Get block at specified heights +* max value (from) (to) 1 - 100 (99 difference) +* from value < to value +* `https://lunesnode.lunes.io/blocks/seq/${from}/${to}` */ -//GET /blocks/seq/{from}/{to} -export async function blockSeq(from: number, to: number): Promise { - const response = await axios.get( - `https://lunesnode.lunes.io/blocks/seq/${from}/${to}` - ) - return response.data + +export async function blockSeq(from: number, to: number): Promise { + const url = `${BASEURL}seq/${from}/${to}` + //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` + const Max: boolean = (to - from) < 100 + + if ( from > to || Max === false){ + const error: IBlockError = { + status: `error`, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` + } + return error + + } else { + const response = await axios.get(url) + return response.data} + + /* if (Max === true && from < to){ + + const response = await axios.get(url) + return response.data + + } +*/ + + + +/* + //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` + const Max: boolean = (to - from) < 100 + + if ( Max === true && from < to ){ + const response = await axios.get(url) + return response.data + } +*/ } /* diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index 2f81157..1483452 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -1,7 +1,8 @@ import { IBlockError } from "../../../src/server/blocks/block.types" import { blockByHeight, - blockHeight, blockAverageDelay + blockHeight, + blockAverageDelay, blockSeq } from "../../../src/server/blocks/service.blocks" describe("blockByHeight function- suite test block service", () => { @@ -85,7 +86,6 @@ describe("blockHeight function - suite test block service", () => { }) }) - describe("blockAverageDelay function - suite test block service", () => { it("blockAverageDelay - see Average delay ", async () => { const result = await blockAverageDelay( @@ -93,7 +93,7 @@ describe("blockAverageDelay function - suite test block service", () => { 1 ) expect(result).toMatchObject({ - delay: expect.any(Number) + delay: expect.any(Number) }) }) @@ -102,10 +102,97 @@ describe("blockAverageDelay function - suite test block service", () => { "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", 10 ) - // expect(result).toMatchObject({ - // delay: expect.any(Number) - // }) - expect(result).toEqual({"message": "the blockNum cannot be less than or equal to zero or greater than nine", "status": "error"}); + // expect(result).toMatchObject({ + // delay: expect.any(Number) + // }) + expect(result).toEqual({ + message: + "the blockNum cannot be less than or equal to zero or greater than nine", + status: "error" + }) }) +}) + -}) \ No newline at end of file +describe("blockSeq function - suite test block service", () => { +it("blockSeq - Get block at specified heights ", async () => { + const result = await blockSeq(1, 2) + expect(result).toStrictEqual([ + { + blocksize: 312, + fee: 0, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + height: 1, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + timestamp: 1528077600000, + transactionCount: 2, + transactions: [ + { + amount: 5072853761500800, + fee: 0, + id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + signature: + "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + timestamp: 1528077600000, + type: 1 + }, + { + amount: 10000000000000000, + fee: 0, + id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", + signature: + "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + timestamp: 1528077600000, + type: 1 + } + ], + version: 1 + }, + { + blocksize: 227, + features: [2], + fee: 0, + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + height: 2, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": + "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" + }, + reference: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + signature: + "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", + timestamp: 1528116151053, + transactionCount: 0, + transactions: [], + version: 3 + } + ]) +}) + +it("blockSeq - from > to error ", async () => { + const result = await blockSeq(2, 1) + expect(result).toEqual({"message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", "status": "error"}) +}) + +it("blockSeq - big sequences ", async () => { + const result = await blockSeq(1, 101) + expect(result).toEqual({"message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", "status": "error"}) +}) + +it("blockSeq - max === false ", async () => { + const result = await blockSeq(1, 200) + expect(result).toEqual({"message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", "status": "error"}) +}) + +}) From 08d7abd4a58102c0d53b63e14ec97a0bc302f40d Mon Sep 17 00:00:00 2001 From: nunesinc Date: Mon, 4 Apr 2022 19:21:01 -0300 Subject: [PATCH 28/72] added: refactored blocklast function and test --- junit.xml | 18 ++++--- src/server/blocks/service.blocks.ts | 72 +++++++++++++-------------- test/server/blocks/blockOne.test.ts | 10 +++- test/server/blocks/blocks.test.ts | 75 ----------------------------- 4 files changed, 58 insertions(+), 117 deletions(-) diff --git a/junit.xml b/junit.xml index cf7c447..1fd6f71 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -22,13 +22,19 @@ - + + - + + - + + + + + - + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 8e14eec..646d0f8 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -83,10 +83,8 @@ export async function blockAverageDelay( status: `error`, message: `the blockNum cannot be less than or equal to zero or greater than nine` } - return error; - } - else { - + return error + } else { //const response = await axios.get(url) //return response.data return new Promise(async (resolve, reject) => { @@ -102,54 +100,58 @@ export async function blockAverageDelay( /* * Get block at specified heights -* max value (from) (to) 1 - 100 (99 difference) -* from value < to value -* `https://lunesnode.lunes.io/blocks/seq/${from}/${to}` + * max value (from) (to) 1 - 100 (99 difference) + * from value < to value + * `https://lunesnode.lunes.io/blocks/seq/${from}/${to}` */ -export async function blockSeq(from: number, to: number): Promise { +export async function blockSeq( + from: number, + to: number +): Promise { const url = `${BASEURL}seq/${from}/${to}` //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` - const Max: boolean = (to - from) < 100 + const Max: boolean = to - from < 100 - if ( from > to || Max === false){ + if (from > to || Max === false) { const error: IBlockError = { status: `error`, message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` - } + } return error - - } else { - const response = await axios.get(url) - return response.data} - - /* if (Max === true && from < to){ - - const response = await axios.get(url) - return response.data - - } -*/ - - - -/* - //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` - const Max: boolean = (to - from) < 100 - - if ( Max === true && from < to ){ + } else { const response = await axios.get(url) return response.data } -*/ } /* * Get last block data */ -export async function blockLast(): Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/last`) - return response.data +export async function blockLast(): Promise { + const url = `${BASEURL}last` + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if ( + response.status === 404 || + response.status === 401 || + response.status === 403 || + response.status === 501 + ) { + const error: IBlockError = { + status: `error`, + message: `system error, come back later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + //`https://lunesnode.lunes.io/blocks/last + //const response = await axios.get(url) + //return response.data + }) } /* diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index 1483452..4320a49 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -2,7 +2,7 @@ import { IBlockError } from "../../../src/server/blocks/block.types" import { blockByHeight, blockHeight, - blockAverageDelay, blockSeq + blockAverageDelay, blockSeq, blockLast } from "../../../src/server/blocks/service.blocks" describe("blockByHeight function- suite test block service", () => { @@ -196,3 +196,11 @@ it("blockSeq - max === false ", async () => { }) }) + +describe("blockLast function - suite test block service", () => { + it("blockLast - Get last block data ", async () => { + const result = await blockLast() + expect(result).toMatchObject(result) + //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values + }) +}) \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index a067b7b..ef49845 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -16,81 +16,6 @@ import { } from "../../../src/server/blocks/service.blocks" describe("test block service", () => { - it("see Average delay ", async () => { - const result = await blockAverageDelay( - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - 1 - ) - expect(result).toMatchObject({ - delay: expect.any(Number) - }) - }) - - it("Get block at specified heights ", async () => { - const result = await blockSeq(1, 2) - expect(result).toStrictEqual([ - { - blocksize: 312, - fee: 0, - generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - height: 1, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - reference: - "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - signature: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - timestamp: 1528077600000, - transactionCount: 2, - transactions: [ - { - amount: 5072853761500800, - fee: 0, - id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - signature: - "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - timestamp: 1528077600000, - type: 1 - }, - { - amount: 10000000000000000, - fee: 0, - id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", - signature: - "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - timestamp: 1528077600000, - type: 1 - } - ], - version: 1 - }, - { - blocksize: 227, - features: [2], - fee: 0, - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - height: 2, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": - "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" - }, - reference: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - signature: - "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", - timestamp: 1528116151053, - transactionCount: 0, - transactions: [], - version: 3 - } - ]) - }) - it("Get last block data ", async () => { const result = await blockLast() expect(result).toMatchObject(result) From e1a27a261f82a9e6a4b2b3366390ff2821501d34 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Tue, 5 Apr 2022 14:03:58 -0300 Subject: [PATCH 29/72] added: blockChild test case and refactor function --- junit.xml | 11 +++-- src/server/blocks/service.blocks.ts | 31 ++++++++++---- test/server/blocks/blockOne.test.ts | 65 ++++++++++++++++++++++++++++- test/server/blocks/blocks.test.ts | 31 +------------- 4 files changed, 98 insertions(+), 40 deletions(-) diff --git a/junit.xml b/junit.xml index 1fd6f71..a3e13e4 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -34,7 +34,12 @@ - + + + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 646d0f8..48aef9d 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -42,7 +42,7 @@ export async function blockByHeight( /* * This function get a blockchain height */ -export async function blockHeight(): Promise { +export async function blockHeight(): Promise { const url = `${BASEURL}height` return new Promise(async (resolve, reject) => { @@ -75,7 +75,7 @@ export async function blockHeight(): Promise { export async function blockAverageDelay( signature: string, blockNum: number -): Promise { +): Promise { const url = `${BASEURL}delay/${signature}/${blockNum}` if (blockNum <= 0 || blockNum > 9) { @@ -157,11 +157,28 @@ export async function blockLast(): Promise { /* * Get children of specified block */ -export async function blockChild(signature: string): Promise { - const response = await axios.get( - `https://lunesnode.lunes.io/blocks/child/${signature}` - ) - return response.data +export async function blockChild( + signature: string +): Promise { + const url = `${BASEURL}child/${signature}` + //`https://lunesnode.lunes.io/blocks/child/${signature}` + //const response = await axios.get(url) + //return response.data + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + + if (response.status === 404) { + const error: IBlockError = { + status: `error`, + message: `block does not exist, try later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) } /* diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index 4320a49..4884c05 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -2,9 +2,11 @@ import { IBlockError } from "../../../src/server/blocks/block.types" import { blockByHeight, blockHeight, - blockAverageDelay, blockSeq, blockLast + blockAverageDelay, blockSeq, blockLast, blockChild } from "../../../src/server/blocks/service.blocks" + + describe("blockByHeight function- suite test block service", () => { it("blockByHeight - block testing error, passing -1 number", async () => { // const result = await blockByHeight(-1); @@ -203,4 +205,65 @@ describe("blockLast function - suite test block service", () => { expect(result).toMatchObject(result) //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values }) +}) + +describe("blockChild function - suite test block service", () => { + it("blockChild - Get children of specified block ", async () => { + const result = await blockChild( + "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" + ) + expect(result).toStrictEqual({ + version: 3, + timestamp: 1648064056012, + reference: + "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f", + "nxt-consensus": { + "base-target": 39, + "generation-signature": + "EKoXAqLn4ij3936rxtESW3EAjHtuJXDiFuTYrKNa4uku" + }, + features: [], + generator: "37nX3hdCt1GWeSsAMNFmWgbQWZZhbvBG3mX", + signature: + "2jeAT1NG4XeH48ckeuPVj4Ejmxg4ZU4VYzpHNCMeq2WTZvcrtBt1RraXq7mtu5pphiiwdyWfVTPxcAZXQcm6V99a", + blocksize: 225, + transactionCount: 0, + fee: 0, + transactions: [] + }) + }) + + it("blockChild - error 404 ", async () => { + /* + try { + const result = await blockChild("124afdsfaf") + + } catch (error) { + console.log(error) + // expect(error).toHaveProperty('status Code', 404); + + } + */ + // await expect( + // async () => await blockChild("124afdsfaf") + //).rejects.toThrow(); + + // const request = Promise.reject({statusCode: 404}) + //await expect(request).rejects.toMatchObject({ statusCode: 500 }); + //expect(() =>blockChild("124afdsfaf")).toThrow('ERR_UNHANDLED_REJECTION'); + //const result = await blockChild("124afdsfaf") + + const action = async () => { + await blockChild("124afdsfaf"); + }; + + expect(action()).rejects.toThrow(); + + /* expect(result).toStrictEqual({ + status: `error`, + message: `block does not exist, try later` + }) + */ + }) + }) \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index ef49845..3fd0508 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -16,36 +16,9 @@ import { } from "../../../src/server/blocks/service.blocks" describe("test block service", () => { - it("Get last block data ", async () => { - const result = await blockLast() - expect(result).toMatchObject(result) - //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values - }) - it("Get children of specified block ", async () => { - const result = await blockChild( - "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" - ) - expect(result).toStrictEqual({ - version: 3, - timestamp: 1648064056012, - reference: - "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f", - "nxt-consensus": { - "base-target": 39, - "generation-signature": - "EKoXAqLn4ij3936rxtESW3EAjHtuJXDiFuTYrKNa4uku" - }, - features: [], - generator: "37nX3hdCt1GWeSsAMNFmWgbQWZZhbvBG3mX", - signature: - "2jeAT1NG4XeH48ckeuPVj4Ejmxg4ZU4VYzpHNCMeq2WTZvcrtBt1RraXq7mtu5pphiiwdyWfVTPxcAZXQcm6V99a", - blocksize: 225, - transactionCount: 0, - fee: 0, - transactions: [] - }) - }) + + it("Get height of a block by its Base58-encoded signature ", async () => { const result = await blockHeightEncoded( From d638ecec324410ee479b5cfd2fd5a0d7ab8c1fe6 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Tue, 5 Apr 2022 14:36:08 -0300 Subject: [PATCH 30/72] added: blockHeightEncoded test and function with refactor --- junit.xml | 14 ++++++++++---- src/server/blocks/service.blocks.ts | 24 ++++++++++++++++++++---- test/server/blocks/blockOne.test.ts | 26 ++++++++++++++++++++++++-- 3 files changed, 54 insertions(+), 10 deletions(-) diff --git a/junit.xml b/junit.xml index a3e13e4..0225145 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -37,9 +37,15 @@ - + + + + + + + - + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 48aef9d..e1b8560 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -185,10 +185,26 @@ export async function blockChild( * Get height of a block by its Base58-encoded signature */ export async function blockHeightEncoded(signature: string): Promise { - const response = await axios.get( - `https://lunesnode.lunes.io/blocks/height/${signature}` - ) - return response.data + const url = `${BASEURL}height/${signature}` + //`https://lunesnode.lunes.io/blocks/height/${signature}` + //const response = await axios.get(url) + //return response.data + + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + + if (response.status === 404) { + const error: IBlockError = { + status: `error`, + message: `block does not exist, try later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) } /* diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index 4884c05..38caabc 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -2,7 +2,7 @@ import { IBlockError } from "../../../src/server/blocks/block.types" import { blockByHeight, blockHeight, - blockAverageDelay, blockSeq, blockLast, blockChild + blockAverageDelay, blockSeq, blockLast, blockChild, blockHeightEncoded } from "../../../src/server/blocks/service.blocks" @@ -266,4 +266,26 @@ describe("blockChild function - suite test block service", () => { */ }) -}) \ No newline at end of file +}) + + +describe("blockHeightEncoded function - suite test block service", () => { +it("blockHeightEncoded - Get height of a block by its Base58-encoded signature ", async () => { + const result = await blockHeightEncoded( + "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" + ) + expect(result).toStrictEqual({ + height: 1887361 + }) +}) + +it("blockHeightEncoded - error 404 ", async () => { + const result = async () => { + await blockHeightEncoded("124afdsfaf"); + }; + + expect(result()).rejects.toThrow(); +}) + + +}) From 404877d5ae631a1993c55221998a772052d709a3 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 6 Apr 2022 14:35:05 -0300 Subject: [PATCH 31/72] added: blockAtHeaderOnly test 404 and function --- junit.xml | 15 +- src/server/blocks/service.blocks.ts | 54 +++++- test/server/blocks/blockOne.test.ts | 261 ++++++++++++++++------------ test/server/blocks/blocks.test.ts | 19 +- 4 files changed, 212 insertions(+), 137 deletions(-) diff --git a/junit.xml b/junit.xml index 0225145..e218df9 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -43,9 +43,16 @@ - + + + + + + + + - + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index e1b8560..90375d0 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -184,7 +184,9 @@ export async function blockChild( /* * Get height of a block by its Base58-encoded signature */ -export async function blockHeightEncoded(signature: string): Promise { +export async function blockHeightEncoded( + signature: string +): Promise { const url = `${BASEURL}height/${signature}` //`https://lunesnode.lunes.io/blocks/height/${signature}` //const response = await axios.get(url) @@ -210,11 +212,51 @@ export async function blockHeightEncoded(signature: string): Promise { /* * Get block at specified height without transactions payload */ -export async function blockAtHeaderOnly(height: number): Promise { - const response = await axios.get( - `https://lunesnode.lunes.io/blocks/headers/at/${height}` - ) - return response.data +export async function blockAtHeaderOnly( + height: number +): Promise { + const url = `${BASEURL}headers/at/${height}` + //`https://lunesnode.lunes.io/blocks/headers/at/${height}` + + if (typeof height === "string") { + const error: IBlockError = { + status: `error`, + message: `block cannot receive string type ` + } + return error + } else { + // const response = await axios.get(url) + //return response.data + + /* if (response.status === 404) { + const error: IBlockError = { + status: `error`, + message: `The requested resource could not be found but may be available again in the future, try later` + } + return error + } else if (response.status === 200) {return response.data} + */ + + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + + if (response.status === 404) { + const error: IBlockError = { + status: `error`, + message: `The requested resource could not be found but may be available again in the future, try later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + const error: IBlockError = { + status: `error`, + message: `The requested resource could not be found but may be available again in the future, try later` + } + } + }) + } } /* diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index 38caabc..8581528 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -2,11 +2,14 @@ import { IBlockError } from "../../../src/server/blocks/block.types" import { blockByHeight, blockHeight, - blockAverageDelay, blockSeq, blockLast, blockChild, blockHeightEncoded + blockAverageDelay, + blockSeq, + blockLast, + blockChild, + blockHeightEncoded, + blockAtHeaderOnly } from "../../../src/server/blocks/service.blocks" - - describe("blockByHeight function- suite test block service", () => { it("blockByHeight - block testing error, passing -1 number", async () => { // const result = await blockByHeight(-1); @@ -115,88 +118,98 @@ describe("blockAverageDelay function - suite test block service", () => { }) }) - describe("blockSeq function - suite test block service", () => { -it("blockSeq - Get block at specified heights ", async () => { - const result = await blockSeq(1, 2) - expect(result).toStrictEqual([ - { - blocksize: 312, - fee: 0, - generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - height: 1, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - reference: - "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - signature: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - timestamp: 1528077600000, - transactionCount: 2, - transactions: [ - { - amount: 5072853761500800, - fee: 0, - id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - signature: - "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - timestamp: 1528077600000, - type: 1 + it("blockSeq - Get block at specified heights ", async () => { + const result = await blockSeq(1, 2) + expect(result).toStrictEqual([ + { + blocksize: 312, + fee: 0, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + height: 1, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" }, - { - amount: 10000000000000000, - fee: 0, - id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", - signature: - "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - timestamp: 1528077600000, - type: 1 - } - ], - version: 1 - }, - { - blocksize: 227, - features: [2], - fee: 0, - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - height: 2, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": - "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + timestamp: 1528077600000, + transactionCount: 2, + transactions: [ + { + amount: 5072853761500800, + fee: 0, + id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + signature: + "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + timestamp: 1528077600000, + type: 1 + }, + { + amount: 10000000000000000, + fee: 0, + id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", + signature: + "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + timestamp: 1528077600000, + type: 1 + } + ], + version: 1 }, - reference: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - signature: - "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", - timestamp: 1528116151053, - transactionCount: 0, - transactions: [], - version: 3 - } - ]) -}) - -it("blockSeq - from > to error ", async () => { - const result = await blockSeq(2, 1) - expect(result).toEqual({"message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", "status": "error"}) -}) + { + blocksize: 227, + features: [2], + fee: 0, + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + height: 2, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": + "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" + }, + reference: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + signature: + "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", + timestamp: 1528116151053, + transactionCount: 0, + transactions: [], + version: 3 + } + ]) + }) -it("blockSeq - big sequences ", async () => { - const result = await blockSeq(1, 101) - expect(result).toEqual({"message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", "status": "error"}) -}) + it("blockSeq - from > to error ", async () => { + const result = await blockSeq(2, 1) + expect(result).toEqual({ + message: + "Too big sequences requested OR {from} cannot be bigger than {to}, change it", + status: "error" + }) + }) -it("blockSeq - max === false ", async () => { - const result = await blockSeq(1, 200) - expect(result).toEqual({"message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", "status": "error"}) -}) + it("blockSeq - big sequences ", async () => { + const result = await blockSeq(1, 101) + expect(result).toEqual({ + message: + "Too big sequences requested OR {from} cannot be bigger than {to}, change it", + status: "error" + }) + }) + it("blockSeq - max === false ", async () => { + const result = await blockSeq(1, 200) + expect(result).toEqual({ + message: + "Too big sequences requested OR {from} cannot be bigger than {to}, change it", + status: "error" + }) + }) }) describe("blockLast function - suite test block service", () => { @@ -233,8 +246,8 @@ describe("blockChild function - suite test block service", () => { }) }) - it("blockChild - error 404 ", async () => { - /* + it("blockChild - error 404 ", async () => { + /* try { const result = await blockChild("124afdsfaf") @@ -244,48 +257,74 @@ describe("blockChild function - suite test block service", () => { } */ - // await expect( - // async () => await blockChild("124afdsfaf") - //).rejects.toThrow(); + // await expect( + // async () => await blockChild("124afdsfaf") + //).rejects.toThrow(); - // const request = Promise.reject({statusCode: 404}) - //await expect(request).rejects.toMatchObject({ statusCode: 500 }); - //expect(() =>blockChild("124afdsfaf")).toThrow('ERR_UNHANDLED_REJECTION'); - //const result = await blockChild("124afdsfaf") - - const action = async () => { - await blockChild("124afdsfaf"); - }; - - expect(action()).rejects.toThrow(); + // const request = Promise.reject({statusCode: 404}) + //await expect(request).rejects.toMatchObject({ statusCode: 500 }); + //expect(() =>blockChild("124afdsfaf")).toThrow('ERR_UNHANDLED_REJECTION'); + //const result = await blockChild("124afdsfaf") + + const action = async () => { + await blockChild("124afdsfaf") + } - /* expect(result).toStrictEqual({ + expect(action()).rejects.toThrow() + + /* expect(result).toStrictEqual({ status: `error`, message: `block does not exist, try later` }) */ - }) - + }) }) - describe("blockHeightEncoded function - suite test block service", () => { -it("blockHeightEncoded - Get height of a block by its Base58-encoded signature ", async () => { - const result = await blockHeightEncoded( - "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" - ) - expect(result).toStrictEqual({ - height: 1887361 + it("blockHeightEncoded - Get height of a block by its Base58-encoded signature ", async () => { + const result = await blockHeightEncoded( + "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" + ) + expect(result).toStrictEqual({ + height: 1887361 + }) }) -}) -it("blockHeightEncoded - error 404 ", async () => { - const result = async () => { - await blockHeightEncoded("124afdsfaf"); - }; - - expect(result()).rejects.toThrow(); + it("blockHeightEncoded - error 404 ", async () => { + const result = async () => { + await blockHeightEncoded("124afdsfaf") + } + + expect(result()).rejects.toThrow() + }) }) +describe("blockAtHeaderOnly function - suite test block service", () => { + it("blockAtHeaderOnly - Get block at specified height without transactions payload ", async () => { + const result = await blockAtHeaderOnly(1) + expect(result).toStrictEqual({ + version: 1, + timestamp: 1528077600000, + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + blocksize: 312, + transactionCount: 2, + height: 1 + }) + }) + + it("blockAtHeaderOnly - error 404 ", async () => { + const result = async () => { + await blockAtHeaderOnly(11111111111) + } + expect(result()).rejects.toThrow() + }) }) diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 3fd0508..2574c3b 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -16,20 +16,7 @@ import { } from "../../../src/server/blocks/service.blocks" describe("test block service", () => { - - - - - it("Get height of a block by its Base58-encoded signature ", async () => { - const result = await blockHeightEncoded( - "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" - ) - expect(result).toStrictEqual({ - height: 1887361 - }) - }) - - it("Get block at specified height without transactions payload ", async () => { + it("blockAtHeaderOnly - Get block at specified height without transactions payload ", async () => { const result = await blockAtHeaderOnly(1) expect(result).toStrictEqual({ version: 1, @@ -49,7 +36,7 @@ describe("test block service", () => { }) }) - it("blockSeqHeaderOnly test ", async () => { + it(" blockSeqHeaderOnly test ", async () => { const result = await blockSeqHeaderOnly(1, 2) expect(result).toStrictEqual([ { @@ -89,7 +76,7 @@ describe("test block service", () => { ]) }) - it("blockLastHeaderOnly test ", async () => { + it(" blockLastHeaderOnly test ", async () => { const result = await blockLastHeaderOnly() //expect(result).toMatchObject(result) //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values From 5518eb4997fd6cb0543e2c4d1c568e2d08e03a95 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 6 Apr 2022 14:56:26 -0300 Subject: [PATCH 32/72] refactored: spaces and lines refactores of function --- src/server/blocks/service.blocks.ts | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 90375d0..b2c7bd0 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -161,9 +161,6 @@ export async function blockChild( signature: string ): Promise { const url = `${BASEURL}child/${signature}` - //`https://lunesnode.lunes.io/blocks/child/${signature}` - //const response = await axios.get(url) - //return response.data return new Promise(async (resolve, reject) => { const response = await axios.get(url) @@ -188,10 +185,6 @@ export async function blockHeightEncoded( signature: string ): Promise { const url = `${BASEURL}height/${signature}` - //`https://lunesnode.lunes.io/blocks/height/${signature}` - //const response = await axios.get(url) - //return response.data - return new Promise(async (resolve, reject) => { const response = await axios.get(url) @@ -216,7 +209,6 @@ export async function blockAtHeaderOnly( height: number ): Promise { const url = `${BASEURL}headers/at/${height}` - //`https://lunesnode.lunes.io/blocks/headers/at/${height}` if (typeof height === "string") { const error: IBlockError = { @@ -225,18 +217,6 @@ export async function blockAtHeaderOnly( } return error } else { - // const response = await axios.get(url) - //return response.data - - /* if (response.status === 404) { - const error: IBlockError = { - status: `error`, - message: `The requested resource could not be found but may be available again in the future, try later` - } - return error - } else if (response.status === 200) {return response.data} - */ - return new Promise(async (resolve, reject) => { const response = await axios.get(url) @@ -250,10 +230,6 @@ export async function blockAtHeaderOnly( resolve(response.data) } else { reject(response.data) - const error: IBlockError = { - status: `error`, - message: `The requested resource could not be found but may be available again in the future, try later` - } } }) } From 0d273d49c09c25deac60c4cde689798a75a29894 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 6 Apr 2022 18:50:46 -0300 Subject: [PATCH 33/72] added: blockSeqHeaderOnly test and function --- junit.xml | 13 ++++-- src/server/blocks/service.blocks.ts | 23 +++++++--- test/server/blocks/blockOne.test.ts | 65 ++++++++++++++++++++++++++++- 3 files changed, 92 insertions(+), 9 deletions(-) diff --git a/junit.xml b/junit.xml index e218df9..ebeb00f 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -52,7 +52,14 @@ - + + + + + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index b2c7bd0..019703d 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -237,15 +237,28 @@ export async function blockAtHeaderOnly( /* * Get block without transactions payload at specified heights +* max value (from) (to) 1 - 100 (99 difference) + * from value < to value + * `https://lunesnode.lunes.io/blocks/headers/seq/${from}/${to} */ export async function blockSeqHeaderOnly( from: number, to: number -): Promise { - const response = await axios.get( - `https://lunesnode.lunes.io/blocks/headers/seq/${from}/${to}` - ) - return response.data +): Promise { + const url = `${BASEURL}headers/seq/${from}/${to}` + + const Max: boolean = to - from < 100 + + if (from > to || Max === false) { + const error: IBlockError = { + status: `error`, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` + } + return error + } else { + const response = await axios.get(url) + return response.data + } } /* diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index 8581528..ec3649c 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -7,7 +7,7 @@ import { blockLast, blockChild, blockHeightEncoded, - blockAtHeaderOnly + blockAtHeaderOnly, blockSeqHeaderOnly } from "../../../src/server/blocks/service.blocks" describe("blockByHeight function- suite test block service", () => { @@ -328,3 +328,66 @@ describe("blockAtHeaderOnly function - suite test block service", () => { expect(result()).rejects.toThrow() }) }) + + +describe("blockSeqHeaderOnly function - suite test block service", () => { + + it(" blockSeqHeaderOnly test ", async () => { + const result = await blockSeqHeaderOnly(1, 2) + expect(result).toStrictEqual([ + { + blocksize: 312, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + height: 1, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + timestamp: 1528077600000, + transactionCount: 2, + version: 1 + }, + { + blocksize: 227, + features: [2], + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + height: 2, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": + "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" + }, + reference: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + signature: + "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", + timestamp: 1528116151053, + transactionCount: 0, + version: 3 + } + ]) + }) + + it(" blockSeqHeaderOnly - error from > to ", async () => { + const result = await blockSeqHeaderOnly(2, 1) + expect(result).toEqual({ + message: + "Too big sequences requested OR {from} cannot be bigger than {to}, change it", + status: "error" + }) + }) + + + it(" blockSeqHeaderOnly - Max === false ", async () => { + const result = await blockSeqHeaderOnly(1, 199) + expect(result).toEqual({ + message: + "Too big sequences requested OR {from} cannot be bigger than {to}, change it", + status: "error" + }) + }) +}) \ No newline at end of file From b2caad8321cdda7749f7203dba7f4cd9f54180ec Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 6 Apr 2022 19:43:41 -0300 Subject: [PATCH 34/72] added: blockSignature test and function with refactor --- junit.xml | 20 ++++++--- src/server/blocks/service.blocks.ts | 57 ++++++++++++++++++++----- test/server/blocks/blockOne.test.ts | 63 ++++++++++++++++++++++++++- test/server/blocks/blocks.test.ts | 66 +---------------------------- 4 files changed, 125 insertions(+), 81 deletions(-) diff --git a/junit.xml b/junit.xml index ebeb00f..23aa611 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -55,11 +55,21 @@ - + + + + + + + + + + + - + - + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 019703d..a4222ac 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -263,22 +263,59 @@ export async function blockSeqHeaderOnly( /* * Get last block data without transactions payload + * + * `https://lunesnode.lunes.io/blocks/headers/last` */ -export async function blockLastHeaderOnly(): Promise { - const response = await axios.get( - `https://lunesnode.lunes.io/blocks/headers/last` - ) - return response.data +export async function blockLastHeaderOnly(): Promise { + const url = `${BASEURL}headers/last` + + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if ( + response.status === 404 || + response.status === 401 || + response.status === 403 || + response.status === 501 + ) { + const error: IBlockError = { + status: `error`, + message: `system error, come back later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + //const response = await axios.get(url) + //return response.data + }) } /* * Get block by a specified Base58-encoded signature + * + * https://lunesnode.lunes.io/blocks/signature/${signature}` */ -export async function blockSignature(signature: string): Promise { - const response = await axios.get( - `https://lunesnode.lunes.io/blocks/signature/${signature}` - ) - return response.data +export async function blockSignature(signature: string): Promise { + + const url = `${BASEURL}signature/${signature}` + + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + + if (response.status === 404) { + const error: IBlockError = { + status: `error`, + message: `block does not exist, try later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) } /* diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index ec3649c..1db6268 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -7,7 +7,7 @@ import { blockLast, blockChild, blockHeightEncoded, - blockAtHeaderOnly, blockSeqHeaderOnly + blockAtHeaderOnly, blockSeqHeaderOnly, blockLastHeaderOnly, blockSignature } from "../../../src/server/blocks/service.blocks" describe("blockByHeight function- suite test block service", () => { @@ -390,4 +390,65 @@ describe("blockSeqHeaderOnly function - suite test block service", () => { status: "error" }) }) +}) + + +describe(" blockLastHeaderOnly function - suite test block service", () => { + + it(" blockLastHeaderOnly test ", async () => { + const result = await blockLastHeaderOnly() + //expect(result).toMatchObject(result) + //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values + expect(result).toHaveProperty("height") // true + }) + + +}) + + +describe(" blockSignature - suite test block service", () => { + + it("blockSignature test", async () => { + const result = await blockSignature( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi" + ) + expect(result).toStrictEqual({ + version: 3, + timestamp: 1528116159255, + reference: + "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", + "nxt-consensus": { + "base-target": 112701916, + "generation-signature": + "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" + }, + features: [2], + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + signature: + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + blocksize: 227, + transactionCount: 0, + fee: 0, + transactions: [], + height: 10 + }) + }) + + it("blockSignature - error 404 ", async () => { + + const result = async () => { + await blockChild("124afdsfaf") + } + + expect(result()).rejects.toThrow() + + + }) + +}) + + +describe(" xxxxxxx - suite test block service", () => { + + }) \ No newline at end of file diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts index 2574c3b..8184330 100644 --- a/test/server/blocks/blocks.test.ts +++ b/test/server/blocks/blocks.test.ts @@ -16,72 +16,8 @@ import { } from "../../../src/server/blocks/service.blocks" describe("test block service", () => { - it("blockAtHeaderOnly - Get block at specified height without transactions payload ", async () => { - const result = await blockAtHeaderOnly(1) - expect(result).toStrictEqual({ - version: 1, - timestamp: 1528077600000, - reference: - "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - signature: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - blocksize: 312, - transactionCount: 2, - height: 1 - }) - }) + - it(" blockSeqHeaderOnly test ", async () => { - const result = await blockSeqHeaderOnly(1, 2) - expect(result).toStrictEqual([ - { - blocksize: 312, - generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - height: 1, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - reference: - "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - signature: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - timestamp: 1528077600000, - transactionCount: 2, - version: 1 - }, - { - blocksize: 227, - features: [2], - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - height: 2, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": - "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" - }, - reference: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - signature: - "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", - timestamp: 1528116151053, - transactionCount: 0, - version: 3 - } - ]) - }) - - it(" blockLastHeaderOnly test ", async () => { - const result = await blockLastHeaderOnly() - //expect(result).toMatchObject(result) - //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values - expect(result).toHaveProperty("height") // true - }) it("blockSignature test", async () => { const result = await blockSignature( From 5ff00b6bc8654d27970ad8163b9273470fe0bde2 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 6 Apr 2022 22:46:45 -0300 Subject: [PATCH 35/72] added: blockFirst function and test added and refact --- junit.xml | 12 ++++--- src/server/blocks/service.blocks.ts | 33 +++++++++++++++++-- test/server/blocks/blockOne.test.ts | 51 ++++++++++++++++++++++++++++- 3 files changed, 88 insertions(+), 8 deletions(-) diff --git a/junit.xml b/junit.xml index 23aa611..fd1b15f 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -67,9 +67,13 @@ - + + + + + - + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index a4222ac..1d0cd72 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -320,20 +320,47 @@ export async function blockSignature(signature: string): Promise { - const response = await axios.get(`https://lunesnode.lunes.io/blocks/first`) - return response.data +export async function blockFirst(): Promise { + const url = `${BASEURL}first` + + + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if ( + response.status === 404 || + response.status === 401 || + response.status === 403 || + response.status === 501 + ) { + const error: IBlockError = { + status: `error`, + message: `system error, come back later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + //const response = await axios.get(url) + //return response.data + }) } /* * Get list of blocks generated by specified address + * + * https://lunesnode.lunes.io/blocks/address/${address}/${from}/${to} */ export async function blockAddress( address: string, from: number, to: number ): Promise { + const url = `${BASEURL}first` const response = await axios.get( `https://lunesnode.lunes.io/blocks/address/${address}/${from}/${to}` ) diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index 1db6268..b2404e8 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -7,7 +7,7 @@ import { blockLast, blockChild, blockHeightEncoded, - blockAtHeaderOnly, blockSeqHeaderOnly, blockLastHeaderOnly, blockSignature + blockAtHeaderOnly, blockSeqHeaderOnly, blockLastHeaderOnly, blockSignature, blockFirst } from "../../../src/server/blocks/service.blocks" describe("blockByHeight function- suite test block service", () => { @@ -448,6 +448,55 @@ describe(" blockSignature - suite test block service", () => { }) +describe(" blockFirst - suite test block service", () => { + + it("blockFirst test ", async () => { + const result = await blockFirst() + expect(result).toStrictEqual({ + blocksize: 312, + fee: 0, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + height: 1, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + timestamp: 1528077600000, + transactionCount: 2, + transactions: [ + { + amount: 5072853761500800, + fee: 0, + id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + signature: + "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + timestamp: 1528077600000, + type: 1 + }, + { + amount: 10000000000000000, + fee: 0, + id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", + signature: + "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + timestamp: 1528077600000, + type: 1 + } + ], + version: 1 + }) + }) + +}) + + + describe(" xxxxxxx - suite test block service", () => { From 58e434af38c0840f9a21ca209e3fcd59e704d737 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 6 Apr 2022 23:16:05 -0300 Subject: [PATCH 36/72] added: blockAddress test and function and refact --- junit.xml | 13 ++++-- src/server/blocks/service.blocks.ts | 22 ++++++++--- test/server/blocks/blockOne.test.ts | 61 ++++++++++++++++++++++++++++- 3 files changed, 85 insertions(+), 11 deletions(-) diff --git a/junit.xml b/junit.xml index fd1b15f..c5d9929 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -73,7 +73,14 @@ - + + + + + + + + \ No newline at end of file diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 1d0cd72..31220c5 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -359,10 +359,20 @@ export async function blockAddress( address: string, from: number, to: number -): Promise { - const url = `${BASEURL}first` - const response = await axios.get( - `https://lunesnode.lunes.io/blocks/address/${address}/${from}/${to}` - ) - return response.data +): Promise { + const url = `${BASEURL}address/${address}/${from}/${to}` + + const Max: boolean = to - from < 100 + + if (from > to || Max === false) { + const error: IBlockError = { + status: `error`, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` + } + return error + } else { + const response = await axios.get(url) + return response.data + } + } diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index b2404e8..adf3f0e 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -7,7 +7,7 @@ import { blockLast, blockChild, blockHeightEncoded, - blockAtHeaderOnly, blockSeqHeaderOnly, blockLastHeaderOnly, blockSignature, blockFirst + blockAtHeaderOnly, blockSeqHeaderOnly, blockLastHeaderOnly, blockSignature, blockFirst, blockAddress } from "../../../src/server/blocks/service.blocks" describe("blockByHeight function- suite test block service", () => { @@ -497,7 +497,64 @@ describe(" blockFirst - suite test block service", () => { -describe(" xxxxxxx - suite test block service", () => { +describe(" blockAddress - suite test block service", () => { + + it("blockAddress test ", async () => { + const result = await blockAddress( + "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", + 1889863, + 1889864 + ) + expect(result).toStrictEqual([ + { + blocksize: 225, + features: [], + fee: 0, + generator: "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", + height: 1889864, + "nxt-consensus": { + "base-target": 51, + "generation-signature": + "9iHAgT78TCbzv5HfhxVzzRnM132n45UGqGbvH59FvBoB" + }, + reference: + "9zvED5KcnvkYsKLFxiCXQDiEsyXrKdtVH23b3qPt2FhAh3BrhUaZbqtndYWCbn4GmPrZvDbwY1vwqrxdgyazGfH", + signature: + "353wWZjKZzLiYKkVbgXLrxsK7dzYo9pEgw2pV31rXLnb1EdZbraZThrpg92swhrtQh1J353rPesvcB1mMEAoQtzP", + timestamp: 1648218628090, + transactionCount: 0, + transactions: [], + version: 3 + } + ]) + }) + + + it(" blockAddress - error from > to ", async () => { + const result = await blockAddress( + "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", + 1889864, 1889863 + ) + expect(result).toEqual({ + message: + "Too big sequences requested OR {from} cannot be bigger than {to}, change it", + status: "error" + }) + }) + + + it(" blockAddress - error Max === false ", async () => { + const result = await blockAddress( + "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", + 1889863, 1889999, + ) + expect(result).toEqual({ + message: + "Too big sequences requested OR {from} cannot be bigger than {to}, change it", + status: "error" + }) + }) + }) \ No newline at end of file From 976517adcc7be9df69e7da7404e30896a97906cd Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 6 Apr 2022 23:19:26 -0300 Subject: [PATCH 37/72] refactored: yarn fmt --- src/server/blocks/service.blocks.ts | 21 +++-- test/server/blocks/blockOne.test.ts | 51 ++++-------- test/server/blocks/blocks.test.ts | 120 ---------------------------- 3 files changed, 27 insertions(+), 165 deletions(-) delete mode 100644 test/server/blocks/blocks.test.ts diff --git a/src/server/blocks/service.blocks.ts b/src/server/blocks/service.blocks.ts index 31220c5..0bfef0e 100644 --- a/src/server/blocks/service.blocks.ts +++ b/src/server/blocks/service.blocks.ts @@ -237,7 +237,7 @@ export async function blockAtHeaderOnly( /* * Get block without transactions payload at specified heights -* max value (from) (to) 1 - 100 (99 difference) + * max value (from) (to) 1 - 100 (99 difference) * from value < to value * `https://lunesnode.lunes.io/blocks/headers/seq/${from}/${to} */ @@ -287,8 +287,8 @@ export async function blockLastHeaderOnly(): Promise { } else { reject(response.data) } - //const response = await axios.get(url) - //return response.data + //const response = await axios.get(url) + //return response.data }) } @@ -297,8 +297,9 @@ export async function blockLastHeaderOnly(): Promise { * * https://lunesnode.lunes.io/blocks/signature/${signature}` */ -export async function blockSignature(signature: string): Promise { - +export async function blockSignature( + signature: string +): Promise { const url = `${BASEURL}signature/${signature}` return new Promise(async (resolve, reject) => { @@ -321,12 +322,11 @@ export async function blockSignature(signature: string): Promise { const url = `${BASEURL}first` - return new Promise(async (resolve, reject) => { const response = await axios.get(url) if ( @@ -345,8 +345,8 @@ export async function blockFirst(): Promise { } else { reject(response.data) } - //const response = await axios.get(url) - //return response.data + //const response = await axios.get(url) + //return response.data }) } @@ -359,7 +359,7 @@ export async function blockAddress( address: string, from: number, to: number -): Promise { +): Promise { const url = `${BASEURL}address/${address}/${from}/${to}` const Max: boolean = to - from < 100 @@ -374,5 +374,4 @@ export async function blockAddress( const response = await axios.get(url) return response.data } - } diff --git a/test/server/blocks/blockOne.test.ts b/test/server/blocks/blockOne.test.ts index adf3f0e..cd2b5e7 100644 --- a/test/server/blocks/blockOne.test.ts +++ b/test/server/blocks/blockOne.test.ts @@ -7,7 +7,12 @@ import { blockLast, blockChild, blockHeightEncoded, - blockAtHeaderOnly, blockSeqHeaderOnly, blockLastHeaderOnly, blockSignature, blockFirst, blockAddress + blockAtHeaderOnly, + blockSeqHeaderOnly, + blockLastHeaderOnly, + blockSignature, + blockFirst, + blockAddress } from "../../../src/server/blocks/service.blocks" describe("blockByHeight function- suite test block service", () => { @@ -329,9 +334,7 @@ describe("blockAtHeaderOnly function - suite test block service", () => { }) }) - describe("blockSeqHeaderOnly function - suite test block service", () => { - it(" blockSeqHeaderOnly test ", async () => { const result = await blockSeqHeaderOnly(1, 2) expect(result).toStrictEqual([ @@ -372,7 +375,7 @@ describe("blockSeqHeaderOnly function - suite test block service", () => { ]) }) - it(" blockSeqHeaderOnly - error from > to ", async () => { + it(" blockSeqHeaderOnly - error from > to ", async () => { const result = await blockSeqHeaderOnly(2, 1) expect(result).toEqual({ message: @@ -381,8 +384,7 @@ describe("blockSeqHeaderOnly function - suite test block service", () => { }) }) - - it(" blockSeqHeaderOnly - Max === false ", async () => { + it(" blockSeqHeaderOnly - Max === false ", async () => { const result = await blockSeqHeaderOnly(1, 199) expect(result).toEqual({ message: @@ -392,22 +394,16 @@ describe("blockSeqHeaderOnly function - suite test block service", () => { }) }) - describe(" blockLastHeaderOnly function - suite test block service", () => { - it(" blockLastHeaderOnly test ", async () => { const result = await blockLastHeaderOnly() //expect(result).toMatchObject(result) //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values expect(result).toHaveProperty("height") // true }) - - }) - describe(" blockSignature - suite test block service", () => { - it("blockSignature test", async () => { const result = await blockSignature( "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi" @@ -435,21 +431,15 @@ describe(" blockSignature - suite test block service", () => { }) it("blockSignature - error 404 ", async () => { - const result = async () => { await blockChild("124afdsfaf") } expect(result()).rejects.toThrow() - - }) - }) - describe(" blockFirst - suite test block service", () => { - it("blockFirst test ", async () => { const result = await blockFirst() expect(result).toStrictEqual({ @@ -492,13 +482,9 @@ describe(" blockFirst - suite test block service", () => { version: 1 }) }) - }) - - describe(" blockAddress - suite test block service", () => { - it("blockAddress test ", async () => { const result = await blockAddress( "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", @@ -529,32 +515,29 @@ describe(" blockAddress - suite test block service", () => { ]) }) - - it(" blockAddress - error from > to ", async () => { + it(" blockAddress - error from > to ", async () => { const result = await blockAddress( "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - 1889864, 1889863 + 1889864, + 1889863 ) expect(result).toEqual({ message: "Too big sequences requested OR {from} cannot be bigger than {to}, change it", status: "error" }) - }) - + }) - it(" blockAddress - error Max === false ", async () => { + it(" blockAddress - error Max === false ", async () => { const result = await blockAddress( "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - 1889863, 1889999, + 1889863, + 1889999 ) expect(result).toEqual({ message: "Too big sequences requested OR {from} cannot be bigger than {to}, change it", status: "error" }) - }) - - - -}) \ No newline at end of file + }) +}) diff --git a/test/server/blocks/blocks.test.ts b/test/server/blocks/blocks.test.ts deleted file mode 100644 index 8184330..0000000 --- a/test/server/blocks/blocks.test.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { IBlockError } from "../../../src/server/blocks/block.types" -import { - blockByHeight, - blockHeight, - blockAverageDelay, - blockSeq, - blockLast, - blockChild, - blockHeightEncoded, - blockAtHeaderOnly, - blockSeqHeaderOnly, - blockLastHeaderOnly, - blockSignature, - blockFirst, - blockAddress -} from "../../../src/server/blocks/service.blocks" - -describe("test block service", () => { - - - - it("blockSignature test", async () => { - const result = await blockSignature( - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi" - ) - expect(result).toStrictEqual({ - version: 3, - timestamp: 1528116159255, - reference: - "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", - "nxt-consensus": { - "base-target": 112701916, - "generation-signature": - "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" - }, - features: [2], - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - signature: - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - blocksize: 227, - transactionCount: 0, - fee: 0, - transactions: [], - height: 10 - }) - }) - - it("blockFirst test ", async () => { - const result = await blockFirst() - expect(result).toStrictEqual({ - blocksize: 312, - fee: 0, - generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - height: 1, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - reference: - "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - signature: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - timestamp: 1528077600000, - transactionCount: 2, - transactions: [ - { - amount: 5072853761500800, - fee: 0, - id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - signature: - "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - timestamp: 1528077600000, - type: 1 - }, - { - amount: 10000000000000000, - fee: 0, - id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", - signature: - "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - timestamp: 1528077600000, - type: 1 - } - ], - version: 1 - }) - }) - - it("blockAddress test ", async () => { - const result = await blockAddress( - "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - 1889863, - 1889864 - ) - expect(result).toStrictEqual([ - { - blocksize: 225, - features: [], - fee: 0, - generator: "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - height: 1889864, - "nxt-consensus": { - "base-target": 51, - "generation-signature": - "9iHAgT78TCbzv5HfhxVzzRnM132n45UGqGbvH59FvBoB" - }, - reference: - "9zvED5KcnvkYsKLFxiCXQDiEsyXrKdtVH23b3qPt2FhAh3BrhUaZbqtndYWCbn4GmPrZvDbwY1vwqrxdgyazGfH", - signature: - "353wWZjKZzLiYKkVbgXLrxsK7dzYo9pEgw2pV31rXLnb1EdZbraZThrpg92swhrtQh1J353rPesvcB1mMEAoQtzP", - timestamp: 1648218628090, - transactionCount: 0, - transactions: [], - version: 3 - } - ]) - }) -}) From 2f63a267cb2e5e32a840bd0bb1008a4f34bf38a0 Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Tue, 19 Apr 2022 11:23:29 -0300 Subject: [PATCH 38/72] update: package --- package.json | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index f690533..98b03c1 100644 --- a/package.json +++ b/package.json @@ -19,17 +19,11 @@ "author": "lunes-platform", "license": "Apache-2.0", "scripts": { - "wheel": "nodemon ./build/src/main.js", - "deploy": "yarn build && yarn publish", - "autotest": "yarn jest --watchAll", - "postinstall": "husky install", - "watch": "tsc --watch", "fmt": "prettier -w .", "fmtc": "prettier -c", "test": "yarn jest", "t": "yarn jest", - "build": "tsc", - "commit": "cz" + "build": "tsc" }, "devDependencies": { "@types/jest": "^27.0.3", @@ -43,4 +37,4 @@ "axios": "^0.26.1", "lunesrs": "^1.9.1" } -} +} \ No newline at end of file From c8d17a5424b92c2967533ac22ef1c6598e7eface Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Tue, 19 Apr 2022 11:29:04 -0300 Subject: [PATCH 39/72] update: rename server to blokchcain --- src/blockchain/blocks/block.types.ts | 69 ++++ src/blockchain/blocks/service.blocks.ts | 377 ++++++++++++++++++ .../blocks/blockOne.test.ts | 0 3 files changed, 446 insertions(+) create mode 100644 src/blockchain/blocks/block.types.ts create mode 100644 src/blockchain/blocks/service.blocks.ts rename test/{server => blockchain}/blocks/blockOne.test.ts (100%) diff --git a/src/blockchain/blocks/block.types.ts b/src/blockchain/blocks/block.types.ts new file mode 100644 index 0000000..befccf9 --- /dev/null +++ b/src/blockchain/blocks/block.types.ts @@ -0,0 +1,69 @@ +interface INxtConsensus { + generationSignature: string + baseTarget: number +} +interface ITransaction { + senderPublicKey: string + timestamp: number + signature: string + recipient: string + feeAsset: string + assetId: string + amount: number + sender: string + type: number + fee: number + id: string +} + +interface IHeader { + nxtConsensus: Array + transactionCount: number + features: Array + timestamp: number + reference: string + generator: string + signature: string + blocksize: number + version: number + height: number + fee: number +} + +export interface IBlock { + header: IHeader + body: Array +} + +/*{ + "status": "error", + "details": "No block for this height" + } + */ + +export interface IBlockError { + status: string + message: string +} + +/* + export class IError extends Error{ + + public readonly status: string; + public readonly code: number; + + constructor ( status:string, code:number) { + super(); + + this.status = status; + this.code = code; + Object.setPrototypeOf(this, new.target.prototype); + Error.captureStackTrace(this); + } + + } +*/ + +// super(description); +//Object.setPrototypeOf(this, new.target.prototype); +//Error.captureStackTrace(this); diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts new file mode 100644 index 0000000..0bfef0e --- /dev/null +++ b/src/blockchain/blocks/service.blocks.ts @@ -0,0 +1,377 @@ +import { IBlock, IBlockError } from "./block.types" +import axios from "axios" + +const BASEURL = "https://lunesnode.lunes.io/blocks/" + +/* + * This function get blockchain `height` e return a full block + * --- validation: zero number, big number and string type + */ + +export async function blockByHeight( + height: number +): Promise { + const url = `${BASEURL}at/${height}` + + const i32Max = 2147483647 + + if (height <= 0 || height >= i32Max) { + const error: IBlockError = { + status: `error`, + message: `the block cannot be less than or equal to zero or greater than or equal 2147483647` + } + return error + } else if (typeof height === "string") { + const error: IBlockError = { + status: `error`, + message: `block cannot receive string type ` + } + return error + } else { + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) + } +} + +/* + * This function get a blockchain height + */ +export async function blockHeight(): Promise { + const url = `${BASEURL}height` + + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if ( + response.status === 404 || + response.status === 401 || + response.status === 403 || + response.status === 501 + ) { + const error: IBlockError = { + status: `error`, + message: `system error, come back later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) +} + +/* + * Average delay in milliseconds between last blockNum blocks starting from block with signature + * --- signature = signature block - Base58-encoded signature + * --- blockNum = 1 to 9 - Number of blocks to count delay + */ + +export async function blockAverageDelay( + signature: string, + blockNum: number +): Promise { + const url = `${BASEURL}delay/${signature}/${blockNum}` + + if (blockNum <= 0 || blockNum > 9) { + const error: IBlockError = { + status: `error`, + message: `the blockNum cannot be less than or equal to zero or greater than nine` + } + return error + } else { + //const response = await axios.get(url) + //return response.data + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) + } +} + +/* + * Get block at specified heights + * max value (from) (to) 1 - 100 (99 difference) + * from value < to value + * `https://lunesnode.lunes.io/blocks/seq/${from}/${to}` + */ + +export async function blockSeq( + from: number, + to: number +): Promise { + const url = `${BASEURL}seq/${from}/${to}` + //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` + const Max: boolean = to - from < 100 + + if (from > to || Max === false) { + const error: IBlockError = { + status: `error`, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` + } + return error + } else { + const response = await axios.get(url) + return response.data + } +} + +/* + * Get last block data + */ +export async function blockLast(): Promise { + const url = `${BASEURL}last` + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if ( + response.status === 404 || + response.status === 401 || + response.status === 403 || + response.status === 501 + ) { + const error: IBlockError = { + status: `error`, + message: `system error, come back later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + //`https://lunesnode.lunes.io/blocks/last + //const response = await axios.get(url) + //return response.data + }) +} + +/* + * Get children of specified block + */ +export async function blockChild( + signature: string +): Promise { + const url = `${BASEURL}child/${signature}` + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + + if (response.status === 404) { + const error: IBlockError = { + status: `error`, + message: `block does not exist, try later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) +} + +/* + * Get height of a block by its Base58-encoded signature + */ +export async function blockHeightEncoded( + signature: string +): Promise { + const url = `${BASEURL}height/${signature}` + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + + if (response.status === 404) { + const error: IBlockError = { + status: `error`, + message: `block does not exist, try later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) +} + +/* + * Get block at specified height without transactions payload + */ +export async function blockAtHeaderOnly( + height: number +): Promise { + const url = `${BASEURL}headers/at/${height}` + + if (typeof height === "string") { + const error: IBlockError = { + status: `error`, + message: `block cannot receive string type ` + } + return error + } else { + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + + if (response.status === 404) { + const error: IBlockError = { + status: `error`, + message: `The requested resource could not be found but may be available again in the future, try later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) + } +} + +/* + * Get block without transactions payload at specified heights + * max value (from) (to) 1 - 100 (99 difference) + * from value < to value + * `https://lunesnode.lunes.io/blocks/headers/seq/${from}/${to} + */ +export async function blockSeqHeaderOnly( + from: number, + to: number +): Promise { + const url = `${BASEURL}headers/seq/${from}/${to}` + + const Max: boolean = to - from < 100 + + if (from > to || Max === false) { + const error: IBlockError = { + status: `error`, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` + } + return error + } else { + const response = await axios.get(url) + return response.data + } +} + +/* + * Get last block data without transactions payload + * + * `https://lunesnode.lunes.io/blocks/headers/last` + */ +export async function blockLastHeaderOnly(): Promise { + const url = `${BASEURL}headers/last` + + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if ( + response.status === 404 || + response.status === 401 || + response.status === 403 || + response.status === 501 + ) { + const error: IBlockError = { + status: `error`, + message: `system error, come back later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + //const response = await axios.get(url) + //return response.data + }) +} + +/* + * Get block by a specified Base58-encoded signature + * + * https://lunesnode.lunes.io/blocks/signature/${signature}` + */ +export async function blockSignature( + signature: string +): Promise { + const url = `${BASEURL}signature/${signature}` + + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + + if (response.status === 404) { + const error: IBlockError = { + status: `error`, + message: `block does not exist, try later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) +} + +/* + * Get genesis block data + * `https://lunesnode.lunes.io/blocks/first + * + */ +export async function blockFirst(): Promise { + const url = `${BASEURL}first` + + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if ( + response.status === 404 || + response.status === 401 || + response.status === 403 || + response.status === 501 + ) { + const error: IBlockError = { + status: `error`, + message: `system error, come back later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + //const response = await axios.get(url) + //return response.data + }) +} + +/* + * Get list of blocks generated by specified address + * + * https://lunesnode.lunes.io/blocks/address/${address}/${from}/${to} + */ +export async function blockAddress( + address: string, + from: number, + to: number +): Promise { + const url = `${BASEURL}address/${address}/${from}/${to}` + + const Max: boolean = to - from < 100 + + if (from > to || Max === false) { + const error: IBlockError = { + status: `error`, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` + } + return error + } else { + const response = await axios.get(url) + return response.data + } +} diff --git a/test/server/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts similarity index 100% rename from test/server/blocks/blockOne.test.ts rename to test/blockchain/blocks/blockOne.test.ts From 93c0c478bc62990a89371112d9687d479a04d91d Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Tue, 19 Apr 2022 17:52:45 -0300 Subject: [PATCH 40/72] update: blocks returns --- package.json | 4 +- src/blockchain/blocks/block.types.ts | 68 +- src/blockchain/blocks/service.blocks.ts | 702 +++++++++-------- src/tx/transfer/utils.ts | 3 +- test/blockchain/blocks/blockOne.test.ts | 965 ++++++++++++------------ 5 files changed, 864 insertions(+), 878 deletions(-) diff --git a/package.json b/package.json index 98b03c1..75c4ead 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,6 @@ }, "dependencies": { "axios": "^0.26.1", - "lunesrs": "^1.9.1" + "lunesrs": "^1.9.3" } -} \ No newline at end of file +} diff --git a/src/blockchain/blocks/block.types.ts b/src/blockchain/blocks/block.types.ts index befccf9..7e3feb3 100644 --- a/src/blockchain/blocks/block.types.ts +++ b/src/blockchain/blocks/block.types.ts @@ -1,3 +1,5 @@ +import { AxiosResponse } from "axios" + interface INxtConsensus { generationSignature: string baseTarget: number @@ -17,7 +19,7 @@ interface ITransaction { } interface IHeader { - nxtConsensus: Array + nxtConsensus: INxtConsensus transactionCount: number features: Array timestamp: number @@ -31,39 +33,51 @@ interface IHeader { } export interface IBlock { + isSuccess: boolean header: IHeader body: Array } -/*{ - "status": "error", - "details": "No block for this height" - } - */ - export interface IBlockError { - status: string - message: string + isSuccess: boolean + response: { + codeError: number + message: string + } } -/* - export class IError extends Error{ - - public readonly status: string; - public readonly code: number; - - constructor ( status:string, code:number) { - super(); - - this.status = status; - this.code = code; - Object.setPrototypeOf(this, new.target.prototype); - Error.captureStackTrace(this); +export function mountBlock(r: AxiosResponse): IBlock { + let block: IBlock = { + isSuccess: true, + header: { + nxtConsensus: { + baseTarget: r.data["nxt-consensus"]["base-target"], + generationSignature: + r.data["nxt-consensus"]["generation-signature"] + }, + transactionCount: r.data.transactionCount, + features: r.data.features != undefined ? r.data.features : [], + timestamp: r.data.timestamp, + reference: r.data.reference, + generator: r.data.generator, + signature: r.data.signature, + blocksize: r.data.blocksize, + version: r.data.version, + height: r.data.height, + fee: r.data.fee + }, + body: r.data.transactions } - } -*/ + return block +} -// super(description); -//Object.setPrototypeOf(this, new.target.prototype); -//Error.captureStackTrace(this); +export function mountErr(e: string): IBlockError { + return { + isSuccess: false, + response: { + codeError: 1, + message: e + } + } +} diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 0bfef0e..ef0055f 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -1,5 +1,5 @@ -import { IBlock, IBlockError } from "./block.types" import axios from "axios" +import { mountBlock, IBlock, IBlockError, mountErr } from "./block.types" const BASEURL = "https://lunesnode.lunes.io/blocks/" @@ -7,7 +7,6 @@ const BASEURL = "https://lunesnode.lunes.io/blocks/" * This function get blockchain `height` e return a full block * --- validation: zero number, big number and string type */ - export async function blockByHeight( height: number ): Promise { @@ -17,361 +16,360 @@ export async function blockByHeight( if (height <= 0 || height >= i32Max) { const error: IBlockError = { - status: `error`, - message: `the block cannot be less than or equal to zero or greater than or equal 2147483647` - } - return error - } else if (typeof height === "string") { - const error: IBlockError = { - status: `error`, - message: `block cannot receive string type ` - } - return error - } else { - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - }) - } -} - -/* - * This function get a blockchain height - */ -export async function blockHeight(): Promise { - const url = `${BASEURL}height` - - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - if ( - response.status === 404 || - response.status === 401 || - response.status === 403 || - response.status === 501 - ) { - const error: IBlockError = { - status: `error`, - message: `system error, come back later` + isSuccess: false, + response: { + codeError: -1, + message: `the block cannot be less than or equal to zero or greater than or equal 2147483647` } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - }) -} - -/* - * Average delay in milliseconds between last blockNum blocks starting from block with signature - * --- signature = signature block - Base58-encoded signature - * --- blockNum = 1 to 9 - Number of blocks to count delay - */ - -export async function blockAverageDelay( - signature: string, - blockNum: number -): Promise { - const url = `${BASEURL}delay/${signature}/${blockNum}` - - if (blockNum <= 0 || blockNum > 9) { - const error: IBlockError = { - status: `error`, - message: `the blockNum cannot be less than or equal to zero or greater than nine` } return error } else { - //const response = await axios.get(url) - //return response.data - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } + return new Promise(async (resolve) => { + axios + .get(url) + .then((r) => { + resolve(mountBlock(r)) + }) + .catch((e) => { + resolve(mountErr(e)) + }) }) } } -/* - * Get block at specified heights - * max value (from) (to) 1 - 100 (99 difference) - * from value < to value - * `https://lunesnode.lunes.io/blocks/seq/${from}/${to}` - */ - -export async function blockSeq( - from: number, - to: number -): Promise { - const url = `${BASEURL}seq/${from}/${to}` - //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` - const Max: boolean = to - from < 100 - - if (from > to || Max === false) { - const error: IBlockError = { - status: `error`, - message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` - } - return error - } else { - const response = await axios.get(url) - return response.data - } -} - -/* - * Get last block data - */ -export async function blockLast(): Promise { - const url = `${BASEURL}last` - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - if ( - response.status === 404 || - response.status === 401 || - response.status === 403 || - response.status === 501 - ) { - const error: IBlockError = { - status: `error`, - message: `system error, come back later` - } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - //`https://lunesnode.lunes.io/blocks/last - //const response = await axios.get(url) - //return response.data - }) -} - -/* - * Get children of specified block - */ -export async function blockChild( - signature: string -): Promise { - const url = `${BASEURL}child/${signature}` - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - - if (response.status === 404) { - const error: IBlockError = { - status: `error`, - message: `block does not exist, try later` - } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - }) -} - -/* - * Get height of a block by its Base58-encoded signature - */ -export async function blockHeightEncoded( - signature: string -): Promise { - const url = `${BASEURL}height/${signature}` - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - - if (response.status === 404) { - const error: IBlockError = { - status: `error`, - message: `block does not exist, try later` - } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - }) -} - -/* - * Get block at specified height without transactions payload - */ -export async function blockAtHeaderOnly( - height: number -): Promise { - const url = `${BASEURL}headers/at/${height}` - - if (typeof height === "string") { - const error: IBlockError = { - status: `error`, - message: `block cannot receive string type ` - } - return error - } else { - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - - if (response.status === 404) { - const error: IBlockError = { - status: `error`, - message: `The requested resource could not be found but may be available again in the future, try later` - } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - }) - } -} - -/* - * Get block without transactions payload at specified heights - * max value (from) (to) 1 - 100 (99 difference) - * from value < to value - * `https://lunesnode.lunes.io/blocks/headers/seq/${from}/${to} - */ -export async function blockSeqHeaderOnly( - from: number, - to: number -): Promise { - const url = `${BASEURL}headers/seq/${from}/${to}` - - const Max: boolean = to - from < 100 - - if (from > to || Max === false) { - const error: IBlockError = { - status: `error`, - message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` - } - return error - } else { - const response = await axios.get(url) - return response.data - } -} - -/* - * Get last block data without transactions payload - * - * `https://lunesnode.lunes.io/blocks/headers/last` - */ -export async function blockLastHeaderOnly(): Promise { - const url = `${BASEURL}headers/last` - - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - if ( - response.status === 404 || - response.status === 401 || - response.status === 403 || - response.status === 501 - ) { - const error: IBlockError = { - status: `error`, - message: `system error, come back later` - } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - //const response = await axios.get(url) - //return response.data - }) -} - -/* - * Get block by a specified Base58-encoded signature - * - * https://lunesnode.lunes.io/blocks/signature/${signature}` - */ -export async function blockSignature( - signature: string -): Promise { - const url = `${BASEURL}signature/${signature}` - - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - - if (response.status === 404) { - const error: IBlockError = { - status: `error`, - message: `block does not exist, try later` - } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - }) -} - -/* - * Get genesis block data - * `https://lunesnode.lunes.io/blocks/first - * - */ -export async function blockFirst(): Promise { - const url = `${BASEURL}first` - - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - if ( - response.status === 404 || - response.status === 401 || - response.status === 403 || - response.status === 501 - ) { - const error: IBlockError = { - status: `error`, - message: `system error, come back later` - } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - //const response = await axios.get(url) - //return response.data - }) -} - -/* - * Get list of blocks generated by specified address - * - * https://lunesnode.lunes.io/blocks/address/${address}/${from}/${to} - */ -export async function blockAddress( - address: string, - from: number, - to: number -): Promise { - const url = `${BASEURL}address/${address}/${from}/${to}` - - const Max: boolean = to - from < 100 - - if (from > to || Max === false) { - const error: IBlockError = { - status: `error`, - message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` - } - return error - } else { - const response = await axios.get(url) - return response.data - } -} +// /* +// * This function get a blockchain height +// */ +// export async function blockHeight(): Promise { +// const url = `${BASEURL}height` + +// return new Promise(async (resolve, reject) => { +// const response = await axios.get(url) +// if ( +// response.status === 404 || +// response.status === 401 || +// response.status === 403 || +// response.status === 501 +// ) { +// const error: IBlockError = { +// status: `error`, +// message: `system error, come back later` +// } +// return error +// } else if (response.status === 200) { +// resolve(response.data) +// } else { +// reject(response.data) +// } +// }) +// } + +// /* +// * Average delay in milliseconds between last blockNum blocks starting from block with signature +// * --- signature = signature block - Base58-encoded signature +// * --- blockNum = 1 to 9 - Number of blocks to count delay +// */ + +// export async function blockAverageDelay( +// signature: string, +// blockNum: number +// ): Promise { +// const url = `${BASEURL}delay/${signature}/${blockNum}` + +// if (blockNum <= 0 || blockNum > 9) { +// const error: IBlockError = { +// status: `error`, +// message: `the blockNum cannot be less than or equal to zero or greater than nine` +// } +// return error +// } else { +// //const response = await axios.get(url) +// //return response.data +// return new Promise(async (resolve, reject) => { +// const response = await axios.get(url) +// if (response.status === 200) { +// resolve(response.data) +// } else { +// reject(response.data) +// } +// }) +// } +// } + +// /* +// * Get block at specified heights +// * max value (from) (to) 1 - 100 (99 difference) +// * from value < to value +// * `https://lunesnode.lunes.io/blocks/seq/${from}/${to}` +// */ + +// export async function blockSeq( +// from: number, +// to: number +// ): Promise { +// const url = `${BASEURL}seq/${from}/${to}` +// //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` +// const Max: boolean = to - from < 100 + +// if (from > to || Max === false) { +// const error: IBlockError = { +// status: `error`, +// message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` +// } +// return error +// } else { +// const response = await axios.get(url) +// return response.data +// } +// } + +// /* +// * Get last block data +// */ +// export async function blockLast(): Promise { +// const url = `${BASEURL}last` +// return new Promise(async (resolve, reject) => { +// const response = await axios.get(url) +// if ( +// response.status === 404 || +// response.status === 401 || +// response.status === 403 || +// response.status === 501 +// ) { +// const error: IBlockError = { +// status: `error`, +// message: `system error, come back later` +// } +// return error +// } else if (response.status === 200) { +// resolve(response.data) +// } else { +// reject(response.data) +// } +// //`https://lunesnode.lunes.io/blocks/last +// //const response = await axios.get(url) +// //return response.data +// }) +// } + +// /* +// * Get children of specified block +// */ +// export async function blockChild( +// signature: string +// ): Promise { +// const url = `${BASEURL}child/${signature}` +// return new Promise(async (resolve, reject) => { +// const response = await axios.get(url) + +// if (response.status === 404) { +// const error: IBlockError = { +// status: `error`, +// message: `block does not exist, try later` +// } +// return error +// } else if (response.status === 200) { +// resolve(response.data) +// } else { +// reject(response.data) +// } +// }) +// } + +// /* +// * Get height of a block by its Base58-encoded signature +// */ +// export async function blockHeightEncoded( +// signature: string +// ): Promise { +// const url = `${BASEURL}height/${signature}` +// return new Promise(async (resolve, reject) => { +// const response = await axios.get(url) + +// if (response.status === 404) { +// const error: IBlockError = { +// status: `error`, +// message: `block does not exist, try later` +// } +// return error +// } else if (response.status === 200) { +// resolve(response.data) +// } else { +// reject(response.data) +// } +// }) +// } + +// /* +// * Get block at specified height without transactions payload +// */ +// export async function blockAtHeaderOnly( +// height: number +// ): Promise { +// const url = `${BASEURL}headers/at/${height}` + +// if (typeof height === "string") { +// const error: IBlockError = { +// status: `error`, +// message: `block cannot receive string type ` +// } +// return error +// } else { +// return new Promise(async (resolve, reject) => { +// const response = await axios.get(url) + +// if (response.status === 404) { +// const error: IBlockError = { +// status: `error`, +// message: `The requested resource could not be found but may be available again in the future, try later` +// } +// return error +// } else if (response.status === 200) { +// resolve(response.data) +// } else { +// reject(response.data) +// } +// }) +// } +// } + +// /* +// * Get block without transactions payload at specified heights +// * max value (from) (to) 1 - 100 (99 difference) +// * from value < to value +// * `https://lunesnode.lunes.io/blocks/headers/seq/${from}/${to} +// */ +// export async function blockSeqHeaderOnly( +// from: number, +// to: number +// ): Promise { +// const url = `${BASEURL}headers/seq/${from}/${to}` + +// const Max: boolean = to - from < 100 + +// if (from > to || Max === false) { +// const error: IBlockError = { +// status: `error`, +// message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` +// } +// return error +// } else { +// const response = await axios.get(url) +// return response.data +// } +// } + +// /* +// * Get last block data without transactions payload +// * +// * `https://lunesnode.lunes.io/blocks/headers/last` +// */ +// export async function blockLastHeaderOnly(): Promise { +// const url = `${BASEURL}headers/last` + +// return new Promise(async (resolve, reject) => { +// const response = await axios.get(url) +// if ( +// response.status === 404 || +// response.status === 401 || +// response.status === 403 || +// response.status === 501 +// ) { +// const error: IBlockError = { +// status: `error`, +// message: `system error, come back later` +// } +// return error +// } else if (response.status === 200) { +// resolve(response.data) +// } else { +// reject(response.data) +// } +// //const response = await axios.get(url) +// //return response.data +// }) +// } + +// /* +// * Get block by a specified Base58-encoded signature +// * +// * https://lunesnode.lunes.io/blocks/signature/${signature}` +// */ +// export async function blockSignature( +// signature: string +// ): Promise { +// const url = `${BASEURL}signature/${signature}` + +// return new Promise(async (resolve, reject) => { +// const response = await axios.get(url) + +// if (response.status === 404) { +// const error: IBlockError = { +// status: `error`, +// message: `block does not exist, try later` +// } +// return error +// } else if (response.status === 200) { +// resolve(response.data) +// } else { +// reject(response.data) +// } +// }) +// } + +// /* +// * Get genesis block data +// * `https://lunesnode.lunes.io/blocks/first +// * +// */ +// export async function blockFirst(): Promise { +// const url = `${BASEURL}first` + +// return new Promise(async (resolve, reject) => { +// const response = await axios.get(url) +// if ( +// response.status === 404 || +// response.status === 401 || +// response.status === 403 || +// response.status === 501 +// ) { +// const error: IBlockError = { +// status: `error`, +// message: `system error, come back later` +// } +// return error +// } else if (response.status === 200) { +// resolve(response.data) +// } else { +// reject(response.data) +// } +// //const response = await axios.get(url) +// //return response.data +// }) +// } + +// /* +// * Get list of blocks generated by specified address +// * +// * https://lunesnode.lunes.io/blocks/address/${address}/${from}/${to} +// */ +// export async function blockAddress( +// address: string, +// from: number, +// to: number +// ): Promise { +// const url = `${BASEURL}address/${address}/${from}/${to}` + +// const Max: boolean = to - from < 100 + +// if (from > to || Max === false) { +// const error: IBlockError = { +// status: `error`, +// message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` +// } +// return error +// } else { +// const response = await axios.get(url) +// return response.data +// } +// } diff --git a/src/tx/transfer/utils.ts b/src/tx/transfer/utils.ts index 79dac9e..112974e 100644 --- a/src/tx/transfer/utils.ts +++ b/src/tx/transfer/utils.ts @@ -64,7 +64,7 @@ export async function broadcastTransfer( } resolve(x) }) - .catch(erro => { + .catch((erro) => { resolve({ isSuccess: false, response: { @@ -100,4 +100,3 @@ type TransferFail = { message: string } } - diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index cd2b5e7..7681536 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -1,350 +1,32 @@ -import { IBlockError } from "../../../src/server/blocks/block.types" -import { - blockByHeight, - blockHeight, - blockAverageDelay, - blockSeq, - blockLast, - blockChild, - blockHeightEncoded, - blockAtHeaderOnly, - blockSeqHeaderOnly, - blockLastHeaderOnly, - blockSignature, - blockFirst, - blockAddress -} from "../../../src/server/blocks/service.blocks" +// import { IBlockError } from "../../../src/server/blocks/block.types" +import * as blocks from "../../../src/blockchain/blocks/service.blocks" describe("blockByHeight function- suite test block service", () => { it("blockByHeight - block testing error, passing -1 number", async () => { - // const result = await blockByHeight(-1); - // expect(result).toEqual(1); - // expect().toEqual(error); - // try { - const result = await blockByHeight(-1) - //} catch (error) { - // console.log(error) - //expect(error).toEqual('s'); - // expect(error).toBeInstanceOf(error) - // expect(error).toHaveProperty("cilada") - //} - expect(result).toEqual({ - message: - "the block cannot be less than or equal to zero or greater than or equal 2147483647", - status: "error" - }) - expect(result).toMatchObject({ - message: expect.any(String) - }) + const result = await blocks.blockByHeight(-1) + + expect(result.isSuccess).toEqual(false) }) it("blockbyHeight - block testing error, passing i32Max ", async () => { - const result = await blockByHeight(2147483648) + const result = await blocks.blockByHeight(2147483648) - expect(result).toEqual({ - message: - "the block cannot be less than or equal to zero or greater than or equal 2147483647", - status: "error" - }) - expect(result).toMatchObject({ - message: expect.any(String) - }) + expect(result.isSuccess).toEqual(false) }) it("blockByHeight- receive number 10 param to get fetch", async () => { - const result = await blockByHeight(10) - expect(result).toStrictEqual({ - version: 3, - timestamp: 1528116159255, - reference: - "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", - "nxt-consensus": { - "base-target": 112701916, - "generation-signature": - "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" - }, - features: [2], - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - signature: - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - blocksize: 227, - transactionCount: 0, - fee: 0, - transactions: [], - height: 10 - }) - }) - - it("blockByHeight - block testing error, passing -100 number", async () => { - try { - const result = await blockByHeight(-100) - } catch (error) { - console.log(error) - //expect(error).toEqual(error); - //expect(error).toBeInstanceOf(IError) - expect(error).toHaveProperty("status") - } - }) -}) - -describe("blockHeight function - suite test block service", () => { - it("blockHeight - see height block from node ", async () => { - const result = await blockHeight() - expect(result).toMatchObject({ - height: expect.any(Number) - }) - }) -}) - -describe("blockAverageDelay function - suite test block service", () => { - it("blockAverageDelay - see Average delay ", async () => { - const result = await blockAverageDelay( - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - 1 - ) - expect(result).toMatchObject({ - delay: expect.any(Number) - }) - }) - - it("blockAverageDelay - blockNum >9 error ", async () => { - const result = await blockAverageDelay( - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - 10 - ) - // expect(result).toMatchObject({ - // delay: expect.any(Number) - // }) + const result = await blocks.blockByHeight(1) expect(result).toEqual({ - message: - "the blockNum cannot be less than or equal to zero or greater than nine", - status: "error" - }) - }) -}) - -describe("blockSeq function - suite test block service", () => { - it("blockSeq - Get block at specified heights ", async () => { - const result = await blockSeq(1, 2) - expect(result).toStrictEqual([ - { + isSuccess: true, + header: { blocksize: 312, + features: [], fee: 0, generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", height: 1, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - reference: - "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - signature: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - timestamp: 1528077600000, - transactionCount: 2, - transactions: [ - { - amount: 5072853761500800, - fee: 0, - id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - signature: - "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - timestamp: 1528077600000, - type: 1 - }, - { - amount: 10000000000000000, - fee: 0, - id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", - signature: - "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - timestamp: 1528077600000, - type: 1 - } - ], - version: 1 - }, - { - blocksize: 227, - features: [2], - fee: 0, - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - height: 2, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": - "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" - }, - reference: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - signature: - "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", - timestamp: 1528116151053, - transactionCount: 0, - transactions: [], - version: 3 - } - ]) - }) - - it("blockSeq - from > to error ", async () => { - const result = await blockSeq(2, 1) - expect(result).toEqual({ - message: - "Too big sequences requested OR {from} cannot be bigger than {to}, change it", - status: "error" - }) - }) - - it("blockSeq - big sequences ", async () => { - const result = await blockSeq(1, 101) - expect(result).toEqual({ - message: - "Too big sequences requested OR {from} cannot be bigger than {to}, change it", - status: "error" - }) - }) - - it("blockSeq - max === false ", async () => { - const result = await blockSeq(1, 200) - expect(result).toEqual({ - message: - "Too big sequences requested OR {from} cannot be bigger than {to}, change it", - status: "error" - }) - }) -}) - -describe("blockLast function - suite test block service", () => { - it("blockLast - Get last block data ", async () => { - const result = await blockLast() - expect(result).toMatchObject(result) - //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values - }) -}) - -describe("blockChild function - suite test block service", () => { - it("blockChild - Get children of specified block ", async () => { - const result = await blockChild( - "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" - ) - expect(result).toStrictEqual({ - version: 3, - timestamp: 1648064056012, - reference: - "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f", - "nxt-consensus": { - "base-target": 39, - "generation-signature": - "EKoXAqLn4ij3936rxtESW3EAjHtuJXDiFuTYrKNa4uku" - }, - features: [], - generator: "37nX3hdCt1GWeSsAMNFmWgbQWZZhbvBG3mX", - signature: - "2jeAT1NG4XeH48ckeuPVj4Ejmxg4ZU4VYzpHNCMeq2WTZvcrtBt1RraXq7mtu5pphiiwdyWfVTPxcAZXQcm6V99a", - blocksize: 225, - transactionCount: 0, - fee: 0, - transactions: [] - }) - }) - - it("blockChild - error 404 ", async () => { - /* - try { - const result = await blockChild("124afdsfaf") - - } catch (error) { - console.log(error) - // expect(error).toHaveProperty('status Code', 404); - - } - */ - // await expect( - // async () => await blockChild("124afdsfaf") - //).rejects.toThrow(); - - // const request = Promise.reject({statusCode: 404}) - //await expect(request).rejects.toMatchObject({ statusCode: 500 }); - //expect(() =>blockChild("124afdsfaf")).toThrow('ERR_UNHANDLED_REJECTION'); - //const result = await blockChild("124afdsfaf") - - const action = async () => { - await blockChild("124afdsfaf") - } - - expect(action()).rejects.toThrow() - - /* expect(result).toStrictEqual({ - status: `error`, - message: `block does not exist, try later` - }) - */ - }) -}) - -describe("blockHeightEncoded function - suite test block service", () => { - it("blockHeightEncoded - Get height of a block by its Base58-encoded signature ", async () => { - const result = await blockHeightEncoded( - "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" - ) - expect(result).toStrictEqual({ - height: 1887361 - }) - }) - - it("blockHeightEncoded - error 404 ", async () => { - const result = async () => { - await blockHeightEncoded("124afdsfaf") - } - - expect(result()).rejects.toThrow() - }) -}) - -describe("blockAtHeaderOnly function - suite test block service", () => { - it("blockAtHeaderOnly - Get block at specified height without transactions payload ", async () => { - const result = await blockAtHeaderOnly(1) - expect(result).toStrictEqual({ - version: 1, - timestamp: 1528077600000, - reference: - "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - signature: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - blocksize: 312, - transactionCount: 2, - height: 1 - }) - }) - - it("blockAtHeaderOnly - error 404 ", async () => { - const result = async () => { - await blockAtHeaderOnly(11111111111) - } - - expect(result()).rejects.toThrow() - }) -}) - -describe("blockSeqHeaderOnly function - suite test block service", () => { - it(" blockSeqHeaderOnly test ", async () => { - const result = await blockSeqHeaderOnly(1, 2) - expect(result).toStrictEqual([ - { - blocksize: 312, - generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - height: 1, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" + nxtConsensus: { + baseTarget: 153722867, + generationSignature: "11111111111111111111111111111111" }, reference: "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", @@ -354,110 +36,7 @@ describe("blockSeqHeaderOnly function - suite test block service", () => { transactionCount: 2, version: 1 }, - { - blocksize: 227, - features: [2], - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - height: 2, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": - "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" - }, - reference: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - signature: - "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", - timestamp: 1528116151053, - transactionCount: 0, - version: 3 - } - ]) - }) - - it(" blockSeqHeaderOnly - error from > to ", async () => { - const result = await blockSeqHeaderOnly(2, 1) - expect(result).toEqual({ - message: - "Too big sequences requested OR {from} cannot be bigger than {to}, change it", - status: "error" - }) - }) - - it(" blockSeqHeaderOnly - Max === false ", async () => { - const result = await blockSeqHeaderOnly(1, 199) - expect(result).toEqual({ - message: - "Too big sequences requested OR {from} cannot be bigger than {to}, change it", - status: "error" - }) - }) -}) - -describe(" blockLastHeaderOnly function - suite test block service", () => { - it(" blockLastHeaderOnly test ", async () => { - const result = await blockLastHeaderOnly() - //expect(result).toMatchObject(result) - //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values - expect(result).toHaveProperty("height") // true - }) -}) - -describe(" blockSignature - suite test block service", () => { - it("blockSignature test", async () => { - const result = await blockSignature( - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi" - ) - expect(result).toStrictEqual({ - version: 3, - timestamp: 1528116159255, - reference: - "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", - "nxt-consensus": { - "base-target": 112701916, - "generation-signature": - "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" - }, - features: [2], - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - signature: - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - blocksize: 227, - transactionCount: 0, - fee: 0, - transactions: [], - height: 10 - }) - }) - - it("blockSignature - error 404 ", async () => { - const result = async () => { - await blockChild("124afdsfaf") - } - - expect(result()).rejects.toThrow() - }) -}) - -describe(" blockFirst - suite test block service", () => { - it("blockFirst test ", async () => { - const result = await blockFirst() - expect(result).toStrictEqual({ - blocksize: 312, - fee: 0, - generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - height: 1, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - reference: - "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - signature: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - timestamp: 1528077600000, - transactionCount: 2, - transactions: [ + body: [ { amount: 5072853761500800, fee: 0, @@ -478,66 +57,462 @@ describe(" blockFirst - suite test block service", () => { timestamp: 1528077600000, type: 1 } - ], - version: 1 + ] }) }) }) -describe(" blockAddress - suite test block service", () => { - it("blockAddress test ", async () => { - const result = await blockAddress( - "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - 1889863, - 1889864 - ) - expect(result).toStrictEqual([ - { - blocksize: 225, - features: [], - fee: 0, - generator: "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - height: 1889864, - "nxt-consensus": { - "base-target": 51, - "generation-signature": - "9iHAgT78TCbzv5HfhxVzzRnM132n45UGqGbvH59FvBoB" - }, - reference: - "9zvED5KcnvkYsKLFxiCXQDiEsyXrKdtVH23b3qPt2FhAh3BrhUaZbqtndYWCbn4GmPrZvDbwY1vwqrxdgyazGfH", - signature: - "353wWZjKZzLiYKkVbgXLrxsK7dzYo9pEgw2pV31rXLnb1EdZbraZThrpg92swhrtQh1J353rPesvcB1mMEAoQtzP", - timestamp: 1648218628090, - transactionCount: 0, - transactions: [], - version: 3 - } - ]) - }) - - it(" blockAddress - error from > to ", async () => { - const result = await blockAddress( - "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - 1889864, - 1889863 - ) - expect(result).toEqual({ - message: - "Too big sequences requested OR {from} cannot be bigger than {to}, change it", - status: "error" - }) - }) - - it(" blockAddress - error Max === false ", async () => { - const result = await blockAddress( - "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - 1889863, - 1889999 - ) - expect(result).toEqual({ - message: - "Too big sequences requested OR {from} cannot be bigger than {to}, change it", - status: "error" - }) - }) -}) +// describe("blockHeight function - suite test block service", () => { +// it("blockHeight - see height block from node ", async () => { +// const result = await blockHeight() +// expect(result).toMatchObject({ +// height: expect.any(Number) +// }) +// }) +// }) + +// describe("blockAverageDelay function - suite test block service", () => { +// it("blockAverageDelay - see Average delay ", async () => { +// const result = await blockAverageDelay( +// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", +// 1 +// ) +// expect(result).toMatchObject({ +// delay: expect.any(Number) +// }) +// }) + +// it("blockAverageDelay - blockNum >9 error ", async () => { +// const result = await blockAverageDelay( +// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", +// 10 +// ) +// // expect(result).toMatchObject({ +// // delay: expect.any(Number) +// // }) +// expect(result).toEqual({ +// message: +// "the blockNum cannot be less than or equal to zero or greater than nine", +// status: "error" +// }) +// }) +// }) + +// describe("blockSeq function - suite test block service", () => { +// it("blockSeq - Get block at specified heights ", async () => { +// const result = await blockSeq(1, 2) +// expect(result).toStrictEqual([ +// { +// blocksize: 312, +// fee: 0, +// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", +// height: 1, +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": "11111111111111111111111111111111" +// }, +// reference: +// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", +// signature: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// timestamp: 1528077600000, +// transactionCount: 2, +// transactions: [ +// { +// amount: 5072853761500800, +// fee: 0, +// id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", +// recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", +// signature: +// "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", +// timestamp: 1528077600000, +// type: 1 +// }, +// { +// amount: 10000000000000000, +// fee: 0, +// id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", +// recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", +// signature: +// "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", +// timestamp: 1528077600000, +// type: 1 +// } +// ], +// version: 1 +// }, +// { +// blocksize: 227, +// features: [2], +// fee: 0, +// generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", +// height: 2, +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": +// "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" +// }, +// reference: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// signature: +// "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", +// timestamp: 1528116151053, +// transactionCount: 0, +// transactions: [], +// version: 3 +// } +// ]) +// }) + +// it("blockSeq - from > to error ", async () => { +// const result = await blockSeq(2, 1) +// expect(result).toEqual({ +// message: +// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +// status: "error" +// }) +// }) + +// it("blockSeq - big sequences ", async () => { +// const result = await blockSeq(1, 101) +// expect(result).toEqual({ +// message: +// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +// status: "error" +// }) +// }) + +// it("blockSeq - max === false ", async () => { +// const result = await blockSeq(1, 200) +// expect(result).toEqual({ +// message: +// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +// status: "error" +// }) +// }) +// }) + +// describe("blockLast function - suite test block service", () => { +// it("blockLast - Get last block data ", async () => { +// const result = await blockLast() +// expect(result).toMatchObject(result) +// //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values +// }) +// }) + +// describe("blockChild function - suite test block service", () => { +// it("blockChild - Get children of specified block ", async () => { +// const result = await blockChild( +// "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" +// ) +// expect(result).toStrictEqual({ +// version: 3, +// timestamp: 1648064056012, +// reference: +// "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f", +// "nxt-consensus": { +// "base-target": 39, +// "generation-signature": +// "EKoXAqLn4ij3936rxtESW3EAjHtuJXDiFuTYrKNa4uku" +// }, +// features: [], +// generator: "37nX3hdCt1GWeSsAMNFmWgbQWZZhbvBG3mX", +// signature: +// "2jeAT1NG4XeH48ckeuPVj4Ejmxg4ZU4VYzpHNCMeq2WTZvcrtBt1RraXq7mtu5pphiiwdyWfVTPxcAZXQcm6V99a", +// blocksize: 225, +// transactionCount: 0, +// fee: 0, +// transactions: [] +// }) +// }) + +// it("blockChild - error 404 ", async () => { +// /* +// try { +// const result = await blockChild("124afdsfaf") + +// } catch (error) { +// console.log(error) +// // expect(error).toHaveProperty('status Code', 404); + +// } +// */ +// // await expect( +// // async () => await blockChild("124afdsfaf") +// //).rejects.toThrow(); + +// // const request = Promise.reject({statusCode: 404}) +// //await expect(request).rejects.toMatchObject({ statusCode: 500 }); +// //expect(() =>blockChild("124afdsfaf")).toThrow('ERR_UNHANDLED_REJECTION'); +// //const result = await blockChild("124afdsfaf") + +// const action = async () => { +// await blockChild("124afdsfaf") +// } + +// expect(action()).rejects.toThrow() + +// /* expect(result).toStrictEqual({ +// status: `error`, +// message: `block does not exist, try later` +// }) +// */ +// }) +// }) + +// describe("blockHeightEncoded function - suite test block service", () => { +// it("blockHeightEncoded - Get height of a block by its Base58-encoded signature ", async () => { +// const result = await blockHeightEncoded( +// "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" +// ) +// expect(result).toStrictEqual({ +// height: 1887361 +// }) +// }) + +// it("blockHeightEncoded - error 404 ", async () => { +// const result = async () => { +// await blockHeightEncoded("124afdsfaf") +// } + +// expect(result()).rejects.toThrow() +// }) +// }) + +// describe("blockAtHeaderOnly function - suite test block service", () => { +// it("blockAtHeaderOnly - Get block at specified height without transactions payload ", async () => { +// const result = await blockAtHeaderOnly(1) +// expect(result).toStrictEqual({ +// version: 1, +// timestamp: 1528077600000, +// reference: +// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": "11111111111111111111111111111111" +// }, +// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", +// signature: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// blocksize: 312, +// transactionCount: 2, +// height: 1 +// }) +// }) + +// it("blockAtHeaderOnly - error 404 ", async () => { +// const result = async () => { +// await blockAtHeaderOnly(11111111111) +// } + +// expect(result()).rejects.toThrow() +// }) +// }) + +// describe("blockSeqHeaderOnly function - suite test block service", () => { +// it(" blockSeqHeaderOnly test ", async () => { +// const result = await blockSeqHeaderOnly(1, 2) +// expect(result).toStrictEqual([ +// { +// blocksize: 312, +// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", +// height: 1, +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": "11111111111111111111111111111111" +// }, +// reference: +// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", +// signature: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// timestamp: 1528077600000, +// transactionCount: 2, +// version: 1 +// }, +// { +// blocksize: 227, +// features: [2], +// generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", +// height: 2, +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": +// "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" +// }, +// reference: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// signature: +// "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", +// timestamp: 1528116151053, +// transactionCount: 0, +// version: 3 +// } +// ]) +// }) + +// it(" blockSeqHeaderOnly - error from > to ", async () => { +// const result = await blockSeqHeaderOnly(2, 1) +// expect(result).toEqual({ +// message: +// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +// status: "error" +// }) +// }) + +// it(" blockSeqHeaderOnly - Max === false ", async () => { +// const result = await blockSeqHeaderOnly(1, 199) +// expect(result).toEqual({ +// message: +// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +// status: "error" +// }) +// }) +// }) + +// describe(" blockLastHeaderOnly function - suite test block service", () => { +// it(" blockLastHeaderOnly test ", async () => { +// const result = await blockLastHeaderOnly() +// //expect(result).toMatchObject(result) +// //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values +// expect(result).toHaveProperty("height") // true +// }) +// }) + +// describe(" blockSignature - suite test block service", () => { +// it("blockSignature test", async () => { +// const result = await blockSignature( +// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi" +// ) +// expect(result).toStrictEqual({ +// version: 3, +// timestamp: 1528116159255, +// reference: +// "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", +// "nxt-consensus": { +// "base-target": 112701916, +// "generation-signature": +// "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" +// }, +// features: [2], +// generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", +// signature: +// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", +// blocksize: 227, +// transactionCount: 0, +// fee: 0, +// transactions: [], +// height: 10 +// }) +// }) + +// it("blockSignature - error 404 ", async () => { +// const result = async () => { +// await blockChild("124afdsfaf") +// } + +// expect(result()).rejects.toThrow() +// }) +// }) + +// describe(" blockFirst - suite test block service", () => { +// it("blockFirst test ", async () => { +// const result = await blockFirst() +// expect(result).toStrictEqual({ +// blocksize: 312, +// fee: 0, +// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", +// height: 1, +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": "11111111111111111111111111111111" +// }, +// reference: +// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", +// signature: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// timestamp: 1528077600000, +// transactionCount: 2, +// transactions: [ +// { +// amount: 5072853761500800, +// fee: 0, +// id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", +// recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", +// signature: +// "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", +// timestamp: 1528077600000, +// type: 1 +// }, +// { +// amount: 10000000000000000, +// fee: 0, +// id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", +// recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", +// signature: +// "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", +// timestamp: 1528077600000, +// type: 1 +// } +// ], +// version: 1 +// }) +// }) +// }) + +// describe(" blockAddress - suite test block service", () => { +// it("blockAddress test ", async () => { +// const result = await blockAddress( +// "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", +// 1889863, +// 1889864 +// ) +// expect(result).toStrictEqual([ +// { +// blocksize: 225, +// features: [], +// fee: 0, +// generator: "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", +// height: 1889864, +// "nxt-consensus": { +// "base-target": 51, +// "generation-signature": +// "9iHAgT78TCbzv5HfhxVzzRnM132n45UGqGbvH59FvBoB" +// }, +// reference: +// "9zvED5KcnvkYsKLFxiCXQDiEsyXrKdtVH23b3qPt2FhAh3BrhUaZbqtndYWCbn4GmPrZvDbwY1vwqrxdgyazGfH", +// signature: +// "353wWZjKZzLiYKkVbgXLrxsK7dzYo9pEgw2pV31rXLnb1EdZbraZThrpg92swhrtQh1J353rPesvcB1mMEAoQtzP", +// timestamp: 1648218628090, +// transactionCount: 0, +// transactions: [], +// version: 3 +// } +// ]) +// }) + +// it(" blockAddress - error from > to ", async () => { +// const result = await blockAddress( +// "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", +// 1889864, +// 1889863 +// ) +// expect(result).toEqual({ +// message: +// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +// status: "error" +// }) +// }) + +// it(" blockAddress - error Max === false ", async () => { +// const result = await blockAddress( +// "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", +// 1889863, +// 1889999 +// ) +// expect(result).toEqual({ +// message: +// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +// status: "error" +// }) +// }) +// }) From e032e3f989d8290bdb03e9d1a7258fe2fd015a04 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 20 Apr 2022 19:49:52 -0300 Subject: [PATCH 41/72] update: add jest RunIT extension --- .devcontainer/devcontainer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d67dc76..ad09c2c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -8,7 +8,8 @@ "esbenp.prettier-vscode", "mhutchie.git-graph", "Tyriar.sort-lines", - "eamodio.gitlens" + "eamodio.gitlens", + "vespa-dev-works.jestRunIt" ], "postCreateCommand": "yarn install && yarn upgrade --latest" } From 61688bb9bf2c8ed970462203670d6d8a0d1e7d50 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 20 Apr 2022 19:56:12 -0300 Subject: [PATCH 42/72] update: blochainError and blochainResponse update return in functions --- src/blockchain/blocks/block.types.ts | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/blockchain/blocks/block.types.ts b/src/blockchain/blocks/block.types.ts index 7e3feb3..5034a90 100644 --- a/src/blockchain/blocks/block.types.ts +++ b/src/blockchain/blocks/block.types.ts @@ -46,38 +46,38 @@ export interface IBlockError { } } -export function mountBlock(r: AxiosResponse): IBlock { +export function mountBlock(blockchainResponse: AxiosResponse): IBlock { let block: IBlock = { isSuccess: true, header: { nxtConsensus: { - baseTarget: r.data["nxt-consensus"]["base-target"], + baseTarget: blockchainResponse.data["nxt-consensus"]["base-target"], generationSignature: - r.data["nxt-consensus"]["generation-signature"] + blockchainResponse.data["nxt-consensus"]["generation-signature"] }, - transactionCount: r.data.transactionCount, - features: r.data.features != undefined ? r.data.features : [], - timestamp: r.data.timestamp, - reference: r.data.reference, - generator: r.data.generator, - signature: r.data.signature, - blocksize: r.data.blocksize, - version: r.data.version, - height: r.data.height, - fee: r.data.fee + transactionCount: blockchainResponse.data.transactionCount, + features: blockchainResponse.data.features != undefined ? blockchainResponse.data.features : [], + timestamp: blockchainResponse.data.timestamp, + reference: blockchainResponse.data.reference, + generator: blockchainResponse.data.generator, + signature: blockchainResponse.data.signature, + blocksize: blockchainResponse.data.blocksize, + version: blockchainResponse.data.version, + height: blockchainResponse.data.height, + fee: blockchainResponse.data.fee }, - body: r.data.transactions + body: blockchainResponse.data.transactions } return block } -export function mountErr(e: string): IBlockError { +export function mountErr(blockchainError: string): IBlockError { return { isSuccess: false, response: { codeError: 1, - message: e + message: blockchainError } } } From 84e85b1db921c3ff63e207360b64b4c8b3cd3f0a Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 20 Apr 2022 20:06:42 -0300 Subject: [PATCH 43/72] add: adding jsDoc for functions --- junit.xml | 85 ++----------------------- src/blockchain/blocks/service.blocks.ts | 21 ++++-- 2 files changed, 20 insertions(+), 86 deletions(-) diff --git a/junit.xml b/junit.xml index c5d9929..324fb97 100644 --- a/junit.xml +++ b/junit.xml @@ -1,86 +1,11 @@ - - - - + + + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index ef0055f..768bd9b 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -1,11 +1,20 @@ +/** + * Welcome to service.blocs.ts + * @author Lunes Platform + */ + import axios from "axios" import { mountBlock, IBlock, IBlockError, mountErr } from "./block.types" const BASEURL = "https://lunesnode.lunes.io/blocks/" -/* +/** * This function get blockchain `height` e return a full block - * --- validation: zero number, big number and string type + * + * @type {height: number} + * validation: different from zero number, big number and string type + * + * @returns Promise {@link blockByHeight} containing the parameter height. */ export async function blockByHeight( height: number @@ -27,11 +36,11 @@ export async function blockByHeight( return new Promise(async (resolve) => { axios .get(url) - .then((r) => { - resolve(mountBlock(r)) + .then((blockchainResponse) => { + resolve(mountBlock(blockchainResponse)) }) - .catch((e) => { - resolve(mountErr(e)) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) }) }) } From 9a4a742b33ef51bbbb490c34234e4970be546011 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 20 Apr 2022 22:16:58 -0300 Subject: [PATCH 44/72] update: blockHeight function and test --- junit.xml | 21 +++++++++--- src/blockchain/blocks/block.types.ts | 1 + src/blockchain/blocks/service.blocks.ts | 45 +++++++++++-------------- test/blockchain/blocks/blockOne.test.ts | 18 +++++----- 4 files changed, 47 insertions(+), 38 deletions(-) diff --git a/junit.xml b/junit.xml index 324fb97..e62fb2b 100644 --- a/junit.xml +++ b/junit.xml @@ -1,11 +1,22 @@ - - - + + + + - + + - + + + + + + + + + + \ No newline at end of file diff --git a/src/blockchain/blocks/block.types.ts b/src/blockchain/blocks/block.types.ts index 5034a90..0a9ccd6 100644 --- a/src/blockchain/blocks/block.types.ts +++ b/src/blockchain/blocks/block.types.ts @@ -81,3 +81,4 @@ export function mountErr(blockchainError: string): IBlockError { } } } + diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 768bd9b..401b162 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -46,33 +46,28 @@ export async function blockByHeight( } } -// /* -// * This function get a blockchain height -// */ -// export async function blockHeight(): Promise { -// const url = `${BASEURL}height` -// return new Promise(async (resolve, reject) => { -// const response = await axios.get(url) -// if ( -// response.status === 404 || -// response.status === 401 || -// response.status === 403 || -// response.status === 501 -// ) { -// const error: IBlockError = { -// status: `error`, -// message: `system error, come back later` -// } -// return error -// } else if (response.status === 200) { -// resolve(response.data) -// } else { -// reject(response.data) -// } -// }) -// } +/** + * This function get a blockchain height + * + * @returns Promise {@link blockHeight} . + */ +export async function blockHeight(): Promise { + const url = `${BASEURL}height` + + return new Promise(async (resolve) => { + axios + .get(url) + .then((any) => { + resolve(any) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) + +} // /* // * Average delay in milliseconds between last blockNum blocks starting from block with signature // * --- signature = signature block - Base58-encoded signature diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 7681536..1ec7bcd 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -62,14 +62,16 @@ describe("blockByHeight function- suite test block service", () => { }) }) -// describe("blockHeight function - suite test block service", () => { -// it("blockHeight - see height block from node ", async () => { -// const result = await blockHeight() -// expect(result).toMatchObject({ -// height: expect.any(Number) -// }) -// }) -// }) + +describe("blockHeight function - suite test block service", () => { + it("blockHeight - see height block from node ", async () => { + const result = await blocks.blockHeight() + //expect(result.isSuccess).toEqual(undefined) + expect(result).toMatchObject({ + height: expect.any(Number) + }) + }) +}) // describe("blockAverageDelay function - suite test block service", () => { // it("blockAverageDelay - see Average delay ", async () => { From 91bbe988d9bad98e3fccb280ef8288e46082143e Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 20 Apr 2022 22:30:36 -0300 Subject: [PATCH 45/72] update: tet toMatchObject to ==> isSuccess --- test/blockchain/blocks/blockOne.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 1ec7bcd..17f0e0e 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -66,10 +66,10 @@ describe("blockByHeight function- suite test block service", () => { describe("blockHeight function - suite test block service", () => { it("blockHeight - see height block from node ", async () => { const result = await blocks.blockHeight() - //expect(result.isSuccess).toEqual(undefined) - expect(result).toMatchObject({ - height: expect.any(Number) - }) + expect(result.isSuccess).toEqual(undefined) + // expect(result).toMatchObject({ + // height: expect.any(Number) + // }) }) }) From 4c2023fbc3c7ced8857ad11a3871fe6e7b93553d Mon Sep 17 00:00:00 2001 From: nunesinc Date: Thu, 21 Apr 2022 13:59:12 -0300 Subject: [PATCH 46/72] add: bloqSeq job --- junit.xml | 64 ++++++- src/blockchain/blocks/service.blocks.ts | 160 +++++++++++++----- test/blockchain/blocks/blockOne.test.ts | 215 ++++++++++++------------ 3 files changed, 287 insertions(+), 152 deletions(-) diff --git a/junit.xml b/junit.xml index e62fb2b..a34e875 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -13,10 +13,64 @@ - - + + + + Error: expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 4 + + Object { ++ "isSuccess": false, ++ "response": Object { ++ "codeError": -1, + "message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +- "status": "error", ++ }, + } + at /workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:172:24 + at Generator.next (<anonymous>) + at fulfilled (/workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:28:58) + at processTicksAndRejections (node:internal/process/task_queues:96:5) + + + Error: expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 4 + + Object { ++ "isSuccess": false, ++ "response": Object { ++ "codeError": -1, + "message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +- "status": "error", ++ }, + } + at /workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:181:24 + at Generator.next (<anonymous>) + at fulfilled (/workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:28:58) + at processTicksAndRejections (node:internal/process/task_queues:96:5) - + + Error: expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 4 + + Object { ++ "isSuccess": false, ++ "response": Object { ++ "codeError": -1, + "message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +- "status": "error", ++ }, + } + at /workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:190:24 + at Generator.next (<anonymous>) + at fulfilled (/workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:28:58) + at processTicksAndRejections (node:internal/process/task_queues:96:5) \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 401b162..5b53667 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -68,64 +68,144 @@ export async function blockHeight(): Promise { }) } -// /* + +// /** // * Average delay in milliseconds between last blockNum blocks starting from block with signature +// * +// * @type {signature: string, blockNum: number } +// * +// * @returns Promise {@link blockAverageDelay} containing the paramms signature and blockNum. +// * // * --- signature = signature block - Base58-encoded signature -// * --- blockNum = 1 to 9 - Number of blocks to count delay +// * +// * --- blockNum = 1 to 9 - Number of blocks to count delay // */ -// export async function blockAverageDelay( +// export async function blockAverageDelay( // signature: string, // blockNum: number // ): Promise { // const url = `${BASEURL}delay/${signature}/${blockNum}` // if (blockNum <= 0 || blockNum > 9) { +// // const error: IBlockError = { +// // status: `error`, +// // message: `the blockNum cannot be less than or equal to zero or greater than nine` +// // } +// // return error // const error: IBlockError = { -// status: `error`, -// message: `the blockNum cannot be less than or equal to zero or greater than nine` -// } -// return error -// } else { -// //const response = await axios.get(url) -// //return response.data -// return new Promise(async (resolve, reject) => { -// const response = await axios.get(url) -// if (response.status === 200) { -// resolve(response.data) -// } else { -// reject(response.data) +// isSuccess: false, +// response: { +// codeError: -1, +// message: `the blockNum cannot be less than or equal to zero or greater than nine` // } +// } +// return error +// } else { +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((blockchainResponse) => { +// resolve(mountBlock(blockchainResponse)) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) // }) // } // } -// /* -// * Get block at specified heights -// * max value (from) (to) 1 - 100 (99 difference) -// * from value < to value -// * `https://lunesnode.lunes.io/blocks/seq/${from}/${to}` -// */ -// export async function blockSeq( -// from: number, -// to: number -// ): Promise { -// const url = `${BASEURL}seq/${from}/${to}` -// //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` -// const Max: boolean = to - from < 100 -// if (from > to || Max === false) { -// const error: IBlockError = { -// status: `error`, -// message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` -// } -// return error -// } else { -// const response = await axios.get(url) -// return response.data -// } -// } +/* +export async function blockAverageDelay( + signature: string, + blockNum: number +): Promise { + const url = `${BASEURL}delay/${signature}/${blockNum}` + + if (blockNum <= 0 || blockNum > 9) { + const error: IBlockError = { + status: `error`, + message: `the blockNum cannot be less than or equal to zero or greater than nine` + } + return error + } else { + //const response = await axios.get(url) + //return response.data + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) + } +} +*/ + + +/** + * This function Get block at specified heights + * + * @type {from: number, to: number} + * validation: max value (from) (to) 1 - 100 (99 difference) + * + * from value < to value + * + * @returns Promise {@link blockSeq} containing the params from and to. + */ +export async function blockSeq( + from: number, + to: number +): Promise { + const url = `${BASEURL}seq/${from}/${to}` + //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` + const Max: boolean = to - from < 100 + + if (from > to || Max === false) { + const error: IBlockError = { + isSuccess: false, + response: { + codeError: -1, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` + } + } + return error + } else { + const response = await axios.get(url) + return response.data + } +} + +/* +export async function blockSeq( + from: number, + to: number +): Promise { + const url = `${BASEURL}seq/${from}/${to}` + //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` + const Max: boolean = to - from < 100 + + if (from > to || Max === false) { + const error: IBlockError = { + status: `error`, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` + } + return error + } else { + const response = await axios.get(url) + return response.data + } +} +*/ + + + + + + // /* // * Get last block data diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 17f0e0e..a6316d0 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -75,124 +75,125 @@ describe("blockHeight function - suite test block service", () => { // describe("blockAverageDelay function - suite test block service", () => { // it("blockAverageDelay - see Average delay ", async () => { -// const result = await blockAverageDelay( +// const result = await blocks.blockAverageDelay( // "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", // 1 // ) -// expect(result).toMatchObject({ -// delay: expect.any(Number) -// }) -// }) - -// it("blockAverageDelay - blockNum >9 error ", async () => { -// const result = await blockAverageDelay( -// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", -// 10 -// ) +// expect(result.isSuccess).toEqual(true) // // expect(result).toMatchObject({ -// // delay: expect.any(Number) +// // delay: expect.any(Number) // // }) -// expect(result).toEqual({ -// message: -// "the blockNum cannot be less than or equal to zero or greater than nine", -// status: "error" -// }) // }) + +// // it("blockAverageDelay - blockNum >9 error ", async () => { +// // const result = await blockAverageDelay( +// // "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", +// // 10 +// // ) +// // // expect(result).toMatchObject({ +// // // delay: expect.any(Number) +// // // }) +// // expect(result).toEqual({ +// // message: +// // "the blockNum cannot be less than or equal to zero or greater than nine", +// // status: "error" +// // }) +// // }) // }) -// describe("blockSeq function - suite test block service", () => { -// it("blockSeq - Get block at specified heights ", async () => { -// const result = await blockSeq(1, 2) -// expect(result).toStrictEqual([ -// { -// blocksize: 312, -// fee: 0, -// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", -// height: 1, -// "nxt-consensus": { -// "base-target": 153722867, -// "generation-signature": "11111111111111111111111111111111" -// }, -// reference: -// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", -// signature: -// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", -// timestamp: 1528077600000, -// transactionCount: 2, -// transactions: [ -// { -// amount: 5072853761500800, -// fee: 0, -// id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", -// recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", -// signature: -// "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", -// timestamp: 1528077600000, -// type: 1 -// }, -// { -// amount: 10000000000000000, -// fee: 0, -// id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", -// recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", -// signature: -// "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", -// timestamp: 1528077600000, -// type: 1 -// } -// ], -// version: 1 -// }, -// { -// blocksize: 227, -// features: [2], -// fee: 0, -// generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", -// height: 2, -// "nxt-consensus": { -// "base-target": 153722867, -// "generation-signature": -// "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" -// }, -// reference: -// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", -// signature: -// "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", -// timestamp: 1528116151053, -// transactionCount: 0, -// transactions: [], -// version: 3 -// } -// ]) -// }) +describe("blockSeq function - suite test block service", () => { + it("blockSeq - Get block at specified heights ", async () => { + const result = await blocks.blockSeq(1, 2) + expect(result).toStrictEqual([ + { + blocksize: 312, + fee: 0, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + height: 1, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + timestamp: 1528077600000, + transactionCount: 2, + transactions: [ + { + amount: 5072853761500800, + fee: 0, + id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + signature: + "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + timestamp: 1528077600000, + type: 1 + }, + { + amount: 10000000000000000, + fee: 0, + id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", + signature: + "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + timestamp: 1528077600000, + type: 1 + } + ], + version: 1 + }, + { + blocksize: 227, + features: [2], + fee: 0, + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + height: 2, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": + "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" + }, + reference: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + signature: + "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", + timestamp: 1528116151053, + transactionCount: 0, + transactions: [], + version: 3 + } + ]) + }) -// it("blockSeq - from > to error ", async () => { -// const result = await blockSeq(2, 1) -// expect(result).toEqual({ -// message: -// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -// status: "error" -// }) -// }) + it("blockSeq - from > to error ", async () => { + const result = await blocks.blockSeq(2, 1) + expect(result).toEqual({ + message: + "Too big sequences requested OR {from} cannot be bigger than {to}, change it", + status: "error" + }) + }) -// it("blockSeq - big sequences ", async () => { -// const result = await blockSeq(1, 101) -// expect(result).toEqual({ -// message: -// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -// status: "error" -// }) -// }) + it("blockSeq - big sequences ", async () => { + const result = await blocks.blockSeq(1, 101) + expect(result).toEqual({ + message: + "Too big sequences requested OR {from} cannot be bigger than {to}, change it", + status: "error" + }) + }) -// it("blockSeq - max === false ", async () => { -// const result = await blockSeq(1, 200) -// expect(result).toEqual({ -// message: -// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -// status: "error" -// }) -// }) -// }) + it("blockSeq - max === false ", async () => { + const result = await blocks.blockSeq(1, 200) + expect(result).toEqual({ + message: + "Too big sequences requested OR {from} cannot be bigger than {to}, change it", + status: "error" + }) + }) +}) // describe("blockLast function - suite test block service", () => { // it("blockLast - Get last block data ", async () => { From 40fd60ef4fe1d1317a0a0700b87a3d23af30742f Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Thu, 21 Apr 2022 14:16:07 -0300 Subject: [PATCH 47/72] fix: block height --- src/blockchain/blocks/service.blocks.ts | 23 ++- test/blockchain/blocks/blockOne.test.ts | 220 ++++++++++++------------ 2 files changed, 122 insertions(+), 121 deletions(-) diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 5b53667..494328f 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -9,11 +9,17 @@ import { mountBlock, IBlock, IBlockError, mountErr } from "./block.types" const BASEURL = "https://lunesnode.lunes.io/blocks/" /** - * This function get blockchain `height` e return a full block - * + * # This function get blockchain `height` e return a full block + * + * ## Example + * + * ```javascript + * import * as lunesjs from "lunesjs" + * + * const block = lunesjs.blockchain.blocks.height(10) + * ``` * @type {height: number} * validation: different from zero number, big number and string type - * * @returns Promise {@link blockByHeight} containing the parameter height. */ export async function blockByHeight( @@ -52,18 +58,17 @@ export async function blockByHeight( * * @returns Promise {@link blockHeight} . */ - -export async function blockHeight(): Promise { +export async function blockHeight(): Promise { const url = `${BASEURL}height` return new Promise(async (resolve) => { axios .get(url) - .then((any) => { - resolve(any) + .then((r) => { + resolve(r.data.height) }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) + .catch(() => { + resolve(-1) }) }) diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index a6316d0..c83938d 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -66,134 +66,130 @@ describe("blockByHeight function- suite test block service", () => { describe("blockHeight function - suite test block service", () => { it("blockHeight - see height block from node ", async () => { const result = await blocks.blockHeight() - expect(result.isSuccess).toEqual(undefined) - // expect(result).toMatchObject({ - // height: expect.any(Number) - // }) + expect(result).toBeGreaterThan(0) }) }) // describe("blockAverageDelay function - suite test block service", () => { // it("blockAverageDelay - see Average delay ", async () => { -// const result = await blocks.blockAverageDelay( +// const result = await blockAverageDelay( // "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", // 1 // ) -// expect(result.isSuccess).toEqual(true) +// expect(result).toMatchObject({ +// delay: expect.any(Number) +// }) +// }) + +// it("blockAverageDelay - blockNum >9 error ", async () => { +// const result = await blockAverageDelay( +// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", +// 10 +// ) // // expect(result).toMatchObject({ -// // delay: expect.any(Number) +// // delay: expect.any(Number) // // }) +// expect(result).toEqual({ +// message: +// "the blockNum cannot be less than or equal to zero or greater than nine", +// status: "error" +// }) // }) - -// // it("blockAverageDelay - blockNum >9 error ", async () => { -// // const result = await blockAverageDelay( -// // "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", -// // 10 -// // ) -// // // expect(result).toMatchObject({ -// // // delay: expect.any(Number) -// // // }) -// // expect(result).toEqual({ -// // message: -// // "the blockNum cannot be less than or equal to zero or greater than nine", -// // status: "error" -// // }) -// // }) // }) -describe("blockSeq function - suite test block service", () => { - it("blockSeq - Get block at specified heights ", async () => { - const result = await blocks.blockSeq(1, 2) - expect(result).toStrictEqual([ - { - blocksize: 312, - fee: 0, - generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - height: 1, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - reference: - "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - signature: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - timestamp: 1528077600000, - transactionCount: 2, - transactions: [ - { - amount: 5072853761500800, - fee: 0, - id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - signature: - "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - timestamp: 1528077600000, - type: 1 - }, - { - amount: 10000000000000000, - fee: 0, - id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", - signature: - "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - timestamp: 1528077600000, - type: 1 - } - ], - version: 1 - }, - { - blocksize: 227, - features: [2], - fee: 0, - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - height: 2, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": - "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" - }, - reference: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - signature: - "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", - timestamp: 1528116151053, - transactionCount: 0, - transactions: [], - version: 3 - } - ]) - }) +// describe("blockSeq function - suite test block service", () => { +// it("blockSeq - Get block at specified heights ", async () => { +// const result = await blockSeq(1, 2) +// expect(result).toStrictEqual([ +// { +// blocksize: 312, +// fee: 0, +// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", +// height: 1, +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": "11111111111111111111111111111111" +// }, +// reference: +// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", +// signature: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// timestamp: 1528077600000, +// transactionCount: 2, +// transactions: [ +// { +// amount: 5072853761500800, +// fee: 0, +// id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", +// recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", +// signature: +// "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", +// timestamp: 1528077600000, +// type: 1 +// }, +// { +// amount: 10000000000000000, +// fee: 0, +// id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", +// recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", +// signature: +// "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", +// timestamp: 1528077600000, +// type: 1 +// } +// ], +// version: 1 +// }, +// { +// blocksize: 227, +// features: [2], +// fee: 0, +// generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", +// height: 2, +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": +// "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" +// }, +// reference: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// signature: +// "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", +// timestamp: 1528116151053, +// transactionCount: 0, +// transactions: [], +// version: 3 +// } +// ]) +// }) - it("blockSeq - from > to error ", async () => { - const result = await blocks.blockSeq(2, 1) - expect(result).toEqual({ - message: - "Too big sequences requested OR {from} cannot be bigger than {to}, change it", - status: "error" - }) - }) +// it("blockSeq - from > to error ", async () => { +// const result = await blockSeq(2, 1) +// expect(result).toEqual({ +// message: +// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +// status: "error" +// }) +// }) - it("blockSeq - big sequences ", async () => { - const result = await blocks.blockSeq(1, 101) - expect(result).toEqual({ - message: - "Too big sequences requested OR {from} cannot be bigger than {to}, change it", - status: "error" - }) - }) +// it("blockSeq - big sequences ", async () => { +// const result = await blockSeq(1, 101) +// expect(result).toEqual({ +// message: +// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +// status: "error" +// }) +// }) - it("blockSeq - max === false ", async () => { - const result = await blocks.blockSeq(1, 200) - expect(result).toEqual({ - message: - "Too big sequences requested OR {from} cannot be bigger than {to}, change it", - status: "error" - }) - }) -}) +// it("blockSeq - max === false ", async () => { +// const result = await blockSeq(1, 200) +// expect(result).toEqual({ +// message: +// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", +// status: "error" +// }) +// }) +// }) // describe("blockLast function - suite test block service", () => { // it("blockLast - Get last block data ", async () => { From a55bd5fbaad722e0cc51159e0c8a05356b967a4e Mon Sep 17 00:00:00 2001 From: nunesinc Date: Thu, 21 Apr 2022 15:33:28 -0300 Subject: [PATCH 48/72] update: function blochainHeight to actualHeigh rename, test jest --- junit.xml | 74 ++----------------------- src/blockchain/blocks/service.blocks.ts | 4 +- test/blockchain/blocks/blockOne.test.ts | 6 +- 3 files changed, 12 insertions(+), 72 deletions(-) diff --git a/junit.xml b/junit.xml index a34e875..72084e0 100644 --- a/junit.xml +++ b/junit.xml @@ -1,76 +1,14 @@ - - - - + + + - - + - - + - + - - - - Error: expect(received).toEqual(expected) // deep equality - -- Expected - 1 -+ Received + 4 - - Object { -+ "isSuccess": false, -+ "response": Object { -+ "codeError": -1, - "message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -- "status": "error", -+ }, - } - at /workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:172:24 - at Generator.next (<anonymous>) - at fulfilled (/workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:28:58) - at processTicksAndRejections (node:internal/process/task_queues:96:5) - - - Error: expect(received).toEqual(expected) // deep equality - -- Expected - 1 -+ Received + 4 - - Object { -+ "isSuccess": false, -+ "response": Object { -+ "codeError": -1, - "message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -- "status": "error", -+ }, - } - at /workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:181:24 - at Generator.next (<anonymous>) - at fulfilled (/workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:28:58) - at processTicksAndRejections (node:internal/process/task_queues:96:5) - - - Error: expect(received).toEqual(expected) // deep equality - -- Expected - 1 -+ Received + 4 - - Object { -+ "isSuccess": false, -+ "response": Object { -+ "codeError": -1, - "message": "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -- "status": "error", -+ }, - } - at /workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:190:24 - at Generator.next (<anonymous>) - at fulfilled (/workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:28:58) - at processTicksAndRejections (node:internal/process/task_queues:96:5) - \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 494328f..6609962 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -57,8 +57,10 @@ export async function blockByHeight( * This function get a blockchain height * * @returns Promise {@link blockHeight} . + * + * If server off line, return error */ -export async function blockHeight(): Promise { +export async function actualHeight(): Promise { const url = `${BASEURL}height` return new Promise(async (resolve) => { diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index c83938d..3fdb99b 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -63,9 +63,9 @@ describe("blockByHeight function- suite test block service", () => { }) -describe("blockHeight function - suite test block service", () => { - it("blockHeight - see height block from node ", async () => { - const result = await blocks.blockHeight() +describe("actualHeight function - suite test block service", () => { + it("actualHeight - see height block from node ", async () => { + const result = await blocks.actualHeight() expect(result).toBeGreaterThan(0) }) }) From 646632507584a58e76ff8f8c48e28593f8589fbd Mon Sep 17 00:00:00 2001 From: nunesinc Date: Thu, 21 Apr 2022 19:07:48 -0300 Subject: [PATCH 49/72] update: blockAverageDelay test and function --- junit.xml | 17 +++-- src/blockchain/blocks/service.blocks.ts | 85 ++++++++++++------------- test/blockchain/blocks/blockOne.test.ts | 41 +++++------- 3 files changed, 68 insertions(+), 75 deletions(-) diff --git a/junit.xml b/junit.xml index 72084e0..47ce5fc 100644 --- a/junit.xml +++ b/junit.xml @@ -1,14 +1,21 @@ - - - + + + + - + + - + + + + + + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 6609962..8f5accf 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -54,7 +54,7 @@ export async function blockByHeight( /** - * This function get a blockchain height + * # This function get a blockchain height * * @returns Promise {@link blockHeight} . * @@ -76,51 +76,46 @@ export async function actualHeight(): Promise { } -// /** -// * Average delay in milliseconds between last blockNum blocks starting from block with signature -// * -// * @type {signature: string, blockNum: number } -// * -// * @returns Promise {@link blockAverageDelay} containing the paramms signature and blockNum. -// * -// * --- signature = signature block - Base58-encoded signature -// * -// * --- blockNum = 1 to 9 - Number of blocks to count delay -// */ +/** + * # Average delay in milliseconds between last blockNum blocks starting from block with signature + * + * @type {signature: string, blockNum: number } + * + * @returns Promise {@link blockAverageDelay} containing the paramms signature and blockNum. + * + * --- signature = signature block - Base58-encoded signature + * + * --- blockNum = 1 to 9 - Number of blocks to count delay + */ -// export async function blockAverageDelay( -// signature: string, -// blockNum: number -// ): Promise { -// const url = `${BASEURL}delay/${signature}/${blockNum}` - -// if (blockNum <= 0 || blockNum > 9) { -// // const error: IBlockError = { -// // status: `error`, -// // message: `the blockNum cannot be less than or equal to zero or greater than nine` -// // } -// // return error -// const error: IBlockError = { -// isSuccess: false, -// response: { -// codeError: -1, -// message: `the blockNum cannot be less than or equal to zero or greater than nine` -// } -// } -// return error -// } else { -// return new Promise(async (resolve) => { -// axios -// .get(url) -// .then((blockchainResponse) => { -// resolve(mountBlock(blockchainResponse)) -// }) -// .catch((blockchainError) => { -// resolve(mountErr(blockchainError)) -// }) -// }) -// } -// } + export async function blockAverageDelay( + signature: string, + blockNum: number +): Promise { + const url = `${BASEURL}delay/${signature}/${blockNum}` + + if (blockNum <= 0 || blockNum > 9) { + const error: IBlockError = { + isSuccess: false, + response: { + codeError: -1, + message: `the blockNum cannot be less than or equal to zero or greater than nine` + } + } + return error + } else { + return new Promise(async (resolve) => { + axios + .get(url) + .then((r) => { + resolve(r.data.delay) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) + } +} diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 3fdb99b..594687e 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -70,32 +70,23 @@ describe("actualHeight function - suite test block service", () => { }) }) -// describe("blockAverageDelay function - suite test block service", () => { -// it("blockAverageDelay - see Average delay ", async () => { -// const result = await blockAverageDelay( -// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", -// 1 -// ) -// expect(result).toMatchObject({ -// delay: expect.any(Number) -// }) -// }) +describe("blockAverageDelay function - suite test block service", () => { + it("blockAverageDelay - see Average delay ", async () => { + const result = await blocks.blockAverageDelay( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + 1 + ) + expect(result).toStrictEqual(1011) + }) -// it("blockAverageDelay - blockNum >9 error ", async () => { -// const result = await blockAverageDelay( -// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", -// 10 -// ) -// // expect(result).toMatchObject({ -// // delay: expect.any(Number) -// // }) -// expect(result).toEqual({ -// message: -// "the blockNum cannot be less than or equal to zero or greater than nine", -// status: "error" -// }) -// }) -// }) + it("blockAverageDelay - blockNum >9 error ", async () => { + const result = await blocks.blockAverageDelay( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + 10 + ) + expect(result.isSuccess).toEqual(false) + }) +}) // describe("blockSeq function - suite test block service", () => { // it("blockSeq - Get block at specified heights ", async () => { From d8c6716f234f84dc46141dfbe0b28ef1da8d94b4 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Thu, 21 Apr 2022 20:44:55 -0300 Subject: [PATCH 50/72] update: blockSeq test and function promise update --- junit.xml | 18 ++- src/blockchain/blocks/service.blocks.ts | 47 ++----- test/blockchain/blocks/blockOne.test.ts | 168 +++++++++++------------- 3 files changed, 106 insertions(+), 127 deletions(-) diff --git a/junit.xml b/junit.xml index 47ce5fc..db3bbf0 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -13,9 +13,19 @@ - + + + + + + + + + + + - + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 8f5accf..419fffb 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -119,37 +119,8 @@ export async function actualHeight(): Promise { -/* -export async function blockAverageDelay( - signature: string, - blockNum: number -): Promise { - const url = `${BASEURL}delay/${signature}/${blockNum}` - - if (blockNum <= 0 || blockNum > 9) { - const error: IBlockError = { - status: `error`, - message: `the blockNum cannot be less than or equal to zero or greater than nine` - } - return error - } else { - //const response = await axios.get(url) - //return response.data - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - }) - } -} -*/ - - /** - * This function Get block at specified heights + * # This function Get block at specified heights * * @type {from: number, to: number} * validation: max value (from) (to) 1 - 100 (99 difference) @@ -161,7 +132,7 @@ export async function blockAverageDelay( export async function blockSeq( from: number, to: number -): Promise { +): Promise { const url = `${BASEURL}seq/${from}/${to}` //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` const Max: boolean = to - from < 100 @@ -176,8 +147,18 @@ export async function blockSeq( } return error } else { - const response = await axios.get(url) - return response.data + //const response = await axios.get(url) + //return response.data + return new Promise(async (resolve) => { + axios + .get(url) + .then((r) => { + resolve(r.data) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) } } diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 594687e..0c9cce0 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -88,99 +88,87 @@ describe("blockAverageDelay function - suite test block service", () => { }) }) -// describe("blockSeq function - suite test block service", () => { -// it("blockSeq - Get block at specified heights ", async () => { -// const result = await blockSeq(1, 2) -// expect(result).toStrictEqual([ -// { -// blocksize: 312, -// fee: 0, -// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", -// height: 1, -// "nxt-consensus": { -// "base-target": 153722867, -// "generation-signature": "11111111111111111111111111111111" -// }, -// reference: -// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", -// signature: -// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", -// timestamp: 1528077600000, -// transactionCount: 2, -// transactions: [ -// { -// amount: 5072853761500800, -// fee: 0, -// id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", -// recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", -// signature: -// "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", -// timestamp: 1528077600000, -// type: 1 -// }, -// { -// amount: 10000000000000000, -// fee: 0, -// id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", -// recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", -// signature: -// "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", -// timestamp: 1528077600000, -// type: 1 -// } -// ], -// version: 1 -// }, -// { -// blocksize: 227, -// features: [2], -// fee: 0, -// generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", -// height: 2, -// "nxt-consensus": { -// "base-target": 153722867, -// "generation-signature": -// "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" -// }, -// reference: -// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", -// signature: -// "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", -// timestamp: 1528116151053, -// transactionCount: 0, -// transactions: [], -// version: 3 -// } -// ]) -// }) +describe("blockSeq function - suite test block service", () => { + it("blockSeq - Get block at specified heights ", async () => { + const result = await blocks.blockSeq(1, 2) + expect(result).toStrictEqual([ + { + blocksize: 312, + fee: 0, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + height: 1, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + timestamp: 1528077600000, + transactionCount: 2, + transactions: [ + { + amount: 5072853761500800, + fee: 0, + id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + signature: + "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", + timestamp: 1528077600000, + type: 1 + }, + { + amount: 10000000000000000, + fee: 0, + id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", + signature: + "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", + timestamp: 1528077600000, + type: 1 + } + ], + version: 1 + }, + { + blocksize: 227, + features: [2], + fee: 0, + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + height: 2, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": + "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" + }, + reference: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + signature: + "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", + timestamp: 1528116151053, + transactionCount: 0, + transactions: [], + version: 3 + } + ]) + }) -// it("blockSeq - from > to error ", async () => { -// const result = await blockSeq(2, 1) -// expect(result).toEqual({ -// message: -// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -// status: "error" -// }) -// }) + it("blockSeq - from > to error ", async () => { + const result = await blocks.blockSeq(2, 1) + expect(result.isSuccess).toEqual(false) + }) -// it("blockSeq - big sequences ", async () => { -// const result = await blockSeq(1, 101) -// expect(result).toEqual({ -// message: -// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -// status: "error" -// }) -// }) + it("blockSeq - big sequences ", async () => { + const result = await blocks.blockSeq(1, 101) + expect(result.isSuccess).toEqual(false) + }) -// it("blockSeq - max === false ", async () => { -// const result = await blockSeq(1, 200) -// expect(result).toEqual({ -// message: -// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -// status: "error" -// }) -// }) -// }) + it("blockSeq - max === false ", async () => { + const result = await blocks.blockSeq(1, 200) + expect(result.isSuccess).toEqual(false) + }) +}) // describe("blockLast function - suite test block service", () => { // it("blockLast - Get last block data ", async () => { From d4fbde81394a67d304b174d99bf5906523dfbd59 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Thu, 21 Apr 2022 21:12:50 -0300 Subject: [PATCH 51/72] update blockLast function and test promise --- junit.xml | 18 +++-- src/blockchain/blocks/service.blocks.ts | 95 +++++++++++++------------ test/blockchain/blocks/blockOne.test.ts | 19 +++-- 3 files changed, 72 insertions(+), 60 deletions(-) diff --git a/junit.xml b/junit.xml index db3bbf0..a6a492a 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -19,13 +19,19 @@ - + + - + + - + + + + + - + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 419fffb..bf53040 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -162,62 +162,63 @@ export async function blockSeq( } } + + /* -export async function blockSeq( - from: number, - to: number -): Promise { - const url = `${BASEURL}seq/${from}/${to}` - //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` - const Max: boolean = to - from < 100 + * Get last block data + */ +export async function blockLast(): Promise { + const url = `${BASEURL}last` - if (from > to || Max === false) { - const error: IBlockError = { - status: `error`, - message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` - } - return error - } else { - const response = await axios.get(url) - return response.data - } -} -*/ + return new Promise(async (resolve) => { + axios + .get(url) + .then((blockchainResponse) => { + resolve(mountBlock(blockchainResponse)) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) +} +/* + * Get last block data + */ +/* +export async function blockLast(): Promise { + const url = `${BASEURL}last` + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + if ( + response.status === 404 || + response.status === 401 || + response.status === 403 || + response.status === 501 + ) { + const error: IBlockError = { + status: `error`, + message: `system error, come back later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + //`https://lunesnode.lunes.io/blocks/last + //const response = await axios.get(url) + //return response.data + }) +} + +*/ -// /* -// * Get last block data -// */ -// export async function blockLast(): Promise { -// const url = `${BASEURL}last` -// return new Promise(async (resolve, reject) => { -// const response = await axios.get(url) -// if ( -// response.status === 404 || -// response.status === 401 || -// response.status === 403 || -// response.status === 501 -// ) { -// const error: IBlockError = { -// status: `error`, -// message: `system error, come back later` -// } -// return error -// } else if (response.status === 200) { -// resolve(response.data) -// } else { -// reject(response.data) -// } -// //`https://lunesnode.lunes.io/blocks/last -// //const response = await axios.get(url) -// //return response.data -// }) -// } // /* // * Get children of specified block diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 0c9cce0..ef56d07 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -170,13 +170,18 @@ describe("blockSeq function - suite test block service", () => { }) }) -// describe("blockLast function - suite test block service", () => { -// it("blockLast - Get last block data ", async () => { -// const result = await blockLast() -// expect(result).toMatchObject(result) -// //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values -// }) -// }) +describe("blockLast function - suite test block service", () => { + it("blockLast - Get last block data ", async () => { + const result = await blocks.blockLast() + + //ok + expect(result.isSuccess).toEqual(true) + + //see received + //expect(result).toStrictEqual("") + + }) +}) // describe("blockChild function - suite test block service", () => { // it("blockChild - Get children of specified block ", async () => { From 0a08368cdf8b4ca628eaa715e03bdc9122252cd9 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Thu, 21 Apr 2022 21:16:57 -0300 Subject: [PATCH 52/72] update: blockLast jsdoc --- src/blockchain/blocks/service.blocks.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index bf53040..6bf7846 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -127,7 +127,7 @@ export async function actualHeight(): Promise { * * from value < to value * - * @returns Promise {@link blockSeq} containing the params from and to. + * @returns Promise {@link blockSeq} containing the params from and to. */ export async function blockSeq( from: number, @@ -164,8 +164,14 @@ export async function blockSeq( -/* - * Get last block data + + +/** + * # This function Get last block data + * + * If server off line, return error + * + * @returns Promise {@link blockLast} , no params. */ export async function blockLast(): Promise { const url = `${BASEURL}last` From 6008f02f431e5491188905eea8dad3b97881c688 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Thu, 21 Apr 2022 21:59:18 -0300 Subject: [PATCH 53/72] update: blockChild test and function promise update --- junit.xml | 11 +++- src/blockchain/blocks/service.blocks.ts | 74 ++++++++----------------- test/blockchain/blocks/blockOne.test.ts | 74 ++++++------------------- 3 files changed, 48 insertions(+), 111 deletions(-) diff --git a/junit.xml b/junit.xml index a6a492a..805e2e0 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -31,7 +31,12 @@ - + + + + + + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 6bf7846..a97878d 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -191,64 +191,34 @@ export async function blockLast(): Promise { } -/* - * Get last block data +/** + * # This function Get children of specified block + * + * @type {signature: stringr} + * validation: string + * + * @returns Promise {@link blockChild} containing the parameter signature. */ -/* -export async function blockLast(): Promise { - const url = `${BASEURL}last` - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - if ( - response.status === 404 || - response.status === 401 || - response.status === 403 || - response.status === 501 - ) { - const error: IBlockError = { - status: `error`, - message: `system error, come back later` - } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - //`https://lunesnode.lunes.io/blocks/last - //const response = await axios.get(url) - //return response.data - }) -} - -*/ +export async function blockChild( + signature: string +): Promise { + const url = `${BASEURL}child/${signature}` + return new Promise(async (resolve) => { + axios + .get(url) + .then((blockchainResponse) => { + resolve(mountBlock(blockchainResponse)) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) +} -// /* -// * Get children of specified block -// */ -// export async function blockChild( -// signature: string -// ): Promise { -// const url = `${BASEURL}child/${signature}` -// return new Promise(async (resolve, reject) => { -// const response = await axios.get(url) -// if (response.status === 404) { -// const error: IBlockError = { -// status: `error`, -// message: `block does not exist, try later` -// } -// return error -// } else if (response.status === 200) { -// resolve(response.data) -// } else { -// reject(response.data) -// } -// }) -// } // /* // * Get height of a block by its Base58-encoded signature diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index ef56d07..f5eacc4 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -183,65 +183,27 @@ describe("blockLast function - suite test block service", () => { }) }) -// describe("blockChild function - suite test block service", () => { -// it("blockChild - Get children of specified block ", async () => { -// const result = await blockChild( -// "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" -// ) -// expect(result).toStrictEqual({ -// version: 3, -// timestamp: 1648064056012, -// reference: -// "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f", -// "nxt-consensus": { -// "base-target": 39, -// "generation-signature": -// "EKoXAqLn4ij3936rxtESW3EAjHtuJXDiFuTYrKNa4uku" -// }, -// features: [], -// generator: "37nX3hdCt1GWeSsAMNFmWgbQWZZhbvBG3mX", -// signature: -// "2jeAT1NG4XeH48ckeuPVj4Ejmxg4ZU4VYzpHNCMeq2WTZvcrtBt1RraXq7mtu5pphiiwdyWfVTPxcAZXQcm6V99a", -// blocksize: 225, -// transactionCount: 0, -// fee: 0, -// transactions: [] -// }) -// }) - -// it("blockChild - error 404 ", async () => { -// /* -// try { -// const result = await blockChild("124afdsfaf") - -// } catch (error) { -// console.log(error) -// // expect(error).toHaveProperty('status Code', 404); - -// } -// */ -// // await expect( -// // async () => await blockChild("124afdsfaf") -// //).rejects.toThrow(); +describe("blockChild function - suite test block service", () => { + it("blockChild - Get children of specified block ", async () => { + const result = await blocks.blockChild( + "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" + ) + //ok + expect(result.isSuccess).toEqual(true) + }) -// // const request = Promise.reject({statusCode: 404}) -// //await expect(request).rejects.toMatchObject({ statusCode: 500 }); -// //expect(() =>blockChild("124afdsfaf")).toThrow('ERR_UNHANDLED_REJECTION'); -// //const result = await blockChild("124afdsfaf") + it("blockChild - error 404 ", async () => { -// const action = async () => { -// await blockChild("124afdsfaf") -// } + // const action = async () => { + // await blocks.blockChild("124afdsfaf") + // } -// expect(action()).rejects.toThrow() - -// /* expect(result).toStrictEqual({ -// status: `error`, -// message: `block does not exist, try later` -// }) -// */ -// }) -// }) + // expect(action()).rejects.toThrow() + const result = await blocks.blockChild("124afdsfaf") + //ok + expect(result.isSuccess).toEqual(false) + }) +}) // describe("blockHeightEncoded function - suite test block service", () => { // it("blockHeightEncoded - Get height of a block by its Base58-encoded signature ", async () => { From 0c2209abc8385c3c54f47f51b45fc044acef2bf6 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Thu, 21 Apr 2022 22:26:04 -0300 Subject: [PATCH 54/72] update blockHeightEncoded test and function promise --- junit.xml | 14 +++-- src/blockchain/blocks/service.blocks.ts | 80 ++++++++++++++++++------- test/blockchain/blocks/blockOne.test.ts | 37 +++++++----- 3 files changed, 88 insertions(+), 43 deletions(-) diff --git a/junit.xml b/junit.xml index 805e2e0..d1aa007 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -34,9 +34,15 @@ - + + + + + + + - + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index a97878d..103c414 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -194,7 +194,7 @@ export async function blockLast(): Promise { /** * # This function Get children of specified block * - * @type {signature: stringr} + * @type {signature: string} * validation: string * * @returns Promise {@link blockChild} containing the parameter signature. @@ -219,30 +219,64 @@ export async function blockChild( +/** + * # This function Get height of a block by its Base58-encoded signature + * + * @type {signature: string} + * validation: string + * + * @returns Promise {@link blockHeightEncoded} containing the parameter signature. + */ +export async function blockHeightEncoded( + signature: string +): Promise { + const url = `${BASEURL}height/${signature}` + return new Promise(async (resolve) => { + axios + .get(url) + .then((response) => { + resolve(response.data) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) + +} + + + + + +/* + * Get height of a block by its Base58-encoded signature + */ +/* +export async function blockHeightEncoded( + signature: string +): Promise { + const url = `${BASEURL}height/${signature}` + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + + if (response.status === 404) { + const error: IBlockError = { + status: `error`, + message: `block does not exist, try later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) +} + + +*/ -// /* -// * Get height of a block by its Base58-encoded signature -// */ -// export async function blockHeightEncoded( -// signature: string -// ): Promise { -// const url = `${BASEURL}height/${signature}` -// return new Promise(async (resolve, reject) => { -// const response = await axios.get(url) -// if (response.status === 404) { -// const error: IBlockError = { -// status: `error`, -// message: `block does not exist, try later` -// } -// return error -// } else if (response.status === 200) { -// resolve(response.data) -// } else { -// reject(response.data) -// } -// }) -// } // /* // * Get block at specified height without transactions payload diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index f5eacc4..44a01b6 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -199,30 +199,35 @@ describe("blockChild function - suite test block service", () => { // } // expect(action()).rejects.toThrow() + const result = await blocks.blockChild("124afdsfaf") //ok expect(result.isSuccess).toEqual(false) }) }) -// describe("blockHeightEncoded function - suite test block service", () => { -// it("blockHeightEncoded - Get height of a block by its Base58-encoded signature ", async () => { -// const result = await blockHeightEncoded( -// "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" -// ) -// expect(result).toStrictEqual({ -// height: 1887361 -// }) -// }) +describe("blockHeightEncoded function - suite test block service", () => { + it("blockHeightEncoded - Get height of a block by its Base58-encoded signature ", async () => { + const result = await blocks.blockHeightEncoded( + "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" + ) + expect(result).toStrictEqual({ + height: 1887361 + }) + }) -// it("blockHeightEncoded - error 404 ", async () => { -// const result = async () => { -// await blockHeightEncoded("124afdsfaf") -// } + it("blockHeightEncoded - error 404 ", async () => { + // const result = async () => { + // await blocks.blockHeightEncoded("124afdsfaf") + // } -// expect(result()).rejects.toThrow() -// }) -// }) + // expect(result()).rejects.toThrow() + + const result = await blocks.blockHeightEncoded("124afdsfaf") + //ok + expect(result.isSuccess).toEqual(false) + }) +}) // describe("blockAtHeaderOnly function - suite test block service", () => { // it("blockAtHeaderOnly - Get block at specified height without transactions payload ", async () => { From 108ecd06ffc4925114acf9534a35f75abf191e7e Mon Sep 17 00:00:00 2001 From: nunesinc Date: Thu, 21 Apr 2022 22:54:36 -0300 Subject: [PATCH 55/72] update: blockAtHeaderOnly test and function promises --- junit.xml | 14 ++- src/blockchain/blocks/service.blocks.ts | 115 ++++++++++++++---------- test/blockchain/blocks/blockOne.test.ts | 43 ++++----- 3 files changed, 92 insertions(+), 80 deletions(-) diff --git a/junit.xml b/junit.xml index d1aa007..4b2ead8 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -40,9 +40,15 @@ - + + + + + + + - + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 103c414..1f895ef 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -249,67 +249,84 @@ export async function blockHeightEncoded( /* - * Get height of a block by its Base58-encoded signature + * */ -/* -export async function blockHeightEncoded( - signature: string -): Promise { - const url = `${BASEURL}height/${signature}` - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - if (response.status === 404) { - const error: IBlockError = { - status: `error`, - message: `block does not exist, try later` +/** + * # This function Get block at specified height without transactions payload + * + * @type {height: number} + * validation: number + * + * @returns Promise {@link blockAtHeaderOnly} containing the parameter height. + */ +export async function blockAtHeaderOnly( + height: number +): Promise { + const url = `${BASEURL}headers/at/${height}` + + if (typeof height === "string") { + const error: IBlockError = { + isSuccess: false, + response: { + codeError: -1, + message: `block cannot receive string type ` + } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) } - }) + return error + } else { + return new Promise(async (resolve) => { + axios + .get(url) + .then((blockchainResponse) => { + resolve(mountBlock(blockchainResponse)) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) + } } +/* + +export async function blockAtHeaderOnly( + height: number +): Promise { + const url = `${BASEURL}headers/at/${height}` + + if (typeof height === "string") { + const error: IBlockError = { + status: `error`, + message: `block cannot receive string type ` + } + return error + } else { + return new Promise(async (resolve, reject) => { + const response = await axios.get(url) + + if (response.status === 404) { + const error: IBlockError = { + status: `error`, + message: `The requested resource could not be found but may be available again in the future, try later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + }) + } +} + */ -// /* -// * Get block at specified height without transactions payload -// */ -// export async function blockAtHeaderOnly( -// height: number -// ): Promise { -// const url = `${BASEURL}headers/at/${height}` -// if (typeof height === "string") { -// const error: IBlockError = { -// status: `error`, -// message: `block cannot receive string type ` -// } -// return error -// } else { -// return new Promise(async (resolve, reject) => { -// const response = await axios.get(url) - -// if (response.status === 404) { -// const error: IBlockError = { -// status: `error`, -// message: `The requested resource could not be found but may be available again in the future, try later` -// } -// return error -// } else if (response.status === 200) { -// resolve(response.data) -// } else { -// reject(response.data) -// } -// }) -// } -// } // /* // * Get block without transactions payload at specified heights diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 44a01b6..a2f8935 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -229,35 +229,24 @@ describe("blockHeightEncoded function - suite test block service", () => { }) }) -// describe("blockAtHeaderOnly function - suite test block service", () => { -// it("blockAtHeaderOnly - Get block at specified height without transactions payload ", async () => { -// const result = await blockAtHeaderOnly(1) -// expect(result).toStrictEqual({ -// version: 1, -// timestamp: 1528077600000, -// reference: -// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", -// "nxt-consensus": { -// "base-target": 153722867, -// "generation-signature": "11111111111111111111111111111111" -// }, -// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", -// signature: -// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", -// blocksize: 312, -// transactionCount: 2, -// height: 1 -// }) -// }) +describe("blockAtHeaderOnly function - suite test block service", () => { + it("blockAtHeaderOnly - Get block at specified height without transactions payload ", async () => { + const result = await blocks.blockAtHeaderOnly(1) + expect(result.isSuccess).toEqual(true) + }) -// it("blockAtHeaderOnly - error 404 ", async () => { -// const result = async () => { -// await blockAtHeaderOnly(11111111111) -// } + it("blockAtHeaderOnly - error 404 ", async () => { + // const result = async () => { + // await blocks.blockAtHeaderOnly(11111111111) + // } -// expect(result()).rejects.toThrow() -// }) -// }) + // expect(result()).rejects.toThrow() + + const result = await blocks.blockAtHeaderOnly(11111111111) + //ok + expect(result.isSuccess).toEqual(false) + }) +}) // describe("blockSeqHeaderOnly function - suite test block service", () => { // it(" blockSeqHeaderOnly test ", async () => { From 711bb1e3513c2df1d002c931d6f35c137a59a773 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Thu, 21 Apr 2022 23:19:01 -0300 Subject: [PATCH 56/72] update: blockSeqHeaderOnly test and function promise updated --- junit.xml | 16 +++- src/blockchain/blocks/service.blocks.ts | 106 +++++++++++------------ test/blockchain/blocks/blockOne.test.ts | 108 +++++++++++------------- 3 files changed, 117 insertions(+), 113 deletions(-) diff --git a/junit.xml b/junit.xml index 4b2ead8..f3f691b 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -46,9 +46,17 @@ - + + + + + + + + + - + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 1f895ef..68a9005 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -246,12 +246,6 @@ export async function blockHeightEncoded( - - -/* - * - */ - /** * # This function Get block at specified height without transactions payload * @@ -290,69 +284,77 @@ export async function blockAtHeaderOnly( } -/* +/** + * # This function Get block without transactions payload at specified heights + * + * @type {from: number, to: number} + * validation: + * + * max value (from) (to) 1 - 100 (99 difference) + * + * from value < to value + * + * @returns Promise {@link blockSeqHeaderOnly} containing the params from and to. + */ +export async function blockSeqHeaderOnly( + from: number, + to: number +): Promise { + const url = `${BASEURL}headers/seq/${from}/${to}` -export async function blockAtHeaderOnly( - height: number -): Promise { - const url = `${BASEURL}headers/at/${height}` + const Max: boolean = to - from < 100 - if (typeof height === "string") { + if (from > to || Max === false) { const error: IBlockError = { - status: `error`, - message: `block cannot receive string type ` + isSuccess: false, + response: { + codeError: -1, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` } + } return error } else { - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - - if (response.status === 404) { - const error: IBlockError = { - status: `error`, - message: `The requested resource could not be found but may be available again in the future, try later` - } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } + return new Promise(async (resolve) => { + axios + .get(url) + .then((r) => { + resolve(r.data) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) }) + // const response = await axios.get(url) + // return response.data } } -*/ +/* +export async function blockSeqHeaderOnly( + from: number, + to: number +): Promise { + const url = `${BASEURL}headers/seq/${from}/${to}` + const Max: boolean = to - from < 100 + if (from > to || Max === false) { + const error: IBlockError = { + status: `error`, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` + } + return error + } else { + const response = await axios.get(url) + return response.data + } +} -// /* -// * Get block without transactions payload at specified heights -// * max value (from) (to) 1 - 100 (99 difference) -// * from value < to value -// * `https://lunesnode.lunes.io/blocks/headers/seq/${from}/${to} -// */ -// export async function blockSeqHeaderOnly( -// from: number, -// to: number -// ): Promise { -// const url = `${BASEURL}headers/seq/${from}/${to}` +*/ -// const Max: boolean = to - from < 100 -// if (from > to || Max === false) { -// const error: IBlockError = { -// status: `error`, -// message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` -// } -// return error -// } else { -// const response = await axios.get(url) -// return response.data -// } -// } // /* // * Get last block data without transactions payload diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index a2f8935..046993d 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -248,65 +248,59 @@ describe("blockAtHeaderOnly function - suite test block service", () => { }) }) -// describe("blockSeqHeaderOnly function - suite test block service", () => { -// it(" blockSeqHeaderOnly test ", async () => { -// const result = await blockSeqHeaderOnly(1, 2) -// expect(result).toStrictEqual([ -// { -// blocksize: 312, -// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", -// height: 1, -// "nxt-consensus": { -// "base-target": 153722867, -// "generation-signature": "11111111111111111111111111111111" -// }, -// reference: -// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", -// signature: -// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", -// timestamp: 1528077600000, -// transactionCount: 2, -// version: 1 -// }, -// { -// blocksize: 227, -// features: [2], -// generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", -// height: 2, -// "nxt-consensus": { -// "base-target": 153722867, -// "generation-signature": -// "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" -// }, -// reference: -// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", -// signature: -// "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", -// timestamp: 1528116151053, -// transactionCount: 0, -// version: 3 -// } -// ]) -// }) +describe("blockSeqHeaderOnly function - suite test block service", () => { + it(" blockSeqHeaderOnly test ", async () => { + const result = await blocks.blockSeqHeaderOnly(1, 2) + expect(result).toStrictEqual([ + { + blocksize: 312, + generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", + height: 1, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": "11111111111111111111111111111111" + }, + reference: + "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", + signature: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + timestamp: 1528077600000, + transactionCount: 2, + version: 1 + }, + { + blocksize: 227, + features: [2], + generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", + height: 2, + "nxt-consensus": { + "base-target": 153722867, + "generation-signature": + "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" + }, + reference: + "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", + signature: + "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", + timestamp: 1528116151053, + transactionCount: 0, + version: 3 + } + ]) + }) -// it(" blockSeqHeaderOnly - error from > to ", async () => { -// const result = await blockSeqHeaderOnly(2, 1) -// expect(result).toEqual({ -// message: -// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -// status: "error" -// }) -// }) + it(" blockSeqHeaderOnly - error from > to ", async () => { + const result = await blocks.blockSeqHeaderOnly(2, 1) + //ok + expect(result.isSuccess).toEqual(false) + }) -// it(" blockSeqHeaderOnly - Max === false ", async () => { -// const result = await blockSeqHeaderOnly(1, 199) -// expect(result).toEqual({ -// message: -// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -// status: "error" -// }) -// }) -// }) + it(" blockSeqHeaderOnly - Max === false ", async () => { + const result = await blocks.blockSeqHeaderOnly(1, 199) + //ok + expect(result.isSuccess).toEqual(false) + }) +}) // describe(" blockLastHeaderOnly function - suite test block service", () => { // it(" blockLastHeaderOnly test ", async () => { From 862004666844b497a0100d789bd8652c36fded8e Mon Sep 17 00:00:00 2001 From: nunesinc Date: Thu, 21 Apr 2022 23:34:40 -0300 Subject: [PATCH 57/72] update: blockLastHeaderOnly function and test promise updated --- junit.xml | 15 ++-- src/blockchain/blocks/service.blocks.ts | 101 +++++++++++++----------- test/blockchain/blocks/blockOne.test.ts | 16 ++-- 3 files changed, 73 insertions(+), 59 deletions(-) diff --git a/junit.xml b/junit.xml index f3f691b..7b836ec 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -52,11 +52,16 @@ - + + + + + - + + - + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 68a9005..fdc6467 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -294,7 +294,7 @@ export async function blockAtHeaderOnly( * * from value < to value * - * @returns Promise {@link blockSeqHeaderOnly} containing the params from and to. + * @returns Promise {@link blockSeqHeaderOnly} containing the params from and to. */ export async function blockSeqHeaderOnly( from: number, @@ -330,62 +330,71 @@ export async function blockSeqHeaderOnly( } + /* + * + * + * `https://lunesnode.lunes.io/blocks/headers/last` + */ -export async function blockSeqHeaderOnly( - from: number, - to: number -): Promise { - const url = `${BASEURL}headers/seq/${from}/${to}` - const Max: boolean = to - from < 100 +/** + * # Get last block data without transactions payload + * + * If server off line, return error + * + * @returns Promise {@link blockHeightEncoded} . + */ +export async function blockLastHeaderOnly(): Promise { + const url = `${BASEURL}headers/last` - if (from > to || Max === false) { - const error: IBlockError = { - status: `error`, - message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` - } - return error - } else { + return new Promise(async (resolve) => { + axios + .get(url) + .then((blockchainResponse) => { + resolve(mountBlock(blockchainResponse)) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) + + +} + + +/* + +export async function blockLastHeaderOnly(): Promise { + const url = `${BASEURL}headers/last` + + return new Promise(async (resolve, reject) => { const response = await axios.get(url) - return response.data - } + if ( + response.status === 404 || + response.status === 401 || + response.status === 403 || + response.status === 501 + ) { + const error: IBlockError = { + status: `error`, + message: `system error, come back later` + } + return error + } else if (response.status === 200) { + resolve(response.data) + } else { + reject(response.data) + } + //const response = await axios.get(url) + //return response.data + }) } */ -// /* -// * Get last block data without transactions payload -// * -// * `https://lunesnode.lunes.io/blocks/headers/last` -// */ -// export async function blockLastHeaderOnly(): Promise { -// const url = `${BASEURL}headers/last` - -// return new Promise(async (resolve, reject) => { -// const response = await axios.get(url) -// if ( -// response.status === 404 || -// response.status === 401 || -// response.status === 403 || -// response.status === 501 -// ) { -// const error: IBlockError = { -// status: `error`, -// message: `system error, come back later` -// } -// return error -// } else if (response.status === 200) { -// resolve(response.data) -// } else { -// reject(response.data) -// } -// //const response = await axios.get(url) -// //return response.data -// }) -// } // /* // * Get block by a specified Base58-encoded signature diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 046993d..f6c00f9 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -302,14 +302,14 @@ describe("blockSeqHeaderOnly function - suite test block service", () => { }) }) -// describe(" blockLastHeaderOnly function - suite test block service", () => { -// it(" blockLastHeaderOnly test ", async () => { -// const result = await blockLastHeaderOnly() -// //expect(result).toMatchObject(result) -// //https://stackoverflow.com/questions/47754777/jest-how-to-test-for-object-keys-and-values -// expect(result).toHaveProperty("height") // true -// }) -// }) +describe(" blockLastHeaderOnly function - suite test block service", () => { + it(" blockLastHeaderOnly test ", async () => { + const result = await blocks.blockLastHeaderOnly() + + //expect(result).toHaveProperty("height") // true + expect(result.isSuccess).toEqual(true) + }) +}) // describe(" blockSignature - suite test block service", () => { // it("blockSignature test", async () => { From cfd5f623ea3fa3974073b7742af8c55c80a21089 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Fri, 22 Apr 2022 00:13:25 -0300 Subject: [PATCH 58/72] update: blockSignature test and function promises updated --- junit.xml | 11 +++- src/blockchain/blocks/service.blocks.ts | 83 +++++++++++-------------- test/blockchain/blocks/blockOne.test.ts | 52 ++++++---------- 3 files changed, 64 insertions(+), 82 deletions(-) diff --git a/junit.xml b/junit.xml index 7b836ec..d0d844a 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -61,7 +61,12 @@ - + + + + + + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index fdc6467..ab7ea05 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -331,22 +331,43 @@ export async function blockSeqHeaderOnly( -/* +/** + * # Get last block data without transactions payload * - * - * `https://lunesnode.lunes.io/blocks/headers/last` + * If server off line, return error + * + * @returns Promise {@link blockLastHeaderOnly} . */ +export async function blockLastHeaderOnly(): Promise { + const url = `${BASEURL}headers/last` + + return new Promise(async (resolve) => { + axios + .get(url) + .then((blockchainResponse) => { + resolve(mountBlock(blockchainResponse)) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) + + +} + /** - * # Get last block data without transactions payload + * # Get block by a specified Base58-encoded signature * * If server off line, return error * - * @returns Promise {@link blockHeightEncoded} . + * @returns Promise {@link blockSignature} . */ -export async function blockLastHeaderOnly(): Promise { - const url = `${BASEURL}headers/last` +export async function blockSignature( + signature: string +): Promise { + const url = `${BASEURL}signature/${signature}` return new Promise(async (resolve) => { axios @@ -363,22 +384,20 @@ export async function blockLastHeaderOnly(): Promise { } -/* -export async function blockLastHeaderOnly(): Promise { - const url = `${BASEURL}headers/last` +/* +export async function blockSignature( + signature: string +): Promise { + const url = `${BASEURL}signature/${signature}` return new Promise(async (resolve, reject) => { const response = await axios.get(url) - if ( - response.status === 404 || - response.status === 401 || - response.status === 403 || - response.status === 501 - ) { + + if (response.status === 404) { const error: IBlockError = { status: `error`, - message: `system error, come back later` + message: `block does not exist, try later` } return error } else if (response.status === 200) { @@ -386,42 +405,14 @@ export async function blockLastHeaderOnly(): Promise { } else { reject(response.data) } - //const response = await axios.get(url) - //return response.data }) } -*/ - - +*/ -// /* -// * Get block by a specified Base58-encoded signature -// * -// * https://lunesnode.lunes.io/blocks/signature/${signature}` -// */ -// export async function blockSignature( -// signature: string -// ): Promise { -// const url = `${BASEURL}signature/${signature}` -// return new Promise(async (resolve, reject) => { -// const response = await axios.get(url) -// if (response.status === 404) { -// const error: IBlockError = { -// status: `error`, -// message: `block does not exist, try later` -// } -// return error -// } else if (response.status === 200) { -// resolve(response.data) -// } else { -// reject(response.data) -// } -// }) -// } // /* // * Get genesis block data diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index f6c00f9..4e9031e 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -311,41 +311,27 @@ describe(" blockLastHeaderOnly function - suite test block service", () => { }) }) -// describe(" blockSignature - suite test block service", () => { -// it("blockSignature test", async () => { -// const result = await blockSignature( -// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi" -// ) -// expect(result).toStrictEqual({ -// version: 3, -// timestamp: 1528116159255, -// reference: -// "5f6NF1TUgJ5xHyGdys8T19iETr4dSTo182r82Z4RTRzYj1wAYBRLTJhsBiRWHDTNZWKsqF4j3bAH5Ng1YxXCCLik", -// "nxt-consensus": { -// "base-target": 112701916, -// "generation-signature": -// "GrEEg2Uc25GfVG5Cp4xXLgvB4hYYE2KLrwLEvg48z2sT" -// }, -// features: [2], -// generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", -// signature: -// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", -// blocksize: 227, -// transactionCount: 0, -// fee: 0, -// transactions: [], -// height: 10 -// }) -// }) -// it("blockSignature - error 404 ", async () => { -// const result = async () => { -// await blockChild("124afdsfaf") -// } +describe(" blockSignature - suite test block service", () => { + it("blockSignature test", async () => { + const result = await blocks.blockSignature( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi" + ) + expect(result.isSuccess).toEqual(true) -// expect(result()).rejects.toThrow() -// }) -// }) + }) + + it("blockSignature - error 404 ", async () => { + // const result = async () => { + // await blocks.blockSignature("124afdsfaf") + // } + + // expect(result()).rejects.toThrow() + + const result = await blocks.blockSignature("124afdsfaf") + expect(result.isSuccess).toEqual(false) + }) +}) // describe(" blockFirst - suite test block service", () => { // it("blockFirst test ", async () => { From 55a13502e638ed631364ed9f4773e70f36f85f01 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Fri, 22 Apr 2022 00:29:08 -0300 Subject: [PATCH 59/72] update: blockFirst test and function promises updated --- junit.xml | 12 ++-- src/blockchain/blocks/service.blocks.ts | 75 ++++++++++++------------- test/blockchain/blocks/blockOne.test.ts | 52 +++-------------- 3 files changed, 52 insertions(+), 87 deletions(-) diff --git a/junit.xml b/junit.xml index d0d844a..60b0468 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -64,9 +64,13 @@ - + + + + + - + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index ab7ea05..6d59684 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -385,19 +385,46 @@ export async function blockSignature( +/** + * # Get genesis block data + * + * If server off line, return error + * + * @returns Promise {@link bblockFirst} . + */ +export async function blockFirst(): Promise { + const url = `${BASEURL}first` + + return new Promise(async (resolve) => { + axios + .get(url) + .then((blockchainResponse) => { + resolve(mountBlock(blockchainResponse)) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) + +} + + /* -export async function blockSignature( - signature: string -): Promise { - const url = `${BASEURL}signature/${signature}` + +export async function blockFirst(): Promise { + const url = `${BASEURL}first` return new Promise(async (resolve, reject) => { const response = await axios.get(url) - - if (response.status === 404) { + if ( + response.status === 404 || + response.status === 401 || + response.status === 403 || + response.status === 501 + ) { const error: IBlockError = { status: `error`, - message: `block does not exist, try later` + message: `system error, come back later` } return error } else if (response.status === 200) { @@ -405,6 +432,8 @@ export async function blockSignature( } else { reject(response.data) } + //const response = await axios.get(url) + //return response.data }) } @@ -413,38 +442,6 @@ export async function blockSignature( - -// /* -// * Get genesis block data -// * `https://lunesnode.lunes.io/blocks/first -// * -// */ -// export async function blockFirst(): Promise { -// const url = `${BASEURL}first` - -// return new Promise(async (resolve, reject) => { -// const response = await axios.get(url) -// if ( -// response.status === 404 || -// response.status === 401 || -// response.status === 403 || -// response.status === 501 -// ) { -// const error: IBlockError = { -// status: `error`, -// message: `system error, come back later` -// } -// return error -// } else if (response.status === 200) { -// resolve(response.data) -// } else { -// reject(response.data) -// } -// //const response = await axios.get(url) -// //return response.data -// }) -// } - // /* // * Get list of blocks generated by specified address // * diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 4e9031e..6cbbba8 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -333,50 +333,14 @@ describe(" blockSignature - suite test block service", () => { }) }) -// describe(" blockFirst - suite test block service", () => { -// it("blockFirst test ", async () => { -// const result = await blockFirst() -// expect(result).toStrictEqual({ -// blocksize: 312, -// fee: 0, -// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", -// height: 1, -// "nxt-consensus": { -// "base-target": 153722867, -// "generation-signature": "11111111111111111111111111111111" -// }, -// reference: -// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", -// signature: -// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", -// timestamp: 1528077600000, -// transactionCount: 2, -// transactions: [ -// { -// amount: 5072853761500800, -// fee: 0, -// id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", -// recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", -// signature: -// "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", -// timestamp: 1528077600000, -// type: 1 -// }, -// { -// amount: 10000000000000000, -// fee: 0, -// id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", -// recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", -// signature: -// "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", -// timestamp: 1528077600000, -// type: 1 -// } -// ], -// version: 1 -// }) -// }) -// }) +describe(" blockFirst - suite test block service", () => { + it("blockFirst test ", async () => { + + const result = await blocks.blockFirst() + expect(result.isSuccess).toEqual(true) + + }) +}) // describe(" blockAddress - suite test block service", () => { // it("blockAddress test ", async () => { From 6186f62ef75e1452880e53f7d1049fbad7a836bb Mon Sep 17 00:00:00 2001 From: nunesinc Date: Fri, 22 Apr 2022 00:51:17 -0300 Subject: [PATCH 60/72] update: blockAddress function and test promises updated --- junit.xml | 13 ++- src/blockchain/blocks/service.blocks.ts | 88 ++++++++------------ test/blockchain/blocks/blockOne.test.ts | 106 +++++++++++------------- 3 files changed, 95 insertions(+), 112 deletions(-) diff --git a/junit.xml b/junit.xml index 60b0468..c33876e 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -70,7 +70,14 @@ - + + + + + + + + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 6d59684..9731bc0 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -409,61 +409,45 @@ export async function blockFirst(): Promise { } -/* - -export async function blockFirst(): Promise { - const url = `${BASEURL}first` - - return new Promise(async (resolve, reject) => { - const response = await axios.get(url) - if ( - response.status === 404 || - response.status === 401 || - response.status === 403 || - response.status === 501 - ) { - const error: IBlockError = { - status: `error`, - message: `system error, come back later` - } - return error - } else if (response.status === 200) { - resolve(response.data) - } else { - reject(response.data) - } - //const response = await axios.get(url) - //return response.data - }) -} -*/ - +/** + * # This function Get list of blocks generated by specified address + * + * @type {address: string, from: number, to: number} + * + * @returns Promise {@link blockAddress} containing the params address, from and to. + */ +export async function blockAddress( + address: string, + from: number, + to: number +): Promise { + const url = `${BASEURL}address/${address}/${from}/${to}` + const Max: boolean = to - from < 100 -// /* -// * Get list of blocks generated by specified address -// * -// * https://lunesnode.lunes.io/blocks/address/${address}/${from}/${to} -// */ -// export async function blockAddress( -// address: string, -// from: number, -// to: number -// ): Promise { -// const url = `${BASEURL}address/${address}/${from}/${to}` + if (from > to || Max === false) { + const error: IBlockError = { + isSuccess: false, + response: { + codeError: -1, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` + } + } + return error + } else { + return new Promise(async (resolve) => { + axios + .get(url) + .then((response) => { + resolve(response.data) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) -// const Max: boolean = to - from < 100 -// if (from > to || Max === false) { -// const error: IBlockError = { -// status: `error`, -// message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` -// } -// return error -// } else { -// const response = await axios.get(url) -// return response.data -// } -// } + } +} diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 6cbbba8..557720b 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -342,60 +342,52 @@ describe(" blockFirst - suite test block service", () => { }) }) -// describe(" blockAddress - suite test block service", () => { -// it("blockAddress test ", async () => { -// const result = await blockAddress( -// "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", -// 1889863, -// 1889864 -// ) -// expect(result).toStrictEqual([ -// { -// blocksize: 225, -// features: [], -// fee: 0, -// generator: "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", -// height: 1889864, -// "nxt-consensus": { -// "base-target": 51, -// "generation-signature": -// "9iHAgT78TCbzv5HfhxVzzRnM132n45UGqGbvH59FvBoB" -// }, -// reference: -// "9zvED5KcnvkYsKLFxiCXQDiEsyXrKdtVH23b3qPt2FhAh3BrhUaZbqtndYWCbn4GmPrZvDbwY1vwqrxdgyazGfH", -// signature: -// "353wWZjKZzLiYKkVbgXLrxsK7dzYo9pEgw2pV31rXLnb1EdZbraZThrpg92swhrtQh1J353rPesvcB1mMEAoQtzP", -// timestamp: 1648218628090, -// transactionCount: 0, -// transactions: [], -// version: 3 -// } -// ]) -// }) - -// it(" blockAddress - error from > to ", async () => { -// const result = await blockAddress( -// "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", -// 1889864, -// 1889863 -// ) -// expect(result).toEqual({ -// message: -// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -// status: "error" -// }) -// }) - -// it(" blockAddress - error Max === false ", async () => { -// const result = await blockAddress( -// "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", -// 1889863, -// 1889999 -// ) -// expect(result).toEqual({ -// message: -// "Too big sequences requested OR {from} cannot be bigger than {to}, change it", -// status: "error" -// }) -// }) -// }) +describe(" blockAddress - suite test block service", () => { + it("blockAddress test ", async () => { + const result = await blocks.blockAddress( + "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", + 1889863, + 1889864 + ) + expect(result).toStrictEqual([ + { + blocksize: 225, + features: [], + fee: 0, + generator: "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", + height: 1889864, + "nxt-consensus": { + "base-target": 51, + "generation-signature": + "9iHAgT78TCbzv5HfhxVzzRnM132n45UGqGbvH59FvBoB" + }, + reference: + "9zvED5KcnvkYsKLFxiCXQDiEsyXrKdtVH23b3qPt2FhAh3BrhUaZbqtndYWCbn4GmPrZvDbwY1vwqrxdgyazGfH", + signature: + "353wWZjKZzLiYKkVbgXLrxsK7dzYo9pEgw2pV31rXLnb1EdZbraZThrpg92swhrtQh1J353rPesvcB1mMEAoQtzP", + timestamp: 1648218628090, + transactionCount: 0, + transactions: [], + version: 3 + } + ]) + }) + + it(" blockAddress - error from > to ", async () => { + const result = await blocks.blockAddress( + "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", + 1889864, + 1889863 + ) + expect(result.isSuccess).toEqual(false) + }) + + it(" blockAddress - error Max === false ", async () => { + const result = await blocks.blockAddress( + "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", + 1889863, + 1889999 + ) + expect(result.isSuccess).toEqual(false) + }) +}) From a42df3d8d42d28bdc3b1b463c4540e99f7dee47b Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Fri, 22 Apr 2022 10:56:35 -0300 Subject: [PATCH 61/72] update: review by @olivmath --- junit.xml | 248 ++++++-- src/blockchain/blocks/block.types.ts | 17 +- src/blockchain/blocks/service.blocks.ts | 800 +++++++++++------------- src/blockchain/service.blockchain.ts | 11 + src/index.ts | 2 + test/blockchain/blocks/blockOne.test.ts | 660 ++++++++++--------- 6 files changed, 928 insertions(+), 810 deletions(-) create mode 100644 src/blockchain/service.blockchain.ts diff --git a/junit.xml b/junit.xml index c33876e..9031e53 100644 --- a/junit.xml +++ b/junit.xml @@ -1,83 +1,225 @@ - - - - + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/src/blockchain/blocks/block.types.ts b/src/blockchain/blocks/block.types.ts index 0a9ccd6..0e67c0a 100644 --- a/src/blockchain/blocks/block.types.ts +++ b/src/blockchain/blocks/block.types.ts @@ -46,17 +46,25 @@ export interface IBlockError { } } -export function mountBlock(blockchainResponse: AxiosResponse): IBlock { +export function mountBlock( + blockchainResponse: AxiosResponse +): IBlock { let block: IBlock = { isSuccess: true, header: { nxtConsensus: { - baseTarget: blockchainResponse.data["nxt-consensus"]["base-target"], + baseTarget: + blockchainResponse.data["nxt-consensus"]["base-target"], generationSignature: - blockchainResponse.data["nxt-consensus"]["generation-signature"] + blockchainResponse.data["nxt-consensus"][ + "generation-signature" + ] }, transactionCount: blockchainResponse.data.transactionCount, - features: blockchainResponse.data.features != undefined ? blockchainResponse.data.features : [], + features: + blockchainResponse.data.features != undefined + ? blockchainResponse.data.features + : [], timestamp: blockchainResponse.data.timestamp, reference: blockchainResponse.data.reference, generator: blockchainResponse.data.generator, @@ -81,4 +89,3 @@ export function mountErr(blockchainError: string): IBlockError { } } } - diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 9731bc0..b2ff9ab 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -3,13 +3,12 @@ * @author Lunes Platform */ -import axios from "axios" import { mountBlock, IBlock, IBlockError, mountErr } from "./block.types" - -const BASEURL = "https://lunesnode.lunes.io/blocks/" +import { lunesNode } from "../service.blockchain" /** * # This function get blockchain `height` e return a full block + * {@link byHeight} * * ## Example * @@ -18,15 +17,11 @@ const BASEURL = "https://lunesnode.lunes.io/blocks/" * * const block = lunesjs.blockchain.blocks.height(10) * ``` - * @type {height: number} - * validation: different from zero number, big number and string type - * @returns Promise {@link blockByHeight} containing the parameter height. + * @param {number} height - number of block in blockchain + * should be greater than 0 and less than 2147483647 + * @returns Promise */ -export async function blockByHeight( - height: number -): Promise { - const url = `${BASEURL}at/${height}` - +async function byHeight(height: number): Promise { const i32Max = 2147483647 if (height <= 0 || height >= i32Max) { @@ -39,415 +34,384 @@ export async function blockByHeight( } return error } else { - return new Promise(async (resolve) => { - axios - .get(url) - .then((blockchainResponse) => { - resolve(mountBlock(blockchainResponse)) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - } -} - - -/** - * # This function get a blockchain height - * - * @returns Promise {@link blockHeight} . - * - * If server off line, return error - */ -export async function actualHeight(): Promise { - const url = `${BASEURL}height` - - return new Promise(async (resolve) => { - axios - .get(url) - .then((r) => { - resolve(r.data.height) - }) - .catch(() => { - resolve(-1) - }) - }) - -} - -/** - * # Average delay in milliseconds between last blockNum blocks starting from block with signature - * - * @type {signature: string, blockNum: number } - * - * @returns Promise {@link blockAverageDelay} containing the paramms signature and blockNum. - * - * --- signature = signature block - Base58-encoded signature - * - * --- blockNum = 1 to 9 - Number of blocks to count delay - */ - - export async function blockAverageDelay( - signature: string, - blockNum: number -): Promise { - const url = `${BASEURL}delay/${signature}/${blockNum}` - - if (blockNum <= 0 || blockNum > 9) { - const error: IBlockError = { - isSuccess: false, - response: { - codeError: -1, - message: `the blockNum cannot be less than or equal to zero or greater than nine` - } - } - return error - } else { - return new Promise(async (resolve) => { - axios - .get(url) - .then((r) => { - resolve(r.data.delay) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - } -} - - - -/** - * # This function Get block at specified heights - * - * @type {from: number, to: number} - * validation: max value (from) (to) 1 - 100 (99 difference) - * - * from value < to value - * - * @returns Promise {@link blockSeq} containing the params from and to. - */ -export async function blockSeq( - from: number, - to: number -): Promise { - const url = `${BASEURL}seq/${from}/${to}` - //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` - const Max: boolean = to - from < 100 - - if (from > to || Max === false) { - const error: IBlockError = { - isSuccess: false, - response: { - codeError: -1, - message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` - } - } - return error - } else { - //const response = await axios.get(url) - //return response.data - return new Promise(async (resolve) => { - axios - .get(url) - .then((r) => { - resolve(r.data) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - } -} - - - - - -/** - * # This function Get last block data - * - * If server off line, return error - * - * @returns Promise {@link blockLast} , no params. - */ -export async function blockLast(): Promise { - const url = `${BASEURL}last` - - return new Promise(async (resolve) => { - axios - .get(url) - .then((blockchainResponse) => { - resolve(mountBlock(blockchainResponse)) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - - -} - - -/** - * # This function Get children of specified block - * - * @type {signature: string} - * validation: string - * - * @returns Promise {@link blockChild} containing the parameter signature. - */ -export async function blockChild( - signature: string -): Promise { - const url = `${BASEURL}child/${signature}` - - return new Promise(async (resolve) => { - axios - .get(url) - .then((blockchainResponse) => { - resolve(mountBlock(blockchainResponse)) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - -} - - - -/** - * # This function Get height of a block by its Base58-encoded signature - * - * @type {signature: string} - * validation: string - * - * @returns Promise {@link blockHeightEncoded} containing the parameter signature. - */ -export async function blockHeightEncoded( - signature: string -): Promise { - const url = `${BASEURL}height/${signature}` - return new Promise(async (resolve) => { - axios - .get(url) - .then((response) => { - resolve(response.data) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - -} - - - -/** - * # This function Get block at specified height without transactions payload - * - * @type {height: number} - * validation: number - * - * @returns Promise {@link blockAtHeaderOnly} containing the parameter height. - */ -export async function blockAtHeaderOnly( - height: number -): Promise { - const url = `${BASEURL}headers/at/${height}` - - if (typeof height === "string") { - const error: IBlockError = { - isSuccess: false, - response: { - codeError: -1, - message: `block cannot receive string type ` - + lunesNode.interceptors.response.use( + (blockchainResponse) => { + return Promise.resolve(mountBlock(blockchainResponse)) + }, + (blockchainError) => { + console.log(blockchainError) + return Promise.resolve(mountErr(blockchainError)) } - } - return error - } else { - return new Promise(async (resolve) => { - axios - .get(url) - .then((blockchainResponse) => { - resolve(mountBlock(blockchainResponse)) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - } -} - - -/** - * # This function Get block without transactions payload at specified heights - * - * @type {from: number, to: number} - * validation: - * - * max value (from) (to) 1 - 100 (99 difference) - * - * from value < to value - * - * @returns Promise {@link blockSeqHeaderOnly} containing the params from and to. - */ -export async function blockSeqHeaderOnly( - from: number, - to: number -): Promise { - const url = `${BASEURL}headers/seq/${from}/${to}` - - const Max: boolean = to - from < 100 - - if (from > to || Max === false) { - const error: IBlockError = { - isSuccess: false, - response: { - codeError: -1, - message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` - } + ) + return lunesNode.get(`/blocks/at/${height}`) } - return error - } else { - return new Promise(async (resolve) => { - axios - .get(url) - .then((r) => { - resolve(r.data) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - // const response = await axios.get(url) - // return response.data - } -} - - - -/** - * # Get last block data without transactions payload - * - * If server off line, return error - * - * @returns Promise {@link blockLastHeaderOnly} . - */ -export async function blockLastHeaderOnly(): Promise { - const url = `${BASEURL}headers/last` - - return new Promise(async (resolve) => { - axios - .get(url) - .then((blockchainResponse) => { - resolve(mountBlock(blockchainResponse)) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - - -} - - - -/** - * # Get block by a specified Base58-encoded signature - * - * If server off line, return error - * - * @returns Promise {@link blockSignature} . - */ -export async function blockSignature( - signature: string -): Promise { - const url = `${BASEURL}signature/${signature}` - - return new Promise(async (resolve) => { - axios - .get(url) - .then((blockchainResponse) => { - resolve(mountBlock(blockchainResponse)) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - - } - - -/** - * # Get genesis block data - * - * If server off line, return error - * - * @returns Promise {@link bblockFirst} . - */ -export async function blockFirst(): Promise { - const url = `${BASEURL}first` - - return new Promise(async (resolve) => { - axios - .get(url) - .then((blockchainResponse) => { - resolve(mountBlock(blockchainResponse)) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - -} - - - - -/** - * # This function Get list of blocks generated by specified address - * - * @type {address: string, from: number, to: number} - * - * @returns Promise {@link blockAddress} containing the params address, from and to. - */ -export async function blockAddress( - address: string, - from: number, - to: number -): Promise { - const url = `${BASEURL}address/${address}/${from}/${to}` - - const Max: boolean = to - from < 100 - - if (from > to || Max === false) { - const error: IBlockError = { - isSuccess: false, - response: { - codeError: -1, - message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` - } - } - return error - } else { - return new Promise(async (resolve) => { - axios - .get(url) - .then((response) => { - resolve(response.data) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) - - - } +// /** +// * # This function get a blockchain height +// * +// * @returns Promise {@link blockHeight} . +// * +// * If server off line, return error +// */ +// export async function actualHeight(): Promise { +// const url = `${BASEURL}height` + +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((r) => { +// resolve(r.data.height) +// }) +// .catch(() => { +// resolve(-1) +// }) +// }) +// } + +// /** +// * # Average delay in milliseconds between last blockNum blocks starting from block with signature +// * +// * @type {signature: string, blockNum: number } +// * +// * @returns Promise {@link blockAverageDelay} containing the paramms signature and blockNum. +// * +// * --- signature = signature block - Base58-encoded signature +// * +// * --- blockNum = 1 to 9 - Number of blocks to count delay +// */ + +// export async function blockAverageDelay( +// signature: string, +// blockNum: number +// ): Promise { +// const url = `${BASEURL}delay/${signature}/${blockNum}` + +// if (blockNum <= 0 || blockNum > 9) { +// const error: IBlockError = { +// isSuccess: false, +// response: { +// codeError: -1, +// message: `the blockNum cannot be less than or equal to zero or greater than nine` +// } +// } +// return error +// } else { +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((r) => { +// resolve(r.data.delay) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// } +// } + +// /** +// * # This function Get block at specified heights +// * +// * @type {from: number, to: number} +// * validation: max value (from) (to) 1 - 100 (99 difference) +// * +// * from value < to value +// * +// * @returns Promise {@link blockSeq} containing the params from and to. +// */ +// export async function blockSeq( +// from: number, +// to: number +// ): Promise { +// const url = `${BASEURL}seq/${from}/${to}` +// //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` +// const Max: boolean = to - from < 100 + +// if (from > to || Max === false) { +// const error: IBlockError = { +// isSuccess: false, +// response: { +// codeError: -1, +// message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` +// } +// } +// return error +// } else { +// //const response = await axios.get(url) +// //return response.data +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((r) => { +// resolve(r.data) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// } +// } + +// /** +// * # This function Get last block data +// * +// * If server off line, return error +// * +// * @returns Promise {@link blockLast} , no params. +// */ +// export async function blockLast(): Promise { +// const url = `${BASEURL}last` + +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((blockchainResponse) => { +// resolve(mountBlock(blockchainResponse)) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// } + +// /** +// * # This function Get children of specified block +// * +// * @type {signature: string} +// * validation: string +// * +// * @returns Promise {@link blockChild} containing the parameter signature. +// */ +// export async function blockChild( +// signature: string +// ): Promise { +// const url = `${BASEURL}child/${signature}` + +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((blockchainResponse) => { +// resolve(mountBlock(blockchainResponse)) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// } + +// /** +// * # This function Get height of a block by its Base58-encoded signature +// * +// * @type {signature: string} +// * validation: string +// * +// * @returns Promise {@link blockHeightEncoded} containing the parameter signature. +// */ +// export async function blockHeightEncoded( +// signature: string +// ): Promise { +// const url = `${BASEURL}height/${signature}` +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((response) => { +// resolve(response.data) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// } + +// /** +// * # This function Get block at specified height without transactions payload +// * +// * @type {height: number} +// * validation: number +// * +// * @returns Promise {@link blockAtHeaderOnly} containing the parameter height. +// */ +// export async function blockAtHeaderOnly( +// height: number +// ): Promise { +// const url = `${BASEURL}headers/at/${height}` + +// if (typeof height === "string") { +// const error: IBlockError = { +// isSuccess: false, +// response: { +// codeError: -1, +// message: `block cannot receive string type ` +// } +// } +// return error +// } else { +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((blockchainResponse) => { +// resolve(mountBlock(blockchainResponse)) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// } +// } + +// /** +// * # This function Get block without transactions payload at specified heights +// * +// * @type {from: number, to: number} +// * validation: +// * +// * max value (from) (to) 1 - 100 (99 difference) +// * +// * from value < to value +// * +// * @returns Promise {@link blockSeqHeaderOnly} containing the params from and to. +// */ +// export async function blockSeqHeaderOnly( +// from: number, +// to: number +// ): Promise { +// const url = `${BASEURL}headers/seq/${from}/${to}` + +// const Max: boolean = to - from < 100 + +// if (from > to || Max === false) { +// const error: IBlockError = { +// isSuccess: false, +// response: { +// codeError: -1, +// message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` +// } +// } +// return error +// } else { +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((r) => { +// resolve(r.data) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// // const response = await axios.get(url) +// // return response.data +// } +// } + +// /** +// * # Get last block data without transactions payload +// * +// * If server off line, return error +// * +// * @returns Promise {@link blockLastHeaderOnly} . +// */ +// export async function blockLastHeaderOnly(): Promise { +// const url = `${BASEURL}headers/last` + +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((blockchainResponse) => { +// resolve(mountBlock(blockchainResponse)) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// } + +// /** +// * # Get block by a specified Base58-encoded signature +// * +// * If server off line, return error +// * +// * @returns Promise {@link blockSignature} . +// */ +// export async function blockSignature( +// signature: string +// ): Promise { +// const url = `${BASEURL}signature/${signature}` + +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((blockchainResponse) => { +// resolve(mountBlock(blockchainResponse)) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// } + +// /** +// * # Get genesis block data +// * +// * If server off line, return error +// * +// * @returns Promise {@link bblockFirst} . +// */ +// export async function blockFirst(): Promise { +// const url = `${BASEURL}first` + +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((blockchainResponse) => { +// resolve(mountBlock(blockchainResponse)) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// } + +// /** +// * # This function Get list of blocks generated by specified address +// * +// * @type {address: string, from: number, to: number} +// * +// * @returns Promise {@link blockAddress} containing the params address, from and to. +// */ +// export async function blockAddress( +// address: string, +// from: number, +// to: number +// ): Promise { +// const url = `${BASEURL}address/${address}/${from}/${to}` + +// const Max: boolean = to - from < 100 + +// if (from > to || Max === false) { +// const error: IBlockError = { +// isSuccess: false, +// response: { +// codeError: -1, +// message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` +// } +// } +// return error +// } else { +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((response) => { +// resolve(response.data) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// } +// } + +export const blocks = { + byHeight } diff --git a/src/blockchain/service.blockchain.ts b/src/blockchain/service.blockchain.ts new file mode 100644 index 0000000..64ac491 --- /dev/null +++ b/src/blockchain/service.blockchain.ts @@ -0,0 +1,11 @@ +import { blocks } from "./blocks/service.blocks" +import axios from "axios" + +export const lunesNode = axios.create({ + baseURL: "https://lunesnode.lunes.io", + timeout: 1000 +}) + +export const blockchain = { + blocks +} diff --git a/src/index.ts b/src/index.ts index 99d12ed..276495f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,9 +1,11 @@ import { transferTokenFactory } from "./tx/transfer/transfer.service" +import { blockchain } from "./blockchain/service.blockchain" import { walletFactory } from "./wallet/wallet.service" import { crypto } from "./utils/crypto" export default { transferTokenFactory, walletFactory, + blockchain, crypto } diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 557720b..1d27471 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -1,21 +1,20 @@ -// import { IBlockError } from "../../../src/server/blocks/block.types" -import * as blocks from "../../../src/blockchain/blocks/service.blocks" +import lunesjs from "../../../src/index" describe("blockByHeight function- suite test block service", () => { it("blockByHeight - block testing error, passing -1 number", async () => { - const result = await blocks.blockByHeight(-1) + const result = await lunesjs.blockchain.blocks.byHeight(-1) expect(result.isSuccess).toEqual(false) }) it("blockbyHeight - block testing error, passing i32Max ", async () => { - const result = await blocks.blockByHeight(2147483648) + const result = await lunesjs.blockchain.blocks.byHeight(2147483648) expect(result.isSuccess).toEqual(false) }) it("blockByHeight- receive number 10 param to get fetch", async () => { - const result = await blocks.blockByHeight(1) + const result = await lunesjs.blockchain.blocks.byHeight(1) expect(result).toEqual({ isSuccess: true, header: { @@ -62,332 +61,325 @@ describe("blockByHeight function- suite test block service", () => { }) }) - -describe("actualHeight function - suite test block service", () => { - it("actualHeight - see height block from node ", async () => { - const result = await blocks.actualHeight() - expect(result).toBeGreaterThan(0) - }) -}) - -describe("blockAverageDelay function - suite test block service", () => { - it("blockAverageDelay - see Average delay ", async () => { - const result = await blocks.blockAverageDelay( - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - 1 - ) - expect(result).toStrictEqual(1011) - }) - - it("blockAverageDelay - blockNum >9 error ", async () => { - const result = await blocks.blockAverageDelay( - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - 10 - ) - expect(result.isSuccess).toEqual(false) - }) -}) - -describe("blockSeq function - suite test block service", () => { - it("blockSeq - Get block at specified heights ", async () => { - const result = await blocks.blockSeq(1, 2) - expect(result).toStrictEqual([ - { - blocksize: 312, - fee: 0, - generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - height: 1, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - reference: - "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - signature: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - timestamp: 1528077600000, - transactionCount: 2, - transactions: [ - { - amount: 5072853761500800, - fee: 0, - id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - signature: - "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", - timestamp: 1528077600000, - type: 1 - }, - { - amount: 10000000000000000, - fee: 0, - id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", - signature: - "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", - timestamp: 1528077600000, - type: 1 - } - ], - version: 1 - }, - { - blocksize: 227, - features: [2], - fee: 0, - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - height: 2, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": - "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" - }, - reference: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - signature: - "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", - timestamp: 1528116151053, - transactionCount: 0, - transactions: [], - version: 3 - } - ]) - }) - - it("blockSeq - from > to error ", async () => { - const result = await blocks.blockSeq(2, 1) - expect(result.isSuccess).toEqual(false) - }) - - it("blockSeq - big sequences ", async () => { - const result = await blocks.blockSeq(1, 101) - expect(result.isSuccess).toEqual(false) - }) - - it("blockSeq - max === false ", async () => { - const result = await blocks.blockSeq(1, 200) - expect(result.isSuccess).toEqual(false) - }) -}) - -describe("blockLast function - suite test block service", () => { - it("blockLast - Get last block data ", async () => { - const result = await blocks.blockLast() - - //ok - expect(result.isSuccess).toEqual(true) - - //see received - //expect(result).toStrictEqual("") - - }) -}) - -describe("blockChild function - suite test block service", () => { - it("blockChild - Get children of specified block ", async () => { - const result = await blocks.blockChild( - "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" - ) - //ok - expect(result.isSuccess).toEqual(true) - }) - - it("blockChild - error 404 ", async () => { - - // const action = async () => { - // await blocks.blockChild("124afdsfaf") - // } - - // expect(action()).rejects.toThrow() - - const result = await blocks.blockChild("124afdsfaf") - //ok - expect(result.isSuccess).toEqual(false) - }) -}) - -describe("blockHeightEncoded function - suite test block service", () => { - it("blockHeightEncoded - Get height of a block by its Base58-encoded signature ", async () => { - const result = await blocks.blockHeightEncoded( - "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" - ) - expect(result).toStrictEqual({ - height: 1887361 - }) - }) - - it("blockHeightEncoded - error 404 ", async () => { - // const result = async () => { - // await blocks.blockHeightEncoded("124afdsfaf") - // } - - // expect(result()).rejects.toThrow() - - const result = await blocks.blockHeightEncoded("124afdsfaf") - //ok - expect(result.isSuccess).toEqual(false) - }) -}) - -describe("blockAtHeaderOnly function - suite test block service", () => { - it("blockAtHeaderOnly - Get block at specified height without transactions payload ", async () => { - const result = await blocks.blockAtHeaderOnly(1) - expect(result.isSuccess).toEqual(true) - }) - - it("blockAtHeaderOnly - error 404 ", async () => { - // const result = async () => { - // await blocks.blockAtHeaderOnly(11111111111) - // } - - // expect(result()).rejects.toThrow() - - const result = await blocks.blockAtHeaderOnly(11111111111) - //ok - expect(result.isSuccess).toEqual(false) - }) -}) - -describe("blockSeqHeaderOnly function - suite test block service", () => { - it(" blockSeqHeaderOnly test ", async () => { - const result = await blocks.blockSeqHeaderOnly(1, 2) - expect(result).toStrictEqual([ - { - blocksize: 312, - generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", - height: 1, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": "11111111111111111111111111111111" - }, - reference: - "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", - signature: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - timestamp: 1528077600000, - transactionCount: 2, - version: 1 - }, - { - blocksize: 227, - features: [2], - generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", - height: 2, - "nxt-consensus": { - "base-target": 153722867, - "generation-signature": - "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" - }, - reference: - "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", - signature: - "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", - timestamp: 1528116151053, - transactionCount: 0, - version: 3 - } - ]) - }) - - it(" blockSeqHeaderOnly - error from > to ", async () => { - const result = await blocks.blockSeqHeaderOnly(2, 1) - //ok - expect(result.isSuccess).toEqual(false) - }) - - it(" blockSeqHeaderOnly - Max === false ", async () => { - const result = await blocks.blockSeqHeaderOnly(1, 199) - //ok - expect(result.isSuccess).toEqual(false) - }) -}) - -describe(" blockLastHeaderOnly function - suite test block service", () => { - it(" blockLastHeaderOnly test ", async () => { - const result = await blocks.blockLastHeaderOnly() - - //expect(result).toHaveProperty("height") // true - expect(result.isSuccess).toEqual(true) - }) -}) - - -describe(" blockSignature - suite test block service", () => { - it("blockSignature test", async () => { - const result = await blocks.blockSignature( - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi" - ) - expect(result.isSuccess).toEqual(true) - - }) - - it("blockSignature - error 404 ", async () => { - // const result = async () => { - // await blocks.blockSignature("124afdsfaf") - // } - - // expect(result()).rejects.toThrow() - - const result = await blocks.blockSignature("124afdsfaf") - expect(result.isSuccess).toEqual(false) - }) -}) - -describe(" blockFirst - suite test block service", () => { - it("blockFirst test ", async () => { - - const result = await blocks.blockFirst() - expect(result.isSuccess).toEqual(true) - - }) -}) - -describe(" blockAddress - suite test block service", () => { - it("blockAddress test ", async () => { - const result = await blocks.blockAddress( - "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - 1889863, - 1889864 - ) - expect(result).toStrictEqual([ - { - blocksize: 225, - features: [], - fee: 0, - generator: "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - height: 1889864, - "nxt-consensus": { - "base-target": 51, - "generation-signature": - "9iHAgT78TCbzv5HfhxVzzRnM132n45UGqGbvH59FvBoB" - }, - reference: - "9zvED5KcnvkYsKLFxiCXQDiEsyXrKdtVH23b3qPt2FhAh3BrhUaZbqtndYWCbn4GmPrZvDbwY1vwqrxdgyazGfH", - signature: - "353wWZjKZzLiYKkVbgXLrxsK7dzYo9pEgw2pV31rXLnb1EdZbraZThrpg92swhrtQh1J353rPesvcB1mMEAoQtzP", - timestamp: 1648218628090, - transactionCount: 0, - transactions: [], - version: 3 - } - ]) - }) - - it(" blockAddress - error from > to ", async () => { - const result = await blocks.blockAddress( - "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - 1889864, - 1889863 - ) - expect(result.isSuccess).toEqual(false) - }) - - it(" blockAddress - error Max === false ", async () => { - const result = await blocks.blockAddress( - "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", - 1889863, - 1889999 - ) - expect(result.isSuccess).toEqual(false) - }) -}) +// describe("actualHeight function - suite test block service", () => { +// it("actualHeight - see height block from node ", async () => { +// const result = await blocks.actualHeight() +// expect(result).toBeGreaterThan(0) +// }) +// }) + +// describe("blockAverageDelay function - suite test block service", () => { +// it("blockAverageDelay - see Average delay ", async () => { +// const result = await blocks.blockAverageDelay( +// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", +// 1 +// ) +// expect(result).toStrictEqual(1011) +// }) + +// it("blockAverageDelay - blockNum >9 error ", async () => { +// const result = await blocks.blockAverageDelay( +// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", +// 10 +// ) +// expect(result.isSuccess).toEqual(false) +// }) +// }) + +// describe("blockSeq function - suite test block service", () => { +// it("blockSeq - Get block at specified heights ", async () => { +// const result = await blocks.blockSeq(1, 2) +// expect(result).toStrictEqual([ +// { +// blocksize: 312, +// fee: 0, +// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", +// height: 1, +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": "11111111111111111111111111111111" +// }, +// reference: +// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", +// signature: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// timestamp: 1528077600000, +// transactionCount: 2, +// transactions: [ +// { +// amount: 5072853761500800, +// fee: 0, +// id: "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", +// recipient: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", +// signature: +// "Er65mP3Mgs5PDZNmj2hmtVeBvF3gFp6SqVbqNrE8dq99bFve4EbCwh4efaQb5U5HT77e6Xhzi6DpL2G16sga8Jn", +// timestamp: 1528077600000, +// type: 1 +// }, +// { +// amount: 10000000000000000, +// fee: 0, +// id: "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", +// recipient: "3826zwbgHauHXAoppU4we3hsJc9GtRCpSvz", +// signature: +// "D3rtv9DWiRGmKpiTeknbug4gUuxBY6LMTVquR21ijUgcbTGdPyp4iHFAL4byCwSjnLpsE3nqkJSqkubQ4RmLTGW", +// timestamp: 1528077600000, +// type: 1 +// } +// ], +// version: 1 +// }, +// { +// blocksize: 227, +// features: [2], +// fee: 0, +// generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", +// height: 2, +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": +// "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" +// }, +// reference: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// signature: +// "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", +// timestamp: 1528116151053, +// transactionCount: 0, +// transactions: [], +// version: 3 +// } +// ]) +// }) + +// it("blockSeq - from > to error ", async () => { +// const result = await blocks.blockSeq(2, 1) +// expect(result.isSuccess).toEqual(false) +// }) + +// it("blockSeq - big sequences ", async () => { +// const result = await blocks.blockSeq(1, 101) +// expect(result.isSuccess).toEqual(false) +// }) + +// it("blockSeq - max === false ", async () => { +// const result = await blocks.blockSeq(1, 200) +// expect(result.isSuccess).toEqual(false) +// }) +// }) + +// describe("blockLast function - suite test block service", () => { +// it("blockLast - Get last block data ", async () => { +// const result = await blocks.blockLast() + +// //ok +// expect(result.isSuccess).toEqual(true) + +// //see received +// //expect(result).toStrictEqual("") +// }) +// }) + +// describe("blockChild function - suite test block service", () => { +// it("blockChild - Get children of specified block ", async () => { +// const result = await blocks.blockChild( +// "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" +// ) +// //ok +// expect(result.isSuccess).toEqual(true) +// }) + +// it("blockChild - error 404 ", async () => { +// // const action = async () => { +// // await blocks.blockChild("124afdsfaf") +// // } + +// // expect(action()).rejects.toThrow() + +// const result = await blocks.blockChild("124afdsfaf") +// //ok +// expect(result.isSuccess).toEqual(false) +// }) +// }) + +// describe("blockHeightEncoded function - suite test block service", () => { +// it("blockHeightEncoded - Get height of a block by its Base58-encoded signature ", async () => { +// const result = await blocks.blockHeightEncoded( +// "3Ho1ZKnxzKAvrwo5RsMAesdiw6EW3f5Mn8etEhPP2t5z6N3iVK385ezvbNkxUen6yRUhwuiXg97P9uGMVeUpHG4f" +// ) +// expect(result).toStrictEqual({ +// height: 1887361 +// }) +// }) + +// it("blockHeightEncoded - error 404 ", async () => { +// // const result = async () => { +// // await blocks.blockHeightEncoded("124afdsfaf") +// // } + +// // expect(result()).rejects.toThrow() + +// const result = await blocks.blockHeightEncoded("124afdsfaf") +// //ok +// expect(result.isSuccess).toEqual(false) +// }) +// }) + +// describe("blockAtHeaderOnly function - suite test block service", () => { +// it("blockAtHeaderOnly - Get block at specified height without transactions payload ", async () => { +// const result = await blocks.blockAtHeaderOnly(1) +// expect(result.isSuccess).toEqual(true) +// }) + +// it("blockAtHeaderOnly - error 404 ", async () => { +// // const result = async () => { +// // await blocks.blockAtHeaderOnly(11111111111) +// // } + +// // expect(result()).rejects.toThrow() + +// const result = await blocks.blockAtHeaderOnly(11111111111) +// //ok +// expect(result.isSuccess).toEqual(false) +// }) +// }) + +// describe("blockSeqHeaderOnly function - suite test block service", () => { +// it(" blockSeqHeaderOnly test ", async () => { +// const result = await blocks.blockSeqHeaderOnly(1, 2) +// expect(result).toStrictEqual([ +// { +// blocksize: 312, +// generator: "37jG983kttnpw4kAAQ6wi1yTyegkLN5LMNb", +// height: 1, +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": "11111111111111111111111111111111" +// }, +// reference: +// "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ", +// signature: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// timestamp: 1528077600000, +// transactionCount: 2, +// version: 1 +// }, +// { +// blocksize: 227, +// features: [2], +// generator: "37oqFHsx1cRtLWtnp6YyQpud5WJk4v79VPu", +// height: 2, +// "nxt-consensus": { +// "base-target": 153722867, +// "generation-signature": +// "E28JsgAfipFaBZLvYBJZUJh2aAdZcMTKuS9KZ4jRzZ6q" +// }, +// reference: +// "soKTPcsb5cD97jnm64zF3pVuVUqUYx3caaDvuPyM6PXPY7eWCxeHeYvKSE2aJwZwRpXdRFdW1g5BQMFpYkHcf85", +// signature: +// "4qZHFNXz5CM4vTapEHoecqYthEacHje3pvesy2rGzj5yLrd52gN6iVwWuX3mBJTWvqJeHYHnNuWqWmQpFayZAxYX", +// timestamp: 1528116151053, +// transactionCount: 0, +// version: 3 +// } +// ]) +// }) + +// it(" blockSeqHeaderOnly - error from > to ", async () => { +// const result = await blocks.blockSeqHeaderOnly(2, 1) +// //ok +// expect(result.isSuccess).toEqual(false) +// }) + +// it(" blockSeqHeaderOnly - Max === false ", async () => { +// const result = await blocks.blockSeqHeaderOnly(1, 199) +// //ok +// expect(result.isSuccess).toEqual(false) +// }) +// }) + +// describe(" blockLastHeaderOnly function - suite test block service", () => { +// it(" blockLastHeaderOnly test ", async () => { +// const result = await blocks.blockLastHeaderOnly() + +// //expect(result).toHaveProperty("height") // true +// expect(result.isSuccess).toEqual(true) +// }) +// }) + +// describe(" blockSignature - suite test block service", () => { +// it("blockSignature test", async () => { +// const result = await blocks.blockSignature( +// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi" +// ) +// expect(result.isSuccess).toEqual(true) +// }) + +// it("blockSignature - error 404 ", async () => { +// // const result = async () => { +// // await blocks.blockSignature("124afdsfaf") +// // } + +// // expect(result()).rejects.toThrow() + +// const result = await blocks.blockSignature("124afdsfaf") +// expect(result.isSuccess).toEqual(false) +// }) +// }) + +// describe(" blockFirst - suite test block service", () => { +// it("blockFirst test ", async () => { +// const result = await blocks.blockFirst() +// expect(result.isSuccess).toEqual(true) +// }) +// }) + +// describe(" blockAddress - suite test block service", () => { +// it("blockAddress test ", async () => { +// const result = await blocks.blockAddress( +// "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", +// 1889863, +// 1889864 +// ) +// expect(result).toStrictEqual([ +// { +// blocksize: 225, +// features: [], +// fee: 0, +// generator: "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", +// height: 1889864, +// "nxt-consensus": { +// "base-target": 51, +// "generation-signature": +// "9iHAgT78TCbzv5HfhxVzzRnM132n45UGqGbvH59FvBoB" +// }, +// reference: +// "9zvED5KcnvkYsKLFxiCXQDiEsyXrKdtVH23b3qPt2FhAh3BrhUaZbqtndYWCbn4GmPrZvDbwY1vwqrxdgyazGfH", +// signature: +// "353wWZjKZzLiYKkVbgXLrxsK7dzYo9pEgw2pV31rXLnb1EdZbraZThrpg92swhrtQh1J353rPesvcB1mMEAoQtzP", +// timestamp: 1648218628090, +// transactionCount: 0, +// transactions: [], +// version: 3 +// } +// ]) +// }) + +// it(" blockAddress - error from > to ", async () => { +// const result = await blocks.blockAddress( +// "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", +// 1889864, +// 1889863 +// ) +// expect(result.isSuccess).toEqual(false) +// }) + +// it(" blockAddress - error Max === false ", async () => { +// const result = await blocks.blockAddress( +// "385vc8T7brZYTaNb1QV4BjU4JN9S3MoeKZd", +// 1889863, +// 1889999 +// ) +// expect(result.isSuccess).toEqual(false) +// }) +// }) From 62744e339f58664191d7ffbcbcfeb42708be8715 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Fri, 22 Apr 2022 13:32:07 -0300 Subject: [PATCH 62/72] update: byHeight function test and function promises #2 --- junit.xml | 224 +----------------------- package.json | 2 +- src/blockchain/blocks/service.blocks.ts | 24 ++- src/blockchain/service.blockchain.ts | 2 +- 4 files changed, 29 insertions(+), 223 deletions(-) diff --git a/junit.xml b/junit.xml index 9031e53..d8f6e7b 100644 --- a/junit.xml +++ b/junit.xml @@ -1,225 +1,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - + \ No newline at end of file diff --git a/package.json b/package.json index 5f8e57f..ed9c7a7 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "devDependencies": { "@types/jest": "^27.0.3", "jest": "^27.4.5", - "jest-junit": "^13.0.0", + "jest-junit": "^13.2.0", "prettier": "2.6.2", "ts-jest": "^27.1.2", "typescript": "^4.5.4" diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index b2ff9ab..82914f4 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -1,6 +1,11 @@ /** + * Copyright (c) Lunes Platform + * * Welcome to service.blocs.ts * @author Lunes Platform + * + * This source code is licensed under the Apache license found in the + * LICENSE file in the root directory of this source tree. */ import { mountBlock, IBlock, IBlockError, mountErr } from "./block.types" @@ -47,17 +52,18 @@ async function byHeight(height: number): Promise { } } + // /** // * # This function get a blockchain height // * -// * @returns Promise {@link blockHeight} . +// * @returns Promise {@link actualHeight} . // * // * If server off line, return error // */ // export async function actualHeight(): Promise { -// const url = `${BASEURL}height` +// // const url = `${BASEURL}height` -// return new Promise(async (resolve) => { +// /* return new Promise(async (resolve) => { // axios // .get(url) // .then((r) => { @@ -67,6 +73,18 @@ async function byHeight(height: number): Promise { // resolve(-1) // }) // }) +// */ + +// lunesNode.interceptors.response.use( +// (blockchainResponse) => { +// return Promise.resolve(mountBlock(blockchainResponse)) +// }, +// (blockchainError) => { +// console.log(blockchainError) +// return Promise.resolve(mountErr(blockchainError)) +// } +// ) +// return lunesNode.get(`/blocks/height`) // } // /** diff --git a/src/blockchain/service.blockchain.ts b/src/blockchain/service.blockchain.ts index 64ac491..1195dc1 100644 --- a/src/blockchain/service.blockchain.ts +++ b/src/blockchain/service.blockchain.ts @@ -3,7 +3,7 @@ import axios from "axios" export const lunesNode = axios.create({ baseURL: "https://lunesnode.lunes.io", - timeout: 1000 + timeout: 2000 }) export const blockchain = { From f0ddefea71fc8fb5fb70dcad2f86e18ecf6feb25 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Fri, 22 Apr 2022 13:36:48 -0300 Subject: [PATCH 63/72] add: yarn fmt --- src/blockchain/blocks/service.blocks.ts | 65 ++++++++++++------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 82914f4..de32ce3 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -53,39 +53,38 @@ async function byHeight(height: number): Promise { } -// /** -// * # This function get a blockchain height -// * -// * @returns Promise {@link actualHeight} . -// * -// * If server off line, return error -// */ -// export async function actualHeight(): Promise { -// // const url = `${BASEURL}height` - -// /* return new Promise(async (resolve) => { -// axios -// .get(url) -// .then((r) => { -// resolve(r.data.height) -// }) -// .catch(() => { -// resolve(-1) -// }) -// }) -// */ - -// lunesNode.interceptors.response.use( -// (blockchainResponse) => { -// return Promise.resolve(mountBlock(blockchainResponse)) -// }, -// (blockchainError) => { -// console.log(blockchainError) -// return Promise.resolve(mountErr(blockchainError)) -// } -// ) -// return lunesNode.get(`/blocks/height`) -// } +/** + * # This function get a blockchain height + * + * @returns Promise {@link actualHeight} . + * + * If server off line, return error + */ +export async function actualHeight(): Promise { + // const url = `${BASEURL}height` + + /* return new Promise(async (resolve) => { + axios + .get(url) + .then((r) => { + resolve(r.data.height) + }) + .catch(() => { + resolve(-1) + }) + }) +*/ + + lunesNode.interceptors.response.use( + (blockchainResponse) => { + return Promise.resolve(mountBlock(blockchainResponse)) + }, + (blockchainError) => { + console.log(blockchainError) + return Promise.resolve(mountErr(blockchainError)) + }) + return lunesNode.get(`/blocks/height`) +} // /** // * # Average delay in milliseconds between last blockNum blocks starting from block with signature From cbd5b1840e8ea40f53c04fd23bfca0fdbb6d2f65 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Fri, 22 Apr 2022 17:45:23 -0300 Subject: [PATCH 64/72] update: actualHeigth test and function promises #2 --- junit.xml | 9 ++++--- src/blockchain/blocks/service.blocks.ts | 33 +++++++++++-------------- test/blockchain/blocks/blockOne.test.ts | 12 ++++----- 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/junit.xml b/junit.xml index d8f6e7b..e321877 100644 --- a/junit.xml +++ b/junit.xml @@ -1,13 +1,16 @@ - - + + - + + + + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index de32ce3..bb6b3ac 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -20,7 +20,7 @@ import { lunesNode } from "../service.blockchain" * ```javascript * import * as lunesjs from "lunesjs" * - * const block = lunesjs.blockchain.blocks.height(10) + * const block = lunesjs.blockchain.blocks.byHeight(10) * ``` * @param {number} height - number of block in blockchain * should be greater than 0 and less than 2147483647 @@ -54,30 +54,25 @@ async function byHeight(height: number): Promise { /** - * # This function get a blockchain height + * # This function get a blockchain actual height + * {@link actualHeight} + * + * ## Example * - * @returns Promise {@link actualHeight} . + * ```javascript + * import * as lunesjs from "lunesjs" + * + * const block = lunesjs.blockchain.blocks.actualHeight() + * ``` * * If server off line, return error + * @returns Promise . */ export async function actualHeight(): Promise { - // const url = `${BASEURL}height` - - /* return new Promise(async (resolve) => { - axios - .get(url) - .then((r) => { - resolve(r.data.height) - }) - .catch(() => { - resolve(-1) - }) - }) -*/ lunesNode.interceptors.response.use( - (blockchainResponse) => { - return Promise.resolve(mountBlock(blockchainResponse)) + (r) => { + return Promise.resolve(r.data.height) }, (blockchainError) => { console.log(blockchainError) @@ -430,5 +425,5 @@ export async function actualHeight(): Promise { // } export const blocks = { - byHeight + byHeight, actualHeight } diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 1d27471..4aafaf0 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -61,12 +61,12 @@ describe("blockByHeight function- suite test block service", () => { }) }) -// describe("actualHeight function - suite test block service", () => { -// it("actualHeight - see height block from node ", async () => { -// const result = await blocks.actualHeight() -// expect(result).toBeGreaterThan(0) -// }) -// }) +describe("actualHeight function - suite test block service", () => { + it("actualHeight - see height block from node ", async () => { + const result = await lunesjs.blockchain.blocks.actualHeight() + expect(result).toBeGreaterThan(0) + }) +}) // describe("blockAverageDelay function - suite test block service", () => { // it("blockAverageDelay - see Average delay ", async () => { From 46845f166fcee35fecb714eaf187dcda05e0cd88 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Fri, 22 Apr 2022 18:33:35 -0300 Subject: [PATCH 65/72] update timeout test --- junit.xml | 6 +++--- src/blockchain/blocks/service.blocks.ts | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/junit.xml b/junit.xml index e321877..7bb9ec6 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -10,7 +10,7 @@ - + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index bb6b3ac..8f8cd98 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -1,9 +1,9 @@ /** * Copyright (c) Lunes Platform - * + * * Welcome to service.blocs.ts * @author Lunes Platform - * + * * This source code is licensed under the Apache license found in the * LICENSE file in the root directory of this source tree. */ @@ -52,11 +52,10 @@ async function byHeight(height: number): Promise { } } - /** * # This function get a blockchain actual height - * {@link actualHeight} - * + * {@link actualHeight} + * * ## Example * * ```javascript @@ -69,7 +68,6 @@ async function byHeight(height: number): Promise { * @returns Promise . */ export async function actualHeight(): Promise { - lunesNode.interceptors.response.use( (r) => { return Promise.resolve(r.data.height) @@ -77,7 +75,8 @@ export async function actualHeight(): Promise { (blockchainError) => { console.log(blockchainError) return Promise.resolve(mountErr(blockchainError)) - }) + } + ) return lunesNode.get(`/blocks/height`) } @@ -425,5 +424,6 @@ export async function actualHeight(): Promise { // } export const blocks = { - byHeight, actualHeight + byHeight, + actualHeight } From 488becab4ce08009090909ae6fd56a2649b8c291 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Fri, 22 Apr 2022 19:03:06 -0300 Subject: [PATCH 66/72] update testing jest --- junit.xml | 6 ++--- src/blockchain/blocks/service.blocks.ts | 36 +++++++++++++++++-------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/junit.xml b/junit.xml index 7bb9ec6..0c4cf81 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -10,7 +10,7 @@ - + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 8f8cd98..734f4f6 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -1,9 +1,8 @@ /** - * Copyright (c) Lunes Platform - * + * Copyright (c) Lunes Platform * * Welcome to service.blocs.ts * @author Lunes Platform - * + * * This source code is licensed under the Apache license found in the * LICENSE file in the root directory of this source tree. */ @@ -52,10 +51,11 @@ async function byHeight(height: number): Promise { } } + /** * # This function get a blockchain actual height - * {@link actualHeight} - * + * {@link actualHeight} + * * ## Example * * ```javascript @@ -67,16 +67,16 @@ async function byHeight(height: number): Promise { * If server off line, return error * @returns Promise . */ -export async function actualHeight(): Promise { +export async function actualHeight(): Promise { + lunesNode.interceptors.response.use( (r) => { return Promise.resolve(r.data.height) }, (blockchainError) => { console.log(blockchainError) - return Promise.resolve(mountErr(blockchainError)) - } - ) + return Promise.resolve(-1) + }) return lunesNode.get(`/blocks/height`) } @@ -423,7 +423,21 @@ export async function actualHeight(): Promise { // } // } +//export const blocks = { +// byHeight, actualHeight +// return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((response) => { +// resolve(response.data) +// }) +// .catch((blockchainError) => { +// resolve(mountErr(blockchainError)) +// }) +// }) +// } +// } + export const blocks = { - byHeight, - actualHeight + byHeight, actualHeight } From b59540b89d324543c43c811f60afd42c4452d0e3 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Fri, 22 Apr 2022 19:29:04 -0300 Subject: [PATCH 67/72] update: commet actualHeigh function --- src/blockchain/blocks/service.blocks.ts | 135 +++++++++++++----------- test/blockchain/blocks/blockOne.test.ts | 47 +++++---- 2 files changed, 99 insertions(+), 83 deletions(-) diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 734f4f6..7f73500 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -52,74 +52,87 @@ async function byHeight(height: number): Promise { } -/** - * # This function get a blockchain actual height - * {@link actualHeight} - * - * ## Example - * - * ```javascript - * import * as lunesjs from "lunesjs" - * - * const block = lunesjs.blockchain.blocks.actualHeight() - * ``` - * - * If server off line, return error - * @returns Promise . - */ -export async function actualHeight(): Promise { - - lunesNode.interceptors.response.use( - (r) => { - return Promise.resolve(r.data.height) - }, - (blockchainError) => { - console.log(blockchainError) - return Promise.resolve(-1) - }) - return lunesNode.get(`/blocks/height`) -} - // /** -// * # Average delay in milliseconds between last blockNum blocks starting from block with signature -// * -// * @type {signature: string, blockNum: number } +// * # This function get a blockchain actual height +// * {@link actualHeight} +// * +// * ## Example // * -// * @returns Promise {@link blockAverageDelay} containing the paramms signature and blockNum. +// * ```javascript +// * import * as lunesjs from "lunesjs" // * -// * --- signature = signature block - Base58-encoded signature +// * const block = lunesjs.blockchain.blocks.actualHeight() +// * ``` // * -// * --- blockNum = 1 to 9 - Number of blocks to count delay +// * If server off line, return error +// * @returns Promise . // */ +// export async function actualHeight(): Promise { + +// lunesNode.interceptors.response.use( +// (r) => { +// return Promise.resolve(r.data.height) +// }, +// (blockchainError) => { +// console.log(blockchainError) +// return Promise.resolve(mountErr(blockchainError)) +// }) +// return lunesNode.get(`/blocks/height`) +// } +/* return new Promise(async (resolve) => { + axios + .get(url) + .then((r) => { + resolve(r.data.height) + }) + .catch(() => { + resolve(-1) + }) + }) +*/ -// export async function blockAverageDelay( -// signature: string, -// blockNum: number -// ): Promise { -// const url = `${BASEURL}delay/${signature}/${blockNum}` -// if (blockNum <= 0 || blockNum > 9) { -// const error: IBlockError = { -// isSuccess: false, -// response: { -// codeError: -1, -// message: `the blockNum cannot be less than or equal to zero or greater than nine` -// } -// } -// return error -// } else { -// return new Promise(async (resolve) => { -// axios -// .get(url) -// .then((r) => { -// resolve(r.data.delay) -// }) -// .catch((blockchainError) => { -// resolve(mountErr(blockchainError)) -// }) -// }) -// } -// } + + +/** + * # Average delay in milliseconds between last blockNum blocks starting from block with signature + * + * @type {signature: string, blockNum: number } + * + * @returns Promise {@link blockAverageDelay} containing the paramms signature and blockNum. + * + * --- signature = signature block - Base58-encoded signature + * + * --- blockNum = 1 to 9 - Number of blocks to count delay + */ +export async function blockAverageDelay( + signature: string, + blockNum: number +): Promise { + const url = `${BASEURL}delay/${signature}/${blockNum}` + + if (blockNum <= 0 || blockNum > 9) { + const error: IBlockError = { + isSuccess: false, + response: { + codeError: -1, + message: `the blockNum cannot be less than or equal to zero or greater than nine` + } + } + return error + } else { + return new Promise(async (resolve) => { + axios + .get(url) + .then((r) => { + resolve(r.data.delay) + }) + .catch((blockchainError) => { + resolve(mountErr(blockchainError)) + }) + }) + } +} // /** // * # This function Get block at specified heights diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 4aafaf0..19002b6 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -61,31 +61,34 @@ describe("blockByHeight function- suite test block service", () => { }) }) -describe("actualHeight function - suite test block service", () => { - it("actualHeight - see height block from node ", async () => { - const result = await lunesjs.blockchain.blocks.actualHeight() - expect(result).toBeGreaterThan(0) - }) -}) - -// describe("blockAverageDelay function - suite test block service", () => { -// it("blockAverageDelay - see Average delay ", async () => { -// const result = await blocks.blockAverageDelay( -// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", -// 1 -// ) -// expect(result).toStrictEqual(1011) -// }) - -// it("blockAverageDelay - blockNum >9 error ", async () => { -// const result = await blocks.blockAverageDelay( -// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", -// 10 -// ) -// expect(result.isSuccess).toEqual(false) +// describe("actualHeight function - suite test block service", () => { +// it("actualHeight - see height block from node ", async () => { +// const result = await lunesjs.blockchain.blocks.actualHeight() +// expect(result).toBeGreaterThan(0) // }) // }) + + + +describe("blockAverageDelay function - suite test block service", () => { + it("blockAverageDelay - see Average delay ", async () => { + const result = await blocks.blockAverageDelay( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + 1 + ) + expect(result).toStrictEqual(1011) + }) + + it("blockAverageDelay - blockNum >9 error ", async () => { + const result = await blocks.blockAverageDelay( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + 10 + ) + expect(result.isSuccess).toEqual(false) + }) +}) + // describe("blockSeq function - suite test block service", () => { // it("blockSeq - Get block at specified heights ", async () => { // const result = await blocks.blockSeq(1, 2) From 58a108adcc8bc1098ccf2c63bd5c56d0b4b05574 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Sat, 23 Apr 2022 01:50:19 -0300 Subject: [PATCH 68/72] update: blockAverageDelay function and test #2 --- junit.xml | 8 ++++-- src/blockchain/blocks/service.blocks.ts | 38 ++++++++++++++----------- test/blockchain/blocks/blockOne.test.ts | 7 +++-- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/junit.xml b/junit.xml index 0c4cf81..2cb756c 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -10,7 +10,9 @@ - + + + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 7f73500..636b5ea 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -92,24 +92,28 @@ async function byHeight(height: number): Promise { */ - - /** * # Average delay in milliseconds between last blockNum blocks starting from block with signature + * {@link blockAverageDelay} * - * @type {signature: string, blockNum: number } + * ## Example * - * @returns Promise {@link blockAverageDelay} containing the paramms signature and blockNum. + * ```javascript + * import * as lunesjs from "lunesjs" * - * --- signature = signature block - Base58-encoded signature + * const block = lunesjs.blockchain.blocks.blockaverageDelay("dsfs112", 1) + * ``` + * @type {signature: string, blockNum: number } + * + * --- signature = signature block - Base58-encoded signature * * --- blockNum = 1 to 9 - Number of blocks to count delay + * @returns Promise */ export async function blockAverageDelay( signature: string, blockNum: number ): Promise { - const url = `${BASEURL}delay/${signature}/${blockNum}` if (blockNum <= 0 || blockNum > 9) { const error: IBlockError = { @@ -121,16 +125,16 @@ export async function blockAverageDelay( } return error } else { - return new Promise(async (resolve) => { - axios - .get(url) - .then((r) => { - resolve(r.data.delay) - }) - .catch((blockchainError) => { - resolve(mountErr(blockchainError)) - }) - }) + lunesNode.interceptors.response.use( + (r) => { + return Promise.resolve(r.data.delay) + }, + (blockchainError) => { + console.log(blockchainError) + return Promise.resolve(mountErr(blockchainError)) + } + ) + return lunesNode.get(`/blocks/delay/${signature}/${blockNum}`) } } @@ -452,5 +456,5 @@ export async function blockAverageDelay( // } export const blocks = { - byHeight, actualHeight + byHeight, blockAverageDelay } diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 19002b6..bec69fb 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -61,6 +61,9 @@ describe("blockByHeight function- suite test block service", () => { }) }) + + + // describe("actualHeight function - suite test block service", () => { // it("actualHeight - see height block from node ", async () => { // const result = await lunesjs.blockchain.blocks.actualHeight() @@ -73,7 +76,7 @@ describe("blockByHeight function- suite test block service", () => { describe("blockAverageDelay function - suite test block service", () => { it("blockAverageDelay - see Average delay ", async () => { - const result = await blocks.blockAverageDelay( + const result = await lunesjs.blockchain.blocks.blockAverageDelay( "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", 1 ) @@ -81,7 +84,7 @@ describe("blockAverageDelay function - suite test block service", () => { }) it("blockAverageDelay - blockNum >9 error ", async () => { - const result = await blocks.blockAverageDelay( + const result = await lunesjs.blockchain.blocks.blockAverageDelay( "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", 10 ) From fc3cce0fc17573d751f7c50e75571fdf7ebf17d7 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Sat, 23 Apr 2022 11:28:03 -0300 Subject: [PATCH 69/72] add: testing first function --- junit.xml | 9 +- src/blockchain/blocks/service.blocks.ts | 104 ++++++++++++++---------- 2 files changed, 67 insertions(+), 46 deletions(-) diff --git a/junit.xml b/junit.xml index 2cb756c..dd3d94e 100644 --- a/junit.xml +++ b/junit.xml @@ -1,6 +1,6 @@ - - + + @@ -10,9 +10,10 @@ - + - + + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 636b5ea..74a19ea 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -113,7 +113,7 @@ async function byHeight(height: number): Promise { export async function blockAverageDelay( signature: string, blockNum: number -): Promise { +): Promise { if (blockNum <= 0 || blockNum > 9) { const error: IBlockError = { @@ -138,48 +138,68 @@ export async function blockAverageDelay( } } -// /** -// * # This function Get block at specified heights -// * -// * @type {from: number, to: number} -// * validation: max value (from) (to) 1 - 100 (99 difference) -// * -// * from value < to value -// * -// * @returns Promise {@link blockSeq} containing the params from and to. -// */ -// export async function blockSeq( -// from: number, -// to: number -// ): Promise { -// const url = `${BASEURL}seq/${from}/${to}` -// //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` -// const Max: boolean = to - from < 100 -// if (from > to || Max === false) { -// const error: IBlockError = { -// isSuccess: false, -// response: { -// codeError: -1, -// message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` -// } -// } -// return error -// } else { -// //const response = await axios.get(url) -// //return response.data -// return new Promise(async (resolve) => { -// axios -// .get(url) -// .then((r) => { -// resolve(r.data) -// }) -// .catch((blockchainError) => { -// resolve(mountErr(blockchainError)) -// }) -// }) -// } -// } + + + + + +/** + * # This function Get block at specified heights + * {@link blockSeq} + * + * ## Example + * + * ```javascript + * import * as lunesjs from "lunesjs" + * + * const block = lunesjs.blockchain.blocks.blockaverageDelay("dsfs112", 1) + * ``` + * @type {from: number, to: number} + * + * validation: max value (from) (to) 1 - 100 (99 difference) + * + * from value < to value + * @returns Promise + */ +export async function blockSeq( + from: number, + to: number +): Promise { + //const url = `${BASEURL}seq/${from}/${to}` + //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` + const Max: boolean = to - from < 100 + + if (from > to || Max === false) { + const error: IBlockError = { + isSuccess: false, + response: { + codeError: -1, + message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` + } + } + return error + } else { + + lunesNode.interceptors.response.use( + (blockchainResponse) => { + return Promise.resolve(mountBlock(blockchainResponse)) + }, + (blockchainError) => { + console.log(blockchainError) + return Promise.resolve(mountErr(blockchainError)) + } + ) + return lunesNode.get(`/blocks/seq/${from}/${to}`) + + } +} + + + + + + // /** // * # This function Get last block data From 3fa2bca0c9a554c8d56277034814627621350331 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Sat, 23 Apr 2022 11:32:42 -0300 Subject: [PATCH 70/72] add: testing suite --- src/blockchain/blocks/service.blocks.ts | 184 ++++++++++++------------ test/blockchain/blocks/blockOne.test.ts | 32 ++--- 2 files changed, 108 insertions(+), 108 deletions(-) diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 74a19ea..5731c41 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -92,51 +92,51 @@ async function byHeight(height: number): Promise { */ -/** - * # Average delay in milliseconds between last blockNum blocks starting from block with signature - * {@link blockAverageDelay} - * - * ## Example - * - * ```javascript - * import * as lunesjs from "lunesjs" - * - * const block = lunesjs.blockchain.blocks.blockaverageDelay("dsfs112", 1) - * ``` - * @type {signature: string, blockNum: number } - * - * --- signature = signature block - Base58-encoded signature - * - * --- blockNum = 1 to 9 - Number of blocks to count delay - * @returns Promise - */ -export async function blockAverageDelay( - signature: string, - blockNum: number -): Promise { +// /** +// * # Average delay in milliseconds between last blockNum blocks starting from block with signature +// * {@link blockAverageDelay} +// * +// * ## Example +// * +// * ```javascript +// * import * as lunesjs from "lunesjs" +// * +// * const block = lunesjs.blockchain.blocks.blockaverageDelay("dsfs112", 1) +// * ``` +// * @type {signature: string, blockNum: number } +// * +// * --- signature = signature block - Base58-encoded signature +// * +// * --- blockNum = 1 to 9 - Number of blocks to count delay +// * @returns Promise +// */ +// export async function blockAverageDelay( +// signature: string, +// blockNum: number +// ): Promise { - if (blockNum <= 0 || blockNum > 9) { - const error: IBlockError = { - isSuccess: false, - response: { - codeError: -1, - message: `the blockNum cannot be less than or equal to zero or greater than nine` - } - } - return error - } else { - lunesNode.interceptors.response.use( - (r) => { - return Promise.resolve(r.data.delay) - }, - (blockchainError) => { - console.log(blockchainError) - return Promise.resolve(mountErr(blockchainError)) - } - ) - return lunesNode.get(`/blocks/delay/${signature}/${blockNum}`) - } -} +// if (blockNum <= 0 || blockNum > 9) { +// const error: IBlockError = { +// isSuccess: false, +// response: { +// codeError: -1, +// message: `the blockNum cannot be less than or equal to zero or greater than nine` +// } +// } +// return error +// } else { +// lunesNode.interceptors.response.use( +// (r) => { +// return Promise.resolve(r.data.delay) +// }, +// (blockchainError) => { +// console.log(blockchainError) +// return Promise.resolve(mountErr(blockchainError)) +// } +// ) +// return lunesNode.get(`/blocks/delay/${signature}/${blockNum}`) +// } +// } @@ -144,56 +144,56 @@ export async function blockAverageDelay( -/** - * # This function Get block at specified heights - * {@link blockSeq} - * - * ## Example - * - * ```javascript - * import * as lunesjs from "lunesjs" - * - * const block = lunesjs.blockchain.blocks.blockaverageDelay("dsfs112", 1) - * ``` - * @type {from: number, to: number} - * - * validation: max value (from) (to) 1 - 100 (99 difference) - * - * from value < to value - * @returns Promise - */ -export async function blockSeq( - from: number, - to: number -): Promise { - //const url = `${BASEURL}seq/${from}/${to}` - //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` - const Max: boolean = to - from < 100 - - if (from > to || Max === false) { - const error: IBlockError = { - isSuccess: false, - response: { - codeError: -1, - message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` - } - } - return error - } else { +// /** +// * # This function Get block at specified heights +// * {@link blockSeq} +// * +// * ## Example +// * +// * ```javascript +// * import * as lunesjs from "lunesjs" +// * +// * const block = lunesjs.blockchain.blocks.blockaverageDelay("dsfs112", 1) +// * ``` +// * @type {from: number, to: number} +// * +// * validation: max value (from) (to) 1 - 100 (99 difference) +// * +// * from value < to value +// * @returns Promise +// */ +// export async function blockSeq( +// from: number, +// to: number +// ): Promise { +// //const url = `${BASEURL}seq/${from}/${to}` +// //`https://lunesnode.lunes.io/blocks/seq/${from}/${to}` +// const Max: boolean = to - from < 100 - lunesNode.interceptors.response.use( - (blockchainResponse) => { - return Promise.resolve(mountBlock(blockchainResponse)) - }, - (blockchainError) => { - console.log(blockchainError) - return Promise.resolve(mountErr(blockchainError)) - } - ) - return lunesNode.get(`/blocks/seq/${from}/${to}`) +// if (from > to || Max === false) { +// const error: IBlockError = { +// isSuccess: false, +// response: { +// codeError: -1, +// message: `Too big sequences requested OR {from} cannot be bigger than {to}, change it` +// } +// } +// return error +// } else { - } -} +// lunesNode.interceptors.response.use( +// (blockchainResponse) => { +// return Promise.resolve(mountBlock(blockchainResponse)) +// }, +// (blockchainError) => { +// console.log(blockchainError) +// return Promise.resolve(mountErr(blockchainError)) +// } +// ) +// return lunesNode.get(`/blocks/seq/${from}/${to}`) + +// } +// } diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index bec69fb..56006f9 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -74,23 +74,23 @@ describe("blockByHeight function- suite test block service", () => { -describe("blockAverageDelay function - suite test block service", () => { - it("blockAverageDelay - see Average delay ", async () => { - const result = await lunesjs.blockchain.blocks.blockAverageDelay( - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - 1 - ) - expect(result).toStrictEqual(1011) - }) +// describe("blockAverageDelay function - suite test block service", () => { +// it("blockAverageDelay - see Average delay ", async () => { +// const result = await lunesjs.blockchain.blocks.blockAverageDelay( +// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", +// 1 +// ) +// expect(result).toStrictEqual(1011) +// }) - it("blockAverageDelay - blockNum >9 error ", async () => { - const result = await lunesjs.blockchain.blocks.blockAverageDelay( - "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", - 10 - ) - expect(result.isSuccess).toEqual(false) - }) -}) +// it("blockAverageDelay - blockNum >9 error ", async () => { +// const result = await lunesjs.blockchain.blocks.blockAverageDelay( +// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", +// 10 +// ) +// expect(result.isSuccess).toEqual(false) +// }) +// }) // describe("blockSeq function - suite test block service", () => { // it("blockSeq - Get block at specified heights ", async () => { From 6ee51387f20aac05901bf6e88cf135b5d01e7710 Mon Sep 17 00:00:00 2001 From: nunesinc Date: Sat, 23 Apr 2022 11:36:40 -0300 Subject: [PATCH 71/72] add: testing #2 suite --- junit.xml | 18 +----------------- src/blockchain/blocks/service.blocks.ts | 2 +- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/junit.xml b/junit.xml index dd3d94e..edaf30d 100644 --- a/junit.xml +++ b/junit.xml @@ -1,19 +1,3 @@ - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 5731c41..0ba150a 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -476,5 +476,5 @@ async function byHeight(height: number): Promise { // } export const blocks = { - byHeight, blockAverageDelay + byHeight } From 87100a753621bd0d95c0e0dd05b525b897d5a27a Mon Sep 17 00:00:00 2001 From: nunesinc Date: Wed, 11 May 2022 22:39:13 -0300 Subject: [PATCH 72/72] add:testing delay and blocks with error --- junit.xml | 22 ++++- package.json | 10 +- src/blockchain/blocks/block.types.ts | 4 +- src/blockchain/blocks/service.blocks.ts | 116 ++++++++++++------------ test/blockchain/blocks/blockOne.test.ts | 52 +++++++---- 5 files changed, 123 insertions(+), 81 deletions(-) diff --git a/junit.xml b/junit.xml index edaf30d..d3e00ba 100644 --- a/junit.xml +++ b/junit.xml @@ -1,3 +1,23 @@ - + + + + + + + + + + Error: expect(received).toEqual(expected) // deep equality + +Expected: true +Received: false + at /workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:99:34 + at Generator.next (<anonymous>) + at fulfilled (/workspaces/lunesjs/test/blockchain/blocks/blockOne.test.ts:5:58) + at processTicksAndRejections (node:internal/process/task_queues:96:5) + + + + \ No newline at end of file diff --git a/package.json b/package.json index ed9c7a7..55a42ce 100644 --- a/package.json +++ b/package.json @@ -26,15 +26,15 @@ "build": "tsc" }, "devDependencies": { - "@types/jest": "^27.0.3", - "jest": "^27.4.5", + "@types/jest": "^27.5.1", + "jest": "^28.1.0", "jest-junit": "^13.2.0", "prettier": "2.6.2", - "ts-jest": "^27.1.2", - "typescript": "^4.5.4" + "ts-jest": "^28.0.2", + "typescript": "^4.6.4" }, "dependencies": { - "axios": "^0.26.1", + "axios": "^0.27.2", "lunesrs": "^1.9.4" } } diff --git a/src/blockchain/blocks/block.types.ts b/src/blockchain/blocks/block.types.ts index 0e67c0a..c95718e 100644 --- a/src/blockchain/blocks/block.types.ts +++ b/src/blockchain/blocks/block.types.ts @@ -30,6 +30,7 @@ interface IHeader { version: number height: number fee: number + //delay: number //testando colocar delay não foi } export interface IBlock { @@ -72,7 +73,8 @@ export function mountBlock( blocksize: blockchainResponse.data.blocksize, version: blockchainResponse.data.version, height: blockchainResponse.data.height, - fee: blockchainResponse.data.fee + fee: blockchainResponse.data.fee, + //delay: blockchainResponse.data.delay //testando colocar delay não foi }, body: blockchainResponse.data.transactions } diff --git a/src/blockchain/blocks/service.blocks.ts b/src/blockchain/blocks/service.blocks.ts index 0ba150a..81cd83f 100644 --- a/src/blockchain/blocks/service.blocks.ts +++ b/src/blockchain/blocks/service.blocks.ts @@ -65,7 +65,7 @@ async function byHeight(height: number): Promise { // * ``` // * // * If server off line, return error -// * @returns Promise . +// * @returns Promise . // */ // export async function actualHeight(): Promise { @@ -79,64 +79,66 @@ async function byHeight(height: number): Promise { // }) // return lunesNode.get(`/blocks/height`) // } -/* return new Promise(async (resolve) => { - axios - .get(url) - .then((r) => { - resolve(r.data.height) - }) - .catch(() => { - resolve(-1) - }) - }) -*/ +// /* return new Promise(async (resolve) => { +// axios +// .get(url) +// .then((r) => { +// resolve(r.data.height) +// }) +// .catch(() => { +// resolve(-1) +// }) +// }) +// */ -// /** -// * # Average delay in milliseconds between last blockNum blocks starting from block with signature -// * {@link blockAverageDelay} -// * -// * ## Example -// * -// * ```javascript -// * import * as lunesjs from "lunesjs" -// * -// * const block = lunesjs.blockchain.blocks.blockaverageDelay("dsfs112", 1) -// * ``` -// * @type {signature: string, blockNum: number } -// * -// * --- signature = signature block - Base58-encoded signature -// * -// * --- blockNum = 1 to 9 - Number of blocks to count delay -// * @returns Promise -// */ -// export async function blockAverageDelay( -// signature: string, -// blockNum: number -// ): Promise { +/** + * # Average delay in milliseconds between last blockNum blocks starting from block with signature + * {@link blockAverageDelay} + * + * ## Example + * + * ```javascript + * import * as lunesjs from "lunesjs" + * + * const block = lunesjs.blockchain.blocks.blockaverageDelay("dsfs112", 1) + * ``` + * @type {signature: string, blockNum: number } + * + * --- signature = signature block - Base58-encoded signature + * + * --- blockNum = 1 to 9 - Number of blocks to count delay + * @returns Promise + */ +export async function blockAverageDelay( + signature: string, + blockNum: number +): Promise { -// if (blockNum <= 0 || blockNum > 9) { -// const error: IBlockError = { -// isSuccess: false, -// response: { -// codeError: -1, -// message: `the blockNum cannot be less than or equal to zero or greater than nine` -// } -// } -// return error -// } else { -// lunesNode.interceptors.response.use( -// (r) => { -// return Promise.resolve(r.data.delay) -// }, -// (blockchainError) => { -// console.log(blockchainError) -// return Promise.resolve(mountErr(blockchainError)) -// } -// ) -// return lunesNode.get(`/blocks/delay/${signature}/${blockNum}`) -// } -// } + if (blockNum <= 0 || blockNum > 9) { + const error: IBlockError = { + isSuccess: false, + response: { + codeError: -1, + message: `the blockNum cannot be less than or equal to zero or greater than nine` + } + } + return error + } else { + lunesNode.interceptors.response.use( + (r) => { + //return r.data.delay + return Promise.resolve(r.data.delay) + //promise não funciona em undefined + }, + (blockchainError) => { + console.log(blockchainError) + return Promise.resolve(mountErr(blockchainError)) + } + ) + return lunesNode.get(`/blocks/delay/${signature}/${blockNum}`) + } +} @@ -476,5 +478,5 @@ async function byHeight(height: number): Promise { // } export const blocks = { - byHeight + byHeight, blockAverageDelay } diff --git a/test/blockchain/blocks/blockOne.test.ts b/test/blockchain/blocks/blockOne.test.ts index 56006f9..4b9946f 100644 --- a/test/blockchain/blocks/blockOne.test.ts +++ b/test/blockchain/blocks/blockOne.test.ts @@ -1,6 +1,8 @@ import lunesjs from "../../../src/index" + describe("blockByHeight function- suite test block service", () => { + it("blockByHeight - block testing error, passing -1 number", async () => { const result = await lunesjs.blockchain.blocks.byHeight(-1) @@ -67,31 +69,47 @@ describe("blockByHeight function- suite test block service", () => { // describe("actualHeight function - suite test block service", () => { // it("actualHeight - see height block from node ", async () => { // const result = await lunesjs.blockchain.blocks.actualHeight() -// expect(result).toBeGreaterThan(0) -// }) -// }) +// //expect(result).toBeGreaterThan(0) +// // somente o teste individual, funciona, quando roda o yarn t blockOne.test.ts quebra os demais testes +// //expect(result).toEqual(expect.any(Number)); +// // somente o teste individual, funciona, quando roda o yarn t blockOne.test.ts quebra os demais testes -// describe("blockAverageDelay function - suite test block service", () => { -// it("blockAverageDelay - see Average delay ", async () => { -// const result = await lunesjs.blockchain.blocks.blockAverageDelay( -// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", -// 1 -// ) -// expect(result).toStrictEqual(1011) -// }) +// expect(result).toContain(result) +// //verificar o valor recebido e o valor esperado, somente para entender os testes acima + -// it("blockAverageDelay - blockNum >9 error ", async () => { -// const result = await lunesjs.blockchain.blocks.blockAverageDelay( -// "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", -// 10 -// ) -// expect(result.isSuccess).toEqual(false) // }) // }) + + + +describe("blockAverageDelay function - suite test block service", () => { + + it("blockAverageDelay - see Average delay ", async () => { + + const result = await lunesjs.blockchain.blocks.blockAverageDelay( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + 1 + ) + //expect(result).toStrictEqual(1011) + expect(result.isSuccess).toEqual(true) + + }) + + it("blockAverageDelay - blockNum >9 error ", async () => { + + const result = await lunesjs.blockchain.blocks.blockAverageDelay( + "3TzngGgQ2xsC1huRantEWNZzG3FoCPA5rCRdqenCy1jGxyRb16nb6p4Xy9ZM4FnypTdWXE31QsZ5EkTTnzTDrjKi", + 10 + ) + expect(result.isSuccess).toEqual(false) + }) +}) + // describe("blockSeq function - suite test block service", () => { // it("blockSeq - Get block at specified heights ", async () => { // const result = await blocks.blockSeq(1, 2)