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); }
public TransactionCapsule(ParticipateAssetIssueContract contract) { CreateTransaction(contract, Transaction.Types.Contract.Types.ContractType.WitnessUpdateContract); }
public async Task <TransactionExtention> ParticipateAssetIssueAsync(ParticipateAssetIssueContract contract) { return(await _grpcClient.ParticipateAssetIssue2Async(contract)); }
public async Task <Transaction> ParticipateAssetIssueAsync(ParticipateAssetIssueContract contract, CancellationToken token = default) { var wallet = GetWallet(); return(await wallet.ParticipateAssetIssueAsync(contract, _configuration.GetCallOptions(token))); }