示例#1
0
        public async void TestChinese()
        {
            var web3            = _ethereumClientIntegrationFixture.GetWeb3();
            var account         = AccountFactory.GetAccount();
            var pollingService  = new TransactionReceiptPollingService(web3.TransactionManager);
            var contractAddress = await pollingService.DeployContractAndGetAddressAsync(() =>
                                                                                        CoinService.DeployContractAsync(web3, account.Address, new HexBigInteger(4000000)));

            var coinService = new CoinService(web3, contractAddress);

            var input = new RaiseEventMetadataInput
            {
                Creator     = account.Address,
                Id          = 101,
                Description = @"中国,China",
                Metadata    = @"中国,China"
            };

            var txn = await coinService.RaiseEventMetadataAsync(account.Address, input, new HexBigInteger(4000000));

            var receipt = await pollingService.PollForReceiptAsync(txn);

            var metadataEvent = coinService.GetEventMetadataEvent();
            var metadata      = await metadataEvent.GetAllChanges <MetadataEventEventDTO>(metadataEvent.CreateFilterInput());

            var result = metadata[0].Event;

            Assert.Equal(result.Creator.ToLower(), account.Address.ToLower());
            Assert.Equal(101, result.Id);
            Assert.Equal(@"中国,China", result.Metadata);
            Assert.Equal(@"中国,China", result.Description);
        }
        /// <summary>
        /// Function returns all Accounts stored in database
        /// </summary>
        /// <returns>List of IAccount object created based on specified type</returns>
        public List <IAccount> GetAccounts()
        {
            try
            {
                ////using var context = new DbEconomyContext();

                var accounts = new List <IAccount>();

                foreach (var a in context.Accounts.Where(a => !a.Deleted))
                {
                    var keys = context.Keys
                               .Where(k => !k.Deleted)
                               .Where(k => k.RelatedItemId == a.Id)
                               .ToList();

                    var bookmarks = context.Bookmarks
                                    .Where(b => !b.Deleted)
                                    .Where(b => b.RelatedItemId == a.Id)
                                    .ToList();

                    var acc = AccountFactory.GetAccount(new Guid(a.Id), (AccountTypes)a.Type, Guid.Empty, new Guid(a.WalletId), string.Empty, string.Empty, 0);

                    // load keys and key if exist
                    if (keys != null)
                    {
                        // this will load main account key for signing transactions
                        var key = keys.FirstOrDefault(k => k.Id == a.AccountKeyId);
                        if (key != null)
                        {
                            acc.AccountKey = key.Fill(new EncryptionKey(""));
                        }

                        // fill other account keys - messages, etc.
                        foreach (var k in keys)
                        {
                            acc.AccountKeys.Add(k.Fill(new EncryptionKey("")));
                        }
                    }

                    // load bookmarks
                    if (bookmarks != null)
                    {
                        // fill account bookmarks
                        foreach (var b in bookmarks)
                        {
                            acc.Bookmarks.Add(b.Fill(BookmarkFactory.GetBookmark((BookmarkTypes)b.Type, new Guid(b.Id), b.Name, b.Address)));
                        }
                    }

                    accounts.Add(a.Fill(acc));
                }

                return(accounts);
            }
            catch (Exception ex)
            {
                log.Error("Cannot get accounts list from Db", ex);
                return(null);
            }
        }
示例#3
0
        public async void Test()
        {
            var web3            = _ethereumClientIntegrationFixture.GetWeb3();
            var account         = AccountFactory.GetAccount();
            var pollingService  = new TransactionReceiptPollingService(web3.TransactionManager);
            var contractAddress = await pollingService.DeployContractAndGetAddressAsync(() =>
                                                                                        CoinService.DeployContractAsync(web3, account.Address, new HexBigInteger(4000000)));

            var coinService = new CoinService(web3, contractAddress);
            var txn         = await coinService.MintAsync(account.Address, account.Address, 100, new HexBigInteger(4000000));

            var receipt = await pollingService.PollForReceiptAsync(txn);

            var eventSent = coinService.GetEventSent();
            var sent      = await eventSent.GetAllChanges <SentEventDTO>(eventSent.CreateFilterInput());

            txn = await coinService.RaiseEventMetadataAsync(account.Address, account.Address, 100, "Description",
                                                            "The metadata created here blah blah blah", new HexBigInteger(4000000));

            receipt = await pollingService.PollForReceiptAsync(txn);

            var metadataEvent = coinService.GetEventMetadataEvent();
            var metadata      =
                await metadataEvent.GetAllChanges <MetadataEventEventDTO>(
                    metadataEvent.CreateFilterInput(new BlockParameter(receipt.BlockNumber), null));

            var result = metadata[0].Event;

            Assert.Equal(result.Creator.ToLower(), account.Address.ToLower());
            Assert.Equal(100, result.Id);
            Assert.Equal("The metadata created here blah blah blah", result.Metadata);
            Assert.Equal("Description", result.Description);
        }
        public async void ShouldDoFullValidation()
        {
            var owner               = new Nethereum.Web3.Accounts.Account("0xb1939d6c8c73d6aa5ad97873c2f99a2dfc2b4c356acfd5338caff20392d7960d");
            var signer              = new Nethereum.Web3.Accounts.Account("0xa83369462189d7cc3d2aed78614d0df89f4d9651770fef9fc64b05acf7464a7f");
            var guardian            = new Nethereum.Web3.Accounts.Account("0xa0f2dd3adc8b79603f92736ac50843f1c5344514505b042369efdab105e9442b");
            var immunityCertificate = new ImmunityCertificate();

            immunityCertificate.OwnerAddress  = owner.Address;
            immunityCertificate.SignerAddress = signer.Address;
            immunityCertificate.TestKitId     = "TestKit1";
            immunityCertificate.PhotoId       = "QmbtqAxAnEqumx9k8wx8yxyANpC5vVwvQsdSWUQof9NP2o".DecodeBase58();
            immunityCertificate.TestCentreId  = "100";
            immunityCertificate.Guardians     = new System.Collections.Generic.List <string> {
                guardian.Address
            };
            immunityCertificate.SetExpiryDate(DateTime.Now.AddDays(1000));

            var signature = new EthereumMessageSigner().Sign(immunityCertificate.GetHashCertificate(), new EthECKey(signer.PrivateKey));


            var signedCertificate = new SignedImmunityCertificate(immunityCertificate, signature);

            var web3 = _ethereumClientIntegrationFixture.GetWeb3();

            //admin deployer
            var account = AccountFactory.GetAccount();
            //simple deployment
            //var web3 = new Nethereum.Web3.Web3(new Nethereum.Web3.Accounts.Account("0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7"), "https://ropsten.infura.io/v3/7238211010344719ad14a89db874158c");
            var tokenService = await Covid19CertificationService.DeployContractAndGetServiceAsync(web3, new Covid19CertificationDeployment());

            var address = tokenService.ContractHandler.ContractAddress;
            //Add Test Centre
            var receiptAddTestCentre = await tokenService.UpsertTestCentreRequestAndWaitForReceiptAsync(new TestCentre()
            {
                TestCentreId = "100", Invalid = false
            });

            //Add Test Centre Owner
            var receiptAddTestCentreOwner = await tokenService.UpsertTestCentreOwnerRequestAndWaitForReceiptAsync("100".ToUTF8Bytes(), account.Address, true);

            //Add Test Centre Certificate Signer
            var receiptAddTestCentreSigner = await tokenService.UpsertTestCentreCertSignerRequestAndWaitForReceiptAsync(new TestCentreCertSigner()
            {
                TestCentreId = "100", SignerAddress = signer.Address, Invalid = false, ExpiryDate = 0
            });


            var challenge       = "testtest";
            var challengeSigner = new EthereumMessageSigner();
            var signatureOwner  = challengeSigner.EncodeUTF8AndSign(challenge, new EthECKey(owner.PrivateKey));

            var certificateText = signedCertificate.GenerateFullCertificate();

            Assert.True(await tokenService.FullVerificationCertificateChallengeWithSignatureQueryAsync(signedCertificate, challenge, signatureOwner.HexToByteArray(), DateTimeOffset.Now.ToUnixTimeSeconds()));


            var signatureGuardian = challengeSigner.EncodeUTF8AndSign(challenge, new EthECKey(guardian.PrivateKey));

            Assert.True(await tokenService.FullVerificationCertificateChallengeWithSignatureQueryAsync(signedCertificate, challenge, signatureGuardian.HexToByteArray(), DateTimeOffset.Now.ToUnixTimeSeconds()));
        }
示例#5
0
        public void CanCreateCreditAccount()
        {
            IAccountConfigOptions accountConfigOptions = new CreditAccountConfigOptions
            {
                Id   = "Test Credit Id",
                Name = "Test Credit Account"
            };
            var creditAccount = AccountFactory.GetAccount(accountConfigOptions);

            Assert.NotNull(creditAccount);
            Assert.Equal("Test Credit Id", creditAccount.Id);
        }
        public async Task DeployAndCallContract_WithEvents()
        {
            var abi =
                @"[{'constant':false,'inputs':[{'name':'val','type':'int256'}],'name':'multiply','outputs':[{'name':'','type':'int256'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'inputs':[{'name':'multiplier','type':'int256'}],'payable':false,'stateMutability':'nonpayable','type':'constructor'},{'anonymous':false,'inputs':[{'indexed':false,'name':'from','type':'address'},{'indexed':false,'name':'val','type':'int256'},{'indexed':false,'name':'result','type':'int256'}],'name':'Multiplied','type':'event'}]";

            var smartContractByteCode =
                "6060604052341561000f57600080fd5b604051602080610149833981016040528080516000555050610113806100366000396000f300606060405260043610603e5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631df4f14481146043575b600080fd5b3415604d57600080fd5b60566004356068565b60405190815260200160405180910390f35b6000805482027fd01bc414178a5d1578a8b9611adebfeda577e53e89287df879d5ab2c29dfa56a338483604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1929150505600a165627a7a723058201bd2fbd3fb58686ed61df3e636dc4cc7c95b864aa1654bc02b0136e6eca9e9ef0029";

            var account = AccountFactory.GetAccount();
            var web3    = _ethereumClientIntegrationFixture.GetWeb3();

            var multiplier = 2;

            var receipt =
                await web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync(
                    abi,
                    smartContractByteCode,
                    account.Address,
                    new HexBigInteger(900000),
                    null,
                    multiplier);

            var contractAddress = receipt.ContractAddress;

            var contract         = web3.Eth.GetContract(abi, contractAddress);
            var multiplyFunction = contract.GetFunction("multiply");

            var multipliedEvent = contract.GetEvent("Multiplied");
            var filterForAll    = await multipliedEvent.CreateFilterAsync();

            var estimatedGas = await multiplyFunction.EstimateGasAsync(7);

            var receipt1 = await multiplyFunction.SendTransactionAndWaitForReceiptAsync(account.Address, new HexBigInteger(estimatedGas.Value), null, null, 5);

            var receipt2 = await multiplyFunction.SendTransactionAndWaitForReceiptAsync(account.Address, new HexBigInteger(estimatedGas.Value), null, null, 7);

            Assert.Equal(1, receipt1.Status.Value);
            Assert.Equal(1, receipt2.Status.Value);

            Assert.False(receipt1.HasErrors());
            Assert.False(receipt2.HasErrors());

            var logsForAll = await multipliedEvent.GetFilterChanges <MultipliedEvent>(filterForAll);

            Assert.Equal(2, logsForAll.Count());
        }
        /// <summary>
        /// Function returns Account stored in database based on id
        /// </summary>
        /// <returns>IAccount object created based on specified type</returns>
        public IAccount GetAccount(Guid id)
        {
            try
            {
                //using var context = new DbEconomyContext();
                var a = context.Accounts
                        .Where(a => !a.Deleted)
                        .Where(a => a.Id == id.ToString())
                        .FirstOrDefault();

                return(a.Fill(AccountFactory.GetAccount(new Guid(a.Id), (AccountTypes)a.Type, Guid.Empty, new Guid(a.WalletId), string.Empty, string.Empty, 0)));
            }
            catch (Exception ex)
            {
                log.Error("Cannot get account from Db", ex);
                return(null);
            }
        }
示例#8
0
 /// <summary>
 /// Загрузка данных по всем кредитам
 /// </summary>
 private static void LoadCredit()
 {
     try
     {
         string sql       = "SELECT * FROM Credits";
         int    itemcount = 0;
         Debug.WriteLine("Поток Крдиты");
         lock (o)
         {
             ConnectionClient.ConOpen();
             using (SqlCommand commmand = new SqlCommand(sql, ConnectionClient.connection))
             {
                 SqlDataReader reader1 = commmand.ExecuteReader();
                 itemcount = reader1.Cast <object>().Count();
                 reader1.Close();
                 int           count  = 0;
                 SqlDataReader reader = commmand.ExecuteReader();
                 while (reader.Read())
                 {
                     Credits credits = new Credits((int)reader["Id"], (long)reader["AccountNumber"], (decimal)reader["Cash"], (decimal)reader["RepayALoan"],
                                                   (decimal)reader["AmountIssue"], (int)reader["ClientId"], (int)reader["Rate"], (decimal)reader["MonthlyPayment"], (bool)reader["State"],
                                                   (int)reader["MonthsPeriod"], (DateTime)reader["OpenDate"], (DateTime)reader["NextDate"], (int)reader["TypeId"]);
                     // Repository.GetCredits.Add(credits);
                     accounts.Add(AccountFactory.GetAccount(credits));
                     count++;
                     countAccount++;
                     ProgressBar.GetValue("Загрузка счетов", itemcount, count);
                 }
             }
             ConnectionClient.ConClose();
         }
     }
     catch (SqlException e)
     {
         errorMes.ErrorSQL(e.Message); ConnectionClient.ConClose();
     }
     catch (Exception e)
     {
         errorMes.ErrorSQL(e.Message); ConnectionClient.ConClose();
     }
     finally { ConnectionClient.ConClose(); }
 }
示例#9
0
        /// <summary>
        /// Загрузка данных по всем вкладам
        /// </summary>
        private static void LoadDeposit()
        {
            try
            {
                string sql       = "SELECT * FROM Deposit";
                int    itemcount = 0;
                lock (o)
                {
                    ConnectionClient.ConOpen();
                    using (SqlCommand commmand = new SqlCommand(sql, ConnectionClient.connection))
                    {
                        SqlDataReader reader1 = commmand.ExecuteReader();
                        itemcount = reader1.Cast <object>().Count();
                        reader1.Close();
                        int           count  = 0;
                        SqlDataReader reader = commmand.ExecuteReader();
                        while (reader.Read())
                        {
                            Deposit deposit = new Deposit((int)reader["Id"], (long)reader["AccountNumber"], (decimal)reader["Cash"], (decimal)reader["DepositAmount"], (int)reader["ClientId"],
                                                          (bool)reader["State"], (int)reader["MonthsPeriod"], (int)reader["Rate"], (DateTime)reader["OpenDate"],
                                                          (DateTime)reader["DateClose"], (bool)reader["Capitalization"], (int)reader["TypeId"], (decimal)reader["MoneyEarned"]);
                            //  Repository.GetDeposits.Add(deposit);
                            accounts.Add(AccountFactory.GetAccount(deposit));
                            count++;
                            countAccount++;

                            ProgressBar.GetValue("Загрузка вкладов", itemcount, count);
                        }
                    }
                    ConnectionClient.ConClose();
                }
            }
            catch (SqlException e)
            {
                errorMes.ErrorSQL(e.Message); ConnectionClient.ConClose();
            }
            catch (Exception e)
            {
                errorMes.ErrorSQL(e.Message); ConnectionClient.ConClose();
            }
            finally { ConnectionClient.ConClose(); }
        }
示例#10
0
 /// <summary>
 /// Загрузка данных по обычным счетам
 /// </summary>
 private static void LoadPersonal()
 {
     try
     {
         string sql       = "SELECT * FROM Personal";
         int    itemcount = 0;
         lock (o)
         {
             ConnectionClient.ConOpen();
             using (SqlCommand commmand = new SqlCommand(sql, ConnectionClient.connection))
             {
                 SqlDataReader reader1 = commmand.ExecuteReader();
                 itemcount = reader1.Cast <object>().Count();
                 reader1.Close();
                 int           count  = 0;
                 SqlDataReader reader = commmand.ExecuteReader();
                 while (reader.Read())
                 {
                     Personal personal = new Personal((int)reader["Id"], (long)reader["AccountNumber"], (decimal)reader["Cash"],
                                                      (int)reader["ClientId"], (DateTime)reader["OpenDate"], (bool)reader["State"], (int)reader["TypeId"]);
                     Repository.GetPersonals.Add(personal);
                     accounts.Add(AccountFactory.GetAccount(personal));
                     count++;
                     countAccount++;
                     ProgressBar.GetValue("Загрузка счетов", itemcount, count);
                 }
             }
             ConnectionClient.ConClose();
         }
     }
     catch (SqlException e)
     {
         errorMes.ErrorSQL(e.Message); ConnectionClient.ConClose();
     }
     catch (Exception e)
     {
         errorMes.ErrorSQL(e.Message); ConnectionClient.ConClose();
     }
     finally { ConnectionClient.ConClose(); }
 }
示例#11
0
        public async void TestLogging()
        {
            var capturingLoggerAdapter = new CapturingLoggerFactoryAdapter();

            LogManager.Adapter = capturingLoggerAdapter;

            var contractByteCode =
                "0x6060604052604060405190810160405280600a81526020017f4d756c7469706c6965720000000000000000000000000000000000000000000081526020015060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061008c57805160ff19168380011785556100bd565b828001600101855582156100bd579182015b828111156100bc57825182600050559160200191906001019061009e565b5b5090506100e891906100ca565b808211156100e457600081815060009055506001016100ca565b5090565b5050604051602080610303833981016040528080519060200190919050505b806000600050819055505b506101e2806101216000396000f360606040526000357c01000000000000000000000000000000000000000000000000000000009004806340490a901461004f57806375d0c0dc14610072578063c6888fa1146100ed5761004d565b005b61005c6004805050610119565b6040518082815260200191505060405180910390f35b61007f6004805050610141565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156100df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610103600480803590602001909190505061012b565b6040518082815260200191505060405180910390f35b60006000600050549050610128565b90565b60006000600050548202905061013c565b919050565b60016000508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101da5780601f106101af576101008083540402835291602001916101da565b820191906000526020600020905b8154815290600101906020018083116101bd57829003601f168201915b50505050508156";

            var abi =
                @"[{""constant"":true,""inputs"":[],""name"":""getMultiplier"",""outputs"":[{""name"":""d"",""type"":""uint256""}],""type"":""function""},{""constant"":true,""inputs"":[],""name"":""contractName"",""outputs"":[{""name"":"""",""type"":""string""}],""type"":""function""},{""constant"":false,""inputs"":[{""name"":""a"",""type"":""uint256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""uint256""}],""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""uint256""}],""type"":""constructor""}]";

            var senderAddress = AccountFactory.Address;
            var web3          = new Web3.Web3(AccountFactory.GetAccount(),
                                              new RpcClient(new Uri("http://localhost:8545"), null, null, null, LogManager.GetLogger <ILog>()));

            //deploy the contract, including abi and a paramter of 7.
            var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(abi, contractByteCode, senderAddress,
                                                                                 new HexBigInteger(900000), 7);

            Assert.Contains("eth_getTransactionCount", capturingLoggerAdapter.LoggerEvents[0].MessageObject.ToString());
            Assert.Contains("RPC Response: 0x", capturingLoggerAdapter.LoggerEvents[1].MessageObject.ToString());
            Assert.Contains("eth_sendRawTransaction", capturingLoggerAdapter.LoggerEvents[2].MessageObject.ToString());
            Assert.Contains("RPC Response: " + transactionHash, capturingLoggerAdapter.LoggerEvents[3].MessageObject.ToString());

            try
            {
                var transactionHash2 = await web3.Eth.DeployContract.SendRequestAsync(abi, contractByteCode,
                                                                                      senderAddress, // lower gas
                                                                                      new HexBigInteger(90000), 7);
            }
            catch (Exception ex)
            {
            }

            Assert.Contains("RPC Response Error: intrinsic gas too low", capturingLoggerAdapter.LoggerEvents[8].MessageObject.ToString());
        }
示例#12
0
        public void AccountFactoryCreatesCorrectAccountTypes()
        {
            IEnumerable <IAccountConfigOptions> cfgOptions = new List <IAccountConfigOptions>()
            {
                new CreditAccountConfigOptions {
                    Id = "alalalalsls", Name = "CreditAccount 1"
                },
                new MortgageAccountConfigOptions {
                    Id = "dkdlassadlkj", Name = "MortgageAccount 1", Property = "Some Property"
                },
                new CheckingAccountConfigOptions(),
                new SavingsAccountConfigOptions()
            };
            List <Account> accounts = new List <Account>();

            foreach (var cfg in cfgOptions)
            {
                accounts.Add(AccountFactory.GetAccount(cfg));
            }
            Assert.IsType <CreditAccount>(accounts[0]);
            Assert.IsType <MortgageAccount>(accounts[1]);
            Assert.IsType <CheckingAccount>(accounts[2]);
            Assert.IsType <SavingsAccount>(accounts[3]);
        }
        public override async Task <string> UpdateAccount(string accountAddress, Guid walletId, AccountTypes type, string name, IDbConnectorService dbservice, bool justInDb = true, string password = "")
        {
            //IDbConnectorService dbservice = new DbConnectorService();

            if (EconomyMainContext.Wallets.TryGetValue(walletId.ToString(), out var wallet))
            {
                if (wallet.Accounts.TryGetValue(accountAddress, out var accnt))
                {
                    accnt.Name = name;

                    if (EconomyMainContext.WorkWithDb)
                    {
                        if (!dbservice.SaveAccount(accnt))
                        {
                            return("Cannot save account to the Db!");
                        }
                    }

                    return("OK");
                }
                else
                {
                    Console.WriteLine("Account not found in actual wallet Accounts. New account will be created.");
                    // cannot be the same account name in one wallet
                    if (wallet.Accounts.Values.FirstOrDefault(a => a.Name == name) == null)
                    {
                        // QT RPC support requires Db too. It creates new addresses in QT and it must be saved somewhere
                        // todo: saving to file or something like that when Db is not on
                        if (EconomyMainContext.WorkWithQTRPC && EconomyMainContext.WorkWithDb)
                        {
                            if (EconomyMainContext.QTRPCClient.IsConnected)
                            {
                                // creating wallet in desktop QT Wallet

                                var accresp    = new QTWalletResponseDto();
                                var keyresp    = new QTWalletResponseDto();
                                var privateKey = string.Empty;

                                if (!justInDb)
                                {
                                    var acc = await EconomyMainContext.QTRPCClient.RPCLocalCommandSplitedAsync("getnewaddress", new string[] { name });

                                    accresp = JsonConvert.DeserializeObject <QTWalletResponseDto>(acc);

                                    var kr = await EconomyMainContext.QTRPCClient.RPCLocalCommandSplitedAsync("dumpprivatekey", new string[] { accresp.result });

                                    keyresp = JsonConvert.DeserializeObject <QTWalletResponseDto>(kr);
                                }
                                else
                                {
                                    if (!string.IsNullOrEmpty(accountAddress))
                                    {
                                        accresp = new QTWalletResponseDto()
                                        {
                                            result = accountAddress
                                        }
                                    }
                                    ;
                                    else
                                    {
                                        accresp = new QTWalletResponseDto()
                                        {
                                            result = "No Address Filled"
                                        }
                                    };
                                }

                                // if success add to list of Accounts of specified wallet
                                if (accresp != null)
                                {
                                    var account = AccountFactory.GetAccount(Guid.Empty, type, wallet.Owner, walletId, name, accresp.result, 0);

                                    // check if some files with last state already exists
                                    var ltxParsed = GetLastAccountProcessedTxs(account.Address);
                                    if (ltxParsed != null)
                                    {
                                        account.LastConfirmedTxId = ltxParsed.LastConfirmedTxId;
                                        account.LastProcessedTxId = ltxParsed.LastProcessedTxId;
                                    }

                                    account.WalletName = wallet.Name;
                                    account.StartRefreshingData(EconomyMainContext.WalletRefreshInterval);
                                    wallet.Accounts.TryAdd(account.Address, account);
                                    wallet.RegisterAccountEvents(account.Address);

                                    if (!string.IsNullOrEmpty(privateKey))
                                    {
                                        // load and save address private key if was dumped correctly
                                        LoadAccountKey(walletId.ToString(), account.Address, privateKey, dbservice, account.Address, password, account.Name + "-key", false, true, false, EncryptionKeyType.AccountKey);
                                    }

                                    if (EconomyMainContext.WorkWithDb && account != null)
                                    {
                                        if (!dbservice.SaveAccount(account))
                                        {
                                            return("Cannot save new account to the Db!");
                                        }
                                    }

                                    return("OK");
                                }
                                else
                                {
                                    log.Error("Cannot create account - cannot get correct response from QTWalletRPC!");
                                    return("Cannot create account - cannot get correct response from QTWalletRPC!");
                                }
                            }
                            else
                            {
                                log.Error("Cannot create account - RPC is not connected, probably not configured!");
                                return("Cannot create account - RPC is not connected, probably not configured!");
                            }
                        }
                        else if (!EconomyMainContext.WorkWithQTRPC && justInDb)
                        {
                            // if not work with RPC you must fill address
                            if (!string.IsNullOrEmpty(accountAddress))
                            {
                                var account = AccountFactory.GetAccount(Guid.Empty, type, wallet.Owner, walletId, name, accountAddress, 0);

                                // check if some files with last state already exists
                                var ltxParsed = GetLastAccountProcessedTxs(account.Address);
                                if (ltxParsed != null)
                                {
                                    account.LastConfirmedTxId = ltxParsed.LastConfirmedTxId;
                                    account.LastProcessedTxId = ltxParsed.LastProcessedTxId;
                                }

                                account.WalletName = wallet.Name;
                                account.StartRefreshingData(EconomyMainContext.WalletRefreshInterval);
                                wallet.Accounts.TryAdd(account.Address, account);
                                wallet.RegisterAccountEvents(account.Address);

                                if (EconomyMainContext.WorkWithDb && account != null)
                                {
                                    if (!dbservice.SaveAccount(account))
                                    {
                                        return("Cannot save new account to the Db!");
                                    }
                                }
                                return("OK");
                            }
                            else
                            {
                                log.Error("Cannot create account - RPC is disabled and accountAddress is empty!");
                                return("Cannot create account - RPC is disabled and accountAddress is empty!");
                            }
                        }
                        else if (!EconomyMainContext.WorkWithQTRPC && EconomyMainContext.WorkWithDb && !justInDb)
                        {
                            try
                            {
                                // create new address with NBitcoin library
                                var           network               = NBitcoin.Altcoins.Neblio.Instance.Mainnet;
                                Key           privateKey            = new Key(); // generate a random private key
                                PubKey        publicKey             = privateKey.PubKey;
                                BitcoinSecret privateKeyFromNetwork = privateKey.GetBitcoinSecret(network);
                                var           address               = publicKey.GetAddress(ScriptPubKeyType.Legacy, network);


                                var account = AccountFactory.GetAccount(Guid.Empty, type, wallet.Owner, walletId, name, address.ToString(), 0);

                                // check if some files with last state already exists
                                var ltxParsed = GetLastAccountProcessedTxs(account.Address);
                                if (ltxParsed != null)
                                {
                                    account.LastConfirmedTxId = ltxParsed.LastConfirmedTxId;
                                    account.LastProcessedTxId = ltxParsed.LastProcessedTxId;
                                }

                                account.WalletName = wallet.Name;
                                account.StartRefreshingData(EconomyMainContext.WalletRefreshInterval);
                                wallet.Accounts.TryAdd(account.Address, account);
                                wallet.RegisterAccountEvents(account.Address);

                                // load and save address private key
                                LoadAccountKey(walletId.ToString(), address.ToString(), privateKeyFromNetwork.ToString(), dbservice, address.ToString(), password, account.Name + "-key", false, true, false, EncryptionKeyType.AccountKey);

                                if (EconomyMainContext.WorkWithDb && account != null)
                                {
                                    if (!dbservice.SaveAccount(account))
                                    {
                                        return("Cannot save new account to the Db!");
                                    }
                                }

                                return(account.Address);
                            }
                            catch (Exception ex)
                            {
                                log.Error("Cannot create account - NBitcoin cannot create new address!");
                                return("Cannot create account - NBitcoin cannot create new address!");
                            }
                        }
                        else
                        {
                            log.Error("Cannot create account - RPC is disabled, accountAddress is empty!");
                            return("Cannot create account - RPC is disabled and accountAddress is empty!");
                        }
                    }
                    else
                    {
                        log.Error("Cannot create account - Name already exists!");
                        return("Cannot create account - Name already exists!");
                    }
                }
            }
            else
            {
                log.Error("Cannot create account - wallet not found");
                return("Cannot create account - wallet not found");
            }
        }
示例#14
0
 public static Web3.Web3 GetWeb3()
 {
     return(new Web3.Web3(AccountFactory.GetAccount()));
 }
示例#15
0
    public void FreezeAccount(int accountNumber)
    {
        var acc = _factory.GetAccount(accountNumber);

        acc.Freeze();
    }