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)); }
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 }); }