v6 initial commit, maybe more to follow

This commit is contained in:
Josip Milovac 2022-11-22 13:30:19 +11:00
parent 7f91be86c0
commit d6a32870bc
34 changed files with 16875 additions and 0 deletions

63
app/miner.js Normal file
View file

@ -0,0 +1,63 @@
const Wallet = require('../wallet');
const CoinTransaction = require('../wallet/CoinTransaction');
const MetaDataTransaction = require('../wallet/MetaDataTransaction');
//const MetaDataPool= require('../wallet/metaData-Pool');
const { MaxNumOfCoinTransactions, MaxNumOfMetadataTransactions} = require('../config');
var TransactionPointer;
var NumberOfClearedCoins;
var NumberOfClearedMeta;
class Miner {
constructor(blockchain, transactionPool, wallet, p2pServer) {
this.blockchain = blockchain;
this.transactionPool = transactionPool;
this.wallet = wallet;
this.p2pServer = p2pServer;
}
mine() {
//const validCoinTransactions = this.transactionPool.validCoinTransactions(); Temeperarly changed without checking transaction validity
var SelectedCoinTransactions = this.transactionPool.cointransactions.slice(0, MaxNumOfCoinTransactions);
var SelectedMetadataTransactions = this.transactionPool.metaDataTransactions.slice(0, MaxNumOfMetadataTransactions);
//const validTransactions = validCoinTransactions.Concat(validMetaDataTransactions);
// SelectedCoinTransactions = validCoinTransactions.splice (0, MaxNumOfCoinTransactions); //this will return only limited number of transactions to be stored
// for (TransactionPointer=0; TransactionPointer<MaxNumOfCoinTransactions; TransactionPointer++){
// SelectedCoinTransactions.push(validCoinTransactions[TransactionPointer]);
// }
// SelectedMetadataTransactions = validMetadataTransactions.splice (0, MaxNumOfMetadataTransactions);
// for (TransactionPointer=0; TransactionPointer<MaxNumOfCoinTransactions; TransactionPointer++){
// SelectedCoinTransactions.push(validCoinTransactions[TransactionPointer]);
// }
// include a reward transaction for the miner
SelectedCoinTransactions.push(CoinTransaction.rewardCoinTransaction(this.wallet, Wallet.blockchainWallet()));
//CoinTransaction.rewardCoinTransaction(this.wallet, Wallet.blockchainWallet()));
// create a block consisting of the valid transactions
const block = this.blockchain.addBlock([SelectedCoinTransactions,SelectedMetadataTransactions]);
//const block = this.blockchain.addBlock(validTransactions);
// synchronize chains in the peer-to-peer server
this.p2pServer.syncChains();
// clear the transaction pool
// broadcast to every miner to clear their transaction pools
// if (validCoinTransactions.length>MaxNumOfCoinTransactions){
// this.transactionPool.clearCoin();// clears only selected cointransactions
this.transactionPool.clearCoin(SelectedCoinTransactions.length-1);
this.transactionPool.clearMeta(SelectedMetadataTransactions.length);
this.p2pServer.broadcastClearCoinTransactions();
this.p2pServer.broadcastClearMetadataTransactions();
SelectedCoinTransactions = [];
SelectedMetadataTransactions =[];
// }
// else {
// this.transactionPool.clearAll();
// this.p2pServer.broadcastClearAllTransactions();
// }
return block;
}
}
//module.exports = {NumberOfClearedCoins, NumberOfClearedMeta};
module.exports = Miner;