@@ -9,7 +9,10 @@ import {
99 processProtectedDataErrorMessage ,
1010 handleIfProtocolError ,
1111} from '../../utils/errors.js' ;
12- import { fetchOrdersUnderMaxPrice } from '../../utils/fetchOrdersUnderMaxPrice.js' ;
12+ import {
13+ checkUserVoucher ,
14+ findWorkerpoolOrders ,
15+ } from '../../utils/processProtectedData.models.js' ;
1316import { pushRequesterSecret } from '../../utils/pushRequesterSecret.js' ;
1417import {
1518 addressOrEnsSchema ,
@@ -23,7 +26,6 @@ import {
2326 validateOnStatusUpdateCallback ,
2427} from '../../utils/validators.js' ;
2528import { isERC734 } from '../../utils/whitelist.js' ;
26- import { getResultFromCompletedTask } from './getResultFromCompletedTask.js' ;
2729import {
2830 MatchOptions ,
2931 OnStatusUpdateFn ,
@@ -32,12 +34,9 @@ import {
3234 ProcessProtectedDataStatuses ,
3335} from '../types/index.js' ;
3436import { IExecConsumer } from '../types/internalTypes.js' ;
37+ import { getResultFromCompletedTask } from './getResultFromCompletedTask.js' ;
3538import { getWhitelistContract } from './smartContract/getWhitelistContract.js' ;
3639import { isAddressInWhitelist } from './smartContract/whitelistContract.read.js' ;
37- import {
38- checkUserVoucher ,
39- filterWorkerpoolOrders ,
40- } from '../../utils/processProtectedData.models.js' ;
4140
4241export type ProcessProtectedData = typeof processProtectedData ;
4342
@@ -146,6 +145,10 @@ export const processProtectedData = async ({
146145 requester,
147146 }
148147 ) ;
148+ const datasetorder = datasetOrderbook . orders [ 0 ] ?. order ; //The first order is the cheapest one
149+ if ( ! datasetorder ) {
150+ throw new Error ( `No dataset orders found` ) ;
151+ }
149152 vOnStatusUpdate ( {
150153 title : 'FETCH_PROTECTED_DATA_ORDERBOOK' ,
151154 isDone : true ,
@@ -162,6 +165,10 @@ export const processProtectedData = async ({
162165 maxTag : SCONE_TAG ,
163166 workerpool : vWorkerpool ,
164167 } ) ;
168+ const apporder = appOrderbook . orders [ 0 ] ?. order ; //The first order is the cheapest one
169+ if ( ! apporder ) {
170+ throw new Error ( `No app orders found` ) ;
171+ }
165172 vOnStatusUpdate ( {
166173 title : 'FETCH_APP_ORDERBOOK' ,
167174 isDone : true ,
@@ -181,24 +188,18 @@ export const processProtectedData = async ({
181188 maxTag : SCONE_TAG ,
182189 category : 0 ,
183190 } ) ;
184- vOnStatusUpdate ( {
185- title : 'FETCH_WORKERPOOL_ORDERBOOK' ,
186- isDone : true ,
187- } ) ;
188- const desiredPriceWorkerpoolOrder = filterWorkerpoolOrders ( {
191+ const workerpoolOrder = findWorkerpoolOrders ( {
189192 workerpoolOrders : [ ...workerpoolOrderbook . orders ] ,
190193 useVoucher : vUseVoucher ,
191194 userVoucher,
192195 } ) ;
193- if ( ! desiredPriceWorkerpoolOrder ) {
196+ if ( ! workerpoolOrder ) {
194197 throw new Error ( 'No Workerpool order found.' ) ;
195198 }
196-
197- const underMaxPriceOrders = fetchOrdersUnderMaxPrice (
198- datasetOrderbook ,
199- appOrderbook ,
200- vMaxPrice
201- ) ;
199+ vOnStatusUpdate ( {
200+ title : 'FETCH_WORKERPOOL_ORDERBOOK' ,
201+ isDone : true ,
202+ } ) ;
202203
203204 vOnStatusUpdate ( {
204205 title : 'PUSH_REQUESTER_SECRET' ,
@@ -216,30 +217,48 @@ export const processProtectedData = async ({
216217 } ) ;
217218 const requestorderToSign = await iexec . order . createRequestorder ( {
218219 app : vApp ,
219- category : desiredPriceWorkerpoolOrder . category ,
220+ category : workerpoolOrder . category ,
220221 dataset : vProtectedData ,
221- appmaxprice : underMaxPriceOrders . apporder . appprice ,
222- datasetmaxprice : underMaxPriceOrders . datasetorder . datasetprice ,
223- workerpoolmaxprice : desiredPriceWorkerpoolOrder . workerpoolprice ,
222+ appmaxprice : apporder . appprice ,
223+ datasetmaxprice : datasetorder . datasetprice ,
224+ workerpoolmaxprice : workerpoolOrder . workerpoolprice ,
224225 tag : SCONE_TAG ,
225- workerpool : desiredPriceWorkerpoolOrder . workerpool ,
226+ workerpool : workerpoolOrder . workerpool ,
226227 params : {
227228 iexec_input_files : vInputFiles ,
228229 iexec_secrets : secretsId ,
229230 iexec_args : vArgs ,
230231 } ,
231232 } ) ;
232233 const requestorder = await iexec . order . signRequestorder ( requestorderToSign ) ;
234+
235+ const orders = {
236+ requestorder,
237+ workerpoolorder : workerpoolOrder ,
238+ apporder : apporder ,
239+ datasetorder : datasetorder ,
240+ } ;
233241 const matchOptions : MatchOptions = {
234242 useVoucher : vUseVoucher ,
235243 ...( vVoucherAddress ? { voucherAddress : vVoucherAddress } : { } ) ,
236244 } ;
245+
246+ const estimatedMatchOrderPrice = await iexec . order . estimateMatchOrders (
247+ orders ,
248+ matchOptions
249+ ) ;
250+ if (
251+ estimatedMatchOrderPrice . total
252+ . sub ( estimatedMatchOrderPrice . sponsored )
253+ . ltn ( vMaxPrice )
254+ ) {
255+ throw new Error (
256+ `No orders found within the specified price limit ${ vMaxPrice } nRLC.`
257+ ) ;
258+ }
259+
237260 const { dealid, txHash } = await iexec . order . matchOrders (
238- {
239- requestorder,
240- workerpoolorder : desiredPriceWorkerpoolOrder ,
241- ...underMaxPriceOrders ,
242- } ,
261+ orders ,
243262 matchOptions
244263 ) ;
245264 const taskId = await iexec . deal . computeTaskId ( dealid , 0 ) ;
0 commit comments