Пример #1
0
        /// <summary>
        /// send a transaction
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <SendRawTransactionOutput> SendRawTransactionAsync(SendRawTransactionInput input)
        {
            var transaction = Transaction.Parser.ParseFrom(ByteArrayHelper.HexStringToByteArray(input.Transaction));

            transaction.Signature = ByteString.CopyFrom(ByteArrayHelper.HexStringToByteArray(input.Signature));
            var txIds = await PublishTransactionsAsync(new[] { transaction.ToByteArray().ToHex() });

            var output = new SendRawTransactionOutput
            {
                TransactionId = txIds[0]
            };

            if (!input.ReturnTransaction)
            {
                return(output);
            }

            var transactionDto           = JsonConvert.DeserializeObject <TransactionDto>(transaction.ToString());
            var contractMethodDescriptor =
                await GetContractMethodDescriptorAsync(transaction.To, transaction.MethodName);

            var parameters = contractMethodDescriptor.InputType.Parser.ParseFrom(transaction.Params);

            transactionDto.Params = JsonFormatter.ToDiagnosticString(parameters);
            output.Transaction    = transactionDto;

            return(output);
        }
Пример #2
0
        /// <summary>
        /// Broadcast a serialized transaction.
        /// </summary>
        /// <param name="input"></param>
        /// <returns>SendRawTransactionOutput</returns>
        public async Task <SendRawTransactionOutput> SendRawTransactionAsync(SendRawTransactionInput input)
        {
            var url        = GetRequestUrl(_baseUrl, "api/blockChain/sendRawTransaction");
            var parameters = new Dictionary <string, string>
            {
                { "Transaction", input.Transaction },
                { "Signature", input.Signature },
                { "ReturnTransaction", input.ReturnTransaction ? "true" : "false" }
            };

            return(await _httpService.PostResponseAsync <SendRawTransactionOutput>(url, parameters));
        }
Пример #3
0
        /// <summary>
        /// send a transaction
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <SendRawTransactionOutput> SendRawTransactionAsync(SendRawTransactionInput input)
        {
            var transaction = Transaction.Parser.ParseFrom(ByteArrayHelper.HexStringToByteArray(input.Transaction));

            transaction.Signature = ByteString.CopyFrom(ByteArrayHelper.HexStringToByteArray(input.Signature));
            var txIds = await PublishTransactionsAsync(new[] { transaction.ToByteArray().ToHex() });

            var output = new SendRawTransactionOutput
            {
                TransactionId = txIds[0]
            };

            if (!input.ReturnTransaction)
            {
                return(output);
            }

            var transactionDto           = JsonConvert.DeserializeObject <TransactionDto>(transaction.ToString());
            var contractMethodDescriptor =
                await GetContractMethodDescriptorAsync(transaction.To, transaction.MethodName);

            if (contractMethodDescriptor == null)
            {
                throw new UserFriendlyException(Error.Message[Error.NoMatchMethodInContractAddress],
                                                Error.NoMatchMethodInContractAddress.ToString());
            }

            var parameters = contractMethodDescriptor.InputType.Parser.ParseFrom(transaction.Params);

            if (!IsValidMessage(parameters))
            {
                throw new UserFriendlyException(Error.Message[Error.InvalidParams], Error.InvalidParams.ToString());
            }

            transactionDto.Params = JsonFormatter.ToDiagnosticString(parameters);
            output.Transaction    = transactionDto;

            return(output);
        }