private async Task <BroadcastTxResponse> PostTxAsync(TxJsonRpcRequest tx) { string body = JsonConvert.SerializeObject(tx); Logger.Log(LogTag, "PostTx Body: " + body); byte[] bodyRaw = new UTF8Encoding().GetBytes(body); using (var r = new UnityWebRequest(this.writeUrl, "POST")) { r.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw); r.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer(); r.SetRequestHeader("Content-Type", "application/json"); await r.SendWebRequest(); this.HandleError(r); if (r.downloadHandler != null && !String.IsNullOrEmpty(r.downloadHandler.text)) { Logger.Log(LogTag, "Response: " + r.downloadHandler.text); return(JsonConvert.DeserializeObject <BroadcastTxResponse>(r.downloadHandler.text)); } } return(null); }
/// <summary> /// Commits a transaction to the DAppChain. /// </summary> /// <param name="tx">Transaction to commit.</param> /// <returns>Commit metadata.</returns> public async Task <BroadcastTxResult> CommitTxAsync(IMessage tx) { byte[] txBytes = tx.ToByteArray(); if (this.TxMiddleware != null) { txBytes = await this.TxMiddleware.Handle(txBytes); } string payload = CryptoBytes.ToBase64String(txBytes); Logger.Log(LogTag, "Tx: " + payload); var req = new TxJsonRpcRequest("broadcast_tx_commit", new string[] { payload }, Guid.NewGuid().ToString()); var resp = await this.PostTxAsync(req); var result = resp.Result; if (result != null) { if (result.CheckTx.Code != 0) { if (string.IsNullOrEmpty(result.CheckTx.Error)) { throw new Exception(String.Format("Failed to commit Tx: {0}", result.CheckTx.Code)); } throw new Exception(String.Format("Failed to commit Tx: {0}", result.CheckTx.Error)); } if (result.DeliverTx.Code != 0) { if (string.IsNullOrEmpty(result.DeliverTx.Error)) { throw new Exception(String.Format("Failed to commit Tx: {0}", result.DeliverTx.Code)); } throw new Exception(String.Format("Failed to commit Tx: {0}", result.DeliverTx.Error)); } } return(result); }