Skip to content

Commit f428ea4

Browse files
committed
update batch conversion processor
1 parent 61b2899 commit f428ea4

File tree

1 file changed

+37
-32
lines changed

1 file changed

+37
-32
lines changed

packages/payment-processor/src/payment/batch-conversion-proxy.ts

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import { ClientTypes, PaymentTypes } from '@requestnetwork/types';
55
import { ITransactionOverrides } from './transaction-overrides';
66
import {
77
comparePnTypeAndVersion,
8+
getAmountToPay,
89
getPnAndNetwork,
910
getProvider,
1011
getProxyAddress,
1112
getRequestPaymentValues,
1213
getSigner,
14+
validateErc20FeeProxyRequest,
1315
} from './utils';
1416
import {
1517
padAmountForChainlink,
@@ -18,7 +20,6 @@ import {
1820
import { IPreparedTransaction } from './prepared-transaction';
1921
import { EnrichedRequest, IConversionPaymentSettings } from './index';
2022
import { checkRequestAndGetPathAndCurrency } from './any-to-erc20-proxy';
21-
import { getBatchArgs } from './batch-proxy';
2223
import { checkErc20Allowance, encodeApproveAnyErc20 } from './erc20';
2324
import { BATCH_PAYMENT_NETWORK_ID } from '@requestnetwork/types/dist/payment-types';
2425
import { IState } from 'types/dist/extension-types';
@@ -33,7 +34,7 @@ import { CurrencyInput, isERC20Currency, isISO4217Currency } from '@requestnetwo
3334
* @param version The version of the batch conversion proxy
3435
* @param signerOrProvider The Web3 provider, or signer. Defaults to window.ethereum.
3536
* @param overrides Optionally, override default transaction values, like gas.
36-
* @dev We only implement batchRouter using two ERC20 functions:
37+
* @dev We only implement batchPayments using two ERC20 functions:
3738
* batchMultiERC20ConversionPayments, and batchMultiERC20Payments.
3839
*/
3940
export async function payBatchConversionProxyRequest(
@@ -79,10 +80,10 @@ export function encodePayBatchConversionRequest(enrichedRequests: EnrichedReques
7980
const firstNetwork = getPnAndNetwork(enrichedRequests[0].request)[1];
8081
let firstConversionRequestExtension: IState<any> | undefined;
8182
let firstNoConversionRequestExtension: IState<any> | undefined;
82-
const requestsWithoutConversion: ClientTypes.IRequestData[] = [];
83-
const conversionDetails: PaymentTypes.ConversionDetail[] = [];
83+
const requestDetailsERC20NoConversion: PaymentTypes.RequestDetail[] = [];
84+
const requestDetailsERC20Conversion: PaymentTypes.RequestDetail[] = [];
8485

85-
// fill conversionDetails and requestsWithoutConversion lists
86+
// fill requestDetailsERC20Conversion and requestDetailsERC20NoConversion lists
8687
for (const enrichedRequest of enrichedRequests) {
8788
if (
8889
enrichedRequest.paymentNetworkId ===
@@ -100,7 +101,7 @@ export function encodePayBatchConversionRequest(enrichedRequests: EnrichedReques
100101
) {
101102
throw new Error(`wrong request currencyInfo type`);
102103
}
103-
conversionDetails.push(getInputConversionDetail(enrichedRequest));
104+
requestDetailsERC20Conversion.push(getInputConversionDetail(enrichedRequest));
104105
} else if (
105106
enrichedRequest.paymentNetworkId === BATCH_PAYMENT_NETWORK_ID.BATCH_MULTI_ERC20_PAYMENTS
106107
) {
@@ -109,59 +110,63 @@ export function encodePayBatchConversionRequest(enrichedRequests: EnrichedReques
109110

110111
// isERC20Currency is checked within getBatchArgs function
111112
comparePnTypeAndVersion(firstNoConversionRequestExtension, enrichedRequest.request);
112-
requestsWithoutConversion.push(enrichedRequest.request);
113+
requestDetailsERC20NoConversion.push(
114+
getInputRequestDetailERC20NoConversion(enrichedRequest.request),
115+
);
113116
}
114117
if (firstNetwork !== getPnAndNetwork(enrichedRequest.request)[1])
115118
throw new Error('All the requests must have the same network');
116119
}
117120

118121
const metaDetails: PaymentTypes.MetaDetail[] = [];
119-
// Add conversionDetails to metaDetails
120-
if (conversionDetails.length > 0) {
122+
// Add requestDetailsERC20Conversion to metaDetails
123+
if (requestDetailsERC20Conversion.length > 0) {
121124
metaDetails.push({
122125
paymentNetworkId: BATCH_PAYMENT_NETWORK_ID.BATCH_MULTI_ERC20_CONVERSION_PAYMENTS,
123-
conversionDetails: conversionDetails,
124-
cryptoDetails: {
125-
tokenAddresses: [],
126-
recipients: [],
127-
amounts: [],
128-
paymentReferences: [],
129-
feeAmounts: [],
130-
}, // cryptoDetails is not used with paymentNetworkId 0
126+
requestDetails: requestDetailsERC20Conversion,
131127
});
132128
}
133129

134-
// Get values and add cryptoDetails to metaDetails
135-
if (requestsWithoutConversion.length > 0) {
136-
const { tokenAddresses, paymentAddresses, amountsToPay, paymentReferences, feesToPay } =
137-
getBatchArgs(requestsWithoutConversion, 'ERC20');
138-
130+
// Add cryptoDetails to metaDetails
131+
if (requestDetailsERC20NoConversion.length > 0) {
139132
// add ERC20 no-conversion payments
140133
metaDetails.push({
141134
paymentNetworkId: BATCH_PAYMENT_NETWORK_ID.BATCH_MULTI_ERC20_PAYMENTS,
142-
conversionDetails: [],
143-
cryptoDetails: {
144-
tokenAddresses: tokenAddresses,
145-
recipients: paymentAddresses,
146-
amounts: amountsToPay.map((x) => x.toString()),
147-
paymentReferences: paymentReferences,
148-
feeAmounts: feesToPay.map((x) => x.toString()),
149-
},
135+
requestDetails: requestDetailsERC20NoConversion,
150136
});
151137
}
152138

153139
const proxyContract = BatchConversionPayments__factory.createInterface();
154-
return proxyContract.encodeFunctionData('batchRouter', [
140+
return proxyContract.encodeFunctionData('batchPayments', [
155141
metaDetails,
156142
feeAddress || constants.AddressZero,
157143
]);
158144
}
159145

146+
function getInputRequestDetailERC20NoConversion(
147+
request: ClientTypes.IRequestData,
148+
): PaymentTypes.RequestDetail {
149+
validateErc20FeeProxyRequest(request);
150+
151+
const tokenAddress = request.currencyInfo.value;
152+
const { paymentReference, paymentAddress, feeAmount } = getRequestPaymentValues(request);
153+
154+
return {
155+
recipient: paymentAddress,
156+
requestAmount: getAmountToPay(request).toString(),
157+
path: [tokenAddress],
158+
paymentReference: `0x${paymentReference}`,
159+
feeAmount: feeAmount || '0',
160+
maxToSpend: '',
161+
maxRateTimespan: '',
162+
};
163+
}
164+
160165
/**
161166
* Get the conversion detail values from one enriched request
162167
* @param enrichedRequest The enrichedRequest to pay
163168
*/
164-
function getInputConversionDetail(enrichedRequest: EnrichedRequest): PaymentTypes.ConversionDetail {
169+
function getInputConversionDetail(enrichedRequest: EnrichedRequest): PaymentTypes.RequestDetail {
165170
const paymentSettings = enrichedRequest.paymentSettings;
166171
if (!paymentSettings) throw Error('the enrichedRequest has no paymentSettings');
167172

0 commit comments

Comments
 (0)