From 68381729bb1a50815879f8020134bec9664dbc45 Mon Sep 17 00:00:00 2001 From: mlibre Date: Fri, 31 May 2024 17:54:19 +0330 Subject: [PATCH] small fixes --- assets/bruno/goodchain/block/by index.bru | 4 +- .../transactions/add transaction.bru | 8 +- .../transactions/signing transaction.bru | 6 +- assets/db/nodes/nodes.json | 6 ++ dist/API/blockchain.js | 2 +- dist/API/blockchain.js.map | 2 +- dist/API/routes/block.js | 64 ++++++++------- dist/API/routes/block.js.map | 2 +- dist/API/routes/chain.js | 10 +-- dist/API/routes/chain.js.map | 2 +- dist/API/routes/mine.js | 4 +- dist/API/routes/mine.js.map | 2 +- dist/API/routes/transaction.js | 13 +++- dist/API/routes/transaction.js.map | 2 +- dist/library/chain.js | 2 +- dist/library/main.js | 2 +- dist/library/main.js.map | 2 +- package.json | 2 +- src/API/blockchain.ts | 2 +- src/API/routes/block.ts | 77 +++++++++++-------- src/API/routes/chain.ts | 10 +-- src/API/routes/mine.ts | 4 +- src/API/routes/transaction.ts | 15 +++- src/library/chain.ts | 2 +- src/library/main.ts | 2 +- 25 files changed, 147 insertions(+), 100 deletions(-) create mode 100644 assets/db/nodes/nodes.json diff --git a/assets/bruno/goodchain/block/by index.bru b/assets/bruno/goodchain/block/by index.bru index a366a8f..26d6247 100644 --- a/assets/bruno/goodchain/block/by index.bru +++ b/assets/bruno/goodchain/block/by index.bru @@ -5,13 +5,13 @@ meta { } get { - url: http://{{host}}:{{port}}/block?index=0 + url: http://{{host}}:{{port}}/block?index=1 body: json auth: none } query { - index: 0 + index: 1 } body:json { diff --git a/assets/bruno/goodchain/transactions/add transaction.bru b/assets/bruno/goodchain/transactions/add transaction.bru index c469dca..3e4bb6b 100644 --- a/assets/bruno/goodchain/transactions/add transaction.bru +++ b/assets/bruno/goodchain/transactions/add transaction.bru @@ -12,12 +12,12 @@ post { body:json { { - "from": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEACgkPwpxpA7+KD0dzG/y0dcgRdk4GnE4us/nqqEcyy/s=\n-----END PUBLIC KEY-----\n", - "to": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA47ytDBrGmxOnSs2zU2BVJCiWMvZqvKeDsqEKnXhLmSE=\n-----END PUBLIC KEY-----\n", + "from": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAQuJ8hp9ntC2z/q+i9TA60NzxLf5JGbSax76JWr+vp8A=\n-----END PUBLIC KEY-----\n", + "to": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEABYuR9ZVr8WRemSZX6RaTlXFmzMZ8Erx3OKsxGi3alXk=\n-----END PUBLIC KEY-----\n", "amount": 1, "fee": 0, "transaction_number": 3, - "signature": "340fbf0aa99321d53fbdbe9a491d7bb3c6b8db93a2341ec603a7ba1651c65c6645747418670024c85e11f983b00edd3665f36bcd0ca2529023c1ae04f5a7ae05", - "id": "72ddf62b-fcf4-4038-bd51-f5541fff4734" + "signature": "946f4396b70c4bd508a0369088c2a904be95803b5eb87e2a8a1437db7d5ad59f322dc98910e1012e6d3e585212a1a64c0ad52541576990b9da8024d6a7212404", + "id": "c945220c-ff65-4fbd-a046-6579589eca14" } } diff --git a/assets/bruno/goodchain/transactions/signing transaction.bru b/assets/bruno/goodchain/transactions/signing transaction.bru index e4c8a3b..5ac59e4 100644 --- a/assets/bruno/goodchain/transactions/signing transaction.bru +++ b/assets/bruno/goodchain/transactions/signing transaction.bru @@ -12,11 +12,11 @@ post { body:json { { - "from": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEACgkPwpxpA7+KD0dzG/y0dcgRdk4GnE4us/nqqEcyy/s=\n-----END PUBLIC KEY-----\n", - "to": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA47ytDBrGmxOnSs2zU2BVJCiWMvZqvKeDsqEKnXhLmSE=\n-----END PUBLIC KEY-----\n", + "from": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAQuJ8hp9ntC2z/q+i9TA60NzxLf5JGbSax76JWr+vp8A=\n-----END PUBLIC KEY-----\n", + "to": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEABYuR9ZVr8WRemSZX6RaTlXFmzMZ8Erx3OKsxGi3alXk=\n-----END PUBLIC KEY-----\n", "amount": 1, "fee": 0, "transaction_number": 3, - "privateKey": "-----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEINdEAQV5NJfOXe70utNxRxBzEJLautvy83MOoUHKBTa0\n-----END PRIVATE KEY-----\n" + "privateKey": "-----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEIG1YwIi76G+K6C0HKg+lH+Q69k03Kp/D8bKXcX6OYuq1\n-----END PRIVATE KEY-----\n" } } diff --git a/assets/db/nodes/nodes.json b/assets/db/nodes/nodes.json new file mode 100644 index 0000000..7383971 --- /dev/null +++ b/assets/db/nodes/nodes.json @@ -0,0 +1,6 @@ +{ + "list": [ + "http://127.0.0.1:3001" + ], + "hostUrl": "http://127.0.0.1:3000" +} \ No newline at end of file diff --git a/dist/API/blockchain.js b/dist/API/blockchain.js index 56a703a..efe2b1a 100644 --- a/dist/API/blockchain.js +++ b/dist/API/blockchain.js @@ -15,6 +15,6 @@ const blockchain = new Blockchain({ minerPublicKey: minerKeys.publicKey, consensus }); -blockchain.init(); +await blockchain.init(); export default blockchain; //# sourceMappingURL=blockchain.js.map \ No newline at end of file diff --git a/dist/API/blockchain.js.map b/dist/API/blockchain.js.map index 3d6a656..21a535b 100644 --- a/dist/API/blockchain.js.map +++ b/dist/API/blockchain.js.map @@ -1 +1 @@ -{"version":3,"file":"blockchain.js","sourceRoot":"","sources":["../../src/API/blockchain.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,SAAS,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC9E,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAElC,MAAM,SAAS,GAAG,YAAY,CAAE,aAAa,EAAE,MAAM,CAAC,eAAe,EAAE,CAAE,CAAC;AAE1E,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;IACjC,MAAM;IACN,KAAK,EAAE;QACN,IAAI,EAAE,SAAS;QACf,OAAO;KACP;IACD,SAAS,EAAE,IAAI;IACf,cAAc,EAAE,SAAS,CAAC,SAAS;IACnC,SAAS;CACT,CAAC,CAAC;AACH,UAAU,CAAC,IAAI,EAAE,CAAC;AAElB,eAAe,UAAU,CAAC"} \ No newline at end of file +{"version":3,"file":"blockchain.js","sourceRoot":"","sources":["../../src/API/blockchain.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,SAAS,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC9E,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAElC,MAAM,SAAS,GAAG,YAAY,CAAE,aAAa,EAAE,MAAM,CAAC,eAAe,EAAE,CAAE,CAAC;AAE1E,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;IACjC,MAAM;IACN,KAAK,EAAE;QACN,IAAI,EAAE,SAAS;QACf,OAAO;KACP;IACD,SAAS,EAAE,IAAI;IACf,cAAc,EAAE,SAAS,CAAC,SAAS;IACnC,SAAS;CACT,CAAC,CAAC;AACH,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;AAExB,eAAe,UAAU,CAAC"} \ No newline at end of file diff --git a/dist/API/routes/block.js b/dist/API/routes/block.js index e65bc55..898dfcf 100644 --- a/dist/API/routes/block.js +++ b/dist/API/routes/block.js @@ -3,40 +3,52 @@ import axios from "axios"; import blockchain from "../blockchain.js"; import { toNum } from "../utils.js"; const router = express.Router(); -router.get("/", (req, res) => { - const { list, to, index, from, firstAndLast } = req.query; - if (!index && !from && !to && !list && !firstAndLast) { - res.json(blockchain.chain.latestBlock); - return; - } - if (index) { - res.json(blockchain.chain.get(toNum(index))); - return; +router.get("/", async (req, res, next) => { + try { + const { list, to, index, from, firstAndLast } = req.query; + if (!index && !from && !to && !list && !firstAndLast) { + res.json(await blockchain.chain.latestBlock()); + return; + } + if (index) { + res.json(await blockchain.chain.get(toNum(index))); + return; + } + if (from || to) { + const result = await blockchain.getBlocks(toNum(from), toNum(to)); + res.json(result); + return; + } + if (list) { + const blocks = []; + for (const index of await list.toString().split(",")) { + blocks.push(await blockchain.chain.get(toNum(index))); + } + res.json(blocks); + return; + } + if (firstAndLast) { + res.json([await blockchain.chain.get(0), await blockchain.chain.latestBlock()]); + return; + } } - if (from || to) { - res.json(blockchain.getBlocks(toNum(from), toNum(to))); - return; + catch (error) { + next(error); } - if (list) { - const blocks = list.toString().split(",").map((index) => { - return blockchain.chain.get(toNum(index)); - }); - res.json(blocks); - return; +}); +router.post("/", async (req, res, next) => { + try { + const block = await blockchain.addBlock(req.body); + res.json(block); } - if (firstAndLast) { - res.json([blockchain.chain.get(0), blockchain.chain.latestBlock]); - return; + catch (error) { + next(error); } }); -router.post("/", (req, res) => { - const block = blockchain.addBlock(req.body); - res.json(block); -}); router.get("/broadcast", async (req, res) => { for (const node of blockchain.nodes.list) { try { - await axios.post(`${node}/block`, blockchain.chain.latestBlock); + await axios.post(`${node}/block`, await blockchain.chain.latestBlock()); } catch (error) { if (error instanceof Error) { diff --git a/dist/API/routes/block.js.map b/dist/API/routes/block.js.map index c06f468..b64bed2 100644 --- a/dist/API/routes/block.js.map +++ b/dist/API/routes/block.js.map @@ -1 +1 @@ -{"version":3,"file":"block.js","sourceRoot":"","sources":["../../../src/API/routes/block.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"block.js","sourceRoot":"","sources":["../../../src/API/routes/block.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/API/routes/chain.js b/dist/API/routes/chain.js index 7047d64..283171f 100644 --- a/dist/API/routes/chain.js +++ b/dist/API/routes/chain.js @@ -18,7 +18,7 @@ router.post("/update", async function (req, res) { index: currentIndex + 1 } }); - blockchain.verifyCandidateBlock(response.data); + await blockchain.verifyCandidateBlock(response.data); nodesLatestBlocks.push(response.data); } catch (error) { @@ -27,13 +27,13 @@ router.post("/update", async function (req, res) { } const chosenBlockResult = blockchain.consensus.chooseBlock(nodesLatestBlocks); if (chosenBlockResult) { - blockchain.addBlock(chosenBlockResult); + await blockchain.addBlock(chosenBlockResult); } else { continueUpdate = false; } } - res.send(blockchain.chain.latestBlock); + res.send(await blockchain.chain.latestBlock()); }); router.put("/sync", async function (req, res) { const myLastestBlock = await blockchain.chain.latestBlock(); @@ -52,12 +52,12 @@ router.put("/sync", async function (req, res) { } const allNodesLastBlocks = [ ...otherNodesLastestBlocks, - { block: blockchain.chain.latestBlock, node: blockchain.nodes.hostUrl } + { block: await blockchain.chain.latestBlock(), node: blockchain.nodes.hostUrl } ]; const chosenNodeBlock = blockchain.consensus.chooseChain(allNodesLastBlocks); if (chosenNodeBlock) { const chosenChain = await axios.get(`${chosenNodeBlock.node}/chain`); - blockchain.replaceChain(chosenChain.data); + await blockchain.replaceChain(chosenChain.data); } res.send("ok"); }); diff --git a/dist/API/routes/chain.js.map b/dist/API/routes/chain.js.map index 177d3c3..ae1a06d 100644 --- a/dist/API/routes/chain.js.map +++ b/dist/API/routes/chain.js.map @@ -1 +1 @@ -{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../src/API/routes/chain.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../src/API/routes/chain.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/API/routes/mine.js b/dist/API/routes/mine.js index 0380005..8200ecd 100644 --- a/dist/API/routes/mine.js +++ b/dist/API/routes/mine.js @@ -1,8 +1,8 @@ import express from "express"; const router = express.Router(); import blockchain from "../blockchain.js"; -router.get("/", function (req, res) { - const block = blockchain.mineNewBlock(); +router.get("/", async function (req, res) { + const block = await blockchain.mineNewBlock(); res.send(block); }); export default router; diff --git a/dist/API/routes/mine.js.map b/dist/API/routes/mine.js.map index 68af6f1..bcd45a2 100644 --- a/dist/API/routes/mine.js.map +++ b/dist/API/routes/mine.js.map @@ -1 +1 @@ -{"version":3,"file":"mine.js","sourceRoot":"","sources":["../../../src/API/routes/mine.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AAChC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAE1C,MAAM,CAAC,GAAG,CAAE,GAAG,EAAE,UAAW,GAAG,EAAE,GAAG;IAEnC,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;IACxC,GAAG,CAAC,IAAI,CAAE,KAAK,CAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"} \ No newline at end of file +{"version":3,"file":"mine.js","sourceRoot":"","sources":["../../../src/API/routes/mine.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AAChC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAE1C,MAAM,CAAC,GAAG,CAAE,GAAG,EAAE,KAAK,WAAY,GAAG,EAAE,GAAG;IAEzC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC;IAC9C,GAAG,CAAC,IAAI,CAAE,KAAK,CAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"} \ No newline at end of file diff --git a/dist/API/routes/transaction.js b/dist/API/routes/transaction.js index 9d44db1..33dfc38 100644 --- a/dist/API/routes/transaction.js +++ b/dist/API/routes/transaction.js @@ -6,15 +6,20 @@ import axios from "axios"; router.get("/", function (req, res) { res.json(blockchain.transactionPool); }); -router.post("/", function (req, res) { - const blockNumber = blockchain.addTransaction(req.body); - res.send(blockNumber.toString()); +router.post("/", async function (req, res, next) { + try { + const blockNumber = await blockchain.addTransaction(req.body); + res.send(blockNumber.toString()); + } + catch (error) { + next(error); + } }); router.get("/update", async function (req, res) { try { for (const node of blockchain.nodes.list) { const response = await axios.get(`${node}/transaction`); - blockchain.addTransactions(response.data); + await blockchain.addTransactions(response.data); } } catch (error) { diff --git a/dist/API/routes/transaction.js.map b/dist/API/routes/transaction.js.map index d438c17..e272070 100644 --- a/dist/API/routes/transaction.js.map +++ b/dist/API/routes/transaction.js.map @@ -1 +1 @@ -{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/API/routes/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AAChC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,WAAW,MAAM,8BAA8B,CAAC;AACvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,GAAG,CAAE,GAAG,EAAE,UAAW,GAAG,EAAE,GAAG;IAEnC,GAAG,CAAC,IAAI,CAAE,UAAU,CAAC,eAAe,CAAE,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAE,GAAG,EAAE,UAAW,GAAG,EAAE,GAAG;IAEpC,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAE,GAAG,CAAC,IAAI,CAAE,CAAC;IAC1D,GAAG,CAAC,IAAI,CAAE,WAAW,CAAC,QAAQ,EAAE,CAAE,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,GAAG,CAAE,SAAS,EAAE,KAAK,WAAY,GAAG,EAAE,GAAG;IAE/C,IACA,CAAC;QACA,KAAM,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,EACzC,CAAC;YACA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAE,GAAG,IAAI,cAAc,CAAE,CAAC;YAC1D,UAAU,CAAC,eAAe,CAAE,QAAQ,CAAC,IAAI,CAAE,CAAC;QAC7C,CAAC;IACF,CAAC;IACD,OAAQ,KAAK,EACb,CAAC;QACA,OAAO,CAAC,KAAK,CAAE,KAAK,CAAE,CAAC;IACxB,CAAC;IACD,GAAG,CAAC,IAAI,CAAE,UAAU,CAAC,eAAe,CAAE,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAE,OAAO,EAAE,UAAW,GAAG,EAAE,GAAG;IAExC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAE,GAAG,CAAC,IAAI,CAAE,CAAC;IAChD,WAAW,CAAC,IAAI,CAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAE,CAAC;IACxC,GAAG,CAAC,IAAI,CAAE,WAAW,CAAC,IAAI,CAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"} \ No newline at end of file +{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/API/routes/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AAChC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,WAAW,MAAM,8BAA8B,CAAC;AACvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,GAAG,CAAE,GAAG,EAAE,UAAW,GAAG,EAAE,GAAG;IAEnC,GAAG,CAAC,IAAI,CAAE,UAAU,CAAC,eAAe,CAAE,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAE,GAAG,EAAE,KAAK,WAAY,GAAG,EAAE,GAAG,EAAE,IAAI;IAEhD,IACA,CAAC;QACA,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAE,GAAG,CAAC,IAAI,CAAE,CAAC;QAChE,GAAG,CAAC,IAAI,CAAE,WAAW,CAAC,QAAQ,EAAE,CAAE,CAAC;IACpC,CAAC;IACD,OAAQ,KAAK,EACb,CAAC;QACA,IAAI,CAAE,KAAK,CAAE,CAAC;IACf,CAAC;AACF,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,GAAG,CAAE,SAAS,EAAE,KAAK,WAAY,GAAG,EAAE,GAAG;IAE/C,IACA,CAAC;QACA,KAAM,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,EACzC,CAAC;YACA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAE,GAAG,IAAI,cAAc,CAAE,CAAC;YAC1D,MAAM,UAAU,CAAC,eAAe,CAAE,QAAQ,CAAC,IAAI,CAAE,CAAC;QACnD,CAAC;IACF,CAAC;IACD,OAAQ,KAAK,EACb,CAAC;QACA,OAAO,CAAC,KAAK,CAAE,KAAK,CAAE,CAAC;IACxB,CAAC;IACD,GAAG,CAAC,IAAI,CAAE,UAAU,CAAC,eAAe,CAAE,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAE,OAAO,EAAE,UAAW,GAAG,EAAE,GAAG;IAExC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAE,GAAG,CAAC,IAAI,CAAE,CAAC;IAChD,WAAW,CAAC,IAAI,CAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAE,CAAC;IACxC,GAAG,CAAC,IAAI,CAAE,WAAW,CAAC,IAAI,CAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"} \ No newline at end of file diff --git a/dist/library/chain.js b/dist/library/chain.js index 43f725f..81deb1b 100644 --- a/dist/library/chain.js +++ b/dist/library/chain.js @@ -34,7 +34,7 @@ export default class ChainStore { } async getRange(from, to) { const blocks = []; - to = to ?? await this.length(); + to = to || await this.length(); for (let i = from; i <= to; i++) { blocks.push(await this.get(i)); } diff --git a/dist/library/main.js b/dist/library/main.js index 3803cba..980f155 100644 --- a/dist/library/main.js +++ b/dist/library/main.js @@ -74,7 +74,7 @@ export default class Blockchain { } async addBlock(block) { const newBlock = blockify(block); - this.verifyCandidateBlock(newBlock); + await this.verifyCandidateBlock(newBlock); const actions = await this.wallet.processTrxActionList(newBlock.transactions); actions.push(this.chain.pushAction(newBlock)); await this.database.batch(actions); diff --git a/dist/library/main.js.map b/dist/library/main.js.map index 0b8fa0e..fb1ed7c 100644 --- a/dist/library/main.js.map +++ b/dist/library/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/library/main.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/library/main.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index f5b0851..8513ff0 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "goodchain", - "version": "3.0.2", + "version": "3.0.3", "description": "GoodChain: Blockchain for Everyone", "main": "index.js", "type": "module", diff --git a/src/API/blockchain.ts b/src/API/blockchain.ts index 2854d49..945313e 100644 --- a/src/API/blockchain.ts +++ b/src/API/blockchain.ts @@ -17,6 +17,6 @@ const blockchain = new Blockchain({ minerPublicKey: minerKeys.publicKey, consensus }); -blockchain.init(); +await blockchain.init(); export default blockchain; \ No newline at end of file diff --git a/src/API/routes/block.ts b/src/API/routes/block.ts index 90c61c4..5ccbdd9 100644 --- a/src/API/routes/block.ts +++ b/src/API/routes/block.ts @@ -5,44 +5,61 @@ import { toNum } from "../utils.js"; const router = express.Router(); -router.get( "/", ( req, res ) => +router.get( "/", async ( req, res, next ) => { - const { list, to, index, from, firstAndLast } = req.query; - if ( !index && !from && !to && !list && !firstAndLast ) + try { - res.json( blockchain.chain.latestBlock ); - return; - } - if ( index ) - { - res.json( blockchain.chain.get( toNum( index ) ) ); - return; - } - if ( from || to ) - { - res.json( blockchain.getBlocks( toNum( from ), toNum( to ) ) ); - return; - } - if ( list ) - { - const blocks = list.toString().split( "," ).map( ( index ) => + const { list, to, index, from, firstAndLast } = req.query; + if ( !index && !from && !to && !list && !firstAndLast ) { - return blockchain.chain.get( toNum( index ) ); - }); - res.json( blocks ); - return; + res.json( await blockchain.chain.latestBlock() ); + return; + } + if ( index ) + { + res.json( await blockchain.chain.get( toNum( index ) ) ); + return; + } + if ( from || to ) + { + const result = await blockchain.getBlocks( toNum( from ), toNum( to ) ); + res.json( result ); + return; + } + if ( list ) + { + const blocks = []; + for ( const index of await list.toString().split( "," ) ) + { + blocks.push( await blockchain.chain.get( toNum( index ) ) ); + } + res.json( blocks ); + return; + } + if ( firstAndLast ) + { + res.json( [ await blockchain.chain.get( 0 ), await blockchain.chain.latestBlock() ] ); + return; + } } - if ( firstAndLast ) + catch ( error ) { - res.json( [ blockchain.chain.get( 0 ), blockchain.chain.latestBlock ] ); - return; + next( error ); } }); -router.post( "/", ( req, res ) => +router.post( "/", async ( req, res, next ) => { - const block = blockchain.addBlock( req.body ); - res.json( block ); + try + { + const block = + await blockchain.addBlock( req.body ); + res.json( block ); + } + catch ( error ) + { + next( error ); + } }); router.get( "/broadcast", async ( req, res ) => @@ -51,7 +68,7 @@ router.get( "/broadcast", async ( req, res ) => { try { - await axios.post( `${node}/block`, blockchain.chain.latestBlock ); + await axios.post( `${node}/block`, await blockchain.chain.latestBlock() ); } catch ( error ) { diff --git a/src/API/routes/chain.ts b/src/API/routes/chain.ts index 04194c3..4def8a3 100644 --- a/src/API/routes/chain.ts +++ b/src/API/routes/chain.ts @@ -25,7 +25,7 @@ router.post( "/update", async function ( req, res ) index: currentIndex + 1 } }); - blockchain.verifyCandidateBlock( response.data ); + await blockchain.verifyCandidateBlock( response.data ); nodesLatestBlocks.push( response.data ); } catch ( error ) @@ -37,14 +37,14 @@ router.post( "/update", async function ( req, res ) const chosenBlockResult = blockchain.consensus.chooseBlock( nodesLatestBlocks ); if ( chosenBlockResult ) { - blockchain.addBlock( chosenBlockResult ); + await blockchain.addBlock( chosenBlockResult ); } else { continueUpdate = false; } } - res.send( blockchain.chain.latestBlock ); + res.send( await blockchain.chain.latestBlock() ); }); router.put( "/sync", async function ( req, res ) @@ -73,13 +73,13 @@ router.put( "/sync", async function ( req, res ) } const allNodesLastBlocks = [ ...otherNodesLastestBlocks, - { block: blockchain.chain.latestBlock, node: blockchain.nodes.hostUrl } + { block: await blockchain.chain.latestBlock(), node: blockchain.nodes.hostUrl } ]; const chosenNodeBlock = blockchain.consensus.chooseChain( allNodesLastBlocks ); if ( chosenNodeBlock ) { const chosenChain = await axios.get( `${chosenNodeBlock.node}/chain` ); - blockchain.replaceChain( chosenChain.data ); + await blockchain.replaceChain( chosenChain.data ); } res.send( "ok" ); }); diff --git a/src/API/routes/mine.ts b/src/API/routes/mine.ts index 42f6053..5a6540d 100644 --- a/src/API/routes/mine.ts +++ b/src/API/routes/mine.ts @@ -2,9 +2,9 @@ import express from "express"; const router = express.Router(); import blockchain from "../blockchain.js"; -router.get( "/", function ( req, res ) +router.get( "/", async function ( req, res ) { - const block = blockchain.mineNewBlock(); + const block = await blockchain.mineNewBlock(); res.send( block ); }); diff --git a/src/API/routes/transaction.ts b/src/API/routes/transaction.ts index 4b9aec2..1b887f2 100644 --- a/src/API/routes/transaction.ts +++ b/src/API/routes/transaction.ts @@ -9,10 +9,17 @@ router.get( "/", function ( req, res ) res.json( blockchain.transactionPool ); }); -router.post( "/", function ( req, res ) +router.post( "/", async function ( req, res, next ) { - const blockNumber = blockchain.addTransaction( req.body ); - res.send( blockNumber.toString() ); + try + { + const blockNumber = await blockchain.addTransaction( req.body ); + res.send( blockNumber.toString() ); + } + catch ( error ) + { + next( error ); + } }); router.get( "/update", async function ( req, res ) @@ -22,7 +29,7 @@ router.get( "/update", async function ( req, res ) for ( const node of blockchain.nodes.list ) { const response = await axios.get( `${node}/transaction` ); - blockchain.addTransactions( response.data ); + await blockchain.addTransactions( response.data ); } } catch ( error ) diff --git a/src/library/chain.ts b/src/library/chain.ts index 9d23eb1..2fe7623 100644 --- a/src/library/chain.ts +++ b/src/library/chain.ts @@ -52,7 +52,7 @@ export default class ChainStore async getRange ( from: number, to?: number ): Promise { const blocks: BlockData[] = []; - to = to ?? await this.length(); + to = to || await this.length(); for ( let i = from; i <= to; i++ ) { blocks.push( await this.get( i ) ); diff --git a/src/library/main.ts b/src/library/main.ts index d063e2b..be7145d 100644 --- a/src/library/main.ts +++ b/src/library/main.ts @@ -89,7 +89,7 @@ export default class Blockchain async addBlock ( block: BlockData ) { const newBlock = blockify( block ); - this.verifyCandidateBlock( newBlock ); + await this.verifyCandidateBlock( newBlock ); const actions = await this.wallet.processTrxActionList( newBlock.transactions ); actions.push( this.chain.pushAction( newBlock ) ); await this.database.batch( actions );