Ejemplo n.º 1
0
        public HDKeyData NewKey(string walletName, string keysetName)
        {
            HDKeyData keyData;

            while (true)
            {
                var keySetData = GetKeySetData(walletName, keysetName);
                if (keySetData == null)
                {
                    return(null);
                }
                KeyPath next;
                if (keySetData.State.CurrentPath == null)
                {
                    var root = keySetData.KeySet.Path ?? new KeyPath();
                    next = root.Derive(0);
                }
                else
                {
                    next = Inc(keySetData.State.CurrentPath);
                }
                keyData            = new HDKeyData();
                keyData.ExtPubKeys = keySetData
                                     .KeySet
                                     .ExtPubKeys
                                     .Select(k => k.ExtPubKey.Derive(next).GetWif(Network)).ToArray();
                keyData.Path         = next;
                keyData.RedeemScript = CreateScriptPubKey(keyData.ExtPubKeys, keySetData.KeySet.SignatureCount, !keySetData.KeySet.NoP2SH);
                if (keySetData.KeySet.NoP2SH)
                {
                    keyData.ScriptPubKey = keyData.RedeemScript;
                    keyData.RedeemScript = null;
                    keyData.Address      = keyData.ScriptPubKey.GetDestinationAddress(Network);
                }
                else
                {
                    keyData.ScriptPubKey = keyData.RedeemScript.Hash.ScriptPubKey;
                    keyData.Address      = keyData.ScriptPubKey.GetDestinationAddress(Network);
                }

                if (KeyDataTable.GetChild(walletName, keysetName).Create(Encode(keyData.ScriptPubKey), keyData, false))
                {
                    keySetData.State.CurrentPath = next;
                    KeySetTable.GetChild(walletName).Create(keysetName, keySetData);
                    break;
                }
            }
            var entry = Indexer.AddWalletRule(walletName, new ScriptRule
            {
                RedeemScript = keyData.RedeemScript,
                ScriptPubKey = keyData.ScriptPubKey
            });
            var clientIndexer = Indexer.Configuration.CreateIndexerClient();

            clientIndexer.MergeIntoWallet(walletName, keyData.ScriptPubKey, entry.Rule);
            return(keyData);
        }
Ejemplo n.º 2
0
        public bool DeleteKeySet(string walletName, string keyset)
        {
            if (!KeySetTable.GetChild(walletName).Delete(keyset, true))
            {
                return(false);
            }

            KeyDataTable.GetChild(walletName, keyset).Delete();
            return(true);
        }
Ejemplo n.º 3
0
        public bool AddKeySet(string walletName, HDKeySet keyset)
        {
            KeySetData data = new KeySetData
            {
                KeySet = keyset,
                State  = new HDKeyState()
            };

            return(KeySetTable.GetChild(walletName).Create(keyset.Name, data, false));
        }
Ejemplo n.º 4
0
 public KeySetData[] GetKeysets(string walletName)
 {
     return(KeySetTable.GetChild(walletName).Read());
 }
Ejemplo n.º 5
0
 public KeySetData GetKeySetData(string walletName, string keysetName)
 {
     return(KeySetTable.GetChild(walletName).ReadOne(keysetName));
 }
Ejemplo n.º 6
0
 public bool SetKeySet(string walletName, KeySetData keysetData)
 {
     return(KeySetTable.GetChild(walletName).Create(keysetData.KeySet.Name, keysetData, true));
 }