public async Task <IActionResult> Get(TransactionsPackedRequest request) { if (!ModelState.IsValid) { var errors = String.Join(',', ModelState.Values.SelectMany(c => c.Errors).Select(e => e.ErrorMessage)); return(BadRequest(errors)); } try { var packedTrx = await this.m_TransactionsManager.CreatePackedTransaction(request); return(Ok(packedTrx)); } catch (EosSharp.Core.Exceptions.ApiErrorException e) { return(BadRequest(e.error.details[0].message)); } catch (System.ArgumentException e) { return(BadRequest(e.Message)); } catch (System.Exception e) { throw e; } }
public async Task <string> CreatePackedTransaction(TransactionsPackedRequest request) { var action = new EosSharp.Core.Api.v1.Action { account = request.Account, authorization = request.Authorization?.Select(p => new PermissionLevel() { actor = p.Actor, permission = p.Permission }).ToList(), name = request.Name, data = request.Data }; if (action.data != null && action.data is JObject) { action.data = ((JObject)action.data).ToDictionary(); } if (string.IsNullOrEmpty(action.account)) { throw new ArgumentNullException(nameof(request.Account)); } if (string.IsNullOrEmpty(action.name)) { throw new ArgumentNullException(nameof(request.Name)); } if (action.authorization == null || action.authorization.Count == 0) { throw new ArgumentNullException(nameof(request.Authorization)); } var trx = new Transaction() { actions = new List <EosSharp.Core.Api.v1.Action>() { action } }; GetInfoResponse getInfoResult = null; string chainId = m_EosConfig.ChainId; if (string.IsNullOrWhiteSpace(chainId)) { getInfoResult = await m_EosApi.GetInfo(); chainId = getInfoResult.chain_id; } if (trx.expiration == DateTime.MinValue || trx.ref_block_num == 0 || trx.ref_block_prefix == 0) { if (getInfoResult == null) { getInfoResult = await m_EosApi.GetInfo(); } var getBlockResult = await m_EosApi.GetBlock(new GetBlockRequest() { block_num_or_id = getInfoResult.last_irreversible_block_num.ToString() }); trx.expiration = getInfoResult.head_block_time.AddSeconds(m_EosConfig.ExpireSeconds); trx.ref_block_num = (UInt16)(getInfoResult.last_irreversible_block_num & 0xFFFF); trx.ref_block_prefix = getBlockResult.ref_block_prefix; } var packedTrx = await m_AbiSerializer.SerializePackedTransaction(trx); return(SerializationHelper.ByteArrayToHexString(packedTrx)); }