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()); }
public string StopValidator() { if (_privateWallet.GetWalletInstance() is null) { return("wallet_locked"); } Logger.LogDebug("validator stop command received"); _validatorStatusManager.WithdrawStakeAndStop(); return("validator_stopped"); }
/// <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"); }