Exemplo n.º 1
0
        protected virtual async Task <ExcutedResult <string> > PushAction(Action action)
        {
            var trans = new Transaction
            {
                actions = new List <Action>
                {
                    action
                }
            };

            try
            {
                var result = await Client.CreateTransaction(trans);

                if (string.IsNullOrEmpty(result))
                {
                    return(ExcutedResult <string> .FailedResult(BusinessResultCode.DataNotExist, "数据不存在,请刷新!."));
                }

                return(ExcutedResult <string> .SuccessResult("", result));
            }
            catch (ApiErrorException e)
            {
                Log4NetHelper.WriteError(GetType(), e, $"Point:{Point.HttpAddress} Code:{e.code} ErrorName:{e.error.name} Error:{e.error.what} \nAction:{JsonConvert.SerializeObject(action)}");
                return(ExcutedResult <string> .FailedResult(BusinessResultCode.ChainRequestApiError, "EOS request api error."));
            }
            catch (ApiException ex)
            {
                NodeRepository.ApiException();
                Log4NetHelper.WriteError(GetType(), ex, $"Point:{Point.HttpAddress} StatusCode:{ex.StatusCode} Content:{ex.Content}");
                return(ExcutedResult <string> .FailedResult(BusinessResultCode.ChainRequestError, "EOS request error."));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 创建新账户
        /// </summary>
        /// <param name="newAccount">新账户信息</param>
        /// <returns>操作结果</returns>
        public async Task <ExcutedResult <NewAccountResult> > CreateAccount(NewAccount newAccount)
        {
            try
            {
                var createContract   = ConfigDataRepository.GetByKey(ConfigDataKey.CreateAccountContract);
                var createCreator    = ConfigDataRepository.GetByKey(ConfigDataKey.CreateChainAccount);
                var createCreatorKey = ConfigDataRepository.GetByKey(ConfigDataKey.AgentAccountKey);
                //组装私钥(私钥解密)
                var aesKey     = Configuration["AesKey"];
                var decryptKey = CryptographyHelper.Decrypt(createCreatorKey, aesKey, null);
                Configurator.SignProvider = new DefaultSignProvider(decryptKey);
                var owner = new Authority
                {
                    accounts = new List <AuthorityAccount>(),
                    keys     = new List <AuthorityKey>()
                    {
                        new AuthorityKey()
                        {
                            key = newAccount.OwnerKey, weight = 1
                        }
                    },
                    threshold = 1,
                    waits     = new List <AuthorityWait>()
                };
                var active = new Authority
                {
                    accounts = new List <AuthorityAccount>(),
                    keys     = new List <AuthorityKey>()
                    {
                        new AuthorityKey()
                        {
                            key = newAccount.ActiveKey, weight = 1
                        }
                    },
                    threshold = 1,
                    waits     = new List <AuthorityWait>()
                };

                var client = new Thor.Framework.Ext.NGKSharp.Ngk(Configurator);
                var action = new Action
                {
                    account       = createContract,
                    authorization = new List <PermissionLevel>
                    {
                        new PermissionLevel {
                            actor = createCreator, permission = "active"
                        }
                    },
                    name = "newaccount",
                    data = new
                    {
                        creator = createCreator,
                        name    = newAccount.AccountName,
                        owner   = owner,
                        active  = active
                    }
                };
                var str = JsonConvert.SerializeObject(action);
                Console.WriteLine(str);
                var trans = new Transaction
                {
                    actions = new List <Action>()
                    {
                        action
                    }
                };
                var result = await client.CreateTransaction(trans);

                return(ExcutedResult <NewAccountResult> .SuccessResult(new NewAccountResult { Payer = createContract, TransactionId = result }));
            }
            catch (ApiErrorException ex)
            {
                Log4NetHelper.WriteError(GetType(), ex, $"Point:{Point.HttpAddress}\r\nStatusCode:{ex.code}\r\nContent:{JsonConvert.SerializeObject(ex.error)}");
                string msg = "";
                if (ex.error != null)
                {
                    foreach (var t in ex.error.details)
                    {
                        if (t.message.Contains("name is already taken"))
                        {
                            return(ExcutedResult <NewAccountResult> .FailedResult(BusinessResultCode.AccountExist, "帐号已存在"));
                        }
                        msg += t.message;
                    }
                }
                if (string.IsNullOrEmpty(msg))
                {
                    msg = ex.error?.what;
                }
                return(ExcutedResult <NewAccountResult> .FailedResult(SysResultCode.ServerException, msg));
            }
            catch (Exception ex)
            {
                Log4NetHelper.WriteError(GetType(), ex, $"Point:{Point.HttpAddress} Account:{JsonConvert.SerializeObject(newAccount)}");
                throw;
            }
        }