Exemplo n.º 1
0
        protected BaseClient()
        {
            var scope = AspectCoreContainer.CreateScope();

            NodeRepository        = (INodeRepository)scope.Resolve(typeof(INodeRepository));
            ConfigDataRepository  = (IConfigDataRepository)scope.Resolve(typeof(IConfigDataRepository));
            ChainConfigRepository = (IChainConfigRepository)scope.Resolve(typeof(IChainConfigRepository));
            Configuration         = (IConfiguration)scope.Resolve(typeof(IConfiguration));
            var chain = ChainConfigRepository.GetByChainCode(ChainCode);

            Point        = NodeRepository.GetNode(ChainCode, EnumNodeType.Server);
            Configurator = new ChainConfigurator
            {
                HttpEndpoint  = Point.HttpAddress,
                ChainId       = chain.ChainId,
                ExpireSeconds = Point.TimeOut,
            };
            Client = new Thor.Framework.Ext.NGKSharp.Ngk(Configurator);
        }
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;
            }
        }