BlockChain: Basic users handling.

This commit is contained in:
2020-09-05 13:46:35 +02:00
parent 0c4e901504
commit cf308b09a2

View File

@@ -11,12 +11,66 @@ namespace BasicBlockChain.Core
public int Difficulty { get; set; } = 2;
public int Reward { get; set; } = 1_000_000;
private List<string> _users = null;
public List<string> Users
{
get
{
if (_users == null)
{
InitUsers();
}
return _users;
}
}
private void InitUsers()
{
_users = new List<string>();
foreach (Block block in Chain)
{
foreach (Transaction transaction in block.Transactions)
{
AddUser(transaction.Sender, false);
AddUser(transaction.Receiver, false);
}
}
}
private void AddUser(string user, bool init = true)
{
if (string.IsNullOrEmpty(user)) { return; }
if (_users == null)
{
if (init)
{
InitUsers();
}
else
{
return;
}
}
if (_users.Contains(user)) { return; }
_users.Add(user);
}
private void AddUsersOfBlock(Block block)
{
foreach (Transaction transaction in block.Transactions)
{
AddUser(transaction.Sender);
AddUser(transaction.Receiver);
}
}
public BlockChain(DateTime? genesisDate = null, int difficulty = 2, int reward = 1_000_000)
{
Block genesisBlock = new Block(genesisDate ?? DateTime.UtcNow, null, null);
genesisBlock.Mine(difficulty);
Difficulty = difficulty;
Reward = 1_000_000;
Reward = reward;
Chain.Add(genesisBlock);
}
@@ -25,6 +79,7 @@ namespace BasicBlockChain.Core
Block lastBlock = Chain.Last();
Block newBlock = new Block(date, lastBlock, transactions);
newBlock.Mine(Difficulty);
AddUsersOfBlock(newBlock);
Chain.Add(newBlock);
}
@@ -39,6 +94,7 @@ namespace BasicBlockChain.Core
Block newBlock = new Block(date, lastBlock, PendingTransactions);
newBlock.Transactions.Add(new Transaction(null, miner, Reward, date));
newBlock.Mine(Difficulty);
AddUsersOfBlock(newBlock);
Chain.Add(newBlock);
PendingTransactions.Clear();
}