Skip to content

Commit 312ce4a

Browse files
authored
refactor(payment detection): thegraph retriever (#947)
1 parent 39c2055 commit 312ce4a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+721
-606
lines changed

packages/currency/src/currencyManager.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,13 @@ export class CurrencyManager<TMeta = unknown> implements ICurrencyManager<TMeta>
129129
);
130130
}
131131

132+
fromHash(hash: string, network?: string): CurrencyDefinition<TMeta> | undefined {
133+
return this.knownCurrencies.find(
134+
(x) =>
135+
x.hash.toLowerCase() === hash.toLowerCase() &&
136+
((x.type === ISO4217 && !network) || ('network' in x && x.network === network) || !network),
137+
);
138+
}
132139
/**
133140
* Retrieves a currency given its storage format (ICurrency)
134141
*/

packages/currency/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ export interface ICurrencyManager<TMeta = unknown> {
9999
from(symbolOrAddress: string, network?: string): CurrencyDefinition<TMeta> | undefined;
100100
fromAddress(address: string, network?: string): CurrencyDefinition<TMeta> | undefined;
101101
fromSymbol(symbol: string, network?: string): CurrencyDefinition<TMeta> | undefined;
102+
fromHash(hash: string, network?: string): CurrencyDefinition<TMeta> | undefined;
102103
fromStorageCurrency(currency: StorageCurrency): CurrencyDefinition<TMeta> | undefined;
103104
getNativeCurrency(
104105
type: NativeCurrencyType,

packages/integration-test/test/scheduled/erc20-fee-proxy.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const erc20FeeProxy = new Erc20PaymentNetwork.ERC20FeeProxyPaymentDetector({
1818
// FIXME: the mocked advanced logic is address based
1919
advancedLogic: mockAdvancedLogic,
2020
currencyManager: CurrencyManager.getDefault(),
21+
getSubgraphClient: jest.fn(),
2122
});
2223

2324
describe('ERC20 Fee Proxy detection test-suite', () => {

packages/integration-test/test/scheduled/erc20-proxy.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { PaymentTypes, RequestLogicTypes } from '@requestnetwork/types';
33

44
import { mockAdvancedLogic } from './mocks';
55
import { Types, Utils } from '@requestnetwork/request-client.js';
6+
import { CurrencyManager } from '@requestnetwork/currency';
67
import {
78
erc20requestCreationHash,
89
localErc20PaymentNetworkParams,
@@ -14,6 +15,8 @@ import {
1415

1516
const erc20ProxyAddressedBased = new Erc20PaymentNetwork.ERC20ProxyPaymentDetector({
1617
advancedLogic: mockAdvancedLogic,
18+
currencyManager: CurrencyManager.getDefault(),
19+
getSubgraphClient: jest.fn(),
1720
});
1821

1922
describe('ERC20 Proxy detection test-suite', () => {

packages/integration-test/test/scheduled/erc777-stream.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
PaymentTypes,
66
RequestLogicTypes,
77
} from '@requestnetwork/types';
8+
import { CurrencyManager } from '@requestnetwork/currency';
89

910
import { mockAdvancedLogic } from './mocks';
1011

@@ -47,6 +48,7 @@ const createMockRequest = ({
4748

4849
const detector = new SuperFluidPaymentDetector({
4950
advancedLogic: mockAdvancedLogic,
51+
currencyManager: CurrencyManager.getDefault(),
5052
});
5153

5254
describe('ERC777 SuperFluid detection test-suite', () => {

packages/integration-test/test/scheduled/escrow-detector.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { mockAdvancedLogic } from './mocks';
66
const feeProxyDetector = new Erc20PaymentNetwork.ERC20FeeProxyPaymentDetector({
77
advancedLogic: mockAdvancedLogic,
88
currencyManager: CurrencyManager.getDefault(),
9+
getSubgraphClient: jest.fn(),
910
});
1011

1112
describe('ERC20 with Escrow detection test-suite', () => {

packages/integration-test/test/scheduled/eth-input-data.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { EthInputDataPaymentDetector } from '@requestnetwork/payment-detection';
22
import { RequestLogicTypes } from '@requestnetwork/types';
3+
import { CurrencyManager } from '@requestnetwork/currency';
34

45
import { mockAdvancedLogic } from './mocks';
56
import { Types, Utils } from '@requestnetwork/request-client.js';
@@ -14,6 +15,9 @@ import {
1415

1516
const ethInputContract = new EthInputDataPaymentDetector({
1617
advancedLogic: mockAdvancedLogic,
18+
currencyManager: CurrencyManager.getDefault(),
19+
explorerApiKeys: {},
20+
getSubgraphClient: jest.fn(),
1721
});
1822

1923
describe('ETH Fee proxy detection test-suite', () => {

packages/payment-detection/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"graphql": "15.5.1",
5151
"graphql-request": "3.4.0",
5252
"graphql-tag": "2.12.4",
53+
"lodash": "4.17.21",
5354
"satoshi-bitcoin": "1.0.4",
5455
"tslib": "2.3.1"
5556
},
@@ -62,6 +63,7 @@
6263
"@graphql-codegen/typescript-resolvers": "1.19.2",
6364
"@requestnetwork/advanced-logic": "0.34.0",
6465
"@types/jest": "26.0.13",
66+
"@types/lodash": "4.14.161",
6567
"jest": "26.4.2",
6668
"nyc": "15.1.0",
6769
"shx": "0.3.2",

packages/payment-detection/src/any-to-any-detector.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ export abstract class AnyToAnyDetector<
1818
public constructor(
1919
paymentNetworkId: PaymentTypes.PAYMENT_NETWORK_ID,
2020
extension: TExtension,
21-
protected currencyManager: ICurrencyManager,
21+
currencyManager: ICurrencyManager,
2222
) {
23-
super(paymentNetworkId, extension);
23+
super(paymentNetworkId, extension, currencyManager);
2424
}
2525

2626
/**

packages/payment-detection/src/any/any-to-erc20-proxy.ts

Lines changed: 35 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
import { erc20ConversionProxy } from '@requestnetwork/smart-contracts';
2-
import {
3-
AdvancedLogicTypes,
4-
ExtensionTypes,
5-
PaymentTypes,
6-
RequestLogicTypes,
7-
} from '@requestnetwork/types';
2+
import { ExtensionTypes, PaymentTypes, RequestLogicTypes } from '@requestnetwork/types';
83
import Utils from '@requestnetwork/utils';
9-
import { ICurrencyManager } from '@requestnetwork/currency';
104
import { ERC20FeeProxyPaymentDetectorBase } from '../erc20/fee-proxy-contract';
115
import { AnyToErc20InfoRetriever } from './retrievers/any-to-erc20-proxy';
12-
import { TheGraphConversionRetriever } from './retrievers/thegraph';
13-
import { networkSupportsTheGraph } from '../thegraph';
6+
import { TheGraphInfoRetriever } from '../thegraph';
147
import { makeGetDeploymentInformation } from '../utils';
8+
import { PaymentNetworkOptions, ReferenceBasedDetectorOptions } from '../types';
159

1610
const PROXY_CONTRACT_ADDRESS_MAP = {
1711
['0.1.0']: '0.1.0',
@@ -24,22 +18,23 @@ export class AnyToERC20PaymentDetector extends ERC20FeeProxyPaymentDetectorBase<
2418
ExtensionTypes.PnAnyToErc20.IAnyToERC20,
2519
PaymentTypes.IERC20FeePaymentEventParameters
2620
> {
21+
private readonly getSubgraphClient: PaymentNetworkOptions['getSubgraphClient'];
22+
2723
/**
2824
* @param extension The advanced logic payment network extensions
2925
*/
3026

3127
public constructor({
3228
advancedLogic,
3329
currencyManager,
34-
}: {
35-
advancedLogic: AdvancedLogicTypes.IAdvancedLogic;
36-
currencyManager: ICurrencyManager;
37-
}) {
30+
getSubgraphClient,
31+
}: ReferenceBasedDetectorOptions & Pick<PaymentNetworkOptions, 'getSubgraphClient'>) {
3832
super(
3933
PaymentTypes.PAYMENT_NETWORK_ID.ANY_TO_ERC20_PROXY,
4034
advancedLogic.extensions.anyToErc20Proxy,
4135
currencyManager,
4236
);
37+
this.getSubgraphClient = getSubgraphClient;
4338
}
4439

4540
/**
@@ -81,13 +76,13 @@ export class AnyToERC20PaymentDetector extends ERC20FeeProxyPaymentDetectorBase<
8176
*/
8277
protected async extractEvents(
8378
eventName: PaymentTypes.EVENTS_NAMES,
84-
address: string | undefined,
79+
toAddress: string | undefined,
8580
paymentReference: string,
8681
requestCurrency: RequestLogicTypes.ICurrency,
8782
paymentChain: string,
8883
paymentNetwork: ExtensionTypes.IState<ExtensionTypes.PnAnyToErc20.ICreationParameters>,
8984
): Promise<PaymentTypes.AllNetworkEvents<PaymentTypes.IERC20FeePaymentEventParameters>> {
90-
if (!address) {
85+
if (!toAddress) {
9186
return {
9287
paymentEvents: [],
9388
};
@@ -103,30 +98,32 @@ export class AnyToERC20PaymentDetector extends ERC20FeeProxyPaymentDetectorBase<
10398

10499
const currency = await this.getCurrency(requestCurrency);
105100

106-
const infoRetriever = networkSupportsTheGraph(paymentChain)
107-
? new TheGraphConversionRetriever(
108-
currency,
109-
paymentReference,
110-
conversionProxyContractAddress,
111-
address,
112-
eventName,
113-
paymentChain,
114-
acceptedTokens,
115-
maxRateTimespan,
116-
)
117-
: new AnyToErc20InfoRetriever(
118-
currency,
119-
paymentReference,
120-
conversionProxyContractAddress,
121-
conversionProxyCreationBlockNumber,
122-
conversionProxyAbi,
123-
address,
124-
eventName,
125-
paymentChain,
126-
acceptedTokens,
127-
maxRateTimespan,
128-
);
101+
const subgraphClient = this.getSubgraphClient(paymentChain);
102+
if (subgraphClient) {
103+
const infoRetriever = new TheGraphInfoRetriever(subgraphClient, this.currencyManager);
104+
return await infoRetriever.getTransferEvents({
105+
paymentReference,
106+
contractAddress: conversionProxyContractAddress,
107+
toAddress,
108+
eventName,
109+
paymentChain,
110+
acceptedTokens,
111+
maxRateTimespan,
112+
});
113+
}
129114

115+
const infoRetriever = new AnyToErc20InfoRetriever(
116+
currency,
117+
paymentReference,
118+
conversionProxyContractAddress,
119+
conversionProxyCreationBlockNumber,
120+
conversionProxyAbi,
121+
toAddress,
122+
eventName,
123+
paymentChain,
124+
acceptedTokens,
125+
maxRateTimespan,
126+
);
130127
const paymentEvents =
131128
(await infoRetriever.getTransferEvents()) as PaymentTypes.IPaymentNetworkEvent<PaymentTypes.IERC20FeePaymentEventParameters>[];
132129
return {

0 commit comments

Comments
 (0)