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); }
public bool DeleteKeySet(string walletName, string keyset) { if (!KeySetTable.GetChild(walletName).Delete(keyset, true)) { return(false); } KeyDataTable.GetChild(walletName, keyset).Delete(); return(true); }
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)); }
public KeySetData[] GetKeysets(string walletName) { return(KeySetTable.GetChild(walletName).Read()); }
public KeySetData GetKeySetData(string walletName, string keysetName) { return(KeySetTable.GetChild(walletName).ReadOne(keysetName)); }
public bool SetKeySet(string walletName, KeySetData keysetData) { return(KeySetTable.GetChild(walletName).Create(keysetData.KeySet.Name, keysetData, true)); }