Esempio n. 1
0
        protected WalletCore(NodeServices nodeServices, string walletPath)
        {
            this.nodeServices = nodeServices;

            this.WalletPath               = walletPath;
            this.x1WalletFile             = WalletHelper.LoadX1WalletFile(walletPath);
            this.x1WalletFile.CurrentPath = walletPath;
            this.WalletName               = this.x1WalletFile.WalletName;
            this.metadataPath             = this.x1WalletFile.WalletName.GetX1WalletMetaDataFilepath(C.Network, nodeServices.DataFolder);
            this.metadata = WalletHelper.LoadOrCreateX1WalletMetadataFile(this.metadataPath, this.x1WalletFile, C.Network.GenesisHash);

            ScheduleSyncing();
        }
Esempio n. 2
0
        public void CreateWallet(WalletCreateRequest walletCreateRequest)
        {
            string walletName = walletCreateRequest.WalletName;
            string filePath   = walletName.GetX1WalletFilepath(C.Network, this.nodeServices.DataFolder);
            string passphrase = walletCreateRequest.Passphrase;

            if (File.Exists(filePath))
            {
                throw new InvalidOperationException(
                          $"A wallet with the name {walletName} already exists at {filePath}!");
            }

            if (string.IsNullOrWhiteSpace(passphrase))
            {
                throw new InvalidOperationException("A passphrase is required.");
            }

            DateTime now = DateTime.UtcNow;

            var x1WalletFile = new X1WalletFile
            {
                WalletGuid          = Guid.NewGuid(),
                WalletName          = walletName,
                CoinTicker          = C.Network.CoinTicker,
                CoinType            = C.Network.Consensus.CoinType,
                CreatedUtc          = now.ToUnixTime(),
                ModifiedUtc         = now.ToUnixTime(),
                LastBackupUtc       = null,
                Comment             = "Your notes here!",
                Version             = C.WalletKeyFileVersion,
                PassphraseChallenge = KeyHelper.GenerateRandomKeyMaterial(passphrase, 32)
                                      .EncryptedPrivateKey,
                CurrentPath = filePath
            };


            byte[] mnemonicBytes   = KeyHelper.GetRandom(32);
            string bip39Passphrase = walletCreateRequest.Bip39Passphrase?.Trim() ?? "";

            Wordlist wl       = Wordlist.English;
            var      mnemonic = new Mnemonic(wl, mnemonicBytes);

            byte[] hdSeed = mnemonic.DeriveSeed(bip39Passphrase);

            x1WalletFile.HdSeed = VCL.EncryptWithPassphrase(passphrase, hdSeed);
            x1WalletFile.HdSeedHasBip39Passphrase = !string.IsNullOrWhiteSpace(bip39Passphrase);

            // Create one receive addresses, so that GetUsedReceiveAddresses returns at least one address, even if it is not used in this case.
            AddressService.CreateAndInsertNewReceiveAddress("Default address", passphrase, x1WalletFile);

            AddressService.CreateAndInsertNewChangeAddresses(passphrase, C.UnusedChangeAddressBuffer, x1WalletFile);

            ColdStakingAddressService.EnsureDefaultColdStakingAddress(passphrase, x1WalletFile);
            MultiSigAddressService.EnsureDefaultMultisigAddress(passphrase, x1WalletFile);


            AddressService.TryUpdateLookAhead(passphrase, x1WalletFile);

            x1WalletFile.SaveX1WalletFile(filePath);

            X1WalletMetadataFile x1WalletMetadataFile =
                x1WalletFile.CreateX1WalletMetadataFile(C.Network.GenesisHash);
            string x1WalletMetadataFilename = walletName.GetX1WalletMetaDataFilepath(C.Network, this.nodeServices.DataFolder);

            x1WalletMetadataFile.SaveX1WalletMetadataFile(x1WalletMetadataFilename);
        }
Esempio n. 3
0
        public static void SaveX1WalletMetadataFile(this X1WalletMetadataFile x1WalletMetadataFile, string filePath)
        {
            var serializedWallet = Serializer.Serialize(x1WalletMetadataFile);

            File.WriteAllText(filePath, serializedWallet);
        }