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);
        }
Example #2
0
        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);
            }
Example #4
0
        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;
 }
Example #9
0
 public MockMessageTrigger(string sender, BigInteger amount, IAgentTokenKey to) : base(amount, sender)
 {
     To = to;
 }
Example #10
0
 public TokensBurnedNotification(string sender, BigInteger amount, IAgentTokenKey from) : base(amount, sender)
 {
     From = from;
 }
Example #11
0
 public MintTokenMessage(BigInteger amount, IAgentTokenKey to)
 {
     Amount = amount;
     To = to;
 }
Example #12
0
 public TokenBurnPublication(BigInteger amount, IAgentTokenKey from)
 {
     Amount = amount;
     From   = from;
 }
 public TokenTransferPublication(BigInteger amount, IAgentTokenKey from, IAgentTokenKey to)
 {
     Amount = amount;
     From   = from;
     To     = to;
 }
Example #14
0
 public TokensMintedNotification(string sender, BigInteger amount, IAgentTokenKey to) : base(amount, sender)
 {
     To = to;
 }
Example #15
0
 public RecipientRemovedPublication(IAgentTokenKey recipient)
 {
     Recipient = recipient;
 }
 public AddRecipientMessage(IAgentTokenKey recipient)
 {
     Recipient = recipient;
 }
Example #17
0
 public GetTokensMessage(IAgentTokenKey recipient, BigInteger amount)
 {
     Recipient = recipient;
     Amount    = amount;
 }
Example #18
0
 public TokensTransferedNotification(string sender, BigInteger amount, IAgentTokenKey from, IAgentTokenKey to) : base(amount, sender)
 {
     From = from;
     To   = to;
 }
Example #19
0
 public BurnTokenMessage(BigInteger amount, IAgentTokenKey from)
 {
     Amount = amount;
     From   = from;
 }
Example #20
0
        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;
 }
Example #24
0
 public RemoveRecipientMessage(IAgentTokenKey recipient)
 {
     Recipient = recipient;
 }