public bool GetTokens(IAgentTokenKey from, BigInteger amount, out IAgentTokenKey sender) { sender = default; TokensMintedTriggerer element = MintedMessages.FirstOrDefault(x => x.To.Equals(from) && x.Amount == amount); if (element == null) { return(false); } BigInteger current = element.Amount; if (current > amount) { //Not sure if we need this scenario var newTokensMsg = new TokensMintedTriggerer(element.Sender, element.Amount, element.To); sender = element.To; MintedMessages.Add(newTokensMsg); MintedMessages.Remove(element); return(true); } if (current == amount) { sender = element.To; MintedMessages.Remove(element); return(true); } return(false); }
public bool RemoveRecipient(IAgentTokenKey recipient) { int index = Recipients.FindIndex(x => x.Equals(recipient)); if (index == -1) { return(false); } Recipients.RemoveAt(index); return(true); }
public bool Mint(BigInteger amount, IAgentTokenKey to) { if (TokenBalances.ContainsKey(to)) { TokenBalances[to] += amount; } else { TokenBalances.Add(to, amount); } TotalBalance += amount; return(true); }
public (IList <object>, IList <object>) Execute(RecipientState state, AbstractTrigger message) { var messagesResult = new List <object>(); var publicationResult = new List <object>(); if (state is TokenBurnerState burnerState) { BigInteger amount = message.Amount; while (amount > 0) { IAgentTokenKey recipient = state.Recipients.First(); TokensMintedTriggerer element = burnerState.MintedMessages.FirstOrDefault(x => x.To.Equals(recipient)); BigInteger debt = element.Amount; IAgentTokenKey sender = element.To; BurnTokenMessage command; TokensBurnedTriggerer command2; if (debt <= amount) { state.Recipients.Remove(recipient); burnerState.MintedMessages.Remove(element); amount -= debt; command = new BurnTokenMessage(debt, sender); command2 = new TokensBurnedTriggerer(state.SelfId, debt, recipient); } else { element.Amount -= amount; command = new BurnTokenMessage(amount, sender); command2 = new TokensBurnedTriggerer(state.SelfId, amount, recipient); amount = 0; } messagesResult.Add(command); publicationResult.Add(command2); } } return(messagesResult, publicationResult); }
public bool Burn(BigInteger amount, IAgentTokenKey from) { if (!TokenBalances.ContainsKey(from)) { return(false); } BigInteger current = TokenBalances[from]; if (current > amount) { TokenBalances[from] -= amount; TotalBalance -= amount; return(true); } if (current == amount) { TotalBalance -= amount; TokenBalances.Remove(from); return(true); } return(false); }
public bool Transfer(BigInteger amount, IAgentTokenKey from, IAgentTokenKey to) { if (TokenBalances.ContainsKey(from)) { BigInteger current = TokenBalances[from]; if (!TokenBalances.ContainsKey(to)) { TokenBalances.Add(to, 0); } if (current > amount) { TokenBalances[from] -= amount; TokenBalances[to] += amount; return(true); } if (current == amount) { TokenBalances.Remove(from); TokenBalances[to] += amount; return(true); } } throw new Exception(); }
public TokensBurnedTriggerer(string sender, BigInteger amount, IAgentTokenKey from) : base(amount, sender) { From = from; }
public TokensMintedTriggerer(string sender, BigInteger amount, IAgentTokenKey to) : base(amount, sender) { To = to; }
public MockMessageTrigger(string sender, BigInteger amount, IAgentTokenKey to) : base(amount, sender) { To = to; }
public TokensBurnedNotification(string sender, BigInteger amount, IAgentTokenKey from) : base(amount, sender) { From = from; }
public MintTokenMessage(BigInteger amount, IAgentTokenKey to) { Amount = amount; To = to; }
public TokenBurnPublication(BigInteger amount, IAgentTokenKey from) { Amount = amount; From = from; }
public TokenTransferPublication(BigInteger amount, IAgentTokenKey from, IAgentTokenKey to) { Amount = amount; From = from; To = to; }
public TokensMintedNotification(string sender, BigInteger amount, IAgentTokenKey to) : base(amount, sender) { To = to; }
public RecipientRemovedPublication(IAgentTokenKey recipient) { Recipient = recipient; }
public AddRecipientMessage(IAgentTokenKey recipient) { Recipient = recipient; }
public GetTokensMessage(IAgentTokenKey recipient, BigInteger amount) { Recipient = recipient; Amount = amount; }
public TokensTransferedNotification(string sender, BigInteger amount, IAgentTokenKey from, IAgentTokenKey to) : base(amount, sender) { From = from; To = to; }
public BurnTokenMessage(BigInteger amount, IAgentTokenKey from) { Amount = amount; From = from; }
public bool AddRecipient(IAgentTokenKey recipient) { Recipients.Add(recipient); return(true); }
public TokenMintPublication(BigInteger amount, IAgentTokenKey to) { Amount = amount; To = to; }
public TransferTokenMessage(BigInteger amount, IAgentTokenKey from, IAgentTokenKey to) { Amount = amount; From = from; To = to; }
public RecipientAddedPublication(IAgentTokenKey recipient) { Recipient = recipient; }
public RemoveRecipientMessage(IAgentTokenKey recipient) { Recipient = recipient; }