public BalanceService(IHorizonService horizonService, IObservationRepository <BalanceObservation> observationRepository, IWalletBalanceRepository walletBalanceRepository, ILog log, int batchSize) { _horizonService = horizonService; _observationRepository = observationRepository; _walletBalanceRepository = walletBalanceRepository; _log = log; _batchSize = batchSize; }
public TransactionHistoryService(IHorizonService horizonService, IObservationRepository <TransactionHistoryObservation> observationRepository, ITxHistoryRepository txHistoryRepository, ITxBroadcastRepository txBroadcastRepository, ILog log, int batchSize) { _horizonService = horizonService; _observationRepository = observationRepository; _txHistoryRepository = txHistoryRepository; _txBroadcastRepository = txBroadcastRepository; _log = log; _batchSize = batchSize; }
public TransactionService(IHorizonService horizonService, IObservationRepository <BroadcastObservation> observationRepository, ITxBroadcastRepository broadcastRepository, ITxBuildRepository buildRepository, ILog log, int batchSize) { _horizonService = horizonService; _observationRepository = observationRepository; _broadcastRepository = broadcastRepository; _buildRepository = buildRepository; _log = log; _batchSize = batchSize; }
public TransactionHistoryService(IBalanceService balanceService, IHorizonService horizonService, IKeyValueStoreRepository keyValueStoreRepository, IObservationRepository <TransactionHistoryObservation> observationRepository, ITxHistoryRepository txHistoryRepository, ILogFactory log, IBlockchainAssetsService blockchainAssetsService) { _balanceService = balanceService; _horizonService = horizonService; _keyValueStoreRepository = keyValueStoreRepository; _observationRepository = observationRepository; _txHistoryRepository = txHistoryRepository; _log = log.CreateLog(this); _blockchainAssetsService = blockchainAssetsService; }
public BalanceService(IHorizonService horizonService, IKeyValueStoreRepository keyValueStoreRepository, IObservationRepository <BalanceObservation> observationRepository, IWalletBalanceRepository walletBalanceRepository, string depositBaseAddress, string[] explorerUrlFormats, ILogFactory log, IBlockchainAssetsService blockchainAssetsService) { _horizonService = horizonService; _keyValueStoreRepository = keyValueStoreRepository; _observationRepository = observationRepository; _walletBalanceRepository = walletBalanceRepository; _depositBaseAddress = depositBaseAddress; _explorerUrlFormats = explorerUrlFormats; _log = log.CreateLog(this); _blockchainAssetsService = blockchainAssetsService; }
public TransactionService(IBalanceService balanceService, IHorizonService horizonService, IObservationRepository <BroadcastObservation> observationRepository, IWalletBalanceRepository balanceRepository, ITxBroadcastRepository broadcastRepository, ITxBuildRepository buildRepository, TimeSpan transactionExpirationTime, ILogFactory logFactory, IBlockchainAssetsService blockchainAssetsService, IChaosKitty chaosKitty, AppSettings appSettings) { _balanceService = balanceService; _horizonService = horizonService; _observationRepository = observationRepository; _balanceRepository = balanceRepository; _broadcastRepository = broadcastRepository; _buildRepository = buildRepository; _transactionExpirationTime = transactionExpirationTime; _log = logFactory.CreateLog(this); _blockchainAssetsService = blockchainAssetsService; _chaos = chaosKitty; _appSettings = appSettings; }
private async Task <(int Count, string Cursor)> ProcessTransactionsAsync(IHorizonService horizonService, ILog logger, string cursor) { var transactions = await horizonService.GetTransactions(_address, OrderDirection.ASC, cursor); var count = 0; cursor = null; foreach (var transaction in transactions) { try { if (_latestBlock.HasValue && (long)transaction.Ledger > _latestBlock) { cursor = null; break; } var sign = 1; cursor = transaction.PagingToken; count++; // skip outgoing transactions and transactions without memo //var memo = horizonService.GetMemo(transaction); if (_address.Equals(transaction.SourceAccount, StringComparison.OrdinalIgnoreCase)) { sign = -1; } var xdr = Convert.FromBase64String(transaction.EnvelopeXdr); var reader = new XdrDataInputStream(xdr); var txEnvelope = TransactionEnvelope.Decode(reader); var tx = txEnvelope.V0.Tx.Operations; for (short i = 0; i < tx.Length; i++) { var operation = tx[i]; var operationType = operation.Body.Discriminant.InnerValue; string toAddress = null; long amount = 0; // ReSharper disable once SwitchStatementMissingSomeCases switch (operationType) { case OperationType.OperationTypeEnum.PAYMENT: { var op = operation.Body.PaymentOp; if (op.Asset.Discriminant.InnerValue == AssetType.AssetTypeEnum.ASSET_TYPE_NATIVE) { var keyPair = KeyPair.FromPublicKey(op.Destination.Ed25519.InnerValue); toAddress = keyPair.Address; amount = op.Amount.InnerValue; } break; } case OperationType.OperationTypeEnum.ACCOUNT_MERGE: { var op = operation.Body; var keyPair = KeyPair.FromPublicKey(op.Destination.Ed25519.InnerValue); toAddress = keyPair.Address; amount = horizonService.GetAccountMergeAmount(transaction.ResultXdr, i); break; } case OperationType.OperationTypeEnum.PATH_PAYMENT_STRICT_RECEIVE: { var op = operation.Body.PathPaymentStrictReceiveOp; if (op.DestAsset.Discriminant.InnerValue == AssetType.AssetTypeEnum.ASSET_TYPE_NATIVE) { var keyPair = KeyPair.FromPublicKey(op.Destination.Ed25519.InnerValue); toAddress = keyPair.Address; amount = op.DestAmount.InnerValue; } break; } case OperationType.OperationTypeEnum.CREATE_ACCOUNT: { var op = operation.Body.CreateAccountOp; if (op != null) { var keyPair = KeyPair.FromXdrPublicKey(op.Destination.InnerValue); toAddress = keyPair.Address; amount = op.StartingBalance.InnerValue; } break; } default: continue; } //var addressWithExtension = $"{toAddress}{Constants.PublicAddressExtension.Separator}{memo.ToLower()}"; var amountChange = (sign * amount); _amountSoFar += amountChange; //logger.Info($"Balance changed to {_amountSoFar} ({amountChange}) on ledger {transaction.Ledger}"); } } catch (Exception ex) { throw new BusinessException($"Failed to process transaction. hash={transaction?.Hash}", ex); } } return(count, cursor); }