Ejemplo n.º 1
0
        public virtual void SetUp()
        {
            datanode  = Org.Mockito.Mockito.Mock <DataNode>();
            storage   = Org.Mockito.Mockito.Mock <DataStorage>();
            this.conf = new Configuration();
            this.conf.SetLong(DFSConfigKeys.DfsDatanodeScanPeriodHoursKey, 0);
            DNConf dnConf = new DNConf(conf);

            Org.Mockito.Mockito.When(datanode.GetConf()).ThenReturn(conf);
            Org.Mockito.Mockito.When(datanode.GetDnConf()).ThenReturn(dnConf);
            BlockScanner disabledBlockScanner = new BlockScanner(datanode, conf);

            Org.Mockito.Mockito.When(datanode.GetBlockScanner()).ThenReturn(disabledBlockScanner
                                                                            );
            ShortCircuitRegistry shortCircuitRegistry = new ShortCircuitRegistry(conf);

            Org.Mockito.Mockito.When(datanode.GetShortCircuitRegistry()).ThenReturn(shortCircuitRegistry
                                                                                    );
            CreateStorageDirs(storage, conf, NumInitVolumes);
            dataset = new FsDatasetImpl(datanode, storage, conf);
            foreach (string bpid in BlockPoolIds)
            {
                dataset.AddBlockPool(bpid, conf);
            }
            NUnit.Framework.Assert.AreEqual(NumInitVolumes, dataset.GetVolumes().Count);
            NUnit.Framework.Assert.AreEqual(0, dataset.GetNumFailedVolumes());
        }
Ejemplo n.º 2
0
        public virtual void SetUp()
        {
            dataset = Org.Mockito.Mockito.Mock <FsDatasetImpl>();
            baseDir = new FileSystemTestHelper().GetTestRootDir();
            Configuration blockScannerConf = new Configuration();

            blockScannerConf.SetInt(DFSConfigKeys.DfsDatanodeScanPeriodHoursKey, -1);
            blockScanner = new BlockScanner(null, blockScannerConf);
        }
Ejemplo n.º 3
0
 public void Explorer_Query_P2PKH_BTG()
 {
     string         BTCaddr      = "GMRz9M1jnc69kW15u8aiGV1EzTgaTuguZQ";
     BitcoinAddress ca           = BitcoinAddress.Create(BTCaddr, Network.Main);
     var            addr         = ca.Convert(Network.BTG);
     string         baseURL      = "https://explorer.bitcoingold.org/insight-api/";
     List <ICoin>   UTXOs        = new List <ICoin>();
     var            unspentCoins = BlockScanner.GetUTXOFromInsight(UTXOs, addr, baseURL);
     int            z            = 1;
 }
Ejemplo n.º 4
0
 public void Explorer_Query_P2PKH_BCI()
 {
     string         BTCaddr      = "14jkz2hJPqgqqKRhDqMYUx37CycQ7G6Ygy";
     BitcoinAddress ca           = BitcoinAddress.Create(BTCaddr, Network.Main);
     var            addr         = ca.Convert(Network.BCI);
     string         baseURL      = "https://explorer.bitcoininterest.io/api/";
     List <ICoin>   UTXOs        = new List <ICoin>();
     var            unspentCoins = BlockScanner.GetUTXOFromInsight(UTXOs, addr, baseURL);
     int            z            = 1;
 }
Ejemplo n.º 5
0
        public void Explorer_Query_BCBC()
        {
            // Create a query and utxo set from an address
            string         BCBCaddr     = "14Z1kt7uUCB8rKwhauXmh5qFdv8cKK9fVj";
            BitcoinAddress ca           = BitcoinAddress.Create(BCBCaddr, Network.BCBC);
            string         baseURL      = "http://be.cleanblockchain.org";
            List <ICoin>   UTXOs        = new List <ICoin>();
            var            unspentCoins = BlockScanner.GetUTXOFromABE(UTXOs, ca, baseURL);

            int z = 1;
        }
Ejemplo n.º 6
0
 internal FsVolumeList(IList <VolumeFailureInfo> initialVolumeFailureInfos, BlockScanner
                       blockScanner, VolumeChoosingPolicy <FsVolumeImpl> blockChooser)
 {
     // Tracks volume failures, sorted by volume path.
     this.blockChooser = blockChooser;
     this.blockScanner = blockScanner;
     foreach (VolumeFailureInfo volumeFailureInfo in initialVolumeFailureInfos)
     {
         volumeFailureInfos[volumeFailureInfo.GetFailedStorageLocation()] = volumeFailureInfo;
     }
 }
Ejemplo n.º 7
0
        public void Explorer_Query_P2SH_BTCP()
        {
            string BTCaddr = "38q354WHtHUDFeVXCh4nkQ2UtL66M3FVnK";

            BitcoinAddress ca           = BitcoinAddress.Create(BTCaddr, Network.Main);
            var            btcpa        = ca.Convert(Network.BTCP);
            string         baseURL      = "https://explorer.btcprivate.org/api";
            List <ICoin>   UTXOs        = new List <ICoin>();
            var            unspentCoins = BlockScanner.GetUTXOFromInsight(UTXOs, btcpa, baseURL);

            int z = 1;
        }
Ejemplo n.º 8
0
        /// <exception cref="System.IO.IOException"/>
        public virtual void TestChangeVolumeWithRunningCheckDirs()
        {
            RoundRobinVolumeChoosingPolicy <FsVolumeImpl> blockChooser = new RoundRobinVolumeChoosingPolicy
                                                                         <FsVolumeImpl>();

            conf.SetLong(DFSConfigKeys.DfsDatanodeScanPeriodHoursKey, -1);
            BlockScanner blockScanner = new BlockScanner(datanode, conf);
            FsVolumeList volumeList   = new FsVolumeList(Sharpen.Collections.EmptyList <VolumeFailureInfo
                                                                                        >(), blockScanner, blockChooser);
            IList <FsVolumeImpl> oldVolumes = new AList <FsVolumeImpl>();
            // Initialize FsVolumeList with 5 mock volumes.
            int NumVolumes = 5;

            for (int i = 0; i < NumVolumes; i++)
            {
                FsVolumeImpl volume = Org.Mockito.Mockito.Mock <FsVolumeImpl>();
                oldVolumes.AddItem(volume);
                Org.Mockito.Mockito.When(volume.GetBasePath()).ThenReturn("data" + i);
                FsVolumeReference @ref = Org.Mockito.Mockito.Mock <FsVolumeReference>();
                Org.Mockito.Mockito.When(@ref.GetVolume()).ThenReturn(volume);
                volumeList.AddVolume(@ref);
            }
            // When call checkDirs() on the 2nd volume, anther "thread" removes the 5th
            // volume and add another volume. It does not affect checkDirs() running.
            FsVolumeImpl      newVolume = Org.Mockito.Mockito.Mock <FsVolumeImpl>();
            FsVolumeReference newRef    = Org.Mockito.Mockito.Mock <FsVolumeReference>();

            Org.Mockito.Mockito.When(newRef.GetVolume()).ThenReturn(newVolume);
            Org.Mockito.Mockito.When(newVolume.GetBasePath()).ThenReturn("data4");
            FsVolumeImpl blockedVolume = volumeList.GetVolumes()[1];

            Org.Mockito.Mockito.DoAnswer(new _Answer_295(volumeList, newRef)).When(blockedVolume
                                                                                   ).CheckDirs();
            FsVolumeImpl brokenVolume = volumeList.GetVolumes()[2];

            Org.Mockito.Mockito.DoThrow(new DiskChecker.DiskErrorException("broken")).When(brokenVolume
                                                                                           ).CheckDirs();
            volumeList.CheckDirs();
            // Since FsVolumeImpl#checkDirs() get a snapshot of the list of volumes
            // before running removeVolume(), it is supposed to run checkDirs() on all
            // the old volumes.
            foreach (FsVolumeImpl volume_1 in oldVolumes)
            {
                Org.Mockito.Mockito.Verify(volume_1).CheckDirs();
            }
            // New volume is not visible to checkDirs() process.
            Org.Mockito.Mockito.Verify(newVolume, Org.Mockito.Mockito.Never()).CheckDirs();
            NUnit.Framework.Assert.IsTrue(volumeList.GetVolumes().Contains(newVolume));
            NUnit.Framework.Assert.IsFalse(volumeList.GetVolumes().Contains(brokenVolume));
            NUnit.Framework.Assert.AreEqual(NumVolumes - 1, volumeList.GetVolumes().Count);
        }
Ejemplo n.º 9
0
        public ActionResult CoinBalance(string coin, string addresses)
        {
            List <string> addressList = new List <string>(
                addresses.Split(new string[] { "," },
                                StringSplitOptions.RemoveEmptyEntries));

            var invalid = addressList.Where(a => !Bitcoin.IsValidAddress(a)).ToList();

            var addressesToCheck = addressList.Except(invalid).ToList();

            var scanner        = new BlockScanner();
            var claimAddresses = Bitcoin.ParseAddresses(addressesToCheck);

            Tuple <List <ICoin>, Dictionary <string, double> > claimcoins;
            bool   usedExplorer = false;
            double TotalValue   = 0.0;
            bool   searchError  = false;
            Dictionary <string, double> balances;

            try
            {
                claimcoins = scanner.GetUnspentTransactionOutputs(claimAddresses, coin, out usedExplorer);
                TotalValue = Convert.ToDouble(claimcoins.Item1.Sum(o => ((Money)o.Amount).ToDecimal(MoneyUnit.BTC)));
                balances   = claimcoins.Item2;
            }
            catch (Exception e)
            {
                balances    = new Dictionary <string, double>();
                searchError = true;
            }

            using (CoinpanicContext db = new CoinpanicContext())
            {
                db.IndexCoinInfo.Where(i => i.Coin == coin).ToList();
            }

            AddressSummary result = new AddressSummary()
            {
                InvalidAddresses = invalid,
                CoinName         = BitcoinForks.ForkByShortName[coin].LongName,
                Empty            = TotalValue <= 0,
                Coin             = coin,
                Balance          = Convert.ToString(TotalValue),
                UsedExplorer     = usedExplorer,
                Addresses        = addressesToCheck,
                SearchError      = searchError,
            };

            return(PartialView(result));
        }
Ejemplo n.º 10
0
        private static string createUnsignedTransaction(string coin, string fromAddr, string toAddr, double fee, out string utxos, string ForceCoin = "")
        {
            var n           = BitcoinForks.ForkByShortName[coin].Network;
            var destination = BitcoinAddress.Create(toAddr, n);
            var origin      = BitcoinAddress.Create(fromAddr);

            Console.WriteLine("From:         " + fromAddr);
            Console.WriteLine("To:           " + toAddr);

            BlockScanner bsc = new BlockScanner();

            var balances = bsc.GetUnspentTransactionOutputs(new List <BitcoinAddress>()
            {
                origin
            }, ForceCoin != "" ? ForceCoin : coin, out bool usedExplorer);
            //Unspent transaction outputs
            var autxos      = balances.Item1;
            var inputAmount = autxos.Sum(u => ((Money)u.Amount).ToDecimal(MoneyUnit.BTC));

            Console.WriteLine("Input Amount: " + Convert.ToString(inputAmount));
            decimal     txfeeAmount    = Convert.ToDecimal(fee);
            var         transferAmount = Money.Coins(Convert.ToDecimal(inputAmount - txfeeAmount));
            var         txfeesAmount   = Money.Coins(Convert.ToDecimal(txfeeAmount));
            var         bcdbuilder     = new TransactionBuilder();
            Transaction BCDtx          = bcdbuilder
                                         .AddCoins(coins: autxos)
                                         .Send(destination, transferAmount)
                                         .SetChange(destination)
                                         .SendFees(txfeesAmount)
                                         .BuildTransaction(sign: false);

            BCDtx.Version = BitcoinForks.ForkByShortName[coin].TransactionVersion;
            string utx  = BCDtx.ToHex();
            var    ustr = NBitcoin.JsonConverters.Serializer.ToString(autxos);

            Console.WriteLine("UTXO_Str: " + ustr);
            Console.WriteLine("UTX: " + utx);
            utxos = ustr;
            return(utx);
        }
Ejemplo n.º 11
0
        public void TestGenerate()
        {
            string coin = "BTP";

            //Create an unsigned transaction and encode
            var scanner = new BlockScanner();

            List <string> addresslist = new List <string>()
            {
                "123qWRaufkCnUfh7WMAmJpKdFDw6zBQkn9",
            };
            var mydepaddr = "15Lo7GRtK7b8WaYQeynwRFU479FJBSyewr";

            var claimAddresses = Bitcoin.ParseAddresses(addresslist);
            Tuple <List <ICoin>, Dictionary <string, double> > claimcoins;

            claimcoins = scanner.GetUnspentTransactionOutputs(claimAddresses, coin, out bool usedExplorer, estimate: true);
            var amounts = scanner.CalculateOutputAmounts_Their_My_Fee(claimcoins.Item1, 0.05, 0.0003 * claimcoins.Item1.Count);
            // Generate unsigned tx

            var utx = Bitcoin.GenerateUnsignedTX(claimcoins.Item1, amounts, Bitcoin.ParseAddress(mydepaddr),
                                                 Bitcoin.ParseAddress(mydepaddr),
                                                 coin);

            //var w = Bitcoin.GetBlockData(claimcoins.Item1);

            BlockData bd = new BlockData()
            {
                fork  = coin,
                coins = claimcoins.Item1,
                utx   = utx,
            };

            string bdstr = NBitcoin.JsonConverters.Serializer.ToString(bd);

            System.IO.File.WriteAllText("D:\\ClaimData.txt", bdstr);
            Console.WriteLine(bdstr);
        }
Ejemplo n.º 12
0
        public ActionResult InitializeClaim(string claimId, string PublicKeys, string depositAddress, string emailAddress)
        {
            using (CoinpanicContext db = new CoinpanicContext())
            {
                CoinClaim userclaim = db.Claims.Where(c => c.ClaimId == claimId).Include(c => c.InputAddresses).First();

                // Clean up input
                depositAddress = depositAddress.Replace("\n", String.Empty);
                depositAddress = depositAddress.Replace("\r", String.Empty);
                depositAddress = depositAddress.Replace("\t", String.Empty);
                depositAddress = depositAddress.Trim().Replace(" ", "");

                userclaim.DepositAddress = depositAddress;
                userclaim.Email          = emailAddress;

                List <string> list = new List <string>(
                    PublicKeys.Split(new string[] { "\r\n" },
                                     StringSplitOptions.RemoveEmptyEntries));

                if (list.Count < 1)
                {
                    return(RedirectToAction("ClaimError", new { message = "You must enter at least one address to claim", claimId = claimId }));
                }

                // Convert depositAddress if BCH

                if (userclaim.CoinShortName == "BCH" && depositAddress.StartsWith("bitcoincash:"))
                {
                    // Convert
                    depositAddress = SharpCashAddr.Converter.cashAddrToOldAddr(depositAddress, out bool isP2PKH, out _);
                }

                if (!Bitcoin.IsValidAddress(depositAddress, userclaim.CoinShortName, BitcoinForks.ForkByShortName[userclaim.CoinShortName].Network))
                {
                    return(RedirectToAction("ClaimError", new { message = "Deposit Address not valid", claimId = claimId }));
                }

                var invalid = list.Where(a => !Bitcoin.IsValidAddress(a));
                if (invalid.Count() > 0)
                {
                    return(RedirectToAction("ClaimError", new { message = String.Join(", ", invalid) + (invalid.Count() < 2 ? " is" : " are") + " invalid.", claimId = claimId }));
                }

                var scanner        = new BlockScanner();
                var claimAddresses = Bitcoin.ParseAddresses(list);

                Tuple <List <ICoin>, Dictionary <string, double> > claimcoins;
                try
                {
                    claimcoins = scanner.GetUnspentTransactionOutputs(claimAddresses, userclaim.CoinShortName, out bool usedExplorer);
                }
                catch (Exception e)
                {
                    return(RedirectToAction("ClaimError", new { message = "Error searching for your addresses in the blockchain", claimId = claimId }));
                }

                var amounts  = scanner.CalculateOutputAmounts_Their_My_Fee(claimcoins.Item1, 0.05, 0.0003 * claimcoins.Item1.Count);
                var balances = claimcoins.Item2;

                // Return converted addresses to user
                List <InputAddress> inputs;
                inputs = GetInputAddresses(userclaim, list, balances);

                userclaim.InputAddresses = inputs;
                userclaim.Deposited      = Convert.ToDouble(amounts[0].ToDecimal(MoneyUnit.BTC));
                userclaim.MyFee          = Convert.ToDouble(amounts[1].ToDecimal(MoneyUnit.BTC));
                userclaim.MinerFee       = Convert.ToDouble(amounts[2].ToDecimal(MoneyUnit.BTC));
                userclaim.TotalValue     = userclaim.Deposited + userclaim.MyFee + userclaim.MinerFee;
                userclaim.InitializeDate = DateTime.Now;

                if (userclaim.Deposited < 0)
                {
                    userclaim.Deposited = 0;
                }
                if (userclaim.MyFee < 0)
                {
                    userclaim.MyFee = 0;
                }

                // Generate unsigned tx
                var mydepaddr = ConfigurationManager.AppSettings[userclaim.CoinShortName + "Deposit"];

                if (userclaim.CoinShortName == "BCH" && mydepaddr.StartsWith("bitcoincash:"))
                {
                    // Convert
                    mydepaddr = SharpCashAddr.Converter.cashAddrToOldAddr(mydepaddr, out bool isP2PKH, out _);
                }

                var utx = Bitcoin.GenerateUnsignedTX(
                    UTXOs: claimcoins.Item1,
                    amounts: amounts,
                    clientDepAddr: Bitcoin.ParseAddress(depositAddress, userclaim.CoinShortName, BitcoinForks.ForkByShortName[userclaim.CoinShortName].Network),
                    MyDepositAddr: Bitcoin.ParseAddress(mydepaddr, userclaim.CoinShortName, BitcoinForks.ForkByShortName[userclaim.CoinShortName].Network),
                    forkShortName: userclaim.CoinShortName);

                userclaim.UnsignedTX = utx;

                // Generate witness data
                var w = Bitcoin.GetBlockData(claimcoins.Item1);
                userclaim.BlockData = w;

                // New format of message
                BlockData bd = new BlockData()
                {
                    fork      = userclaim.CoinShortName,
                    coins     = claimcoins.Item1,
                    utx       = utx,
                    addresses = balances.Select(kvp => kvp.Key).ToList(),
                };
                string bdstr = NBitcoin.JsonConverters.Serializer.ToString(bd);
                userclaim.ClaimData = bdstr;

                db.SaveChanges();

                MonitoringService.SendMessage("New " + userclaim.CoinShortName + " claim", "new claim Initialized. https://www.coinpanic.com/Claim/ClaimConfirm?claimId=" + claimId + " " + " for " + userclaim.CoinShortName);
            }
            return(RedirectToAction("ClaimConfirm", new { claimId = claimId }));
        }