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