public async Task <CommandHandlingResult> Handle(SignTransactionCommand command, IEventPublisher publisher) { var transactionSigningResult = await _client.SignTransactionAsync ( blockchainType : command.NeoBlockchainType, request : new SignTransactionRequest { PublicAddresses = new[] { command.Address }, TransactionContext = command.UnsignedTransactionContext } ); _chaosKitty.Meow(command.TransactionId); if (string.IsNullOrWhiteSpace(transactionSigningResult?.SignedTransaction)) { throw new InvalidOperationException("Sign service returned the empty transaction"); } publisher.PublishEvent(new TransactionSignedEvent { TransactionId = command.TransactionId, SignedTransactionContext = transactionSigningResult.SignedTransaction }); return(CommandHandlingResult.Ok()); }
public async Task <CommandHandlingResult> Handle(SignTransactionCommand command, IEventPublisher publisher) { var alreadyPublishedEvt = await _commandHandlerEventRepository.TryGetEventAsync(command.TransactionId, CommandHandlerId); if (alreadyPublishedEvt != null) { publisher.PublishEvent(alreadyPublishedEvt); return(CommandHandlingResult.Ok()); } var transactionSigningResult = await _signFacadeClient.SignTransactionAsync ( blockchainType : command.BlockchainType, request : new SignTransactionRequest { PublicAddresses = new[] { command.SignerAddress }, TransactionContext = command.TransactionContext } ); _chaosKitty.Meow(command.TransactionId); if (string.IsNullOrWhiteSpace(transactionSigningResult?.SignedTransaction)) { throw new InvalidOperationException("Sign service returned the empty transaction"); } publisher.PublishEvent(await _commandHandlerEventRepository.InsertEventAsync(command.TransactionId, CommandHandlerId, new TransactionSignedEvent { OperationId = command.OperationId, TransactionId = command.TransactionId, SignedTransaction = transactionSigningResult.SignedTransaction })); return(CommandHandlingResult.Ok()); }