2 spendUTXOAction, spendWalletAction, controlProgramAction, controlAddressAction,
3 updateBalances, updateUtxo, listDappUTXO, contractArguments
5 import GetContractArgs from "../../constants";
7 export function FixedLimitProfit(account, amountBill, saver) {
9 "program": GetContractArgs().profitProgram,
10 "asset": GetContractArgs().assetDeposited
14 throw 'cannot load UTXO info.'
17 const capitalAmount = resp.amount
18 const capitalAsset = resp.asset
19 const utxo = resp.hash
21 if(amountBill > capitalAmount) {
22 throw 'input amount must be smaller or equal to ' + capitalAmount + '.'
27 const sAmountBill = amountBill/100000000
28 const sTotalAmountBill = totalAmountBill/100000000
29 const gain = totalAmountCapital*sAmountBill/sTotalAmountBill
31 const args = contractArguments(amountBill, saver)
33 input.push(spendUTXOAction(utxo))
34 input.push(spendWalletAction(amountBill, GetContractArgs().assetBill))
36 if(amountBill < capitalAmount){
37 output.push(controlProgramAction(amountBill, GetContractArgs().assetBill, GetContractArgs().banker ))
38 output.push(controlAddressAction(gain, capitalAsset, saver))
39 output.push(controlProgramAction((capitalAmount - gain), capitalAsset, GetContractArgs().profitProgram))
41 output.push(controlProgramAction(amountBill, GetContractArgs().assetBill, GetContractArgs().banker ))
42 output.push(controlAddressAction(capitalAmount, capitalAsset, saver))
45 window.bytom.advancedTransfer(account, input, output, GetContractArgs().gas*10000000, args, 1)
47 if(resp.action === 'reject'){
48 reject('user reject the request')
49 }else if(resp.action === 'success'){
50 updateUtxo({"hash": utxo})
54 "asset": GetContractArgs().assetDeposited,
55 "amount": amountBill*GetContractArgs().totalAmountCapital/GetContractArgs().totalAmountBill
58 "address": account.address,
59 "asset": GetContractArgs().assetBill,