@@ -15,6 +15,7 @@ import {
15
15
Network ,
16
16
QueryFeeModels ,
17
17
sequentialTimerMap ,
18
+ SubgraphClient ,
18
19
SubgraphIdentifierType ,
19
20
TapCollector ,
20
21
upsertIndexingRule ,
@@ -23,7 +24,7 @@ import { Op } from 'sequelize'
23
24
24
25
import {
25
26
createGatewayDipsServiceClient ,
26
- GatewayDipsServiceMessages ,
27
+ GatewayDipsServiceMessagesCodec ,
27
28
} from './gateway-dips-service-client'
28
29
import {
29
30
CollectPaymentStatus ,
@@ -43,9 +44,13 @@ const normalizeAddressForDB = (address: string) => {
43
44
return toAddress ( address ) . toLowerCase ( ) . replace ( '0x' , '' )
44
45
}
45
46
47
+ type GetEscrowSenderForSigner = (
48
+ tapSubgraph : SubgraphClient ,
49
+ signer : Address ,
50
+ ) => Promise < Address >
46
51
export class DipsManager {
47
52
declare gatewayDipsServiceClient : GatewayDipsServiceClientImpl
48
-
53
+ declare gatewayDipsServiceMessagesCodec : GatewayDipsServiceMessagesCodec
49
54
constructor (
50
55
private logger : Logger ,
51
56
private models : IndexerManagementModels ,
@@ -58,6 +63,7 @@ export class DipsManager {
58
63
this . gatewayDipsServiceClient = createGatewayDipsServiceClient (
59
64
this . network . specification . indexerOptions . dipperEndpoint ,
60
65
)
66
+ this . gatewayDipsServiceMessagesCodec = new GatewayDipsServiceMessagesCodec ( )
61
67
}
62
68
// Cancel an agreement associated to an allocation if it exists
63
69
async tryCancelAgreement ( allocationId : string ) {
@@ -71,7 +77,7 @@ export class DipsManager {
71
77
if ( agreement ) {
72
78
try {
73
79
const cancellation =
74
- await GatewayDipsServiceMessages . createSignedCancellationRequest (
80
+ await this . gatewayDipsServiceMessagesCodec . createSignedCancellationRequest (
75
81
uuidToHex ( agreement . id ) ,
76
82
this . network . wallet ,
77
83
)
@@ -176,6 +182,7 @@ export class DipsManager {
176
182
177
183
export class DipsCollector {
178
184
declare gatewayDipsServiceClient : GatewayDipsServiceClientImpl
185
+ declare gatewayDipsServiceMessagesCodec : GatewayDipsServiceMessagesCodec
179
186
constructor (
180
187
private logger : Logger ,
181
188
private managementModels : IndexerManagementModels ,
@@ -184,13 +191,15 @@ export class DipsCollector {
184
191
private tapCollector : TapCollector ,
185
192
private wallet : Wallet ,
186
193
private graphNode : GraphNode ,
194
+ public escrowSenderGetter : GetEscrowSenderForSigner ,
187
195
) {
188
196
if ( ! this . specification . indexerOptions . dipperEndpoint ) {
189
197
throw new Error ( 'dipperEndpoint is not set' )
190
198
}
191
199
this . gatewayDipsServiceClient = createGatewayDipsServiceClient (
192
200
this . specification . indexerOptions . dipperEndpoint ,
193
201
)
202
+ this . gatewayDipsServiceMessagesCodec = new GatewayDipsServiceMessagesCodec ( )
194
203
}
195
204
196
205
static create (
@@ -201,6 +210,7 @@ export class DipsCollector {
201
210
tapCollector : TapCollector ,
202
211
wallet : Wallet ,
203
212
graphNode : GraphNode ,
213
+ escrowSenderGetter ?: GetEscrowSenderForSigner ,
204
214
) {
205
215
const collector = new DipsCollector (
206
216
logger ,
@@ -210,6 +220,7 @@ export class DipsCollector {
210
220
tapCollector ,
211
221
wallet ,
212
222
graphNode ,
223
+ escrowSenderGetter ?? getEscrowSenderForSigner ,
213
224
)
214
225
collector . startCollectionLoop ( )
215
226
return collector
@@ -260,12 +271,13 @@ export class DipsCollector {
260
271
return
261
272
}
262
273
const entityCount = entityCounts [ 0 ]
263
- const collection = await GatewayDipsServiceMessages . createSignedCollectionRequest (
264
- uuidToHex ( agreement . id ) ,
265
- agreement . last_allocation_id ,
266
- entityCount ,
267
- this . wallet ,
268
- )
274
+ const collection =
275
+ await this . gatewayDipsServiceMessagesCodec . createSignedCollectionRequest (
276
+ uuidToHex ( agreement . id ) ,
277
+ agreement . last_allocation_id ,
278
+ entityCount ,
279
+ this . wallet ,
280
+ )
269
281
try {
270
282
this . logger . info ( `Collecting payment for agreement ${ agreement . id } ` )
271
283
const response = await this . gatewayDipsServiceClient . CollectPayment ( {
@@ -277,15 +289,15 @@ export class DipsCollector {
277
289
throw new Error ( 'TapCollector not initialized' )
278
290
}
279
291
// Store the tap receipt in the database
280
- this . logger . info ( ` Decoding TAP receipt for agreement` )
281
- const tapReceipt = GatewayDipsServiceMessages . decodeTapReceipt (
292
+ this . logger . info ( ' Decoding TAP receipt for agreement' )
293
+ const tapReceipt = this . gatewayDipsServiceMessagesCodec . decodeTapReceipt (
282
294
response . tapReceipt ,
283
295
this . tapCollector ?. tapContracts . tapVerifier . address ,
284
296
)
285
- // TODO: check that the signer of the TAP receipt is a signer
297
+ // Check that the signer of the TAP receipt is a signer
286
298
// on the corresponding escrow account for the payer (sender) of the
287
299
// indexing agreement
288
- const escrowSender = await getEscrowSenderForSigner (
300
+ const escrowSender = await this . escrowSenderGetter (
289
301
this . tapCollector ?. tapSubgraph ,
290
302
tapReceipt . signer_address ,
291
303
)
0 commit comments