public async Task CreateTransaction_CallswithCorrectParams_Test()
        {
            var transactionCreatePayload = new DragonchainTransactionCreatePayload
            {
                Version         = "1",
                TransactionType = "transaction",
                Payload         = "hi!",
                Tag             = "Awesome!"
            };
            await _dragonchainClient.CreateTransaction(transactionCreatePayload.TransactionType, transactionCreatePayload.Payload, transactionCreatePayload.Tag);

            _httpService.Verify(service => service.PostAsync <DragonchainTransactionCreateResponse>("/transaction", It.IsAny <DragonchainTransactionCreatePayload>(), ""), Times.Once);
        }
        /// <summary>
        /// Create a new Transaction on your Dragonchain. This transaction, if properly structured, will be received by your dragonchain,
        /// hashed, and put into a queue for processing into a block. The transaction_id returned from this function can be used for checking
        /// the status of this transaction. Most importantly; the block in which it has been fixated.
        /// </summary>
        /// <param name="transactionType">The transaction type to use for this new transaction. This transaction type must already exist on the chain (via `CreateTransactionType`)</param>
        /// <param name="payload">Payload of the transaction. Must be a utf-8 encodable string or any object</param>
        /// <param name="tag">Tag of the transaction which gets indexed and can be searched on for queries</param>
        /// <param name="callbackURL">URL to callback when this transaction is processed</param>
        /// <returns></returns>
        public async Task <ApiResponse <DragonchainTransactionCreateResponse> > CreateTransaction(string transactionType, object payload = null, string tag = "", string callbackURL = "")
        {
            if (string.IsNullOrWhiteSpace(transactionType))
            {
                throw new FailureByDesignException(FailureCode.PARAM_ERROR, "Parameter `transactionType` is required");
            }
            if (payload == null)
            {
                payload = string.Empty;
            }
            var transactionBody = new DragonchainTransactionCreatePayload
            {
                Version         = "1",
                TransactionType = transactionType,
                Payload         = payload
            };

            if (!string.IsNullOrWhiteSpace(tag))
            {
                transactionBody.Tag = tag;
            }
            return(await _httpService.PostAsync <DragonchainTransactionCreateResponse>("/transaction", transactionBody, callbackURL));
        }
        /// <summary>
        /// Create a bulk transaction to send many transactions to a chain with only a single call
        /// </summary>
        /// <param name="transactionBulkObject">array of transactions</param>
        /// <returns></returns>
        public async Task <ApiResponse <DragonchainBulkTransactionCreateResponse> > CreateBulkTransaction(IEnumerable <BulkTransactionPayload> transactionList)
        {
            if (!transactionList.Any())
            {
                throw new FailureByDesignException(FailureCode.PARAM_ERROR, "parameter `transactionList` is required");
            }
            var bulkTransactionBody = new List <DragonchainTransactionCreatePayload>();

            foreach (var transaction in transactionList)
            {
                var transactionBody = new DragonchainTransactionCreatePayload
                {
                    Version         = "1",
                    TransactionType = transaction.TransactionType,
                    Payload         = transaction.Payload != null ? transaction.Payload : ""
                };
                if (!string.IsNullOrWhiteSpace(transaction.Tag))
                {
                    transactionBody.Tag = transaction.Tag;
                }
                bulkTransactionBody.Add(transactionBody);
            }
            return(await _httpService.PostAsync <DragonchainBulkTransactionCreateResponse>("/transaction_bulk", bulkTransactionBody));
        }