Beispiel #1
0
        /// <summary>
        /// The channel_authorize method creates a signature that can be used to redeem a specific amount of XRP from a payment channel.
        /// </summary>
        public async Task <ReadOnlyMemory <byte> > ChannelAuthorize(ChannelAuthorizeRequest request, CancellationToken cancellationToken = default)
        {
            jsonBuffer.Clear();
            jsonWriter.Reset();
            jsonWriter.WriteStartObject();
            var requestId = WriteHeader(jsonWriter, "channel_authorize");

            jsonWriter.WriteString("channel_id", request.ChannelId.ToString());
            jsonWriter.WriteString("amount", request.Amount.Drops.ToString());
            if (request.Seed.HasValue)
            {
                var seed = request.Seed.Value;
                var type = seed.Type == KeyType.Secp256k1 ? "secp256k1" : "ed25519";
                jsonWriter.WriteString("key_type", type);
                jsonWriter.WriteString("seed", seed.ToString());
            }
            if (request.Passphrase != null)
            {
                jsonWriter.WriteString("passphrase", request.Passphrase);
            }
            if (request.Secret != null)
            {
                jsonWriter.WriteString("secret", request.Secret);
            }
            WriteFooter(jsonWriter);
            jsonWriter.WriteEndObject();
            jsonWriter.Flush();
            var response = await SendReceiveAsync(requestId, jsonBuffer.WrittenMemory, cancellationToken);

            return(response.GetProperty("signature").GetBytesFromBase16());
        }
Beispiel #2
0
        public Task <ChannelAuthorize> ChannelAuthorize(ChannelAuthorizeRequest request)
        {
            var command = JsonConvert.SerializeObject(request, serializerSettings);
            TaskCompletionSource <ChannelAuthorize> task = new TaskCompletionSource <ChannelAuthorize>();

            TaskInfo taskInfo = new TaskInfo();

            taskInfo.TaskId = request.Id;
            taskInfo.TaskCompletionResult = task;
            taskInfo.Type = typeof(ChannelAuthorize);

            tasks.TryAdd(request.Id, taskInfo);

            client.SendMessage(command);
            return(task.Task);
        }