2 spendUTXOAction, spendWalletAction, controlProgramAction, controlAddressAction,
3 updateBalances, updateUtxo, listDappUTXO, contractArguments
5 import GetContractArgs from '../../constants'
6 import { matchesUTXO } from '../../filter'
8 export function FixedLimitProfit(account, amountBill, saver) {
9 return new Promise((resolve, reject) => {
11 "program": GetContractArgs().profitProgram,
12 "asset": GetContractArgs().assetDeposited,
18 if(resp.length === 0) {
19 throw 'cannot load UTXO info.'
22 const result = matchesUTXO(resp, amountBill)
23 const capitalAmount = result.amount
24 const capitalAsset = result.asset
25 const utxo = result.hash
27 if(amountBill > capitalAmount) {
28 throw 'input amount must be smaller or equal to ' + capitalAmount + '.'
33 const sAmountBill = amountBill/100000000
34 const sTotalAmountBill = GetContractArgs().totalAmountBill/100000000
35 const gain = GetContractArgs().totalAmountCapital*sAmountBill/sTotalAmountBill
37 const args = contractArguments(amountBill, saver)
39 input.push(spendUTXOAction(utxo))
40 input.push(spendWalletAction(amountBill, GetContractArgs().assetBill))
42 if(amountBill < capitalAmount){
43 output.push(controlProgramAction(amountBill, GetContractArgs().assetBill, GetContractArgs().banker ))
44 output.push(controlAddressAction(gain, capitalAsset, saver))
45 output.push(controlProgramAction((capitalAmount - gain), capitalAsset, GetContractArgs().profitProgram))
47 output.push(controlProgramAction(amountBill, GetContractArgs().assetBill, GetContractArgs().banker ))
48 output.push(controlAddressAction(capitalAmount, capitalAsset, saver))
51 window.bytom.advancedTransfer(account, input, output, GetContractArgs().gas*10000000, args, 1)
53 if(resp.action === 'reject'){
54 reject('user reject the request')
55 }else if(resp.action === 'success'){
56 updateUtxo({"hash": utxo})
59 "tx_id": resp.message.result.data.transaction_hash,
61 "asset": GetContractArgs().assetDeposited,
62 "amount": amountBill*GetContractArgs().totalAmountCapital/GetContractArgs().totalAmountBill
65 "tx_id": resp.message.result.data.transaction_hash,
66 "address": account.address,
67 "asset": GetContractArgs().assetBill,