From 3762241bacb8daf984b2590d69fdea6f6c2be017 Mon Sep 17 00:00:00 2001 From: Phu Minh <53084840+nguyenphuminh@users.noreply.github.com> Date: Thu, 13 Jan 2022 21:27:22 +0700 Subject: [PATCH] Add files via upload --- jechain.js | 20 +++++++++++++++++--- package.json | 2 +- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/jechain.js b/jechain.js index c388d85..e2cdf13 100644 --- a/jechain.js +++ b/jechain.js @@ -27,10 +27,16 @@ class Block { } static hasValidTransactions(block, chain) { - let gas = 0, reward = 0; + let gas = 0, reward = 0, balances = {}; block.data.forEach(transaction => { + console.log(transaction); if (transaction.from !== MINT_PUBLIC_ADDRESS) { + if (!balances[transaction.from]) { + balances[transaction.from] = chain.getBalance(transaction.from); + } else { + balances[transaction.from] -= transaction.amount + transaction.gas; + } gas += transaction.gas; } else { reward = transaction.amount; @@ -40,7 +46,8 @@ class Block { return ( reward - gas === chain.reward && block.data.every(transaction => Transaction.isValid(transaction, chain)) && - block.data.filter(transaction => transaction.from === MINT_PUBLIC_ADDRESS).length === 1 + block.data.filter(transaction => transaction.from === MINT_PUBLIC_ADDRESS).length === 1 && + Object.values(balances).every(balance => balance >= 0) ); } } @@ -74,8 +81,15 @@ class Blockchain { } addTransaction(transaction) { + let balance = this.getBalance(transaction.from) - transaction.amount - transaction.gas; - if (Transaction.isValid(transaction, this)) { + this.transactions.forEach(tx => { + if (tx.from === transaction.from) { + balance -= tx.amount + tx.gas; + } + }); + + if (Transaction.isValid(transaction, this) && balance >= 0) { this.transactions.push(transaction); } } diff --git a/package.json b/package.json index c3a4506..7aecaa3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jecoin", - "version": "0.3.2", + "version": "0.3.3", "description": "", "main": "jecoin.js", "scripts": {