コード例 #1
0
        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);
        }
コード例 #2
0
        public (IList <object>, IList <object>) Execute(RecipientState state, AbstractTrigger message)
        {
            if (message is MockMessageTrigger msg)
            {
                var command = new MintTokenMessage(msg.Amount, msg.To.ChangeAgentId(state.SelfId));

                var publication = new TokensMintedTriggerer(state.SelfId, msg.Amount, msg.To);

                return(new List <object>()
                {
                    command
                }, new List <object>()
                {
                    publication
                });
            }
            return(null, null);
        }
コード例 #3
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);
        }