コード例 #1
0
        public static void Transfer(
            [PerperWorkerTrigger] IAgentContext <IDictionary <string, BigInteger> > context,
            [PerperWorker("sender")] string sender,
            [PerperWorker("message")] TransferMessage message)
        {
            var removeTokensPublication = RemoveTokens(context.State, message.From, message.Amount);
            var addTokensPublication    = AddTokens(context.State, message.To, message.Amount);

            context.MakePublication(removeTokensPublication);
            context.MakePublication(addTokensPublication);
        }
コード例 #2
0
        public static void Run(IAgentContext <State> context, string sender, object message)
        {
            switch (message)
            {
            case TransferMessage transferMessage:
                context.State.Balances.RemoveTokens(sender, transferMessage.Amount);
                context.State.Balances.AddTokens(transferMessage.To, transferMessage.Amount);
                context.MakePublication(new TransferPublication
                {
                    From   = sender,
                    To     = transferMessage.To,
                    Amount = transferMessage.Amount,
                });
                break;

            case StakeMessage stakeMessage:
                context.State.Balances.RemoveTokens(sender, stakeMessage.Amount);
                context.State.Stakes.AddStake(sender, stakeMessage.To, stakeMessage.Amount);
                context.MakePublication(new StakePublication
                {
                    From   = sender,
                    To     = stakeMessage.To,
                    Amount = stakeMessage.Amount,
                });
                break;

            case UnstakeMessage unstakeMessage:
                context.State.Stakes.RemoveStake(sender, unstakeMessage.From, unstakeMessage.Amount);
                context.State.Balances.AddTokens(sender, unstakeMessage.Amount);
                context.MakePublication(new StakePublication
                {
                    From   = sender,
                    To     = unstakeMessage.From,
                    Amount = -unstakeMessage.Amount,
                });
                break;

            case RegisterAgentMessage registerAgentMessage:
                context.State.Balances.RemoveTokens(sender, registerAgentMessage.InitialBalance);
                context.State.Balances.AddTokens(registerAgentMessage.AgentId, registerAgentMessage.InitialBalance);
                context.State.Agents.RegisterAgent(registerAgentMessage.AgentId);
                context.MakePublication(new ValidatorSetPublication
                {
                    AgentId = registerAgentMessage.AgentId,
                    Weights = context.State.Stakes.Amounts.ToDictionary(kv => kv.Key, kv => kv.Value.Values.Aggregate(BigInteger.Add)),
                });
                break;
            }
        }
コード例 #3
0
        public static void Burn(
            [PerperWorkerTrigger] IAgentContext <IDictionary <string, BigInteger> > context,
            [PerperWorker("sender")] string sender,
            [PerperWorker("message")] BurnMessage message)
        {
            var publication = RemoveTokens(context.State, message.From, message.Amount);

            context.MakePublication(publication);
        }