miner mines continuously,
moved to an account model, transactions working, querying working, more checking of valid data
This commit is contained in:
parent
59bb42be11
commit
9847b2056b
12 changed files with 663 additions and 365 deletions
|
@ -5,9 +5,9 @@ const ChainUtil = require('../chain-util');
|
|||
|
||||
class Wallet {
|
||||
constructor(keyPair) {
|
||||
this.balance = INITIAL_BALANCE;
|
||||
this.keyPair = keyPair;
|
||||
this.publicKey = this.keyPair.getPublic().encode('hex');
|
||||
this.counter = 0;
|
||||
}
|
||||
|
||||
toString() {
|
||||
|
@ -20,63 +20,72 @@ class Wallet {
|
|||
return this.keyPair.sign(dataHash);
|
||||
}
|
||||
|
||||
createTransaction(recipient, amount, blockchain, transactionPool) {
|
||||
this.balance = this.calculateBalance(blockchain);
|
||||
createTransaction(recipient, amount, blockchain) {
|
||||
const balance = blockchain.getBalanceCopy(this.publicKey);
|
||||
|
||||
if (amount > this.balance) {
|
||||
console.log(`Amount: ${amount} exceceds current balance: ${this.balance}`);
|
||||
if (balance.counter > this.counter) {
|
||||
this.counter = balance.counter;
|
||||
}
|
||||
|
||||
if (amount > balance.balance) {
|
||||
console.log(`Amount: ${amount} exceceds current balance: ${balance.balance}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
return Transaction.newTransaction(this, recipient, amount);
|
||||
const counterToUse = this.counter + 1;
|
||||
this.counter++;
|
||||
|
||||
const newTransaction = new Transaction(this.publicKey, counterToUse, [Transaction.createOutput(recipient, amount)]);
|
||||
newTransaction.addSignature(this.sign(Transaction.hashToSign(newTransaction)));
|
||||
return newTransaction;
|
||||
}
|
||||
|
||||
createMetadata(SSNmetadata) {
|
||||
return Metadata.newMetadata(this, SSNmetadata);
|
||||
}
|
||||
|
||||
calculateBalance(blockchain) {
|
||||
let balance = this.balance;
|
||||
let transactions = [];
|
||||
blockchain.chain.forEach(block => block.data.forEach(transaction => {
|
||||
transactions.push(transaction);
|
||||
}));
|
||||
console.log("transactions of balance")
|
||||
console.log(transactions);
|
||||
const PaymentTransactions = transactions[0];
|
||||
console.log("Payment transactions ")
|
||||
console.log(PaymentTransactions);
|
||||
const walletInputTs = PaymentTransactions.filter(transaction => transaction.input.address === this.publicKey);
|
||||
//calculateBalance(blockchain) {
|
||||
// let balance = this.balance;
|
||||
// let transactions = [];
|
||||
// blockchain.chain.forEach(block => block.data.forEach(transaction => {
|
||||
// transactions.push(transaction);
|
||||
// }));
|
||||
// console.log("transactions of balance")
|
||||
// console.log(transactions);
|
||||
// const PaymentTransactions = transactions[0];
|
||||
// console.log("Payment transactions ")
|
||||
// console.log(PaymentTransactions);
|
||||
// const walletInputTs = PaymentTransactions.filter(transaction => transaction.input.address === this.publicKey);
|
||||
|
||||
let startTime = 0;
|
||||
// let startTime = 0;
|
||||
|
||||
if (walletInputTs.length > 0) {
|
||||
const recentInputT = walletInputTs.reduce(
|
||||
(prev, current) => prev.input.timestamp > current.input.timestamp ? prev : current
|
||||
);
|
||||
// if (walletInputTs.length > 0) {
|
||||
// const recentInputT = walletInputTs.reduce(
|
||||
// (prev, current) => prev.input.timestamp > current.input.timestamp ? prev : current
|
||||
// );
|
||||
|
||||
balance = recentInputT.outputs.find(output => output.address === this.publicKey).amount;
|
||||
startTime = recentInputT.input.timestamp;
|
||||
}
|
||||
// balance = recentInputT.outputs.find(output => output.address === this.publicKey).amount;
|
||||
// startTime = recentInputT.input.timestamp;
|
||||
// }
|
||||
|
||||
PaymentTransactions.forEach(transaction => {
|
||||
if (transaction.input.timestamp > startTime) {
|
||||
transaction.outputs.find(output => {
|
||||
if (output.address === this.publicKey) {
|
||||
balance += output.amount;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
// PaymentTransactions.forEach(transaction => {
|
||||
// if (transaction.input.timestamp > startTime) {
|
||||
// transaction.outputs.find(output => {
|
||||
// if (output.address === this.publicKey) {
|
||||
// balance += output.amount;
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
|
||||
return balance;
|
||||
}
|
||||
// return balance;
|
||||
//}
|
||||
|
||||
static blockchainWallet() {
|
||||
const blockchainWallet = new this(ChainUtil.genKeyPair());
|
||||
blockchainWallet.address = 'blockchain-wallet';
|
||||
return blockchainWallet;
|
||||
}
|
||||
//static blockchainWallet() {
|
||||
// const blockchainWallet = new this(ChainUtil.genKeyPair());
|
||||
// blockchainWallet.address = 'blockchain-wallet';
|
||||
// return blockchainWallet;
|
||||
//}
|
||||
}
|
||||
|
||||
module.exports = Wallet;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue