2 spendUTXOAction, spendWalletAction, controlProgramAction,
3 controlAddressAction, contractArguments
4 } from '../../util/bytomAction'
5 import { listDappUTXO, updateBalances
6 } from '../../util/api'
7 import GetContractArgs from '../../constants'
8 import { matchesUTXO } from '../../filter'
9 import { submitContract } from '../../util/submitContract'
10 import BigNumber from 'bignumber.js'
12 export function FixedLimitDeposit(amount, address) {
16 parameter: [amount, address]
18 return submitContract(listDepositUTXO, createContractTransaction, updateDatatbaseBalance, object)
21 function listDepositUTXO() {
23 "program": GetContractArgs().depositProgram,
24 "asset": GetContractArgs().assetBill,
32 function createContractTransaction(resp, amount, address){
33 return new Promise((resolve, reject) => {
34 //utxo pre calculation
35 const limit = GetContractArgs().radio * 100000000
36 if (resp.length === 0) {
37 reject( 'Empty UTXO info, it might be that the utxo is locked. Please retry after 60s.')
38 } else if (amount < limit) {
39 reject( `Please enter an amount bigger or equal than ${limit}.`)
42 const result = matchesUTXO(resp, amount)
43 const billAmount = result.amount
44 const billAsset = result.asset
45 const utxo = result.hash
47 //contract calculation
48 if (amount > billAmount) {
49 reject('input amount must be smaller or equal to ' + billAmount + '.')
54 const args = contractArguments(amount, address)
56 input.push(spendUTXOAction(utxo))
57 input.push(spendWalletAction(amount, GetContractArgs().assetDeposited))
59 if (amount < billAmount) {
60 output.push(controlProgramAction(amount, GetContractArgs().assetDeposited, GetContractArgs().profitProgram))
61 output.push(controlAddressAction(amount, billAsset, address))
62 output.push(controlProgramAction((BigNumber(billAmount).minus(BigNumber(amount))).toNumber(), billAsset, GetContractArgs().depositProgram))
64 output.push(controlProgramAction(amount, GetContractArgs().assetDeposited, GetContractArgs().profitProgram))
65 output.push(controlAddressAction(billAmount, billAsset, address))
78 function updateDatatbaseBalance(resp, amount, address){
79 return updateBalances({
80 "tx_id": resp.message.result.data.transaction_hash,
82 "asset": GetContractArgs().assetDeposited,
85 return updateBalances({
86 "tx_id": resp.message.result.data.transaction_hash,
88 "asset": GetContractArgs().assetBill,