Skip to content

Commit

Permalink
feat: add declarative payment network for erc20 (#635)
Browse files Browse the repository at this point in the history
fix: test

chore: added auto_assign file (#631)

chore: auto_assign as a worfklow (#633)

feat: added xdai to fee-proxy-contract networks (#636)

fix: proxy contract test

feat: inherit declarative on ETH input and fee proxy

feat: add xdai rpc provider (#637)

test: remove declarative test as ETH input data support declarative

chore(request-node): add transaction hash debug log (#638)

chore: deploy on live chains (#550)

Co-authored-by: Benjamin Levesque <14175665+benjlevesque@users.noreply.github.com>

chore: test verified commit
  • Loading branch information
kevindavee committed Oct 21, 2021
1 parent 78327c9 commit ecf4a9d
Show file tree
Hide file tree
Showing 19 changed files with 314 additions and 118 deletions.
10 changes: 8 additions & 2 deletions packages/payment-detection/src/any-to-any-detector.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { ExtensionTypes, PaymentTypes, RequestLogicTypes } from '@requestnetwork/types';
import {
AdvancedLogicTypes,
ExtensionTypes,
PaymentTypes,
RequestLogicTypes,
} from '@requestnetwork/types';
import Utils from '@requestnetwork/utils';
import FeeReferenceBasedDetector from './fee-reference-based-detector';

Expand All @@ -15,11 +20,12 @@ export default abstract class AnyToAnyDetector<
* @param extensionType Example : ExtensionTypes.ID.ExtensionTypes.ID.PAYMENT_NETWORK_ANY_TO_ETH_PROXY
*/
public constructor(
protected advancedLogic: AdvancedLogicTypes.IAdvancedLogic,
protected extension: ExtensionTypes.PnFeeReferenceBased.IFeeReferenceBased,
protected extensionType: ExtensionTypes.ID,
protected currencyManager: ICurrencyManager,
) {
super(extension, extensionType);
super(advancedLogic, extension, extensionType);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export default class AnyToEthFeeProxyDetector extends AnyToAnyDetector<PaymentTy
currencyManager: ICurrencyManager;
}) {
super(
advancedLogic,
advancedLogic.extensions.anyToEthProxy,
ExtensionTypes.ID.PAYMENT_NETWORK_ANY_TO_ETH_PROXY,
currencyManager,
Expand Down
7 changes: 4 additions & 3 deletions packages/payment-detection/src/declarative.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ import { BigNumber } from 'ethers';
*
* @class PaymentNetworkDeclarative
*/
export default class PaymentNetworkDeclarative
implements PaymentTypes.IPaymentNetwork<PaymentTypes.IDeclarativePaymentEventParameters> {
private extension: ExtensionTypes.PnAnyDeclarative.IAnyDeclarative;
export default class PaymentNetworkDeclarative<
ExtensionType extends ExtensionTypes.PnAnyDeclarative.IAnyDeclarative = ExtensionTypes.PnAnyDeclarative.IAnyDeclarative
> implements PaymentTypes.IPaymentNetwork<PaymentTypes.IDeclarativePaymentEventParameters> {
protected extension: ExtensionType;

public constructor({ advancedLogic }: { advancedLogic: AdvancedLogicTypes.IAdvancedLogic }) {
this.extension = advancedLogic.extensions.declarative;
Expand Down
14 changes: 9 additions & 5 deletions packages/payment-detection/src/erc20/fee-proxy-contract.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { BigNumber } from 'ethers';
import { networkSupportsTheGraph } from '../thegraph';
import TheGraphInfoRetriever from './thegraph-info-retriever';
import { loadCurrencyFromContract } from './currency';
import DeclarativePaymentNetwork from '../declarative';

/* eslint-disable max-classes-per-file */
/** Exception when network not supported */
Expand All @@ -38,8 +39,10 @@ export type DeploymentInformationGetter = (
* FIXME: inherit ReferenceBasedDetector
*/
export default class PaymentNetworkERC20FeeProxyContract<
ExtensionType extends ExtensionTypes.PnFeeReferenceBased.IFeeReferenceBased = ExtensionTypes.PnFeeReferenceBased.IFeeReferenceBased
> implements PaymentTypes.IPaymentNetwork<ExtensionType> {
ExtensionType extends ExtensionTypes.PnFeeReferenceBased.IFeeReferenceBased = ExtensionTypes.PnFeeReferenceBased.IFeeReferenceBased
>
extends DeclarativePaymentNetwork
implements PaymentTypes.IPaymentNetwork<ExtensionType> {
protected _paymentNetworkId: ExtensionTypes.ID;
protected _extension: ExtensionType;
protected _currencyManager: ICurrencyManager;
Expand All @@ -54,6 +57,7 @@ export default class PaymentNetworkERC20FeeProxyContract<
advancedLogic: AdvancedLogicTypes.IAdvancedLogic;
currencyManager: ICurrencyManager;
}) {
super({ advancedLogic });
this._paymentNetworkId = ExtensionTypes.ID.PAYMENT_NETWORK_ERC20_FEE_PROXY_CONTRACT;
this._extension = advancedLogic.extensions.feeProxyContractErc20;
this._currencyManager = currencyManager;
Expand Down Expand Up @@ -88,7 +92,7 @@ export default class PaymentNetworkERC20FeeProxyContract<
* @param parameters to add payment information
* @returns The extensionData object
*/
public createExtensionsDataForAddPaymentInformation(
public createExtensionsDataForAddPaymentAddress(
parameters: ExtensionTypes.PnFeeReferenceBased.IAddPaymentAddressParameters,
): ExtensionTypes.IAction {
return this._extension.createAddPaymentAddressAction({
Expand All @@ -102,7 +106,7 @@ export default class PaymentNetworkERC20FeeProxyContract<
* @param Parameters to add refund information
* @returns The extensionData object
*/
public createExtensionsDataForAddRefundInformation(
public createExtensionsDataForAddRefundAddress(
parameters: ExtensionTypes.PnFeeReferenceBased.IAddRefundAddressParameters,
): ExtensionTypes.IAction {
return this._extension.createAddRefundAddressAction({
Expand Down Expand Up @@ -197,7 +201,7 @@ export default class PaymentNetworkERC20FeeProxyContract<
if (error instanceof VersionNotSupported) {
code = PaymentTypes.BALANCE_ERROR_CODE.VERSION_NOT_SUPPORTED;
}
return getBalanceErrorObject(error.message, code);
return getBalanceErrorObject((error as Error).message, code);
}
}

Expand Down
30 changes: 18 additions & 12 deletions packages/payment-detection/src/erc20/proxy-contract.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import PaymentReferenceCalculator from '../payment-reference-calculator';
import ProxyInfoRetriever from './proxy-info-retriever';
import TheGraphInfoRetriever from './thegraph-info-retriever';
import { networkSupportsTheGraph } from '../thegraph';
import DeclarativePaymentNetwork from '../declarative';

/* eslint-disable max-classes-per-file */
/** Exception when network not supported */
Expand All @@ -22,13 +23,18 @@ class VersionNotSupported extends Error {}
/**
* Handle payment networks with ERC20 proxy contract extension
*/
export default class PaymentNetworkERC20ProxyContract implements PaymentTypes.IPaymentNetwork {
private extension: ExtensionTypes.PnReferenceBased.IReferenceBased;
export default class PaymentNetworkERC20ProxyContract<
ExtensionType extends ExtensionTypes.PnReferenceBased.IReferenceBased = ExtensionTypes.PnReferenceBased.IReferenceBased
>
extends DeclarativePaymentNetwork
implements PaymentTypes.IPaymentNetwork<ExtensionType> {
protected _extension: ExtensionType;
/**
* @param extension The advanced logic payment network extensions
*/
public constructor({ advancedLogic }: { advancedLogic: AdvancedLogicTypes.IAdvancedLogic }) {
this.extension = advancedLogic.extensions.proxyContractErc20;
super({ advancedLogic });
this._extension = advancedLogic.extensions.proxyContractErc20;
}

/**
Expand All @@ -45,7 +51,7 @@ export default class PaymentNetworkERC20ProxyContract implements PaymentTypes.IP
const salt =
paymentNetworkCreationParameters.salt || (await Utils.crypto.generate8randomBytes());

return this.extension.createCreationAction({
return this._extension.createCreationAction({
paymentAddress: paymentNetworkCreationParameters.paymentAddress,
refundAddress: paymentNetworkCreationParameters.refundAddress,
salt,
Expand All @@ -55,27 +61,27 @@ export default class PaymentNetworkERC20ProxyContract implements PaymentTypes.IP
/**
* Creates the extensions data to add payment address
*
* @param parameters to add payment information
* @param parameters to add payment address
* @returns The extensionData object
*/
public createExtensionsDataForAddPaymentInformation(
public createExtensionsDataForAddPaymentAddress(
parameters: ExtensionTypes.PnReferenceBased.IAddPaymentAddressParameters,
): ExtensionTypes.IAction {
return this.extension.createAddPaymentAddressAction({
return this._extension.createAddPaymentAddressAction({
paymentAddress: parameters.paymentAddress,
});
}

/**
* Creates the extensions data to add refund address
*
* @param Parameters to add refund information
* @param Parameters to add refund address
* @returns The extensionData object
*/
public createExtensionsDataForAddRefundInformation(
public createExtensionsDataForAddRefundAddress(
parameters: ExtensionTypes.PnReferenceBased.IAddRefundAddressParameters,
): ExtensionTypes.IAction {
return this.extension.createAddRefundAddressAction({
return this._extension.createAddRefundAddressAction({
refundAddress: parameters.refundAddress,
});
}
Expand Down Expand Up @@ -148,7 +154,7 @@ export default class PaymentNetworkERC20ProxyContract implements PaymentTypes.IP
if (error instanceof VersionNotSupported) {
code = PaymentTypes.BALANCE_ERROR_CODE.VERSION_NOT_SUPPORTED;
}
return getBalanceErrorObject(error.message, code);
return getBalanceErrorObject((error as Error).message, code);
}
}

Expand Down Expand Up @@ -182,7 +188,7 @@ export default class PaymentNetworkERC20ProxyContract implements PaymentTypes.IP
proxyContractAddress = info.address;
proxyCreationBlockNumber = info.creationBlockNumber;
} catch (e) {
if (e.message?.startsWith('No deployment for network')) {
if ((e as Error).message?.startsWith('No deployment for network')) {
throw new NetworkNotSupported(
`Network not supported for this payment network: ${request.currency.network}`,
);
Expand Down
3 changes: 2 additions & 1 deletion packages/payment-detection/src/eth/fee-proxy-detector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,15 @@ const PROXY_CONTRACT_ADDRESS_MAP: IProxyContractVersion = {
};

/**
* Handle payment networks with ETH input data extension
* Handle payment networks with ETH fee proxy extension
*/
export default class ETHFeeProxyDetector extends FeeReferenceBasedDetector<PaymentTypes.IETHPaymentEventParameters> {
/**
* @param extension The advanced logic payment network extensions
*/
public constructor({ advancedLogic }: { advancedLogic: AdvancedLogicTypes.IAdvancedLogic }) {
super(
advancedLogic,
advancedLogic.extensions.feeProxyContractEth,
ExtensionTypes.ID.PAYMENT_NETWORK_ETH_FEE_PROXY_CONTRACT,
);
Expand Down
1 change: 1 addition & 0 deletions packages/payment-detection/src/eth/input-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export default class PaymentNetworkETHInputData extends ReferenceBasedDetector<P
explorerApiKeys?: Record<string, string>;
}) {
super(
advancedLogic,
advancedLogic.extensions.ethereumInputData,
ExtensionTypes.ID.PAYMENT_NETWORK_ETH_INPUT_DATA,
);
Expand Down
24 changes: 17 additions & 7 deletions packages/payment-detection/src/fee-reference-based-detector.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,32 @@
import { ExtensionTypes, PaymentTypes, RequestLogicTypes } from '@requestnetwork/types';
import {
AdvancedLogicTypes,
ExtensionTypes,
PaymentTypes,
RequestLogicTypes,
} from '@requestnetwork/types';
import Utils from '@requestnetwork/utils';
import ReferenceBasedDetector from './reference-based-detector';

/**
* Abstract class to extend to get the payment balance of reference based requests
*/
export default abstract class FeeReferenceBasedDetector<
TPaymentEventParameters
> extends ReferenceBasedDetector<TPaymentEventParameters> {
TPaymentEventParameters,
ExtensionType extends ExtensionTypes.PnFeeReferenceBased.IFeeReferenceBased = ExtensionTypes.PnFeeReferenceBased.IFeeReferenceBased
> extends ReferenceBasedDetector<TPaymentEventParameters, ExtensionType> {
/**
* @param extension The advanced logic payment network extension, reference based
* @param extensionType Example : ExtensionTypes.ID.PAYMENT_NETWORK_ETH_INPUT_DATA
*/
protected _extension: ExtensionType;

public constructor(
protected extension: ExtensionTypes.PnFeeReferenceBased.IFeeReferenceBased,
protected advancedLogic: AdvancedLogicTypes.IAdvancedLogic,
extension: ExtensionType,
protected extensionType: ExtensionTypes.ID,
) {
super(extension, extensionType);
super(advancedLogic, extension, extensionType);
this._extension = extension;
}

/**
Expand All @@ -33,7 +43,7 @@ export default abstract class FeeReferenceBasedDetector<
paymentNetworkCreationParameters.salt =
paymentNetworkCreationParameters.salt || (await Utils.crypto.generate8randomBytes());

return this.extension.createCreationAction({
return this._extension.createCreationAction({
feeAddress: paymentNetworkCreationParameters.feeAddress,
feeAmount: paymentNetworkCreationParameters.feeAmount,
paymentAddress: paymentNetworkCreationParameters.paymentAddress,
Expand All @@ -51,7 +61,7 @@ export default abstract class FeeReferenceBasedDetector<
public createExtensionsDataForAddFeeInformation(
parameters: ExtensionTypes.PnFeeReferenceBased.IAddFeeParameters,
): ExtensionTypes.IAction {
return this.extension.createAddFeeAction({
return this._extension.createAddFeeAction({
feeAddress: parameters.feeAddress,
feeAmount: parameters.feeAmount,
});
Expand Down
6 changes: 5 additions & 1 deletion packages/payment-detection/src/near-detector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@ export default class NearNativeTokenPaymentDetector extends ReferenceBasedDetect
* @param extension The advanced logic payment network extension
*/
public constructor({ advancedLogic }: { advancedLogic: AdvancedLogicTypes.IAdvancedLogic }) {
super(advancedLogic.extensions.nativeToken[0], ExtensionTypes.ID.PAYMENT_NETWORK_NATIVE_TOKEN);
super(
advancedLogic,
advancedLogic.extensions.nativeToken[0],
ExtensionTypes.ID.PAYMENT_NETWORK_NATIVE_TOKEN,
);
}

public static getNearContractName = (
Expand Down
43 changes: 30 additions & 13 deletions packages/payment-detection/src/reference-based-detector.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,40 @@
import { ExtensionTypes, PaymentTypes, RequestLogicTypes } from '@requestnetwork/types';
import {
AdvancedLogicTypes,
ExtensionTypes,
PaymentTypes,
RequestLogicTypes,
} from '@requestnetwork/types';
import Utils from '@requestnetwork/utils';
import getBalanceErrorObject from './balance-error';
import PaymentReferenceCalculator from './payment-reference-calculator';

import { BigNumber } from 'ethers';
import DeclarativePaymentNetwork from './declarative';

/**
* Abstract class to extend to get the payment balance of reference based requests
*/
export default abstract class ReferenceBasedDetector<TPaymentEventParameters>
export default abstract class ReferenceBasedDetector<
TPaymentEventParameters,
ExtensionType extends ExtensionTypes.PnReferenceBased.IReferenceBased = ExtensionTypes.PnReferenceBased.IReferenceBased
>
extends DeclarativePaymentNetwork<ExtensionType>
implements PaymentTypes.IPaymentNetwork<TPaymentEventParameters> {
/**
* @param extension The advanced logic payment network extension, reference based
* @param extensionType Example : ExtensionTypes.ID.PAYMENT_NETWORK_ETH_INPUT_DATA
*/

protected _extension: ExtensionType;

public constructor(
protected extension: ExtensionTypes.PnReferenceBased.IReferenceBased,
protected advancedLogic: AdvancedLogicTypes.IAdvancedLogic,
extension: ExtensionType,
protected extensionType: ExtensionTypes.ID,
) {}
) {
super({ advancedLogic });
this._extension = extension;
}

/**
* Creates the extensions data for the creation of this extension.
Expand All @@ -33,7 +50,7 @@ export default abstract class ReferenceBasedDetector<TPaymentEventParameters>
paymentNetworkCreationParameters.salt =
paymentNetworkCreationParameters.salt || (await Utils.crypto.generate8randomBytes());

return this.extension.createCreationAction({
return this._extension.createCreationAction({
paymentAddress: paymentNetworkCreationParameters.paymentAddress,
refundAddress: paymentNetworkCreationParameters.refundAddress,
...paymentNetworkCreationParameters,
Expand All @@ -43,27 +60,27 @@ export default abstract class ReferenceBasedDetector<TPaymentEventParameters>
/**
* Creates the extensions data to add payment address
*
* @param parameters to add payment information
* @param parameters to add payment address
* @returns The extensionData object
*/
public createExtensionsDataForAddPaymentInformation(
public createExtensionsDataForAddPaymentAddress(
parameters: ExtensionTypes.PnReferenceBased.IAddPaymentAddressParameters,
): ExtensionTypes.IAction {
return this.extension.createAddPaymentAddressAction({
return this._extension.createAddPaymentAddressAction({
paymentAddress: parameters.paymentAddress,
});
}

/**
* Creates the extensions data to add refund address
*
* @param Parameters to add refund information
* @param Parameters to add refund address
* @returns The extensionData object
*/
public createExtensionsDataForAddRefundInformation(
public createExtensionsDataForAddRefundAddress(
parameters: ExtensionTypes.PnReferenceBased.IAddRefundAddressParameters,
): ExtensionTypes.IAction {
return this.extension.createAddRefundAddressAction({
return this._extension.createAddRefundAddressAction({
refundAddress: parameters.refundAddress,
});
}
Expand All @@ -80,7 +97,7 @@ export default abstract class ReferenceBasedDetector<TPaymentEventParameters>
const paymentNetwork = request.extensions[this.extensionType];
const paymentChain = this.getPaymentChain(request.currency, paymentNetwork);

const supportedNetworks = this.extension.supportedNetworks;
const supportedNetworks = this._extension.supportedNetworks;
if (!supportedNetworks.includes(paymentChain)) {
return getBalanceErrorObject(
`Payment network ${paymentChain} not supported by ${
Expand Down Expand Up @@ -132,7 +149,7 @@ export default abstract class ReferenceBasedDetector<TPaymentEventParameters>
events,
};
} catch (error) {
return getBalanceErrorObject(error.message);
return getBalanceErrorObject((error as Error).message);
}
}

Expand Down
Loading

0 comments on commit ecf4a9d

Please sign in to comment.