/// <summary>
        /// create wallets
        /// </summary>
        /// <param name="num"></param>
        private void CreateWallets(int num)
        {
            List <WalletSnapshot> wss = new List <WalletSnapshot>();

            for (int i = 0; i < num; i++)
            {
                string walletName = $"wallet{i}.json";
                string spath      = Path.Combine(path, walletName);
                if (File.Exists(spath))
                {
                    continue;
                }
                BRC6Wallet wallet = new BRC6Wallet(GetIndexer(), spath);
                wallet.Unlock(password);
                wallet.CreateAccount();
                wallet.Save();
                WalletSnapshot ws = new WalletSnapshot();
                ws.walletName = walletName;
                ws.address    = wallet.GetAccounts().ToArray()[0].Address;
                ws.priKey     = wallet.GetAccount(ws.address.ToScriptHash()).GetKey().PrivateKey.ToHexString();
                ws.pubKey     = wallet.GetAccount(ws.address.ToScriptHash()).GetKey().PublicKey.ToString();
                ws.script     = wallet.GetAccounts().ToArray()[0].Contract.ScriptHash.ToString();
                wss.Add(ws);
                this.Invoke(new Action(() =>
                {
                    listBox1.Items.Add($"{i} : {spath}");
                }));
            }
            JObject json = new JObject();

            json = new JArray(wss.Select(p =>
            {
                JObject jobj       = new JObject();
                jobj["walletName"] = p.walletName;
                jobj["address"]    = p.address;
                jobj["privKye"]    = p.priKey;
                jobj["pubKye"]     = p.pubKey;
                jobj["script"]     = p.script;
                return(jobj);
            }));
            File.WriteAllLines(Path.Combine(path, "walletsnapshot.txt"), new string[] { json.ToString() });
        }