public async Task ExecuteOperationAsync( string operationId, string masterWalletAddress, string targetWalletAddress, string encodedData) { var(transactionData, transactionHash) = await _operationsRepository.GetOrCreateOperationAsync(operationId); if (transactionHash == null) { if (transactionData == null) // Transaction has been neither built, nor broadcasted { transactionData = await BuildTransactionAsync(operationId, masterWalletAddress, targetWalletAddress, encodedData); } // Transaction has already been built, but has not been broadcasted yet var broadcastedData = await SendTransactionAsync(operationId, transactionData); await SetTransactionHash(operationId, broadcastedData.Item2); return; } //Transaction has already been built and broadcasted if (transactionData == null) { _log.Warning("Operation has hash, but has no data.", context: new { operationId }); return; } _log.Info("Operation has already been built and broadcasted.", new { operationId, transactionHash }); }