Beispiel #1
0
        private static JObject ToAdditionalInformation(InsertWalletAddress address, Dictionary <string, JObject> properties)
        {
            JObject obj = new JObject();

            obj.Add("userData", address.UserData ?? new JValue(""));
            foreach (var kv in properties)
            {
                obj.Add(kv.Key, kv.Value);
            }
            return(obj);
        }
Beispiel #2
0
        private WalletAddress AddWalletAddressesCore(string walletName, InsertWalletAddress insertAddress, Dictionary <string, JObject> additionalProperties)
        {
            if (additionalProperties == null)
            {
                additionalProperties = new Dictionary <string, JObject>();
            }
            if (insertAddress.RedeemScript != null && insertAddress.Address == null)
            {
                insertAddress.Address = insertAddress.RedeemScript.GetScriptAddress(Network);
            }
            if (insertAddress.Address == null || !((insertAddress.Address) is IDestination))
            {
                throw Error(400, "Address is missing");
            }

            if (!insertAddress.IsCoherent())
            {
                throw Error(400, "The provided redeem script does not correspond to the given address");
            }

            var address = new WalletAddress();

            address.Address               = insertAddress.Address;
            address.RedeemScript          = insertAddress.RedeemScript;
            address.AdditionalInformation = ToAdditionalInformation(insertAddress, additionalProperties);

            var repo       = Configuration.CreateWalletRepository();
            var walletRule = repo.AddAddress(walletName, address, additionalProperties);

            if (walletRule == null)
            {
                throw Error(409, "This address already exist in the wallet");
            }
            Configuration.GetWalletRuleListenable().CreatePublisher().AddAsync(walletRule.CreateTableEntity()).Wait();
            var  rule  = walletRule.Rule;
            bool merge = false;

            if (insertAddress.MergePast)
            {
                var index = Configuration.Indexer.CreateIndexerClient();
                CancellationTokenSource cancel = new CancellationTokenSource();
                cancel.CancelAfter(10000);
                merge = index.MergeIntoWallet(walletName, address, rule, cancel.Token);
            }
            if (merge)
            {
                GetBalanceSummaryCacheTable(new BalanceId(walletName), true).Delete();
                GetBalanceSummaryCacheTable(new BalanceId(walletName), false).Delete();
            }
            return(address);
        }
        public async Task <bool> CreateAddressIfNotExists(string walletName, InsertWalletAddress address)
        {
            try
            {
                await CreateAddress(walletName, address).ConfigureAwait(false);

                return(true);
            }
            catch (QBitNinjaException ex)
            {
                if (ex.StatusCode == 409)
                {
                    return(false);
                }
                throw;
            }
        }
Beispiel #4
0
        public WalletAddress AddWalletAddresses(
            string walletName,
            [FromBody] InsertWalletAddress insertAddress)
        {
            if (insertAddress.RedeemScript != null && insertAddress.Address == null)
            {
                insertAddress.Address = insertAddress.RedeemScript.GetScriptAddress(Network);
            }
            if (insertAddress.Address == null || !((insertAddress.Address) is IDestination))
            {
                throw Error(400, "Address is missing");
            }

            if (!insertAddress.IsCoherent())
            {
                throw Error(400, "The provided redeem script does not correspond to the given address");
            }

            var address = new WalletAddress();

            address.Address      = insertAddress.Address;
            address.RedeemScript = insertAddress.RedeemScript;
            address.UserData     = insertAddress.UserData;
            address.WalletName   = walletName;

            var repo = Configuration.CreateWalletRepository();

            if (!repo.AddWalletAddress(address, insertAddress.MergePast))
            {
                throw Error(409, "This address already exist in the wallet");
            }

            var unused = Configuration.Topics.AddedAddresses.AddAsync(new[] { address });

            return(address);
        }
 public Task <WalletAddress> CreateAddress(string walletName, InsertWalletAddress address)
 {
     return(Post <WalletAddress>("wallets/" + EscapeUrlPart(walletName) + "/addresses", address));
 }
 public Task <WalletAddress> CreateAddress(InsertWalletAddress address)
 {
     return(Client.CreateAddress(Name, address));
 }
 public Task <bool> CreateAddressIfNotExists(InsertWalletAddress address)
 {
     return(Client.CreateAddressIfNotExists(Name, address));
 }
Beispiel #8
0
 public WalletAddress AddWalletAddresses(
     string walletName,
     [FromBody] InsertWalletAddress insertAddress)
 {
     return(AddWalletAddressesCore(walletName, insertAddress, null));
 }