public async Task Can_sign_transaction()
        {
            //ARRANGE
            var privateKeys = new List <EncryptedString>
            {
                EncryptedString.Encrypt(MyPublicKey, MyPrivateKey.DecodeToString()),
                EncryptedString.Encrypt(MyPublicKey, MyPrivateKey2.DecodeToString()),
            };

            var transactionId     = new TransactionId("TransactionId");
            var signedTransaction = "From.x01.To.x02.Amount.100.Signature.F1T2A100";

            var client = PrepareClient <AppSettings>((options) =>
            {
                Mock <IAddressGenerator> addressGenerator   = new Mock <IAddressGenerator>();
                Mock <ITransactionSigner> transactionSigner = new Mock <ITransactionSigner>();

                transactionSigner.Setup(x => x.SignAsync(It.IsAny <IReadOnlyCollection <string> >(), It.IsAny <Base64String>()))
                .ReturnsAsync(new SignTransactionResponse(Base64String.Encode(signedTransaction), transactionId));

                options.IntegrationName          = $"{nameof(SignServiceClientTests)}+{nameof(Can_sign_transaction)}";
                options.AddressGeneratorFactory  = (context) => addressGenerator.Object;
                options.TransactionSignerFactory = (context) => transactionSigner.Object;
            });

            //ACT
            var request = new SignTransactionRequest(privateKeys, Base64String.Encode(signedTransaction));
            SignTransactionResponse result = await client.SignTransactionAsync(request);

            //ASSERT
            Assert.True(result != null);
            Assert.True(result.TransactionId == transactionId);
            Assert.True(result.SignedTransaction.DecodeToString() == signedTransaction);
        }
Ejemplo n.º 2
0
        /// <exception cref="ErrorResponseException"/>
        /// <exception cref="UnknownResponseException"/>
        public async Task <SignedTransactionModel> SignTransactionAsync(SignRequestModel requestModel)
        {
            var request  = new SignTransactionRequest(requestModel.PublicAddresses?.ToList(), requestModel.TransactionHex);
            var response = await _api.SignTransactionAsync(request);

            SignTransactionResponse signTransactionResponse = ConvertToOrHandleErrorResponse <SignTransactionResponse>(response);

            return(new SignedTransactionModel(signTransactionResponse.SignedTransaction));
        }
        public async Task <SignTransactionResponse> SignTransactionAsync(
            [FromRoute] string address,
            [FromBody] SignTransactionRequest request)
        {
            address = address.ToLowerInvariant();

            var response = new SignTransactionResponse();

            if (await _walletService.WalletExistsAsync(address))
            {
                var rawTxHash = Convert.FromBase64String(request.RawTxHash);
                var(v, r, s) = await _walletService.SignTransactionAsync(address, rawTxHash);

                response.R = Convert.ToBase64String(r);
                response.S = Convert.ToBase64String(s);
                response.V = Convert.ToBase64String(v);
            }
            else
            {
                response.Error = SignTransactionError.WalletNotFound;
            }

            return(response);
        }