1
1
import { sha256 } from '@liquality/crypto'
2
2
import { withLock , withInterval , hasChainTimePassed } from './utils'
3
3
import cryptoassets from '../../../utils/cryptoassets'
4
- import { updateOrder } from '../../utils'
4
+ import { updateOrder , timestamp } from '../../utils'
5
+
6
+ async function hasQuoteExpired ( store , { order } ) {
7
+ return timestamp ( ) >= order . expiresAt
8
+ }
5
9
6
10
async function canRefund ( { getters } , { network, walletId, order } ) {
7
11
return hasChainTimePassed ( { getters } , { network, walletId, asset : order . from , timestamp : order . swapExpiration } )
@@ -52,7 +56,9 @@ async function createSecret ({ getters, dispatch }, { order, network, walletId }
52
56
}
53
57
54
58
async function initiateSwap ( { getters, dispatch } , { order, network, walletId } ) {
55
- if ( await dispatch ( 'checkIfQuoteExpired' , { network, walletId, order } ) ) return
59
+ if ( await hasQuoteExpired ( { getters } , { network, walletId, order } ) ) {
60
+ return { status : 'QUOTE_EXPIRED' }
61
+ }
56
62
57
63
const fromClient = getters . client ( network , walletId , order . from )
58
64
@@ -73,31 +79,44 @@ async function initiateSwap ({ getters, dispatch }, { order, network, walletId }
73
79
}
74
80
75
81
async function fundSwap ( { getters, dispatch } , { order, network, walletId } ) {
76
- if ( await dispatch ( 'checkIfQuoteExpired' , { network, walletId, order } ) ) return
82
+ if ( await hasQuoteExpired ( { getters } , { network, walletId, order } ) ) {
83
+ return { status : 'QUOTE_EXPIRED' }
84
+ }
77
85
78
- const toClient = getters . client ( network , walletId , order . to )
86
+ const fromClient = getters . client ( network , walletId , order . from )
79
87
80
- const fundTx = await toClient . swap . fundSwap (
81
- order . fromFundHash ,
82
- order . fromAmount ,
83
- order . fromCounterPartyAddress ,
84
- order . fromAddress ,
85
- order . secretHash ,
86
- order . swapExpiration ,
87
- order . fee
88
- )
88
+ try {
89
+ console . log ( 'funding' )
90
+ const fundTx = await fromClient . swap . fundSwap (
91
+ order . fromFundHash ,
92
+ order . fromAmount ,
93
+ order . fromCounterPartyAddress ,
94
+ order . fromAddress ,
95
+ order . secretHash ,
96
+ order . swapExpiration ,
97
+ order . fee
98
+ )
89
99
90
- return {
91
- fundTxHash : fundTx ?. hash ,
92
- status : 'INITIATION_REPORTED'
100
+ return {
101
+ fundTxHash : fundTx ?. hash ,
102
+ status : 'FUNDED'
103
+ }
104
+ } catch ( e ) { // Handle ERC20 contract initiation still to be mined
105
+ if ( e . name === 'PendingTxError' ) console . warn ( e )
106
+ else throw e
93
107
}
94
108
}
95
109
96
- async function reportInitiation ( store , { order } ) {
110
+ async function reportInitiation ( { getters } , { order, network, walletId } ) {
111
+ if ( await hasQuoteExpired ( { getters } , { network, walletId, order } ) ) {
112
+ console . log ( 'WAITING FOR REFUND' )
113
+ return { status : 'WAITING_FOR_REFUND' }
114
+ }
115
+
97
116
await updateOrder ( order )
98
117
99
118
return {
100
- status : 'FUNDED '
119
+ status : 'INITIATION_REPORTED '
101
120
}
102
121
}
103
122
@@ -297,12 +316,15 @@ export const performNextSwapAction = async (store, { network, walletId, order })
297
316
break
298
317
299
318
case 'INITIATED' :
300
- updates = await reportInitiation ( store , { order, network, walletId } )
319
+ updates = await withInterval (
320
+ async ( ) => await withLock ( store , { item : order , network, walletId, asset : order . from } ,
321
+ async ( ) => fundSwap ( store , { order, network, walletId } )
322
+ )
323
+ )
301
324
break
302
325
303
326
case 'FUNDED' :
304
- updates = await withLock ( store , { item : order , network, walletId, asset : order . from } ,
305
- async ( ) => fundSwap ( store , { order, network, walletId } ) )
327
+ updates = await reportInitiation ( store , { order, network, walletId } )
306
328
break
307
329
308
330
case 'INITIATION_REPORTED' :
0 commit comments