diff --git a/dist/library/wallet.js b/dist/library/wallet.js index 90749a4..ab3f756 100644 --- a/dist/library/wallet.js +++ b/dist/library/wallet.js @@ -91,6 +91,7 @@ class Wallet { if (this.wallet.blockNumber !== proposedBlock.index) { throw new Error("Block number mismatch", { cause: { proposedBlock, wallet: this.wallet } }); } + return true; } reCalculateWallet(chain) { this.wipe(); diff --git a/dist/library/wallet.js.map b/dist/library/wallet.js.map index dbc523e..8b17fda 100644 --- a/dist/library/wallet.js.map +++ b/dist/library/wallet.js.map @@ -1 +1 @@ -{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/library/wallet.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/library/wallet.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/test/blockchain.test.js b/dist/test/blockchain.test.js index 271ad8c..f0390db 100644 --- a/dist/test/blockchain.test.js +++ b/dist/test/blockchain.test.js @@ -23,6 +23,7 @@ describe("Blockchain Test Suite", () => { test("mining first block", () => { const newBlock = blockchain.mineNewBlock(); // miner: 200 expect(newBlock.index).toBe(1); + expect(blockchain.chain.validateChain()).toBe(true); }); test("Sending a transaction from miner to sender and mining a new block", () => { const transaction1 = new Transaction({ @@ -37,6 +38,7 @@ describe("Blockchain Test Suite", () => { blockchain.addTransaction(transaction1.data); const blockWithTransaction1 = blockchain.mineNewBlock(); // miner: 250, miner receives his own trx fee expect(blockWithTransaction1.transactions.length).toBe(2); // including coinbase transaction + expect(blockchain.chain.validateChain()).toBe(true); }); test("Sending a transaction from sender to receiver and mining a new block", () => { const transaction2 = new Transaction({ @@ -51,6 +53,9 @@ describe("Blockchain Test Suite", () => { blockchain.addTransaction(transaction2.data); const blockWithTransaction2 = blockchain.mineNewBlock(); // miner: 351 expect(blockWithTransaction2.transactions.length).toBe(2); // including coinbase transaction + expect(blockchain.chain.validateChain()).toBe(true); + expect(blockchain.wallet.checkFinalDBState(blockWithTransaction2)).toBe(true); + expect(blockchain.chain.checkFinalDBState(blockWithTransaction2)).toBe(true); }); test("Validating the final state of the blockchain", () => { const finalStateValid = blockchain.chain.validateChain(); @@ -129,6 +134,50 @@ describe("Blockchain Test Suite", () => { } } }); + test("Handling transaction with zero amount", () => { + const transaction6 = new Transaction({ + from: senderKeys.publicKey, + to: receiverKeys.publicKey, + amount: 0, + fee: 1, + transaction_number: 3, + signature: null + }); + transaction6.sign(senderKeys.privateKey); + try { + blockchain.addTransaction(transaction6.data); + } + catch (e) { + if (e instanceof Error) { + expect(e.message).toBe("Invalid transaction amount"); + } + else { + throw e; + } + } + }); + test("Handling transaction with negative amount", () => { + const transaction7 = new Transaction({ + from: senderKeys.publicKey, + to: receiverKeys.publicKey, + amount: -10, + fee: 1, + transaction_number: 4, + signature: null + }); + transaction7.sign(senderKeys.privateKey); + try { + blockchain.addTransaction(transaction7.data); + } + catch (e) { + if (e instanceof Error) { + expect(e.message).toBe("Invalid amount"); + } + else { + throw e; + } + } + }); }); function cleanTestDB() { if (fs.existsSync(TEST_DB_PATH)) { diff --git a/dist/test/blockchain.test.js.map b/dist/test/blockchain.test.js.map index 8bb8dff..0ee1622 100644 --- a/dist/test/blockchain.test.js.map +++ b/dist/test/blockchain.test.js.map @@ -1 +1 @@ -{"version":3,"file":"blockchain.test.js","sourceRoot":"","sources":["../../src/test/blockchain.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"blockchain.test.js","sourceRoot":"","sources":["../../src/test/blockchain.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/library/wallet.ts b/src/library/wallet.ts index 255bc27..1e63b1b 100644 --- a/src/library/wallet.ts +++ b/src/library/wallet.ts @@ -123,13 +123,14 @@ class Wallet } } - checkFinalDBState ( proposedBlock: BlockData ): void + checkFinalDBState ( proposedBlock: BlockData ): boolean { this.reloadDB(); if ( this.wallet.blockNumber !== proposedBlock.index ) { throw new Error( "Block number mismatch", { cause: { proposedBlock, wallet: this.wallet } }); } + return true; } reCalculateWallet ( chain: BlockData[] ): void diff --git a/src/test/blockchain.test.ts b/src/test/blockchain.test.ts index 5c3a6b1..5fa192a 100644 --- a/src/test/blockchain.test.ts +++ b/src/test/blockchain.test.ts @@ -32,6 +32,7 @@ describe( "Blockchain Test Suite", () => { const newBlock = blockchain.mineNewBlock(); // miner: 200 expect( newBlock.index ).toBe( 1 ); + expect( blockchain.chain.validateChain() ).toBe( true ); }); test( "Sending a transaction from miner to sender and mining a new block", () => @@ -49,6 +50,7 @@ describe( "Blockchain Test Suite", () => const blockWithTransaction1 = blockchain.mineNewBlock(); // miner: 250, miner receives his own trx fee expect( blockWithTransaction1.transactions.length ).toBe( 2 ); // including coinbase transaction + expect( blockchain.chain.validateChain() ).toBe( true ); }); test( "Sending a transaction from sender to receiver and mining a new block", () => @@ -66,6 +68,9 @@ describe( "Blockchain Test Suite", () => const blockWithTransaction2 = blockchain.mineNewBlock(); // miner: 351 expect( blockWithTransaction2.transactions.length ).toBe( 2 ); // including coinbase transaction + expect( blockchain.chain.validateChain() ).toBe( true ); + expect( blockchain.wallet.checkFinalDBState( blockWithTransaction2 ) ).toBe( true ); + expect( blockchain.chain.checkFinalDBState( blockWithTransaction2 ) ).toBe( true ); }); test( "Validating the final state of the blockchain", () => @@ -167,6 +172,62 @@ describe( "Blockchain Test Suite", () => } } }); + + test( "Handling transaction with zero amount", () => + { + const transaction6 = new Transaction({ + from: senderKeys.publicKey, + to: receiverKeys.publicKey, + amount: 0, + fee: 1, + transaction_number: 3, + signature: null + }); + transaction6.sign( senderKeys.privateKey ); + try + { + blockchain.addTransaction( transaction6.data ); + } + catch ( e ) + { + if ( e instanceof Error ) + { + expect( e.message ).toBe( "Invalid transaction amount" ); + } + else + { + throw e; + } + } + }); + + test( "Handling transaction with negative amount", () => + { + const transaction7 = new Transaction({ + from: senderKeys.publicKey, + to: receiverKeys.publicKey, + amount: -10, + fee: 1, + transaction_number: 4, + signature: null + }); + transaction7.sign( senderKeys.privateKey ); + try + { + blockchain.addTransaction( transaction7.data ); + } + catch ( e ) + { + if ( e instanceof Error ) + { + expect( e.message ).toBe( "Invalid amount" ); + } + else + { + throw e; + } + } + }); }); function cleanTestDB ()