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());
        }
Пример #3
0
 public async Task SendSignTransactionCommand([FromBody] SignTransactionCommand command)
 {
     _cqrsEngine.SendCommand(command, $"{CqrsModule.TransactionExecutor}.saga", CqrsModule.TransactionExecutor);
 }