Пример #1
0
        public override bool Execute(TransactionResultCapsule result)
        {
            long fee = CalcFee();
            SetAccountIdContract account_id_contract = null;

            try
            {
                account_id_contract = contract.Unpack <SetAccountIdContract>();
            }
            catch (InvalidProtocolBufferException e)
            {
                Logger.Debug(e.Message);
                result.SetStatus(fee, code.Failed);
                throw new ContractExeException(e.Message);
            }

            byte[]         owner_address = account_id_contract.OwnerAddress.ToByteArray();
            AccountCapsule account       = this.db_manager.Account.Get(owner_address);

            account.AccountId = ByteString.CopyFrom(account_id_contract.AccountId.ToByteArray());
            this.db_manager.Account.Put(owner_address, account);
            this.db_manager.AccountIdIndex.Put(account);
            result.SetStatus(fee, code.Sucess);

            return(true);
        }
Пример #2
0
        public override bool Validate()
        {
            if (this.contract == null)
            {
                throw new ContractValidateException("No contract!");
            }

            if (this.db_manager == null)
            {
                throw new ContractValidateException("No this.db_manager!");
            }

            if (this.contract.Is(SetAccountIdContract.Descriptor))
            {
                SetAccountIdContract account_id_contract = null;

                try
                {
                    account_id_contract = contract.Unpack <SetAccountIdContract>();
                }
                catch (InvalidProtocolBufferException e)
                {
                    Logger.Debug(e.Message);
                    throw new ContractValidateException(e.Message);
                }

                byte[] owner_address = account_id_contract.OwnerAddress.ToByteArray();
                byte[] account_id    = account_id_contract.AccountId.ToByteArray();
                if (!TransactionUtil.ValidAccountId(account_id))
                {
                    throw new ContractValidateException("Invalid accountId");
                }

                if (!Wallet.IsValidAddress(owner_address))
                {
                    throw new ContractValidateException("Invalid owner_address");
                }

                AccountCapsule account = this.db_manager.Account.Get(owner_address);
                if (account == null)
                {
                    throw new ContractValidateException("Account has not existed");
                }

                if (account.AccountId != null && !account.AccountId.IsEmpty)
                {
                    throw new ContractValidateException("This account id already set");
                }

                if (this.db_manager.AccountIdIndex.Contains(account_id))
                {
                    throw new ContractValidateException("This id has existed");
                }
            }
            else
            {
                throw new ContractValidateException(
                          "contract type error,expected type [SetAccountIdContract],real type[" + contract.GetType().Name + "]");
            }

            return(true);
        }