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 { }); }
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()