private async Task Sync(Source source, Event replacementCompletedEvent, OTContract contract, MySqlConnection connection, Web3 cl, int blockchainID, EthApiService eth, ulong currentStart, ulong currentEnd) { var toBlock = new BlockParameter(currentEnd); var replacementCompletedEvents = await replacementCompletedEvent.GetAllChangesDefault( replacementCompletedEvent.CreateFilterInput(new BlockParameter(currentStart), toBlock)); if (replacementCompletedEvents.Any()) { Logger.WriteLine(source, "Found " + replacementCompletedEvents.Count + " replacement completed events"); } foreach (EventLog <List <ParameterOutput> > eventLog in replacementCompletedEvents) { var block = await BlockHelper.GetBlock(connection, eventLog.Log.BlockHash, eventLog.Log.BlockNumber, cl, blockchainID); var offerId = HexHelper.ByteArrayToString((byte[])eventLog.Event .First(e => e.Parameter.Name == "offerId").Result); var challengerIdentity = (string)eventLog.Event .First(e => e.Parameter.Name == "challengerIdentity").Result; var chosenHolder = (string)eventLog.Event .First(e => e.Parameter.Name == "chosenHolder").Result; var transaction = await eth.Transactions.GetTransactionByHash.SendRequestAsync(eventLog.Log.TransactionHash); var receipt = await eth.Transactions.GetTransactionReceipt.SendRequestAsync(eventLog.Log.TransactionHash); var row = new OTContract_Replacement_ReplacementCompleted { TransactionHash = eventLog.Log.TransactionHash, BlockNumber = (UInt64)eventLog.Log.BlockNumber.Value, Timestamp = block.Timestamp, OfferId = offerId, ChosenHolder = chosenHolder, ChallengerIdentity = challengerIdentity, GasPrice = (UInt64)transaction.GasPrice.Value, GasUsed = (UInt64)receipt.GasUsed.Value, BlockchainID = blockchainID }; await OTContract_Replacement_ReplacementCompleted.InsertIfNotExist(connection, row); await OTOfferHolder.Insert(connection, offerId, chosenHolder, false, blockchainID); await OTOfferHolder.UpdateLitigationStatusesForOffer(connection, offerId, blockchainID); } contract.LastSyncedTimestamp = DateTime.Now; contract.SyncBlockNumber = (ulong)toBlock.BlockNumber.Value; await OTContract.Update(connection, contract, false, false); }
public override async Task <bool> Execute(Source source, BlockchainType blockchain, BlockchainNetwork network) { await using (var connection = new MySqlConnection(OTHubSettings.Instance.MariaDB.ConnectionString)) { int blockchainID = await GetBlockchainID(connection, blockchain, network); await OTOfferHolder.UpdateLitigationForAllOffers(connection, blockchainID); } return(true); }