public (IList <object>, IList <object>) Execute(RecipientState state, AbstractTrigger message)
 {
     //here To is slef
     if (message is TokensTransferedNotification msg)
     {
         var command     = new BurnTokenMessage(msg.Amount, msg.To);
         var publication = new TokensBurnedTriggerer(state.SelfId, msg.Amount, msg.To);
         return(new List <object>()
         {
             command
         }, new List <object>()
         {
             publication
         });
     }
     return(null, null);
 }
Example #2
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);
        }