コード例 #1
0
        /// <summary>
        /// Implements brfc 759684b1a19a, paymentDestination: bsvalias Payment Addressing (Basic Address Resolution)
        /// </summary>
        /// <param name="key">Private key with which to sign this request. If null, signature will be blank. Else, must match public key returned by GetPubKey(senderHandle).</param>
        /// <param name="receiverHandle"></param>
        /// <param name="senderHandle"></param>
        /// <param name="senderName"></param>
        /// <param name="amount"></param>
        /// <param name="purpose"></param>
        /// <returns></returns>
        public async Task <Script> GetOutputScript(PrivateKey key, string receiverHandle, string senderHandle, string senderName = null, Amount?amount = null, string purpose = "")
        {
            amount ??= Amount.Zero;
            var dt        = DateTime.UtcNow.ToString("o");
            var message   = $"{senderHandle}{amount.Value.Satoshis}{dt}{purpose}";
            var signature = key?.SignMessageToBase64(message) ?? "";

            // var ok = key.GetPubKey().VerifyMessage(message, signature);

            var request = new GetOutputScriptRequest
            {
                SenderHandle = senderHandle,
                Amount       = amount.Value.Satoshis,
                Timestamp    = dt,
                Purpose      = purpose ?? "",
                SenderName   = senderName ?? "",
                Signature    = signature
            };

            var url = await GetAddressUrl(receiverHandle);

            var json = JObject.FromObject(request);

            var response = await PostAsync(url, json);

            // e.g. {"output":"76a914bdfbe8a16162ba467746e382a081a1857831811088ac"}
            var outputScript = JsonConvert.DeserializeObject <GetOutputScriptResponse>(response);

            return(new Script(outputScript.Output));
        }
コード例 #2
0
        /// <summary>
        /// Implements brfc 759684b1a19a, paymentDestination: bsvalias Payment Addressing (Basic Address Resolution)
        ///
        /// </summary>
        /// <param name="key">Private key with which to sign this request. If null, signature will be blank. Else, must match public key returned by GetPubKey(senderHandle).</param>
        /// <param name="receiverHandle"></param>
        /// <param name="senderHandle"></param>
        /// <param name="senderName"></param>
        /// <param name="amount"></param>
        /// <param name="purpose"></param>
        /// <returns></returns>
        public async Task <KzScript> GetOutputScript(KzPrivKey key, string receiverHandle, string senderHandle, string senderName = null, KzAmount?amount = null, string purpose = null)
        {
            if (!amount.HasValue)
            {
                amount = KzAmount.Zero;
            }
            var dt        = DateTime.UtcNow.ToString("o");
            var message   = $"{senderHandle}{amount.Value.Satoshis}{dt}{purpose}";
            var signature = key?.SignMessageToB64(message);

            // var ok = key.GetPubKey().VerifyMessage(message, signature);

            var request = new GetOutputScriptRequest
            {
                senderHandle = senderHandle,
                amount       = amount.Value.Satoshis,
                dt           = dt,
                purpose      = purpose ?? "",
                senderName   = senderName ?? "",
                signature    = signature ?? ""
            };

            var jsonContent = JsonConvert.SerializeObject(request);
            var httpContent = new StringContent(jsonContent, Encoding.UTF8, "application/json");

            var uri = await GetAddressUrl(receiverHandle);

            var rm = await _HttpClient.PostAsync(uri, httpContent);

            if (rm.StatusCode == HttpStatusCode.OK)
            {
                var response = await rm.Content.ReadAsStringAsync();

                // e.g. {"output":"76a914bdfbe8a16162ba467746e382a081a1857831811088ac"}

                var r = JsonConvert.DeserializeObject <GetOutputScriptResponse>(response);

                var s = new KzScript(r.output);

                return(s);
            }

            if (rm.StatusCode == HttpStatusCode.NotFound)
            {
                throw new ArgumentException($"Paymail \"{receiverHandle}\" was not found by this service.");
            }

            throw new Exception($"Unhandled HTTP Post StatusCode {rm.StatusCode}.");
        }