示例#1
0
        public async Task Consume(ConsumeContext <FormatDecryptedMessage> context)
        {
            var message           = context.Message.DecryptedMessage;
            var format            = context.Message.Format;
            var cancellationToken = context.CancellationToken;

            if (format.Equals("body", StringComparison.OrdinalIgnoreCase))
            {
                var msg        = JsonDocument.Parse(message.Text).RootElement;
                var isInternal = msg.Get <int>("msg_type") == 0;

                var abi = isInternal
                    ? await _tonPackageManager.LoadAbi(TransferContract)
                    : await _tonPackageManager.LoadAbi(SafeMultisigWalletContract);

                string text;
                if (msg.Get <string>("body") == EmptyBody)
                {
                    text = "<Empty comment>";
                }
                else
                {
                    var messageBody = await _tonClient.Abi.DecodeMessage(new ParamsOfDecodeMessage {
                        Abi     = abi,
                        Message = msg.Get <string>("boc")
                    }, cancellationToken);

                    text = isInternal
                        ? messageBody.Value.Get <string>("comment").HexToString()
                        : messageBody.Value.ToString();
                }

                await context.RespondAsync <FormattedMessage>(new { Text = text });
            }

            await context.RespondAsync <DummyResponse>(new { });
        }
示例#2
0
        public async Task Consume(ConsumeContext <FreeTonSendMessage> context)
        {
            var cancellationToken = context.CancellationToken;
            var phrase            = context.Message.Phrase;
            var recipient         = context.Message.Recipient;
            var message           = context.Message.Message;

            var contract = await _tonPackageManager.LoadPackage(SafeMultisigWallet);

            var transferAbi = await _tonPackageManager.LoadAbi(Transfer);

            var deployResult = await _freeTonDeployClient.GetResponse <FreeTonDeployResult>(new {
                Phrase = phrase
            }, cancellationToken);

            var deployResultMessage = deployResult.Message;

            if (!deployResultMessage.Success)
            {
                await context.RespondAsync(new FreeTonSendMessageResult {
                    Success = false,
                    Balance = deployResultMessage.Balance,
                    Error   = deployResultMessage.Error,
                    Address = deployResultMessage.Address
                });
            }

            var address = deployResultMessage.Address;
            var keyPair = deployResultMessage.KeyPair;

            if (deployResultMessage.Balance <= (decimal)0.1)
            {
                await context.RespondAsync(new FreeTonSendMessageResult {
                    Success = false,
                    Error   = $"Balance of ${address} is too low for send message",
                    Balance = deployResultMessage.Balance,
                    Address = deployResultMessage.Address
                });
            }

            var body = await _tonClient.Abi.EncodeMessageBody(new ParamsOfEncodeMessageBody {
                Abi     = transferAbi,
                CallSet = new CallSet {
                    FunctionName = "transfer",
                    Input        = new { comment = message.ToHexString() }.ToJsonElement()
                },
                IsInternal = true,
                Signer     = new Signer.None()
            }, cancellationToken);

            var result = await _tonClient.Processing.ProcessMessage(new ParamsOfProcessMessage {
                SendEvents          = false,
                MessageEncodeParams = new ParamsOfEncodeMessage {
                    Abi     = contract.Abi,
                    Address = deployResult.Message.Address,
                    CallSet = new CallSet {
                        FunctionName = "submitTransaction",
                        Input        = new {
                            dest       = recipient,
                            value      = 100_000_000,
                            bounce     = false,
                            allBalance = false,
                            payload    = body.Body
                        }.ToJsonElement()