From a35da284adb26bb5e4e8c9f3128e9e881b157cf0 Mon Sep 17 00:00:00 2001 From: Benjamin Levesque <14175665+benjlevesque@users.noreply.github.com> Date: Wed, 29 Sep 2021 18:54:31 +0200 Subject: [PATCH 1/7] feat(data-format): increase currency maxLength to 6 (#598) --- .../data-format/src/format/rnf_invoice/rnf_invoice-0.0.3.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/data-format/src/format/rnf_invoice/rnf_invoice-0.0.3.json b/packages/data-format/src/format/rnf_invoice/rnf_invoice-0.0.3.json index 4c7dcc4472..fbcf126237 100644 --- a/packages/data-format/src/format/rnf_invoice/rnf_invoice-0.0.3.json +++ b/packages/data-format/src/format/rnf_invoice/rnf_invoice-0.0.3.json @@ -169,7 +169,7 @@ "currency": { "type": "string", "minLength": 2, - "maxLength": 5 + "maxLength": 6 }, "deliveryDate": { "type": "string", From 577a48f4ddf45f7bbeea3dc30fb6c94c2c4f627c Mon Sep 17 00:00:00 2001 From: Vincent <4611986+vrolland@users.noreply.github.com> Date: Thu, 30 Sep 2021 09:29:57 +0200 Subject: [PATCH 2/7] Update packages/advanced-logic/specs/payment-network-any-to-eth-proxy-0.1.0.md Co-authored-by: Yo <56731761+yomarion@users.noreply.github.com> --- .../specs/payment-network-any-to-eth-proxy-0.1.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/advanced-logic/specs/payment-network-any-to-eth-proxy-0.1.0.md b/packages/advanced-logic/specs/payment-network-any-to-eth-proxy-0.1.0.md index 575eb10cfc..37cae39185 100644 --- a/packages/advanced-logic/specs/payment-network-any-to-eth-proxy-0.1.0.md +++ b/packages/advanced-logic/specs/payment-network-any-to-eth-proxy-0.1.0.md @@ -3,7 +3,7 @@ ## Description This extension allows the payments and the refunds to be made in ETH on Ethereum or native tokens on EVM blockchains for a request made in others currencies. -The rate is computing at the payment thanks to onchain oracles. +The rate is computed at the payment thanks to onchain oracles. This Payment Network is quite similar to the [ETH Fee Proxy Contract](./payment-network-eth-fee-proxy-contract-0.1.0.md) extension, with a rate conversion before the payment. The payment is made through a proxy contract. This proxy contract call the [ETH Fee Proxy Contract](./payment-network-eth-fee-proxy-contract-0.1.0.md) to do the ETH transfer on behalf of the user. The contract ensures a link between an ETH transfer and a request through a `paymentReference`. From dfd5fe28c612427804d9f113abaa5ee8d1201012 Mon Sep 17 00:00:00 2001 From: vrolland Date: Thu, 30 Sep 2021 09:33:55 +0200 Subject: [PATCH 3/7] rename chainlink to conversion --- .../src/extensions/payment-network/any-to-erc20-proxy.ts | 2 +- .../src/extensions/payment-network/any-to-eth-proxy.ts | 2 +- ...pported-currencies.ts => conversion-supported-currencies.ts} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename packages/advanced-logic/src/extensions/payment-network/{chainlink-supported-currencies.ts => conversion-supported-currencies.ts} (100%) diff --git a/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts b/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts index 0f79106711..7380636d19 100644 --- a/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts +++ b/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts @@ -1,6 +1,6 @@ import { ExtensionTypes, RequestLogicTypes } from '@requestnetwork/types'; import Erc20FeeProxyPaymentNetwork from './erc20/fee-proxy-contract'; -import { supportedCurrencies } from './chainlink-supported-currencies'; +import { supportedCurrencies } from './conversion-supported-currencies'; const CURRENT_VERSION = '0.1.0'; // Default network if the storage data does not give any diff --git a/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts b/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts index 3aa9a4ee17..eaa917f3a8 100644 --- a/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts +++ b/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts @@ -1,6 +1,6 @@ import { ExtensionTypes, RequestLogicTypes } from '@requestnetwork/types'; import EthereumFeeProxyPaymentNetwork from './ethereum/fee-proxy-contract'; -import { supportedCurrencies } from './chainlink-supported-currencies'; +import { supportedCurrencies } from './conversion-supported-currencies'; const CURRENT_VERSION = '0.1.0'; // Default network if the storage data does not give any diff --git a/packages/advanced-logic/src/extensions/payment-network/chainlink-supported-currencies.ts b/packages/advanced-logic/src/extensions/payment-network/conversion-supported-currencies.ts similarity index 100% rename from packages/advanced-logic/src/extensions/payment-network/chainlink-supported-currencies.ts rename to packages/advanced-logic/src/extensions/payment-network/conversion-supported-currencies.ts From b9b41a57dfca91f980eca2f88eae363507ac018f Mon Sep 17 00:00:00 2001 From: vrolland Date: Thu, 30 Sep 2021 09:41:07 +0200 Subject: [PATCH 4/7] remove defult network --- .../src/extensions/payment-network/any-to-erc20-proxy.ts | 6 ++---- .../src/extensions/payment-network/any-to-eth-proxy.ts | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts b/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts index 7380636d19..0e35193957 100644 --- a/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts +++ b/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts @@ -3,8 +3,6 @@ import Erc20FeeProxyPaymentNetwork from './erc20/fee-proxy-contract'; import { supportedCurrencies } from './conversion-supported-currencies'; const CURRENT_VERSION = '0.1.0'; -// Default network if the storage data does not give any -const DEFAULT_NETWORK = 'mainnet'; export default class AnyToErc20ProxyPaymentNetwork extends Erc20FeeProxyPaymentNetwork { public constructor( @@ -94,7 +92,7 @@ export default class AnyToErc20ProxyPaymentNetwork extends Erc20FeeProxyPaymentN paymentAddress: extensionAction.parameters.paymentAddress, refundAddress: extensionAction.parameters.refundAddress, salt: extensionAction.parameters.salt, - network: extensionAction.parameters.network || DEFAULT_NETWORK, + network: extensionAction.parameters.network, acceptedTokens: extensionAction.parameters.acceptedTokens, maxRateTimespan: extensionAction.parameters.maxRateTimespan, }, @@ -103,7 +101,7 @@ export default class AnyToErc20ProxyPaymentNetwork extends Erc20FeeProxyPaymentN ], values: { ...feePNCreationAction.values, - network: extensionAction.parameters.network || DEFAULT_NETWORK, + network: extensionAction.parameters.network, acceptedTokens: extensionAction.parameters.acceptedTokens, maxRateTimespan: extensionAction.parameters.maxRateTimespan, }, diff --git a/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts b/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts index eaa917f3a8..607c4d9477 100644 --- a/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts +++ b/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts @@ -3,8 +3,6 @@ import EthereumFeeProxyPaymentNetwork from './ethereum/fee-proxy-contract'; import { supportedCurrencies } from './conversion-supported-currencies'; const CURRENT_VERSION = '0.1.0'; -// Default network if the storage data does not give any -const DEFAULT_NETWORK = 'mainnet'; export default class AnyToEthProxyPaymentNetwork extends EthereumFeeProxyPaymentNetwork { public constructor( @@ -63,7 +61,7 @@ export default class AnyToEthProxyPaymentNetwork extends EthereumFeeProxyPayment paymentAddress: extensionAction.parameters.paymentAddress, refundAddress: extensionAction.parameters.refundAddress, salt: extensionAction.parameters.salt, - network: extensionAction.parameters.network || DEFAULT_NETWORK, + network: extensionAction.parameters.network, maxRateTimespan: extensionAction.parameters.maxRateTimespan, }, timestamp, @@ -71,7 +69,7 @@ export default class AnyToEthProxyPaymentNetwork extends EthereumFeeProxyPayment ], values: { ...feePNCreationAction.values, - network: extensionAction.parameters.network || DEFAULT_NETWORK, + network: extensionAction.parameters.network, maxRateTimespan: extensionAction.parameters.maxRateTimespan, }, }; From ba44ed2fea55b875044f28a1539002718d28ec06 Mon Sep 17 00:00:00 2001 From: vrolland Date: Thu, 30 Sep 2021 09:58:51 +0200 Subject: [PATCH 5/7] network mandatory --- .../payment-network/any-to-eth-proxy.ts | 5 +++-- .../payment-network/any-to-eth-proxy.test.ts | 8 ++++---- .../any-to-eth-proxy-add-data-generator.ts | 16 +++++++++++++--- .../any-to-eth-proxy-create-data-generator.ts | 8 ++++++-- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts b/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts index 607c4d9477..360c1b4b36 100644 --- a/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts +++ b/packages/advanced-logic/src/extensions/payment-network/any-to-eth-proxy.ts @@ -88,9 +88,10 @@ export default class AnyToEthProxyPaymentNetwork extends EthereumFeeProxyPayment const network = extensionAction.parameters.network || request.extensions[this.extensionId]?.values.network; - // Nothing can be validated if the network has not been given yet if (!network) { - return; + throw new Error( + `The network must be provided from the creation action or from the extension state`, + ); } if (!supportedCurrencies[network]) { diff --git a/packages/advanced-logic/test/extensions/payment-network/any-to-eth-proxy.test.ts b/packages/advanced-logic/test/extensions/payment-network/any-to-eth-proxy.test.ts index aeac6b0fc7..88c218d9cf 100644 --- a/packages/advanced-logic/test/extensions/payment-network/any-to-eth-proxy.test.ts +++ b/packages/advanced-logic/test/extensions/payment-network/any-to-eth-proxy.test.ts @@ -9,7 +9,7 @@ import * as TestData from '../../utils/test-data-generator'; const anyToEthProxy = new AnyToEthProxy(); /* eslint-disable @typescript-eslint/no-unused-expressions */ -describe('extensions/payment-network/ethereum/any-to-eth-fee-proxy-contract', () => { +describe.only('extensions/payment-network/ethereum/any-to-eth-fee-proxy-contract', () => { describe('createCreationAction', () => { it('can create a create action with all parameters', () => { // 'extension data is wrong' @@ -460,7 +460,7 @@ describe('extensions/payment-network/ethereum/any-to-eth-fee-proxy-contract', () TestData.payeeRaw.identity, TestData.arbitraryTimestamp, ); - }).toThrowError(`The extension should be created before receiving any other action`); + }).toThrowError(`The network must be provided from the creation action or from the extension state`); }); it('cannot applyActionToExtensions of addPaymentAddress without a payee', () => { @@ -550,7 +550,7 @@ describe('extensions/payment-network/ethereum/any-to-eth-fee-proxy-contract', () TestData.payerRaw.identity, TestData.arbitraryTimestamp, ); - }).toThrowError(`The extension should be created before receiving any other action`); + }).toThrowError(`The network must be provided from the creation action or from the extension state`); }); it('cannot applyActionToExtensions of addRefundAddress without a payer', () => { @@ -637,7 +637,7 @@ describe('extensions/payment-network/ethereum/any-to-eth-fee-proxy-contract', () TestData.payeeRaw.identity, TestData.arbitraryTimestamp, ); - }).toThrowError(`The extension should be created before receiving any other action`); + }).toThrowError(`The network must be provided from the creation action or from the extension state`); }); it('cannot applyActionToExtensions of addFee without a payee', () => { diff --git a/packages/advanced-logic/test/utils/payment-network/ethereum/any-to-eth-proxy-add-data-generator.ts b/packages/advanced-logic/test/utils/payment-network/ethereum/any-to-eth-proxy-add-data-generator.ts index 09bc1d64e8..a175350cf8 100644 --- a/packages/advanced-logic/test/utils/payment-network/ethereum/any-to-eth-proxy-add-data-generator.ts +++ b/packages/advanced-logic/test/utils/payment-network/ethereum/any-to-eth-proxy-add-data-generator.ts @@ -13,6 +13,7 @@ export const refundAddress = '0xf17f52151EbEF6C7334FAD080c5704D77216b732'; export const feeAddress = '0xC5fdf4076b8F3A5357c5E395ab970B5B54098Fef'; export const feeAmount = '2000000000000000000'; export const invalidAddress = '0x not and address'; +const network = 'mainnet'; // --------------------------------------------------------------------- export const salt = 'ea3bc7caf64110ca'; // actions @@ -46,7 +47,9 @@ export const extensionStateWithPaymentAfterCreation = { events: [ { name: ExtensionTypes.PnFeeReferenceBased.ACTION.CREATE, - parameters: {}, + parameters: { + network + }, timestamp: arbitraryTimestamp, }, { @@ -61,6 +64,7 @@ export const extensionStateWithPaymentAfterCreation = { type: ExtensionTypes.TYPE.PAYMENT_NETWORK, values: { paymentAddress, + network, }, version: '0.1.0', }, @@ -71,7 +75,9 @@ export const extensionStateWithRefundAfterCreation = { events: [ { name: ExtensionTypes.PnFeeReferenceBased.ACTION.CREATE, - parameters: {}, + parameters: { + network + }, timestamp: arbitraryTimestamp, }, { @@ -86,6 +92,7 @@ export const extensionStateWithRefundAfterCreation = { type: ExtensionTypes.TYPE.PAYMENT_NETWORK, values: { refundAddress, + network, }, version: '0.1.0', }, @@ -96,7 +103,9 @@ export const extensionStateWithFeeAfterCreation = { events: [ { name: ExtensionTypes.PnFeeReferenceBased.ACTION.CREATE, - parameters: {}, + parameters: { + network + }, timestamp: arbitraryTimestamp, }, { @@ -113,6 +122,7 @@ export const extensionStateWithFeeAfterCreation = { values: { feeAddress, feeAmount, + network, }, version: '0.1.0', }, diff --git a/packages/advanced-logic/test/utils/payment-network/ethereum/any-to-eth-proxy-create-data-generator.ts b/packages/advanced-logic/test/utils/payment-network/ethereum/any-to-eth-proxy-create-data-generator.ts index 0e8acf752b..99f1409b84 100644 --- a/packages/advanced-logic/test/utils/payment-network/ethereum/any-to-eth-proxy-create-data-generator.ts +++ b/packages/advanced-logic/test/utils/payment-network/ethereum/any-to-eth-proxy-create-data-generator.ts @@ -99,13 +99,17 @@ export const extensionStateCreatedEmpty = { events: [ { name: 'create', - parameters: {}, + parameters: { + network: 'mainnet', + }, timestamp: arbitraryTimestamp, }, ], id: ExtensionTypes.ID.PAYMENT_NETWORK_ANY_TO_ETH_PROXY, type: ExtensionTypes.TYPE.PAYMENT_NETWORK, - values: {}, + values: { + network: 'mainnet', + }, version: '0.1.0', }, }; From 8a3e8624bbd438c2b7ca316ceff146805bbd4e7f Mon Sep 17 00:00:00 2001 From: vrolland Date: Thu, 30 Sep 2021 10:07:49 +0200 Subject: [PATCH 6/7] fix import --- packages/types/src/extension-types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/types/src/extension-types.ts b/packages/types/src/extension-types.ts index d591638baa..e43efc3ba6 100644 --- a/packages/types/src/extension-types.ts +++ b/packages/types/src/extension-types.ts @@ -4,7 +4,7 @@ import * as PnAnyDeclarative from './extensions/pn-any-declarative-types'; import * as PnFeeReferenceBased from './extensions/pn-any-fee-reference-based-types'; import * as PnReferenceBased from './extensions/pn-any-reference-based-types'; import * as PnAnyToErc20 from './extensions/pn-any-to-er20-types'; -import * as PnAnyToEth from './extensions/pn-any-to-er20-types'; +import * as PnAnyToEth from './extensions/pn-any-to-eth-types'; import * as Identity from './identity-types'; import * as RequestLogic from './request-logic-types'; From a52fbade543dc7bbaf18e5ce7d44a0cd252b778f Mon Sep 17 00:00:00 2001 From: vrolland Date: Thu, 30 Sep 2021 10:08:31 +0200 Subject: [PATCH 7/7] fix commit --- packages/types/src/extensions/pn-any-to-er20-types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/types/src/extensions/pn-any-to-er20-types.ts b/packages/types/src/extensions/pn-any-to-er20-types.ts index 6fa183b68c..d65d760aa7 100644 --- a/packages/types/src/extensions/pn-any-to-er20-types.ts +++ b/packages/types/src/extensions/pn-any-to-er20-types.ts @@ -1,7 +1,7 @@ import * as Extension from '../extension-types'; import * as PnAnyFees from './pn-any-fee-reference-based-types'; -/** Any to ERC20e reference-based payment network extension interface */ +/** Any to ERC20 reference-based payment network extension interface */ export interface IAnyToERC20 extends PnAnyFees.IFeeReferenceBased { createCreationAction: (creationParameters: ICreationParameters) => Extension.IAction; }