コード例 #1
0
        // changed from private to public: StopValidator() , IsMining()
        public void Test_StopValidator()
        {
            Assert.AreEqual("wallet_locked", _apiService.StopValidator());
            UnlockWallet(true);
            string money = "2000";

            _validatorStatusManager.StartWithStake(Money.Parse(money).ToUInt256());
            Assert.AreEqual(true, _apiService.IsMining());
            Assert.AreEqual("validator_stopped", _apiService.StopValidator());
            // this does not work because this is the only validator;
            //Assert.AreEqual(false, _apiService.IsMining());
        }
コード例 #2
0
ファイル: ConsoleCommands.cs プロジェクト: LAToken/lachain
 /// <summary>
 /// Stake:
 ///  stake amount
 /// </summary>
 /// <param name="arguments"></param>
 /// <returns>stake tx hash</returns>
 public string NewStake(string[] arguments)
 {
     if (_validatorStatusManager.IsStarted())
     {
         return("ERROR: Withdraw current stake first");
     }
     if (arguments.Length == 0)
     {
         _validatorStatusManager.Start(false);
     }
     else
     {
         _validatorStatusManager.StartWithStake(Money.Parse(arguments[0]).ToUInt256());
     }
     return("Validator is started");
 }
コード例 #3
0
        public string StartValidatorWithStake(string stake)
        {
            if (_privateWallet.GetWalletInstance() is null)
            {
                return("wallet_locked");
            }

            Logger.LogDebug("validator start_with_stake command received");
            if (_validatorStatusManager.IsStarted())
            {
                return("withdraw previous stake first");
            }

            _validatorStatusManager.StartWithStake(Money.Parse(stake).ToUInt256());

            return("validator_started");
        }
コード例 #4
0
        public void Test_StakeSize()
        {
            _blockManager.TryBuildGenesisBlock();
            var systemContractReader = _container?.Resolve <ISystemContractReader>() ?? throw new Exception("Container is not loaded");
            var tx = TopUpBalanceTx(systemContractReader.NodeAddress(), Money.Parse("3000.0").ToUInt256(), 0,
                                    HardforkHeights.IsHardfork_9Active(1));

            Assert.AreEqual(OperatingError.Ok, _transactionPool.Add(tx));
            GenerateBlocks(1, 1);
            var balance      = _stateManager.CurrentSnapshot.Balances.GetBalance(systemContractReader.NodeAddress());
            var placeToStake = Money.Parse("2000.0");

            Assert.That(balance > placeToStake, "Not enough balance to make stake");
            _validatorStatusManager.StartWithStake(placeToStake.ToUInt256());
            Assert.That(_validatorStatusManager.IsStarted(), "Manager is not started");
            Assert.That(!_validatorStatusManager.IsWithdrawTriggered(), "Withdraw was triggered from the beggining");

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

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

            var stake = new Money(systemContractReader.GetStake(systemContractReader.NodeAddress()));

            // TODO: fix it
//            Assert.That(stake == placeToStake, $"Stake is not as intended: {stake} != {placeToStake}");
            _validatorStatusManager.WithdrawStakeAndStop();
            Assert.That(_validatorStatusManager.IsStarted(), "Manager is stopped right after withdraw request");
            Assert.That(_validatorStatusManager.IsWithdrawTriggered(), "Withdraw is not triggered");
            // Test node is the only vaidator, so it is a next validator always
            // and it can't withdraw its stake.
            //    GenerateBlocks(50);
            //    Assert.That(!_validatorStatusManager.IsStarted(), "Manager is not stopped");
            //_validatorStatusManager.Stop();
        }