예제 #1
0
        public TipsManagerTests() : base(KnownNetworks.StratisMain)
        {
            this.loggerFactory = new LoggerFactory();
            string dir = CreateTestDir(this);

            this.keyValueRepo = new LevelDbKeyValueRepository(dir, new DataStoreSerializer(this.Network.Consensus.ConsensusFactory));

            this.tipsManager = new TipsManager(this.keyValueRepo, this.loggerFactory);

            this.mainChainHeaders = ChainedHeadersHelper.CreateConsecutiveHeaders(20, ChainedHeadersHelper.CreateGenesisChainedHeader(this.Network), true);
        }
예제 #2
0
        public static IFederationManager CreateFederationManager(object caller, Network network, LoggerFactory loggerFactory, ISignals signals)
        {
            string dir          = TestBase.CreateTestDir(caller);
            var    keyValueRepo = new LevelDbKeyValueRepository(dir, new DataStoreSerializer(network.Consensus.ConsensusFactory));

            var settings          = new NodeSettings(network, args: new string[] { $"-datadir={dir}" });
            var federationManager = new FederationManager(settings, network, loggerFactory, keyValueRepo, signals);

            federationManager.Initialize();

            return(federationManager);
        }
        public async Task FinalizedHeightSavedOnDiskAsync()
        {
            string dir       = CreateTestDir(this);
            var    kvRepo    = new LevelDbKeyValueRepository(dir, new DataStoreSerializer(this.Network.Consensus.ConsensusFactory));
            var    asyncMock = new Mock <IAsyncProvider>();

            asyncMock.Setup(a => a.RegisterTask(It.IsAny <string>(), It.IsAny <Task>()));

            using (var repo = new FinalizedBlockInfoRepository(kvRepo, this.loggerFactory, asyncMock.Object))
            {
                repo.SaveFinalizedBlockHashAndHeight(uint256.One, 777);
            }

            using (var repo = new FinalizedBlockInfoRepository(kvRepo, this.loggerFactory, asyncMock.Object))
            {
                await repo.LoadFinalizedBlockInfoAsync(this.Network);

                Assert.Equal(777, repo.GetFinalizedBlockInfo().Height);
            }
        }
        public void RewardClaimer_RetrieveSingleDeposits()
        {
            DataFolder dataFolder         = TestBase.CreateDataFolder(this);
            var        keyValueRepository = new LevelDbKeyValueRepository(dataFolder, this.dbreezeSerializer);

            // Create a "chain" of 30 blocks.
            this.blocks = ChainedHeadersHelper.CreateConsecutiveHeadersAndBlocks(30, true, network: this.network, chainIndexer: this.chainIndexer, withCoinbaseAndCoinStake: true, createCirrusReward: true);
            using (var rewardClaimer = new RewardClaimer(this.broadCasterManager, this.chainIndexer, this.consensusManager, this.initialBlockDownloadState, keyValueRepository, this.network, this.signals))
            {
                var depositExtractor = new DepositExtractor(this.federatedPegSettings, this.network, this.opReturnDataReader);

                // Add 5 distribution deposits from block 11 through to 15.
                for (int i = 11; i <= 15; i++)
                {
                    Transaction rewardTransaction = rewardClaimer.BuildRewardTransaction(false);
                    IDeposit    deposit           = depositExtractor.ExtractDepositFromTransaction(rewardTransaction, i, this.blocks[i].Block.GetHash());
                    Assert.NotNull(deposit);
                }
            }
        }
        public void RewardClaimer_RetrieveBatchedDeposits()
        {
            DataFolder dataFolder         = TestBase.CreateDataFolder(this);
            var        keyValueRepository = new LevelDbKeyValueRepository(dataFolder, this.dbreezeSerializer);

            // Create a "chain" of 30 blocks.
            this.blocks = ChainedHeadersHelper.CreateConsecutiveHeadersAndBlocks(30, true, network: this.network, chainIndexer: this.chainIndexer, withCoinbaseAndCoinStake: true, createCirrusReward: true);

            // The reward claimer should look at block 10 to 20.
            using (var rewardClaimer = new RewardClaimer(this.broadCasterManager, this.chainIndexer, this.consensusManager, this.initialBlockDownloadState, keyValueRepository, this.network, this.signals))
            {
                Transaction rewardTransaction = rewardClaimer.BuildRewardTransaction(true);

                Assert.Equal(10, rewardTransaction.Inputs.Count);
                Assert.Equal(2, rewardTransaction.Outputs.Count);
                Assert.Equal(Money.Coins(90), rewardTransaction.TotalOut);

                var      depositExtractor = new DepositExtractor(this.federatedPegSettings, this.network, this.opReturnDataReader);
                IDeposit deposit          = depositExtractor.ExtractDepositFromTransaction(rewardTransaction, 30, this.blocks[30].Block.GetHash());
                Assert.Equal(Money.Coins(90), deposit.Amount);
            }
        }
        public async Task FinalizedHeightCantBeDecreasedAsync()
        {
            string dir       = CreateTestDir(this);
            var    kvRepo    = new LevelDbKeyValueRepository(dir, new DBreezeSerializer(this.Network.Consensus.ConsensusFactory));
            var    asyncMock = new Mock <IAsyncProvider>();

            asyncMock.Setup(a => a.RegisterTask(It.IsAny <string>(), It.IsAny <Task>()));

            using (var repo = new FinalizedBlockInfoRepository(kvRepo, asyncMock.Object))
            {
                repo.Initialize(new ChainedHeader(this.Network.GetGenesis().Header, this.Network.GetGenesis().GetHash(), 0));
                repo.SaveFinalizedBlockHashAndHeight(uint256.One, 777);
                repo.SaveFinalizedBlockHashAndHeight(uint256.One, 555);

                Assert.Equal(777, repo.GetFinalizedBlockInfo().Height);
            }

            using (var repo = new FinalizedBlockInfoRepository(kvRepo, asyncMock.Object))
            {
                await repo.LoadFinalizedBlockInfoAsync(this.Network);

                Assert.Equal(777, repo.GetFinalizedBlockInfo().Height);
            }
        }