Ejemplo n.º 1
0
        public void Test_StakeWithdraw()
        {
            _blockManager.TryBuildGenesisBlock();
            GenerateBlocks(1, 1);

            _validatorStatusManager.Start(false);
            Assert.IsTrue(_validatorStatusManager.IsStarted());
            Assert.IsFalse(_validatorStatusManager.IsWithdrawTriggered());

            int blockNum = (int)_blockManager.GetHeight();

            Assert.IsFalse(HardforkHeights.IsHardfork_9Active((ulong)blockNum));
            while (!HardforkHeights.IsHardfork_9Active((ulong)blockNum))
            {
                blockNum++;
                GenerateBlocks(blockNum, blockNum);
            }

            var systemContractReader = _container?.Resolve <ISystemContractReader>() ?? throw new Exception("Container is not loaded");
            var stake = new Money(systemContractReader.GetStake());

            Console.WriteLine($"Current stake is {stake}");
            Assert.That(stake > Money.Zero, "Stake is zero");

            _validatorStatusManager.WithdrawStakeAndStop();
            Assert.IsTrue(_validatorStatusManager.IsStarted());
            Assert.IsTrue(_validatorStatusManager.IsWithdrawTriggered());

            // Test node is the only validator, so it is a next validator always
            // and it can't withdraw its stake. TODO: test to check withdraw is working
            //GenerateBlocks(50);
            //Assert.IsFalse(_validatorStatusManager.IsStarted());
        }
Ejemplo n.º 2
0
        public string StopValidator()
        {
            if (_privateWallet.GetWalletInstance() is null)
            {
                return("wallet_locked");
            }

            Logger.LogDebug("validator stop command received");
            _validatorStatusManager.WithdrawStakeAndStop();
            return("validator_stopped");
        }
Ejemplo n.º 3
0
 /// <summary>
 /// WithdrawStake:
 /// </summary>
 /// <param name="arguments"></param>
 /// <returns>tx hash</returns>
 public string WithdrawStake(string[] arguments)
 {
     if (!_validatorStatusManager.IsStarted())
     {
         return("ERROR: Validator is off");
     }
     if (_validatorStatusManager.IsWithdrawTriggered())
     {
         return("ERROR: Stake withdraw is triggered already");
     }
     _validatorStatusManager.WithdrawStakeAndStop();
     return("Stake withdraw is initiated");
 }