예제 #1
0
        public async Task ParseBlock(AssetDefinitionParseBlockContext context)
        {
            try
            {
                _console.Write(nameof(ParseBlockCommandQueueConsumer), nameof(ParseBlock), context.ToJson(), "Started");
                var block = await _indexerClient.GetBlock(uint256.Parse(context.BlockHash));

                foreach (var transaction in block.Transactions.Where(p => p.HasValidColoredMarker()))
                {
                    var assetDefUrl = transaction.TryGetAssetDefinitionUrl();

                    if (assetDefUrl != null)
                    {
                        await _log.WriteInfoAsync(nameof(ParseBlockCommandQueueConsumer),
                                                  nameof(ParseBlock),
                                                  context.ToJson(),
                                                  $"Found asset definition url {assetDefUrl.AbsoluteUri}");

                        await _assetDefinitionCommandProducer.CreateRetrieveAssetDefinitionCommand(assetDefUrl.AbsoluteUri);
                    }
                }


                await _assetDefinitionParsedBlockRepository.AddBlockAsync(AssetDefinitionParsedBlock.Create(context.BlockHash));

                _console.Write(nameof(ParseBlockCommandQueueConsumer), nameof(ParseBlock), context.ToJson(), "Done");
            }
            catch (Exception e)
            {
                await _log.WriteErrorAsync(nameof(ParseBlockCommandQueueConsumer), nameof(ParseBlock), context.ToJson(), e);
            }
        }
예제 #2
0
        public Task CreateParseBlockCommand(string blockHash)
        {
            var context = new AssetDefinitionParseBlockContext
            {
                BlockHash = blockHash
            };

            return(_queue.PutRawMessageAsync(context.ToJson()));
        }