예제 #1
0
        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;
            }
        }
예제 #2
0
        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));
        }