public async Task Monitoring()
        {
            var currentBlock = await _settingsRepository.Get <int>(Constants.ProcessingBlockSetting);

            if (currentBlock == 0)
            {
                currentBlock = await _rpcBitcoinClient.GetBlockCount() - 1;
            }
            var dbCommitments = (await _commitmentRepository.GetMonitoringCommitments()).GroupBy(o => o.LockedAddress).ToDictionary(o => o.Key, o => o);

            do
            {
                var block = await _qBitNinjaApiCaller.GetBlock(currentBlock);

                if (block == null)
                {
                    break;
                }
                foreach (var transaction in block.Block.Transactions)
                {
                    var marker = transaction.GetColoredMarker();

                    foreach (var transactionOutput in transaction.Outputs.AsIndexedOutputs())
                    {
                        var address = transactionOutput.TxOut.ScriptPubKey.GetDestinationAddress(_connectionParams.Network)?.ToString();
                        if (address != null && dbCommitments.ContainsKey(address))
                        {
                            var   commitments = dbCommitments[address].OrderByDescending(o => o.CreateDt).ToList();
                            ICoin coin        = new Coin(transaction, transactionOutput.TxOut).ToScriptCoin(commitments[0].LockedScript.ToScript());

                            decimal amount;
                            if (marker == null)
                            {
                                amount = transactionOutput.TxOut.Value.ToDecimal(MoneyUnit.BTC);
                            }
                            else
                            {
                                var asset = await _assetRepository.GetAssetById(commitments[0].AssetId);

                                var assetMoney = new AssetMoney(new BitcoinAssetId(asset.BlockChainAssetId).AssetId, marker.Quantities[transactionOutput.N - 1]);
                                coin   = ((Coin)coin).ToColoredCoin(assetMoney);
                                amount = assetMoney.ToDecimal(asset.MultiplierPower);
                            }
                            var commitment = commitments.FirstOrDefault(o => o.Type == CommitmentType.Hub && o.HubAmount == amount ||
                                                                        o.Type == CommitmentType.Client && o.ClientAmount == amount);

                            if (commitment != null)
                            {
                                await ProcessBroadcastedCommitment(commitment, coin);
                            }
                        }
                    }
                }
                currentBlock++;
                await _settingsRepository.Set(Constants.ProcessingBlockSetting, currentBlock);
            } while (true);
        }