internal CreateAccountRecord FillProperties(CreateAccountRecord record)
 {
     FillCommonProperties(record);
     record.Address = Receipt.AccountID.ToAddress()
     ;
     return(record);
 }
示例#2
0
        /// <summary>
        /// 创建钱包帐号
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public ExcutedResult CreateFreeAccount(CreateFreeAccountRequest request)
        {
            if (!RegexHelper.CheckAccount(request.Account))
            {
                return(ExcutedResult.FailedResult(BusinessResultCode.AccountNotInRule, "帐号不符合规则"));
            }
            if (request.PublicKey.Substring(0, 3) != chain)
            {
                throw new BusinessException(BusinessResultCode.PublicKeyError, "公钥格式错误");
            }
            //获取用户创建数
            int count = _createAccountRecordRepository.GetFreeCreateNum(chain, request.Uuid);

            if (int.TryParse(_configDataLogic.GetByKey(ConfigDataKey.RegisterAccountLimit), out var freeNum) && freeNum > 0)
            {
                if (count > freeNum)
                {
                    throw new BusinessException(BusinessResultCode.FreeAccountLimit, "您已无法创建账号,请联系客服人员");
                }
            }
            var client = _contractFactory.GetService <IAccountClient>(chain);
            var tx     = client.CreateAccount(new NewAccount()
            {
                AccountName = request.Account,
                ActiveKey   = request.PublicKey,
                OwnerKey    = request.PublicKey,
            });

            tx.Wait();
            var result = tx.Result;

            if (result.Status != EnumStatus.Success)
            {
                if (result.Code != SysResultCode.ServerException)
                {
                    return(ExcutedResult.FailedResult(result.Code, result.Message));
                }
                return(ExcutedResult.FailedResult(BusinessResultCode.CreateAccountFail, "链创建账号失败"));
            }
            //添加帐号及记录
            using (var trans = base.GetNewTransaction())
            {
                CreateAccountRecord record = new CreateAccountRecord()
                {
                    Owner     = result.Data.Payer,
                    ChainCode = chain,
                    Account   = request.Account,
                    ClientIp  = CurrentUser.ClientIP,
                    Uuid      = request.Uuid ?? "",
                    Type      = (int)EnumAccountType.Free,
                    PublicKey = request.PublicKey,
                    Access    = "active",
                    Remark    = result.Data.TransactionId
                };
                _createAccountRecordRepository.Add(record);
                Account entity = new Account
                {
                    ChainCode = chain,
                    Account1  = request.Account,
                    Type      = (int)EnumAccountType.Free,
                    PublicKey = request.PublicKey,
                    Access    = "active",//TODO
                };
                Repository.Add(entity);
                trans.Commit();
            }
            return(ExcutedResult.SuccessResult());
        }