コード例 #1
0
        public override bool Execute(TransactionResultCapsule result)
        {
            long fee = CalcFee();

            try
            {
                ParticipateAssetIssueContract asset_issue_contract = this.contract.Unpack <ParticipateAssetIssueContract>();
                long cost = asset_issue_contract.Amount;

                //subtract from owner address
                byte[]         owner_address = asset_issue_contract.OwnerAddress.ToByteArray();
                AccountCapsule owner_account = this.db_manager.Account.Get(owner_address);
                owner_account.Balance = owner_account.Balance - cost - fee;

                byte[] key = asset_issue_contract.AssetName.ToByteArray();

                AssetIssueCapsule asset_issue = this.db_manager.GetAssetIssueStoreFinal().Get(key);

                long exchange_amount = cost * asset_issue.Num;
                exchange_amount = (long)Math.Floor((double)(exchange_amount / asset_issue.TransactionNum));
                owner_account.AddAssetAmountV2(key, exchange_amount, this.db_manager);

                byte[]         to_address = asset_issue_contract.ToAddress.ToByteArray();
                AccountCapsule to_account = this.db_manager.Account.Get(to_address);
                to_account.Balance = to_account.Balance + cost;
                if (!to_account.ReduceAssetAmountV2(key, exchange_amount, this.db_manager))
                {
                    throw new ContractExeException("reduceAssetAmount failed !");
                }

                //write to db
                this.db_manager.Account.Put(owner_address, owner_account);
                this.db_manager.Account.Put(to_address, to_account);
                result.SetStatus(fee, code.Sucess);
            }
            catch (InvalidProtocolBufferException e)
            {
                Logger.Debug(e.Message);
                result.SetStatus(fee, code.Failed);
                throw new ContractExeException(e.Message);
            }
            catch (ArithmeticException e)
            {
                Logger.Debug(e.Message);
                result.SetStatus(fee, code.Failed);
                throw new ContractExeException(e.Message);
            }

            return(true);
        }
コード例 #2
0
 public TransactionCapsule(ParticipateAssetIssueContract contract)
 {
     CreateTransaction(contract, Transaction.Types.Contract.Types.ContractType.WitnessUpdateContract);
 }
コード例 #3
0
 public async Task <TransactionExtention> ParticipateAssetIssueAsync(ParticipateAssetIssueContract contract)
 {
     return(await _grpcClient.ParticipateAssetIssue2Async(contract));
 }
コード例 #4
0
        public async Task <Transaction> ParticipateAssetIssueAsync(ParticipateAssetIssueContract contract, CancellationToken token = default)
        {
            var wallet = GetWallet();

            return(await wallet.ParticipateAssetIssueAsync(contract, _configuration.GetCallOptions(token)));
        }