public async Task <ActionResult <SubmitTransactionResponseViewModel> > SubmitTxRawAsync(
            [FromQuery]
            string callbackUrl,
            [FromQuery]
            string callbackToken,
            [FromQuery]
            string callbackEncryption,
            [FromQuery]
            bool merkleProof,
            [FromQuery]
            string merkleFormat,
            [FromQuery]
            bool dsCheck)
        {
            if (!IdentityProviderStore.GetUserAndIssuer(User, Request.Headers, out var identity))
            {
                return(Unauthorized("Incorrectly formatted token"));
            }

            byte[] data;
            using (var ms = new MemoryStream())
            {
                await Request.Body.CopyToAsync(ms);

                data = ms.ToArray();
            }

            var request = new SubmitTransaction
            {
                RawTx              = data,
                CallbackUrl        = callbackUrl,
                CallbackToken      = callbackToken,
                CallbackEncryption = callbackEncryption,
                MerkleProof        = merkleProof,
                MerkleFormat       = merkleFormat,
                DsCheck            = dsCheck
            };

            var result = new SubmitTransactionResponseViewModel(await mapi.SubmitTransactionAsync(request, identity));

            return(await SignIfRequiredAsync(result, result.MinerId));
        }
예제 #2
0
        public async Task <SubmitTransactionResponse> SubmitTransactionAsync(SubmitTransaction request, UserAndIssuer user)
        {
            var responseMulti = await SubmitTransactionsAsync(new [] { request }, user);

            if (responseMulti.Txs.Length != 1)
            {
                throw new Exception("Internal error. Expected exactly 1 transaction in response but got {responseMulti.Txs.Length}");
            }

            var tx = responseMulti.Txs[0];

            return(new SubmitTransactionResponse
            {
                Txid = tx.Txid,
                ReturnResult = tx.ReturnResult,
                ResultDescription = tx.ResultDescription,
                ConflictedWith = tx.ConflictedWith,
                Timestamp = responseMulti.Timestamp,
                MinerId = responseMulti.MinerId,
                CurrentHighestBlockHash = responseMulti.CurrentHighestBlockHash,
                CurrentHighestBlockHeight = responseMulti.CurrentHighestBlockHeight,
                TxSecondMempoolExpiry = responseMulti.TxSecondMempoolExpiry
            });
        }