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); }
/// <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; } }