private async Task IndexEventsInRange(string coinAdapterAddress, Nethereum.Contracts.Event coinCashInEvent, BigInteger from, BigInteger to) { var fromBlock = new Nethereum.RPC.Eth.DTOs.BlockParameter(new Nethereum.Hex.HexTypes.HexBigInteger(from)); var toBlock = new Nethereum.RPC.Eth.DTOs.BlockParameter(new Nethereum.Hex.HexTypes.HexBigInteger(to)); var filter = await coinCashInEvent.CreateFilterBlockRangeAsync(fromBlock, toBlock); var filterByCaller = await coinCashInEvent.GetAllChanges <CoinCashinEvent>(filter); filterByCaller.ForEach(async @event => { string transactionHash = @event.Log.TransactionHash; CoinEventCashinCompletedMessage cashinTransactionMessage = new CoinEventCashinCompletedMessage() { TransactionHash = transactionHash }; await _cashinEventRepository.InsertAsync(new CashinEvent() { CoinAdapterAddress = coinAdapterAddress, Amount = @event.Event.Amount.ToString(), TransactionHash = transactionHash, UserAddress = @event.Event.Caller }); await _cashinQueue.PutRawMessageAsync(Newtonsoft.Json.JsonConvert.SerializeObject(cashinTransactionMessage)); }); await _blockSyncedRepository.InsertAsync(new BlockSynced() { BlockNumber = to.ToString(), CoinAdapterAddress = coinAdapterAddress }); }
public async Task ExecuteCashinCompleted(CoinEventCashinCompletedMessage message, QueueTriggeringContext context) { try { if (message == null || string.IsNullOrEmpty(message.TransactionHash)) { context.MoveMessageToPoison(message?.ToJson()); } var coinEvent = await _coinEventService.GetCoinEvent(message.TransactionHash); if (coinEvent == null) { return; } if (coinEvent.CoinEventType == CoinEventType.CashinStarted) { await _coinTransactionService.PutTransactionToQueue(coinEvent.TransactionHash, coinEvent.OperationId); } } catch (Exception ex) { await _log.WriteErrorAsync("MonitoringCoinTransactionJob", "Execute", "", ex); if (message.DequeueCount > 10000) { context.MoveMessageToPoison(message.ToJson()); return; } context.MoveMessageToEnd(message.ToJson()); context.SetCountQueueBasedDelay(_settings.MaxQueueDelay, 150); } }
public async Task IndexEventsForTransaction(string coinAdapterAddress, string trHash) { var contract = _web3.Eth.GetContract(_baseSettings.CoinAbi, coinAdapterAddress); var coinCashInEvent = contract.GetEvent("CoinCashIn"); var transaction = await _web3.Eth.Transactions.GetTransactionByHash.SendRequestAsync(trHash); var fromBlock = new Nethereum.RPC.Eth.DTOs.BlockParameter(new Nethereum.Hex.HexTypes.HexBigInteger(transaction.BlockNumber)); var toBlock = new Nethereum.RPC.Eth.DTOs.BlockParameter(new Nethereum.Hex.HexTypes.HexBigInteger(transaction.BlockNumber.Value + 1)); var filter = await coinCashInEvent.CreateFilterBlockRangeAsync(fromBlock, toBlock); var filterByCaller = await coinCashInEvent.GetAllChanges <CoinCashinEvent>(filter); filterByCaller.ForEach(async @event => { string transactionHash = @event.Log.TransactionHash; CoinEventCashinCompletedMessage cashinTransactionMessage = new CoinEventCashinCompletedMessage() { TransactionHash = transactionHash }; await _cashinEventRepository.InsertAsync(new CashinEvent() { CoinAdapterAddress = coinAdapterAddress, Amount = @event.Event.Amount.ToString(), TransactionHash = transactionHash, UserAddress = @event.Event.Caller }); }); }