@metamask/transaction-pay-controller 16.3.0 → 16.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -1
- package/dist/TransactionPayController.cjs +9 -0
- package/dist/TransactionPayController.cjs.map +1 -1
- package/dist/TransactionPayController.d.cts +2 -1
- package/dist/TransactionPayController.d.cts.map +1 -1
- package/dist/TransactionPayController.d.mts +2 -1
- package/dist/TransactionPayController.d.mts.map +1 -1
- package/dist/TransactionPayController.mjs +9 -0
- package/dist/TransactionPayController.mjs.map +1 -1
- package/dist/actions/update-fiat-payment.cjs +29 -0
- package/dist/actions/update-fiat-payment.cjs.map +1 -0
- package/dist/actions/update-fiat-payment.d.cts +14 -0
- package/dist/actions/update-fiat-payment.d.cts.map +1 -0
- package/dist/actions/update-fiat-payment.d.mts +14 -0
- package/dist/actions/update-fiat-payment.d.mts.map +1 -0
- package/dist/actions/update-fiat-payment.mjs +25 -0
- package/dist/actions/update-fiat-payment.mjs.map +1 -0
- package/dist/actions/update-payment-token.cjs +1 -0
- package/dist/actions/update-payment-token.cjs.map +1 -1
- package/dist/actions/update-payment-token.d.cts.map +1 -1
- package/dist/actions/update-payment-token.d.mts.map +1 -1
- package/dist/actions/update-payment-token.mjs +1 -0
- package/dist/actions/update-payment-token.mjs.map +1 -1
- package/dist/constants.cjs +1 -0
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +1 -0
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.mts +1 -0
- package/dist/constants.d.mts.map +1 -1
- package/dist/constants.mjs +1 -0
- package/dist/constants.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/strategy/across/AcrossStrategy.cjs +28 -0
- package/dist/strategy/across/AcrossStrategy.cjs.map +1 -0
- package/dist/strategy/across/AcrossStrategy.d.cts +8 -0
- package/dist/strategy/across/AcrossStrategy.d.cts.map +1 -0
- package/dist/strategy/across/AcrossStrategy.d.mts +8 -0
- package/dist/strategy/across/AcrossStrategy.d.mts.map +1 -0
- package/dist/strategy/across/AcrossStrategy.mjs +24 -0
- package/dist/strategy/across/AcrossStrategy.mjs.map +1 -0
- package/dist/strategy/across/across-quotes.cjs +356 -0
- package/dist/strategy/across/across-quotes.cjs.map +1 -0
- package/dist/strategy/across/across-quotes.d.cts +10 -0
- package/dist/strategy/across/across-quotes.d.cts.map +1 -0
- package/dist/strategy/across/across-quotes.d.mts +10 -0
- package/dist/strategy/across/across-quotes.d.mts.map +1 -0
- package/dist/strategy/across/across-quotes.mjs +352 -0
- package/dist/strategy/across/across-quotes.mjs.map +1 -0
- package/dist/strategy/across/across-submit.cjs +241 -0
- package/dist/strategy/across/across-submit.cjs.map +1 -0
- package/dist/strategy/across/across-submit.d.cts +13 -0
- package/dist/strategy/across/across-submit.d.cts.map +1 -0
- package/dist/strategy/across/across-submit.d.mts +13 -0
- package/dist/strategy/across/across-submit.d.mts.map +1 -0
- package/dist/strategy/across/across-submit.mjs +237 -0
- package/dist/strategy/across/across-submit.mjs.map +1 -0
- package/dist/strategy/across/types.cjs +3 -0
- package/dist/strategy/across/types.cjs.map +1 -0
- package/dist/strategy/across/types.d.cts +89 -0
- package/dist/strategy/across/types.d.cts.map +1 -0
- package/dist/strategy/across/types.d.mts +89 -0
- package/dist/strategy/across/types.d.mts.map +1 -0
- package/dist/strategy/across/types.mjs +2 -0
- package/dist/strategy/across/types.mjs.map +1 -0
- package/dist/strategy/relay/RelayStrategy.cjs +5 -0
- package/dist/strategy/relay/RelayStrategy.cjs.map +1 -1
- package/dist/strategy/relay/RelayStrategy.d.cts +1 -0
- package/dist/strategy/relay/RelayStrategy.d.cts.map +1 -1
- package/dist/strategy/relay/RelayStrategy.d.mts +1 -0
- package/dist/strategy/relay/RelayStrategy.d.mts.map +1 -1
- package/dist/strategy/relay/RelayStrategy.mjs +5 -0
- package/dist/strategy/relay/RelayStrategy.mjs.map +1 -1
- package/dist/strategy/relay/gas-station.cjs +92 -0
- package/dist/strategy/relay/gas-station.cjs.map +1 -0
- package/dist/strategy/relay/gas-station.d.cts +22 -0
- package/dist/strategy/relay/gas-station.d.cts.map +1 -0
- package/dist/strategy/relay/gas-station.d.mts +22 -0
- package/dist/strategy/relay/gas-station.d.mts.map +1 -0
- package/dist/strategy/relay/gas-station.mjs +87 -0
- package/dist/strategy/relay/gas-station.mjs.map +1 -0
- package/dist/strategy/relay/relay-max-gas-station.cjs +242 -0
- package/dist/strategy/relay/relay-max-gas-station.cjs.map +1 -0
- package/dist/strategy/relay/relay-max-gas-station.d.cts +22 -0
- package/dist/strategy/relay/relay-max-gas-station.d.cts.map +1 -0
- package/dist/strategy/relay/relay-max-gas-station.d.mts +22 -0
- package/dist/strategy/relay/relay-max-gas-station.d.mts.map +1 -0
- package/dist/strategy/relay/relay-max-gas-station.mjs +238 -0
- package/dist/strategy/relay/relay-max-gas-station.mjs.map +1 -0
- package/dist/strategy/relay/relay-quotes.cjs +32 -59
- package/dist/strategy/relay/relay-quotes.cjs.map +1 -1
- package/dist/strategy/relay/relay-quotes.d.cts.map +1 -1
- package/dist/strategy/relay/relay-quotes.d.mts.map +1 -1
- package/dist/strategy/relay/relay-quotes.mjs +29 -56
- package/dist/strategy/relay/relay-quotes.mjs.map +1 -1
- package/dist/strategy/relay/types.cjs.map +1 -1
- package/dist/strategy/relay/types.d.cts +1 -0
- package/dist/strategy/relay/types.d.cts.map +1 -1
- package/dist/strategy/relay/types.d.mts +1 -0
- package/dist/strategy/relay/types.d.mts.map +1 -1
- package/dist/strategy/relay/types.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +24 -1
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +24 -1
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/amounts.cjs +40 -0
- package/dist/utils/amounts.cjs.map +1 -0
- package/dist/utils/amounts.d.cts +18 -0
- package/dist/utils/amounts.d.cts.map +1 -0
- package/dist/utils/amounts.d.mts +18 -0
- package/dist/utils/amounts.d.mts.map +1 -0
- package/dist/utils/amounts.mjs +35 -0
- package/dist/utils/amounts.mjs.map +1 -0
- package/dist/utils/feature-flags.cjs +45 -6
- package/dist/utils/feature-flags.cjs.map +1 -1
- package/dist/utils/feature-flags.d.cts +45 -2
- package/dist/utils/feature-flags.d.cts.map +1 -1
- package/dist/utils/feature-flags.d.mts +45 -2
- package/dist/utils/feature-flags.d.mts.map +1 -1
- package/dist/utils/feature-flags.mjs +42 -5
- package/dist/utils/feature-flags.mjs.map +1 -1
- package/dist/utils/gas.cjs +46 -1
- package/dist/utils/gas.cjs.map +1 -1
- package/dist/utils/gas.d.cts +18 -0
- package/dist/utils/gas.d.cts.map +1 -1
- package/dist/utils/gas.d.mts +18 -0
- package/dist/utils/gas.d.mts.map +1 -1
- package/dist/utils/gas.mjs +44 -0
- package/dist/utils/gas.mjs.map +1 -1
- package/dist/utils/strategy.cjs +3 -0
- package/dist/utils/strategy.cjs.map +1 -1
- package/dist/utils/strategy.d.cts.map +1 -1
- package/dist/utils/strategy.d.mts.map +1 -1
- package/dist/utils/strategy.mjs +3 -0
- package/dist/utils/strategy.mjs.map +1 -1
- package/dist/utils/totals.cjs +4 -19
- package/dist/utils/totals.cjs.map +1 -1
- package/dist/utils/totals.d.cts.map +1 -1
- package/dist/utils/totals.d.mts.map +1 -1
- package/dist/utils/totals.mjs +1 -16
- package/dist/utils/totals.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,yBAAyB,EACzB,+BAA+B,EAC/B,8BAA8B,EAC9B,sDAAsD,EACtD,sCAAsC,EACtC,yCAAyC,EACzC,iCAAiC,EACjC,+BAA+B,EAC/B,kDAAkD,EAClD,6BAA6B,EAC7B,wCAAwC,EACxC,gDAAgD,EAChD,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,GAC1B,oBAAgB;AACjB,OAAO,EAAE,sBAAsB,EAAE,wBAAoB;AACrD,OAAO,EAAE,wBAAwB,EAAE,uCAAmC;AACtE,OAAO,EAAE,yBAAyB,EAAE,gDAA4C;AAChF,YAAY,EAAE,yBAAyB,EAAE,oCAAgC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,EACtB,8BAA8B,EAC9B,+BAA+B,EAC/B,8BAA8B,EAC9B,sDAAsD,EACtD,sCAAsC,EACtC,yCAAyC,EACzC,iCAAiC,EACjC,+BAA+B,EAC/B,kDAAkD,EAClD,+CAA+C,EAC/C,6BAA6B,EAC7B,wCAAwC,EACxC,gDAAgD,EAChD,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,GAC1B,oBAAgB;AACjB,OAAO,EAAE,sBAAsB,EAAE,wBAAoB;AACrD,OAAO,EAAE,wBAAwB,EAAE,uCAAmC;AACtE,OAAO,EAAE,yBAAyB,EAAE,gDAA4C;AAChF,YAAY,EAAE,yBAAyB,EAAE,oCAAgC"}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,sBAAsB,EAAE,wBAAoB;AACrD,OAAO,EAAE,wBAAwB,EAAE,uCAAmC;AACtE,OAAO,EAAE,yBAAyB,EAAE,gDAA4C","sourcesContent":["export type {\n TransactionConfig,\n TransactionConfigCallback,\n TransactionFiatPayment,\n TransactionFiatPaymentCallback,\n TransactionPayControllerActions,\n TransactionPayControllerEvents,\n TransactionPayControllerGetDelegationTransactionAction,\n TransactionPayControllerGetStateAction,\n TransactionPayControllerGetStrategyAction,\n TransactionPayControllerMessenger,\n TransactionPayControllerOptions,\n TransactionPayControllerSetTransactionConfigAction,\n TransactionPayControllerUpdateFiatPaymentAction,\n TransactionPayControllerState,\n TransactionPayControllerStateChangeEvent,\n TransactionPayControllerUpdatePaymentTokenAction,\n TransactionPaymentToken,\n TransactionPayQuote,\n TransactionPayRequiredToken,\n TransactionPaySourceAmount,\n TransactionPayTotals,\n UpdateFiatPaymentRequest,\n UpdatePaymentTokenRequest,\n} from './types';\nexport { TransactionPayStrategy } from './constants';\nexport { TransactionPayController } from './TransactionPayController';\nexport { TransactionPayPublishHook } from './helpers/TransactionPayPublishHook';\nexport type { TransactionPayBridgeQuote } from './strategy/bridge/types';\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AcrossStrategy = void 0;
|
|
4
|
+
const transaction_controller_1 = require("@metamask/transaction-controller");
|
|
5
|
+
const across_quotes_1 = require("./across-quotes.cjs");
|
|
6
|
+
const across_submit_1 = require("./across-submit.cjs");
|
|
7
|
+
const feature_flags_1 = require("../../utils/feature-flags.cjs");
|
|
8
|
+
class AcrossStrategy {
|
|
9
|
+
supports(request) {
|
|
10
|
+
const config = (0, feature_flags_1.getPayStrategiesConfig)(request.messenger);
|
|
11
|
+
if (!config.across.enabled) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
if (request.transaction?.type === transaction_controller_1.TransactionType.perpsAcrossDeposit) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
// Across doesn't support same-chain swaps (e.g. mUSD conversions).
|
|
18
|
+
return request.requests.every((singleRequest) => singleRequest.sourceChainId !== singleRequest.targetChainId);
|
|
19
|
+
}
|
|
20
|
+
async getQuotes(request) {
|
|
21
|
+
return (0, across_quotes_1.getAcrossQuotes)(request);
|
|
22
|
+
}
|
|
23
|
+
async execute(request) {
|
|
24
|
+
return (0, across_submit_1.submitAcrossQuotes)(request);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.AcrossStrategy = AcrossStrategy;
|
|
28
|
+
//# sourceMappingURL=AcrossStrategy.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcrossStrategy.cjs","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":";;;AAAA,6EAAmE;AAEnE,uDAAkD;AAClD,uDAAqD;AAQrD,iEAAmE;AAEnE,MAAa,cAAc;IACzB,QAAQ,CAAC,OAAoC;QAC3C,MAAM,MAAM,GAAG,IAAA,sCAAsB,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,KAAK,wCAAe,CAAC,kBAAkB,EAAE,CAAC;YACrE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mEAAmE;QACnE,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAC3B,CAAC,aAAa,EAAE,EAAE,CAChB,aAAa,CAAC,aAAa,KAAK,aAAa,CAAC,aAAa,CAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAoC;QAEpC,OAAO,IAAA,+BAAe,EAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAA+C;QAE/C,OAAO,IAAA,kCAAkB,EAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF;AA9BD,wCA8BC","sourcesContent":["import { TransactionType } from '@metamask/transaction-controller';\n\nimport { getAcrossQuotes } from './across-quotes';\nimport { submitAcrossQuotes } from './across-submit';\nimport type { AcrossQuote } from './types';\nimport type {\n PayStrategy,\n PayStrategyExecuteRequest,\n PayStrategyGetQuotesRequest,\n TransactionPayQuote,\n} from '../../types';\nimport { getPayStrategiesConfig } from '../../utils/feature-flags';\n\nexport class AcrossStrategy implements PayStrategy<AcrossQuote> {\n supports(request: PayStrategyGetQuotesRequest): boolean {\n const config = getPayStrategiesConfig(request.messenger);\n\n if (!config.across.enabled) {\n return false;\n }\n\n if (request.transaction?.type === TransactionType.perpsAcrossDeposit) {\n return false;\n }\n\n // Across doesn't support same-chain swaps (e.g. mUSD conversions).\n return request.requests.every(\n (singleRequest) =>\n singleRequest.sourceChainId !== singleRequest.targetChainId,\n );\n }\n\n async getQuotes(\n request: PayStrategyGetQuotesRequest,\n ): Promise<TransactionPayQuote<AcrossQuote>[]> {\n return getAcrossQuotes(request);\n }\n\n async execute(\n request: PayStrategyExecuteRequest<AcrossQuote>,\n ): ReturnType<PayStrategy<AcrossQuote>['execute']> {\n return submitAcrossQuotes(request);\n }\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AcrossQuote } from "./types.cjs";
|
|
2
|
+
import type { PayStrategy, PayStrategyExecuteRequest, PayStrategyGetQuotesRequest, TransactionPayQuote } from "../../types.cjs";
|
|
3
|
+
export declare class AcrossStrategy implements PayStrategy<AcrossQuote> {
|
|
4
|
+
supports(request: PayStrategyGetQuotesRequest): boolean;
|
|
5
|
+
getQuotes(request: PayStrategyGetQuotesRequest): Promise<TransactionPayQuote<AcrossQuote>[]>;
|
|
6
|
+
execute(request: PayStrategyExecuteRequest<AcrossQuote>): ReturnType<PayStrategy<AcrossQuote>['execute']>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=AcrossStrategy.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcrossStrategy.d.cts","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAgB;AAC3C,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;AAGrB,qBAAa,cAAe,YAAW,WAAW,CAAC,WAAW,CAAC;IAC7D,QAAQ,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO;IAkBjD,SAAS,CACb,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;IAIxC,OAAO,CACX,OAAO,EAAE,yBAAyB,CAAC,WAAW,CAAC,GAC9C,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC;CAGnD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AcrossQuote } from "./types.mjs";
|
|
2
|
+
import type { PayStrategy, PayStrategyExecuteRequest, PayStrategyGetQuotesRequest, TransactionPayQuote } from "../../types.mjs";
|
|
3
|
+
export declare class AcrossStrategy implements PayStrategy<AcrossQuote> {
|
|
4
|
+
supports(request: PayStrategyGetQuotesRequest): boolean;
|
|
5
|
+
getQuotes(request: PayStrategyGetQuotesRequest): Promise<TransactionPayQuote<AcrossQuote>[]>;
|
|
6
|
+
execute(request: PayStrategyExecuteRequest<AcrossQuote>): ReturnType<PayStrategy<AcrossQuote>['execute']>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=AcrossStrategy.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcrossStrategy.d.mts","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAgB;AAC3C,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;AAGrB,qBAAa,cAAe,YAAW,WAAW,CAAC,WAAW,CAAC;IAC7D,QAAQ,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO;IAkBjD,SAAS,CACb,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;IAIxC,OAAO,CACX,OAAO,EAAE,yBAAyB,CAAC,WAAW,CAAC,GAC9C,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC;CAGnD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TransactionType } from "@metamask/transaction-controller";
|
|
2
|
+
import { getAcrossQuotes } from "./across-quotes.mjs";
|
|
3
|
+
import { submitAcrossQuotes } from "./across-submit.mjs";
|
|
4
|
+
import { getPayStrategiesConfig } from "../../utils/feature-flags.mjs";
|
|
5
|
+
export class AcrossStrategy {
|
|
6
|
+
supports(request) {
|
|
7
|
+
const config = getPayStrategiesConfig(request.messenger);
|
|
8
|
+
if (!config.across.enabled) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
if (request.transaction?.type === TransactionType.perpsAcrossDeposit) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
// Across doesn't support same-chain swaps (e.g. mUSD conversions).
|
|
15
|
+
return request.requests.every((singleRequest) => singleRequest.sourceChainId !== singleRequest.targetChainId);
|
|
16
|
+
}
|
|
17
|
+
async getQuotes(request) {
|
|
18
|
+
return getAcrossQuotes(request);
|
|
19
|
+
}
|
|
20
|
+
async execute(request) {
|
|
21
|
+
return submitAcrossQuotes(request);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=AcrossStrategy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcrossStrategy.mjs","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yCAAyC;AAEnE,OAAO,EAAE,eAAe,EAAE,4BAAwB;AAClD,OAAO,EAAE,kBAAkB,EAAE,4BAAwB;AAQrD,OAAO,EAAE,sBAAsB,EAAE,sCAAkC;AAEnE,MAAM,OAAO,cAAc;IACzB,QAAQ,CAAC,OAAoC;QAC3C,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,KAAK,eAAe,CAAC,kBAAkB,EAAE,CAAC;YACrE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mEAAmE;QACnE,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAC3B,CAAC,aAAa,EAAE,EAAE,CAChB,aAAa,CAAC,aAAa,KAAK,aAAa,CAAC,aAAa,CAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAoC;QAEpC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAA+C;QAE/C,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF","sourcesContent":["import { TransactionType } from '@metamask/transaction-controller';\n\nimport { getAcrossQuotes } from './across-quotes';\nimport { submitAcrossQuotes } from './across-submit';\nimport type { AcrossQuote } from './types';\nimport type {\n PayStrategy,\n PayStrategyExecuteRequest,\n PayStrategyGetQuotesRequest,\n TransactionPayQuote,\n} from '../../types';\nimport { getPayStrategiesConfig } from '../../utils/feature-flags';\n\nexport class AcrossStrategy implements PayStrategy<AcrossQuote> {\n supports(request: PayStrategyGetQuotesRequest): boolean {\n const config = getPayStrategiesConfig(request.messenger);\n\n if (!config.across.enabled) {\n return false;\n }\n\n if (request.transaction?.type === TransactionType.perpsAcrossDeposit) {\n return false;\n }\n\n // Across doesn't support same-chain swaps (e.g. mUSD conversions).\n return request.requests.every(\n (singleRequest) =>\n singleRequest.sourceChainId !== singleRequest.targetChainId,\n );\n }\n\n async getQuotes(\n request: PayStrategyGetQuotesRequest,\n ): Promise<TransactionPayQuote<AcrossQuote>[]> {\n return getAcrossQuotes(request);\n }\n\n async execute(\n request: PayStrategyExecuteRequest<AcrossQuote>,\n ): ReturnType<PayStrategy<AcrossQuote>['execute']> {\n return submitAcrossQuotes(request);\n }\n}\n"]}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAcrossQuotes = void 0;
|
|
4
|
+
const abi_1 = require("@ethersproject/abi");
|
|
5
|
+
const controller_utils_1 = require("@metamask/controller-utils");
|
|
6
|
+
const utils_1 = require("@metamask/utils");
|
|
7
|
+
const bignumber_js_1 = require("bignumber.js");
|
|
8
|
+
const constants_1 = require("../../constants.cjs");
|
|
9
|
+
const logger_1 = require("../../logger.cjs");
|
|
10
|
+
const amounts_1 = require("../../utils/amounts.cjs");
|
|
11
|
+
const feature_flags_1 = require("../../utils/feature-flags.cjs");
|
|
12
|
+
const gas_1 = require("../../utils/gas.cjs");
|
|
13
|
+
const token_1 = require("../../utils/token.cjs");
|
|
14
|
+
const constants_2 = require("../relay/constants.cjs");
|
|
15
|
+
const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'across-strategy');
|
|
16
|
+
const TOKEN_TRANSFER_INTERFACE = new abi_1.Interface([
|
|
17
|
+
'function transfer(address to, uint256 amount)',
|
|
18
|
+
]);
|
|
19
|
+
const UNSUPPORTED_AUTHORIZATION_LIST_ERROR = 'Across does not support type-4/EIP-7702 authorization lists yet';
|
|
20
|
+
const UNSUPPORTED_DESTINATION_ERROR = 'Across only supports transfer-style destination flows at the moment';
|
|
21
|
+
/**
|
|
22
|
+
* Fetch Across quotes.
|
|
23
|
+
*
|
|
24
|
+
* @param request - Request object.
|
|
25
|
+
* @returns Array of quotes.
|
|
26
|
+
*/
|
|
27
|
+
async function getAcrossQuotes(request) {
|
|
28
|
+
const { requests } = request;
|
|
29
|
+
log('Fetching quotes', requests);
|
|
30
|
+
try {
|
|
31
|
+
const normalizedRequests = requests.filter((singleRequest) => singleRequest.isMaxAmount === true ||
|
|
32
|
+
(singleRequest.targetAmountMinimum !== undefined &&
|
|
33
|
+
singleRequest.targetAmountMinimum !== '0'));
|
|
34
|
+
if (normalizedRequests.length === 0) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
if (request.transaction.txParams?.authorizationList?.length) {
|
|
38
|
+
throw new Error(UNSUPPORTED_AUTHORIZATION_LIST_ERROR);
|
|
39
|
+
}
|
|
40
|
+
return await Promise.all(normalizedRequests.map((singleRequest) => getSingleQuote(singleRequest, request)));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
log('Error fetching quotes', { error });
|
|
44
|
+
throw new Error(`Failed to fetch Across quotes: ${String(error)}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.getAcrossQuotes = getAcrossQuotes;
|
|
48
|
+
async function getSingleQuote(request, fullRequest) {
|
|
49
|
+
const { messenger, transaction } = fullRequest;
|
|
50
|
+
const { from, isMaxAmount, sourceChainId, sourceTokenAddress, sourceTokenAmount, targetAmountMinimum, targetChainId, targetTokenAddress, } = request;
|
|
51
|
+
const config = (0, feature_flags_1.getPayStrategiesConfig)(messenger);
|
|
52
|
+
const slippageDecimal = (0, feature_flags_1.getSlippage)(messenger, sourceChainId, sourceTokenAddress);
|
|
53
|
+
const amount = isMaxAmount ? sourceTokenAmount : targetAmountMinimum;
|
|
54
|
+
const tradeType = isMaxAmount ? 'exactInput' : 'exactOutput';
|
|
55
|
+
const recipient = getAcrossRecipient(transaction, request);
|
|
56
|
+
const quote = await requestAcrossApproval({
|
|
57
|
+
amount,
|
|
58
|
+
apiBase: config.across.apiBase,
|
|
59
|
+
depositor: from,
|
|
60
|
+
destinationChainId: targetChainId,
|
|
61
|
+
inputToken: sourceTokenAddress,
|
|
62
|
+
originChainId: sourceChainId,
|
|
63
|
+
outputToken: targetTokenAddress,
|
|
64
|
+
recipient,
|
|
65
|
+
slippage: slippageDecimal,
|
|
66
|
+
tradeType,
|
|
67
|
+
});
|
|
68
|
+
const originalQuote = {
|
|
69
|
+
quote,
|
|
70
|
+
request: {
|
|
71
|
+
amount,
|
|
72
|
+
tradeType,
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
return await normalizeQuote(originalQuote, request, fullRequest);
|
|
76
|
+
}
|
|
77
|
+
async function requestAcrossApproval(request) {
|
|
78
|
+
const { amount, apiBase, depositor, destinationChainId, inputToken, originChainId, outputToken, recipient, slippage, tradeType, } = request;
|
|
79
|
+
const params = new URLSearchParams();
|
|
80
|
+
params.set('tradeType', tradeType);
|
|
81
|
+
params.set('amount', amount);
|
|
82
|
+
params.set('inputToken', inputToken);
|
|
83
|
+
params.set('outputToken', outputToken);
|
|
84
|
+
params.set('originChainId', String(parseInt(originChainId, 16)));
|
|
85
|
+
params.set('destinationChainId', String(parseInt(destinationChainId, 16)));
|
|
86
|
+
params.set('depositor', depositor);
|
|
87
|
+
params.set('recipient', recipient);
|
|
88
|
+
if (slippage !== undefined) {
|
|
89
|
+
params.set('slippage', String(slippage));
|
|
90
|
+
}
|
|
91
|
+
const body = { actions: [] };
|
|
92
|
+
const url = `${apiBase}/swap/approval?${params.toString()}`;
|
|
93
|
+
const options = {
|
|
94
|
+
body: JSON.stringify(body),
|
|
95
|
+
headers: {
|
|
96
|
+
Accept: 'application/json',
|
|
97
|
+
'Content-Type': 'application/json',
|
|
98
|
+
},
|
|
99
|
+
method: 'POST',
|
|
100
|
+
};
|
|
101
|
+
const response = await (0, controller_utils_1.successfulFetch)(url, options);
|
|
102
|
+
return (await response.json());
|
|
103
|
+
}
|
|
104
|
+
function getAcrossRecipient(transaction, request) {
|
|
105
|
+
const { txParams } = transaction;
|
|
106
|
+
const { from } = request;
|
|
107
|
+
const transferData = getTransferData(transaction);
|
|
108
|
+
if (transferData) {
|
|
109
|
+
return getTransferRecipient(transferData);
|
|
110
|
+
}
|
|
111
|
+
const data = txParams?.data;
|
|
112
|
+
const hasNoData = data === undefined || data === '0x';
|
|
113
|
+
const nestedCalldata = getNestedCalldata(transaction);
|
|
114
|
+
if (hasNoData && nestedCalldata.length === 0) {
|
|
115
|
+
return from;
|
|
116
|
+
}
|
|
117
|
+
throw new Error(UNSUPPORTED_DESTINATION_ERROR);
|
|
118
|
+
}
|
|
119
|
+
function getTransferData(transaction) {
|
|
120
|
+
const { nestedTransactions, txParams } = transaction;
|
|
121
|
+
const nestedTransferData = nestedTransactions?.find((nestedTx) => nestedTx.data?.startsWith(constants_2.TOKEN_TRANSFER_FOUR_BYTE))?.data;
|
|
122
|
+
const data = txParams?.data;
|
|
123
|
+
const tokenTransferData = data?.startsWith(constants_2.TOKEN_TRANSFER_FOUR_BYTE)
|
|
124
|
+
? data
|
|
125
|
+
: undefined;
|
|
126
|
+
return nestedTransferData ?? tokenTransferData;
|
|
127
|
+
}
|
|
128
|
+
function getNestedCalldata(transaction) {
|
|
129
|
+
return (transaction.nestedTransactions ?? [])
|
|
130
|
+
.map((nestedTx) => nestedTx.data)
|
|
131
|
+
.filter((data) => data !== undefined && data !== '0x');
|
|
132
|
+
}
|
|
133
|
+
function getTransferRecipient(data) {
|
|
134
|
+
return TOKEN_TRANSFER_INTERFACE.decodeFunctionData('transfer', data).to.toLowerCase();
|
|
135
|
+
}
|
|
136
|
+
async function normalizeQuote(original, request, fullRequest) {
|
|
137
|
+
const { messenger } = fullRequest;
|
|
138
|
+
const { quote } = original;
|
|
139
|
+
const { usdToFiatRate, sourceFiatRate, targetFiatRate } = getFiatRates(messenger, quote);
|
|
140
|
+
const dustUsd = calculateDustUsd(quote, request, targetFiatRate);
|
|
141
|
+
const dust = (0, amounts_1.getFiatValueFromUsd)(dustUsd, usdToFiatRate);
|
|
142
|
+
const { sourceNetwork, gasLimits } = await calculateSourceNetworkCost(quote, messenger, request);
|
|
143
|
+
const targetNetwork = (0, amounts_1.getFiatValueFromUsd)(new bignumber_js_1.BigNumber(0), usdToFiatRate);
|
|
144
|
+
const inputAmountRaw = quote.inputAmount ?? '0';
|
|
145
|
+
const outputAmountRaw = new bignumber_js_1.BigNumber(quote.expectedOutputAmount ??
|
|
146
|
+
quote.minOutputAmount ??
|
|
147
|
+
request.targetAmountMinimum ??
|
|
148
|
+
'0').toString(10);
|
|
149
|
+
const sourceAmount = getAmountFromTokenAmount({
|
|
150
|
+
amountRaw: inputAmountRaw,
|
|
151
|
+
decimals: quote.inputToken.decimals,
|
|
152
|
+
fiatRate: sourceFiatRate,
|
|
153
|
+
});
|
|
154
|
+
const providerUsd = calculateProviderUsd(quote, inputAmountRaw, sourceFiatRate, targetFiatRate, quote.expectedOutputAmount);
|
|
155
|
+
const provider = (0, amounts_1.getFiatValueFromUsd)(providerUsd, usdToFiatRate);
|
|
156
|
+
const metaMaskFee = (0, amounts_1.getFiatValueFromUsd)(new bignumber_js_1.BigNumber(quote.fees?.app?.amountUsd ?? '0').abs(), usdToFiatRate);
|
|
157
|
+
const targetAmount = getAmountFromTokenAmount({
|
|
158
|
+
amountRaw: outputAmountRaw,
|
|
159
|
+
decimals: quote.outputToken.decimals,
|
|
160
|
+
fiatRate: targetFiatRate,
|
|
161
|
+
});
|
|
162
|
+
const metamask = {
|
|
163
|
+
gasLimits,
|
|
164
|
+
};
|
|
165
|
+
return {
|
|
166
|
+
dust,
|
|
167
|
+
estimatedDuration: quote.expectedFillTime ?? 0,
|
|
168
|
+
fees: {
|
|
169
|
+
metaMask: metaMaskFee,
|
|
170
|
+
provider,
|
|
171
|
+
sourceNetwork,
|
|
172
|
+
targetNetwork,
|
|
173
|
+
},
|
|
174
|
+
original: {
|
|
175
|
+
...original,
|
|
176
|
+
metamask,
|
|
177
|
+
},
|
|
178
|
+
request,
|
|
179
|
+
sourceAmount,
|
|
180
|
+
targetAmount,
|
|
181
|
+
strategy: constants_1.TransactionPayStrategy.Across,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function getFiatRates(messenger, quote) {
|
|
185
|
+
const sourceFiatRate = (0, token_1.getTokenFiatRate)(messenger, quote.inputToken.address, (0, controller_utils_1.toHex)(quote.inputToken.chainId));
|
|
186
|
+
if (!sourceFiatRate) {
|
|
187
|
+
throw new Error('Source token fiat rate not found');
|
|
188
|
+
}
|
|
189
|
+
const targetFiatRate = (0, token_1.getTokenFiatRate)(messenger, quote.outputToken.address, (0, controller_utils_1.toHex)(quote.outputToken.chainId)) ?? sourceFiatRate;
|
|
190
|
+
const usdToFiatRate = new bignumber_js_1.BigNumber(sourceFiatRate.fiatRate).dividedBy(sourceFiatRate.usdRate);
|
|
191
|
+
return { sourceFiatRate, targetFiatRate, usdToFiatRate };
|
|
192
|
+
}
|
|
193
|
+
function calculateDustUsd(quote, request, targetFiatRate) {
|
|
194
|
+
const expectedOutputRaw = quote.expectedOutputAmount;
|
|
195
|
+
if (expectedOutputRaw === undefined) {
|
|
196
|
+
return new bignumber_js_1.BigNumber(0);
|
|
197
|
+
}
|
|
198
|
+
const expectedOutput = new bignumber_js_1.BigNumber(expectedOutputRaw);
|
|
199
|
+
const minimumOutput = new bignumber_js_1.BigNumber(quote.minOutputAmount ?? request.targetAmountMinimum ?? '0');
|
|
200
|
+
const dustRaw = expectedOutput.minus(minimumOutput).isNegative()
|
|
201
|
+
? new bignumber_js_1.BigNumber(0)
|
|
202
|
+
: expectedOutput.minus(minimumOutput);
|
|
203
|
+
const dustHuman = dustRaw.shiftedBy(-quote.outputToken.decimals);
|
|
204
|
+
return dustHuman.multipliedBy(targetFiatRate.usdRate);
|
|
205
|
+
}
|
|
206
|
+
function calculateProviderUsd(quote, inputAmountRaw, sourceFiatRate, targetFiatRate, expectedOutputRaw) {
|
|
207
|
+
const totalFeeUsd = quote.fees?.total?.amountUsd;
|
|
208
|
+
if (totalFeeUsd !== undefined) {
|
|
209
|
+
return new bignumber_js_1.BigNumber(totalFeeUsd).abs();
|
|
210
|
+
}
|
|
211
|
+
if (expectedOutputRaw === undefined) {
|
|
212
|
+
return new bignumber_js_1.BigNumber(0);
|
|
213
|
+
}
|
|
214
|
+
const expectedOutput = new bignumber_js_1.BigNumber(expectedOutputRaw);
|
|
215
|
+
if (expectedOutput.lte(0)) {
|
|
216
|
+
return new bignumber_js_1.BigNumber(0);
|
|
217
|
+
}
|
|
218
|
+
const inputAmountUsd = new bignumber_js_1.BigNumber(inputAmountRaw)
|
|
219
|
+
.shiftedBy(-quote.inputToken.decimals)
|
|
220
|
+
.multipliedBy(sourceFiatRate.usdRate);
|
|
221
|
+
const expectedOutputUsd = expectedOutput
|
|
222
|
+
.shiftedBy(-quote.outputToken.decimals)
|
|
223
|
+
.multipliedBy(targetFiatRate.usdRate);
|
|
224
|
+
const providerFeeUsd = inputAmountUsd.minus(expectedOutputUsd);
|
|
225
|
+
return providerFeeUsd.isNegative() ? new bignumber_js_1.BigNumber(0) : providerFeeUsd;
|
|
226
|
+
}
|
|
227
|
+
function getAmountFromTokenAmount({ amountRaw, decimals, fiatRate, }) {
|
|
228
|
+
const rawValue = new bignumber_js_1.BigNumber(amountRaw);
|
|
229
|
+
const raw = rawValue.toString(10);
|
|
230
|
+
const humanValue = rawValue.shiftedBy(-decimals);
|
|
231
|
+
const human = humanValue.toString(10);
|
|
232
|
+
const usd = humanValue.multipliedBy(fiatRate.usdRate).toString(10);
|
|
233
|
+
const fiat = humanValue.multipliedBy(fiatRate.fiatRate).toString(10);
|
|
234
|
+
return {
|
|
235
|
+
fiat,
|
|
236
|
+
human,
|
|
237
|
+
raw,
|
|
238
|
+
usd,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
async function calculateSourceNetworkCost(quote, messenger, request) {
|
|
242
|
+
const acrossFallbackGas = (0, feature_flags_1.getPayStrategiesConfig)(messenger).across.fallbackGas;
|
|
243
|
+
const { from } = request;
|
|
244
|
+
const approvalTxns = quote.approvalTxns ?? [];
|
|
245
|
+
const { swapTx } = quote;
|
|
246
|
+
const swapChainId = (0, controller_utils_1.toHex)(swapTx.chainId);
|
|
247
|
+
const approvalGasResults = await Promise.all(approvalTxns.map(async (approval) => {
|
|
248
|
+
const chainId = (0, controller_utils_1.toHex)(approval.chainId);
|
|
249
|
+
const gas = await (0, gas_1.estimateGasLimit)({
|
|
250
|
+
chainId,
|
|
251
|
+
data: approval.data,
|
|
252
|
+
fallbackGas: acrossFallbackGas,
|
|
253
|
+
from,
|
|
254
|
+
messenger,
|
|
255
|
+
to: approval.to,
|
|
256
|
+
value: approval.value ?? '0x0',
|
|
257
|
+
});
|
|
258
|
+
if (gas.usedFallback) {
|
|
259
|
+
log('Gas estimate failed, using fallback', {
|
|
260
|
+
error: gas.error,
|
|
261
|
+
transactionType: 'approval',
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
return { chainId, gas };
|
|
265
|
+
}));
|
|
266
|
+
const swapGasFromQuote = parseAcrossSwapGasLimit(swapTx.gas);
|
|
267
|
+
const swapGas = swapGasFromQuote === undefined
|
|
268
|
+
? await (0, gas_1.estimateGasLimit)({
|
|
269
|
+
chainId: swapChainId,
|
|
270
|
+
data: swapTx.data,
|
|
271
|
+
fallbackGas: acrossFallbackGas,
|
|
272
|
+
from,
|
|
273
|
+
messenger,
|
|
274
|
+
to: swapTx.to,
|
|
275
|
+
value: swapTx.value ?? '0x0',
|
|
276
|
+
})
|
|
277
|
+
: {
|
|
278
|
+
estimate: swapGasFromQuote,
|
|
279
|
+
max: swapGasFromQuote,
|
|
280
|
+
usedFallback: false,
|
|
281
|
+
};
|
|
282
|
+
if (swapGasFromQuote !== undefined) {
|
|
283
|
+
log('Using Across-provided swap gas limit', {
|
|
284
|
+
gas: swapGasFromQuote,
|
|
285
|
+
transactionType: 'swap',
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
else if (swapGas.usedFallback) {
|
|
289
|
+
log('Gas estimate failed, using fallback', {
|
|
290
|
+
error: swapGas.error,
|
|
291
|
+
transactionType: 'swap',
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
const estimate = (0, amounts_1.sumAmounts)([
|
|
295
|
+
...approvalGasResults.map(({ chainId, gas }) => (0, gas_1.calculateGasCost)({
|
|
296
|
+
chainId,
|
|
297
|
+
gas: gas.estimate,
|
|
298
|
+
messenger,
|
|
299
|
+
})),
|
|
300
|
+
(0, gas_1.calculateGasCost)({
|
|
301
|
+
chainId: swapChainId,
|
|
302
|
+
gas: swapGas.estimate,
|
|
303
|
+
maxFeePerGas: swapTx.maxFeePerGas,
|
|
304
|
+
maxPriorityFeePerGas: swapTx.maxPriorityFeePerGas,
|
|
305
|
+
messenger,
|
|
306
|
+
}),
|
|
307
|
+
]);
|
|
308
|
+
const max = (0, amounts_1.sumAmounts)([
|
|
309
|
+
...approvalGasResults.map(({ chainId, gas }) => (0, gas_1.calculateGasCost)({
|
|
310
|
+
chainId,
|
|
311
|
+
gas: gas.max,
|
|
312
|
+
isMax: true,
|
|
313
|
+
messenger,
|
|
314
|
+
})),
|
|
315
|
+
(0, gas_1.calculateGasCost)({
|
|
316
|
+
chainId: swapChainId,
|
|
317
|
+
gas: swapGas.max,
|
|
318
|
+
isMax: true,
|
|
319
|
+
maxFeePerGas: swapTx.maxFeePerGas,
|
|
320
|
+
maxPriorityFeePerGas: swapTx.maxPriorityFeePerGas,
|
|
321
|
+
messenger,
|
|
322
|
+
}),
|
|
323
|
+
]);
|
|
324
|
+
return {
|
|
325
|
+
sourceNetwork: {
|
|
326
|
+
estimate,
|
|
327
|
+
max,
|
|
328
|
+
},
|
|
329
|
+
gasLimits: {
|
|
330
|
+
approval: approvalGasResults.map(({ gas }) => ({
|
|
331
|
+
estimate: gas.estimate,
|
|
332
|
+
max: gas.max,
|
|
333
|
+
})),
|
|
334
|
+
swap: {
|
|
335
|
+
estimate: swapGas.estimate,
|
|
336
|
+
max: swapGas.max,
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
function parseAcrossSwapGasLimit(gas) {
|
|
342
|
+
if (!gas) {
|
|
343
|
+
return undefined;
|
|
344
|
+
}
|
|
345
|
+
const parsedGas = gas.startsWith('0x')
|
|
346
|
+
? new bignumber_js_1.BigNumber(gas.slice(2), 16)
|
|
347
|
+
: new bignumber_js_1.BigNumber(gas);
|
|
348
|
+
if (!parsedGas.isFinite() ||
|
|
349
|
+
parsedGas.isNaN() ||
|
|
350
|
+
!parsedGas.isInteger() ||
|
|
351
|
+
parsedGas.lte(0)) {
|
|
352
|
+
return undefined;
|
|
353
|
+
}
|
|
354
|
+
return parsedGas.toNumber();
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=across-quotes.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"across-quotes.cjs","sourceRoot":"","sources":["../../../src/strategy/across/across-quotes.ts"],"names":[],"mappings":"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","sourcesContent":["import { Interface } from '@ethersproject/abi';\nimport { successfulFetch, toHex } from '@metamask/controller-utils';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport type {\n AcrossActionRequestBody,\n AcrossGasLimits,\n AcrossQuote,\n AcrossSwapApprovalResponse,\n} from './types';\nimport { TransactionPayStrategy } from '../../constants';\nimport { projectLogger } from '../../logger';\nimport type {\n Amount,\n FiatRates,\n PayStrategyGetQuotesRequest,\n QuoteRequest,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../../types';\nimport { getFiatValueFromUsd, sumAmounts } from '../../utils/amounts';\nimport { getPayStrategiesConfig, getSlippage } from '../../utils/feature-flags';\nimport { calculateGasCost, estimateGasLimit } from '../../utils/gas';\nimport { getTokenFiatRate } from '../../utils/token';\nimport { TOKEN_TRANSFER_FOUR_BYTE } from '../relay/constants';\n\nconst log = createModuleLogger(projectLogger, 'across-strategy');\n\nconst TOKEN_TRANSFER_INTERFACE = new Interface([\n 'function transfer(address to, uint256 amount)',\n]);\n\nconst UNSUPPORTED_AUTHORIZATION_LIST_ERROR =\n 'Across does not support type-4/EIP-7702 authorization lists yet';\nconst UNSUPPORTED_DESTINATION_ERROR =\n 'Across only supports transfer-style destination flows at the moment';\n\ntype AcrossQuoteWithoutMetaMask = Omit<AcrossQuote, 'metamask'>;\n\n/**\n * Fetch Across quotes.\n *\n * @param request - Request object.\n * @returns Array of quotes.\n */\nexport async function getAcrossQuotes(\n request: PayStrategyGetQuotesRequest,\n): Promise<TransactionPayQuote<AcrossQuote>[]> {\n const { requests } = request;\n\n log('Fetching quotes', requests);\n\n try {\n const normalizedRequests = requests.filter(\n (singleRequest) =>\n singleRequest.isMaxAmount === true ||\n (singleRequest.targetAmountMinimum !== undefined &&\n singleRequest.targetAmountMinimum !== '0'),\n );\n\n if (normalizedRequests.length === 0) {\n return [];\n }\n\n if (request.transaction.txParams?.authorizationList?.length) {\n throw new Error(UNSUPPORTED_AUTHORIZATION_LIST_ERROR);\n }\n\n return await Promise.all(\n normalizedRequests.map((singleRequest) =>\n getSingleQuote(singleRequest, request),\n ),\n );\n } catch (error) {\n log('Error fetching quotes', { error });\n throw new Error(`Failed to fetch Across quotes: ${String(error)}`);\n }\n}\n\nasync function getSingleQuote(\n request: QuoteRequest,\n fullRequest: PayStrategyGetQuotesRequest,\n): Promise<TransactionPayQuote<AcrossQuote>> {\n const { messenger, transaction } = fullRequest;\n const {\n from,\n isMaxAmount,\n sourceChainId,\n sourceTokenAddress,\n sourceTokenAmount,\n targetAmountMinimum,\n targetChainId,\n targetTokenAddress,\n } = request;\n\n const config = getPayStrategiesConfig(messenger);\n const slippageDecimal = getSlippage(\n messenger,\n sourceChainId,\n sourceTokenAddress,\n );\n\n const amount = isMaxAmount ? sourceTokenAmount : targetAmountMinimum;\n const tradeType = isMaxAmount ? 'exactInput' : 'exactOutput';\n const recipient = getAcrossRecipient(transaction, request);\n const quote = await requestAcrossApproval({\n amount,\n apiBase: config.across.apiBase,\n depositor: from,\n destinationChainId: targetChainId,\n inputToken: sourceTokenAddress,\n originChainId: sourceChainId,\n outputToken: targetTokenAddress,\n recipient,\n slippage: slippageDecimal,\n tradeType,\n });\n\n const originalQuote: AcrossQuoteWithoutMetaMask = {\n quote,\n request: {\n amount,\n tradeType,\n },\n };\n\n return await normalizeQuote(originalQuote, request, fullRequest);\n}\n\ntype AcrossApprovalRequest = {\n amount: string;\n apiBase: string;\n depositor: Hex;\n destinationChainId: Hex;\n inputToken: Hex;\n originChainId: Hex;\n outputToken: Hex;\n recipient: Hex;\n slippage?: number;\n tradeType: 'exactInput' | 'exactOutput';\n};\n\nasync function requestAcrossApproval(\n request: AcrossApprovalRequest,\n): Promise<AcrossSwapApprovalResponse> {\n const {\n amount,\n apiBase,\n depositor,\n destinationChainId,\n inputToken,\n originChainId,\n outputToken,\n recipient,\n slippage,\n tradeType,\n } = request;\n\n const params = new URLSearchParams();\n params.set('tradeType', tradeType);\n params.set('amount', amount);\n params.set('inputToken', inputToken);\n params.set('outputToken', outputToken);\n params.set('originChainId', String(parseInt(originChainId, 16)));\n params.set('destinationChainId', String(parseInt(destinationChainId, 16)));\n params.set('depositor', depositor);\n params.set('recipient', recipient);\n\n if (slippage !== undefined) {\n params.set('slippage', String(slippage));\n }\n\n const body: AcrossActionRequestBody = { actions: [] };\n const url = `${apiBase}/swap/approval?${params.toString()}`;\n const options: RequestInit = {\n body: JSON.stringify(body),\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n };\n const response = await successfulFetch(url, options);\n\n return (await response.json()) as AcrossSwapApprovalResponse;\n}\n\nfunction getAcrossRecipient(\n transaction: TransactionMeta,\n request: QuoteRequest,\n): Hex {\n const { txParams } = transaction;\n const { from } = request;\n const transferData = getTransferData(transaction);\n\n if (transferData) {\n return getTransferRecipient(transferData);\n }\n\n const data = txParams?.data as Hex | undefined;\n const hasNoData = data === undefined || data === '0x';\n const nestedCalldata = getNestedCalldata(transaction);\n\n if (hasNoData && nestedCalldata.length === 0) {\n return from;\n }\n\n throw new Error(UNSUPPORTED_DESTINATION_ERROR);\n}\n\nfunction getTransferData(transaction: TransactionMeta): Hex | undefined {\n const { nestedTransactions, txParams } = transaction;\n\n const nestedTransferData = nestedTransactions?.find(\n (nestedTx: { data?: Hex }) =>\n nestedTx.data?.startsWith(TOKEN_TRANSFER_FOUR_BYTE),\n )?.data;\n\n const data = txParams?.data as Hex | undefined;\n const tokenTransferData = data?.startsWith(TOKEN_TRANSFER_FOUR_BYTE)\n ? data\n : undefined;\n\n return nestedTransferData ?? tokenTransferData;\n}\n\nfunction getNestedCalldata(transaction: TransactionMeta): Hex[] {\n return (transaction.nestedTransactions ?? [])\n .map((nestedTx: { data?: Hex }) => nestedTx.data)\n .filter(\n (data: Hex | undefined): data is Hex =>\n data !== undefined && data !== '0x',\n );\n}\n\nfunction getTransferRecipient(data: Hex): Hex {\n return TOKEN_TRANSFER_INTERFACE.decodeFunctionData(\n 'transfer',\n data,\n ).to.toLowerCase() as Hex;\n}\n\nasync function normalizeQuote(\n original: AcrossQuoteWithoutMetaMask,\n request: QuoteRequest,\n fullRequest: PayStrategyGetQuotesRequest,\n): Promise<TransactionPayQuote<AcrossQuote>> {\n const { messenger } = fullRequest;\n const { quote } = original;\n\n const { usdToFiatRate, sourceFiatRate, targetFiatRate } = getFiatRates(\n messenger,\n quote,\n );\n\n const dustUsd = calculateDustUsd(quote, request, targetFiatRate);\n const dust = getFiatValueFromUsd(dustUsd, usdToFiatRate);\n\n const { sourceNetwork, gasLimits } = await calculateSourceNetworkCost(\n quote,\n messenger,\n request,\n );\n\n const targetNetwork = getFiatValueFromUsd(new BigNumber(0), usdToFiatRate);\n\n const inputAmountRaw = quote.inputAmount ?? '0';\n const outputAmountRaw = new BigNumber(\n quote.expectedOutputAmount ??\n quote.minOutputAmount ??\n request.targetAmountMinimum ??\n '0',\n ).toString(10);\n\n const sourceAmount = getAmountFromTokenAmount({\n amountRaw: inputAmountRaw,\n decimals: quote.inputToken.decimals,\n fiatRate: sourceFiatRate,\n });\n\n const providerUsd = calculateProviderUsd(\n quote,\n inputAmountRaw,\n sourceFiatRate,\n targetFiatRate,\n quote.expectedOutputAmount,\n );\n const provider = getFiatValueFromUsd(providerUsd, usdToFiatRate);\n const metaMaskFee = getFiatValueFromUsd(\n new BigNumber(quote.fees?.app?.amountUsd ?? '0').abs(),\n usdToFiatRate,\n );\n\n const targetAmount = getAmountFromTokenAmount({\n amountRaw: outputAmountRaw,\n decimals: quote.outputToken.decimals,\n fiatRate: targetFiatRate,\n });\n\n const metamask = {\n gasLimits,\n };\n\n return {\n dust,\n estimatedDuration: quote.expectedFillTime ?? 0,\n fees: {\n metaMask: metaMaskFee,\n provider,\n sourceNetwork,\n targetNetwork,\n },\n original: {\n ...original,\n metamask,\n },\n request,\n sourceAmount,\n targetAmount,\n strategy: TransactionPayStrategy.Across,\n } as TransactionPayQuote<AcrossQuote>;\n}\n\nfunction getFiatRates(\n messenger: TransactionPayControllerMessenger,\n quote: AcrossSwapApprovalResponse,\n): {\n sourceFiatRate: FiatRates;\n targetFiatRate: FiatRates;\n usdToFiatRate: BigNumber;\n} {\n const sourceFiatRate = getTokenFiatRate(\n messenger,\n quote.inputToken.address,\n toHex(quote.inputToken.chainId),\n );\n\n if (!sourceFiatRate) {\n throw new Error('Source token fiat rate not found');\n }\n\n const targetFiatRate =\n getTokenFiatRate(\n messenger,\n quote.outputToken.address,\n toHex(quote.outputToken.chainId),\n ) ?? sourceFiatRate;\n\n const usdToFiatRate = new BigNumber(sourceFiatRate.fiatRate).dividedBy(\n sourceFiatRate.usdRate,\n );\n\n return { sourceFiatRate, targetFiatRate, usdToFiatRate };\n}\n\nfunction calculateDustUsd(\n quote: AcrossSwapApprovalResponse,\n request: QuoteRequest,\n targetFiatRate: FiatRates,\n): BigNumber {\n const expectedOutputRaw = quote.expectedOutputAmount;\n\n if (expectedOutputRaw === undefined) {\n return new BigNumber(0);\n }\n\n const expectedOutput = new BigNumber(expectedOutputRaw);\n const minimumOutput = new BigNumber(\n quote.minOutputAmount ?? request.targetAmountMinimum ?? '0',\n );\n\n const dustRaw = expectedOutput.minus(minimumOutput).isNegative()\n ? new BigNumber(0)\n : expectedOutput.minus(minimumOutput);\n const dustHuman = dustRaw.shiftedBy(-quote.outputToken.decimals);\n\n return dustHuman.multipliedBy(targetFiatRate.usdRate);\n}\n\nfunction calculateProviderUsd(\n quote: AcrossSwapApprovalResponse,\n inputAmountRaw: string,\n sourceFiatRate: FiatRates,\n targetFiatRate: FiatRates,\n expectedOutputRaw?: string,\n): BigNumber {\n const totalFeeUsd = quote.fees?.total?.amountUsd;\n\n if (totalFeeUsd !== undefined) {\n return new BigNumber(totalFeeUsd).abs();\n }\n\n if (expectedOutputRaw === undefined) {\n return new BigNumber(0);\n }\n\n const expectedOutput = new BigNumber(expectedOutputRaw);\n\n if (expectedOutput.lte(0)) {\n return new BigNumber(0);\n }\n\n const inputAmountUsd = new BigNumber(inputAmountRaw)\n .shiftedBy(-quote.inputToken.decimals)\n .multipliedBy(sourceFiatRate.usdRate);\n const expectedOutputUsd = expectedOutput\n .shiftedBy(-quote.outputToken.decimals)\n .multipliedBy(targetFiatRate.usdRate);\n const providerFeeUsd = inputAmountUsd.minus(expectedOutputUsd);\n\n return providerFeeUsd.isNegative() ? new BigNumber(0) : providerFeeUsd;\n}\n\nfunction getAmountFromTokenAmount({\n amountRaw,\n decimals,\n fiatRate,\n}: {\n amountRaw: string;\n decimals: number;\n fiatRate: FiatRates;\n}): Amount {\n const rawValue = new BigNumber(amountRaw);\n const raw = rawValue.toString(10);\n\n const humanValue = rawValue.shiftedBy(-decimals);\n const human = humanValue.toString(10);\n\n const usd = humanValue.multipliedBy(fiatRate.usdRate).toString(10);\n const fiat = humanValue.multipliedBy(fiatRate.fiatRate).toString(10);\n\n return {\n fiat,\n human,\n raw,\n usd,\n };\n}\n\nasync function calculateSourceNetworkCost(\n quote: AcrossSwapApprovalResponse,\n messenger: TransactionPayControllerMessenger,\n request: QuoteRequest,\n): Promise<{\n sourceNetwork: TransactionPayQuote<AcrossQuote>['fees']['sourceNetwork'];\n gasLimits: AcrossGasLimits;\n}> {\n const acrossFallbackGas =\n getPayStrategiesConfig(messenger).across.fallbackGas;\n const { from } = request;\n const approvalTxns = quote.approvalTxns ?? [];\n const { swapTx } = quote;\n const swapChainId = toHex(swapTx.chainId);\n\n const approvalGasResults = await Promise.all(\n approvalTxns.map(async (approval) => {\n const chainId = toHex(approval.chainId);\n const gas = await estimateGasLimit({\n chainId,\n data: approval.data,\n fallbackGas: acrossFallbackGas,\n from,\n messenger,\n to: approval.to,\n value: approval.value ?? '0x0',\n });\n\n if (gas.usedFallback) {\n log('Gas estimate failed, using fallback', {\n error: gas.error,\n transactionType: 'approval',\n });\n }\n\n return { chainId, gas };\n }),\n );\n\n const swapGasFromQuote = parseAcrossSwapGasLimit(swapTx.gas);\n const swapGas =\n swapGasFromQuote === undefined\n ? await estimateGasLimit({\n chainId: swapChainId,\n data: swapTx.data,\n fallbackGas: acrossFallbackGas,\n from,\n messenger,\n to: swapTx.to,\n value: swapTx.value ?? '0x0',\n })\n : {\n estimate: swapGasFromQuote,\n max: swapGasFromQuote,\n usedFallback: false,\n };\n\n if (swapGasFromQuote !== undefined) {\n log('Using Across-provided swap gas limit', {\n gas: swapGasFromQuote,\n transactionType: 'swap',\n });\n } else if (swapGas.usedFallback) {\n log('Gas estimate failed, using fallback', {\n error: swapGas.error,\n transactionType: 'swap',\n });\n }\n\n const estimate = sumAmounts([\n ...approvalGasResults.map(({ chainId, gas }) =>\n calculateGasCost({\n chainId,\n gas: gas.estimate,\n messenger,\n }),\n ),\n calculateGasCost({\n chainId: swapChainId,\n gas: swapGas.estimate,\n maxFeePerGas: swapTx.maxFeePerGas,\n maxPriorityFeePerGas: swapTx.maxPriorityFeePerGas,\n messenger,\n }),\n ]);\n\n const max = sumAmounts([\n ...approvalGasResults.map(({ chainId, gas }) =>\n calculateGasCost({\n chainId,\n gas: gas.max,\n isMax: true,\n messenger,\n }),\n ),\n calculateGasCost({\n chainId: swapChainId,\n gas: swapGas.max,\n isMax: true,\n maxFeePerGas: swapTx.maxFeePerGas,\n maxPriorityFeePerGas: swapTx.maxPriorityFeePerGas,\n messenger,\n }),\n ]);\n\n return {\n sourceNetwork: {\n estimate,\n max,\n },\n gasLimits: {\n approval: approvalGasResults.map(({ gas }) => ({\n estimate: gas.estimate,\n max: gas.max,\n })),\n swap: {\n estimate: swapGas.estimate,\n max: swapGas.max,\n },\n },\n };\n}\n\nfunction parseAcrossSwapGasLimit(gas?: string): number | undefined {\n if (!gas) {\n return undefined;\n }\n\n const parsedGas = gas.startsWith('0x')\n ? new BigNumber(gas.slice(2), 16)\n : new BigNumber(gas);\n\n if (\n !parsedGas.isFinite() ||\n parsedGas.isNaN() ||\n !parsedGas.isInteger() ||\n parsedGas.lte(0)\n ) {\n return undefined;\n }\n\n return parsedGas.toNumber();\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AcrossQuote } from "./types.cjs";
|
|
2
|
+
import type { PayStrategyGetQuotesRequest, TransactionPayQuote } from "../../types.cjs";
|
|
3
|
+
/**
|
|
4
|
+
* Fetch Across quotes.
|
|
5
|
+
*
|
|
6
|
+
* @param request - Request object.
|
|
7
|
+
* @returns Array of quotes.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getAcrossQuotes(request: PayStrategyGetQuotesRequest): Promise<TransactionPayQuote<AcrossQuote>[]>;
|
|
10
|
+
//# sourceMappingURL=across-quotes.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"across-quotes.d.cts","sourceRoot":"","sources":["../../../src/strategy/across/across-quotes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGV,WAAW,EAEZ,oBAAgB;AAGjB,OAAO,KAAK,EAGV,2BAA2B,EAG3B,mBAAmB,EACpB,wBAAoB;AAoBrB;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC,CA8B7C"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AcrossQuote } from "./types.mjs";
|
|
2
|
+
import type { PayStrategyGetQuotesRequest, TransactionPayQuote } from "../../types.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* Fetch Across quotes.
|
|
5
|
+
*
|
|
6
|
+
* @param request - Request object.
|
|
7
|
+
* @returns Array of quotes.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getAcrossQuotes(request: PayStrategyGetQuotesRequest): Promise<TransactionPayQuote<AcrossQuote>[]>;
|
|
10
|
+
//# sourceMappingURL=across-quotes.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"across-quotes.d.mts","sourceRoot":"","sources":["../../../src/strategy/across/across-quotes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGV,WAAW,EAEZ,oBAAgB;AAGjB,OAAO,KAAK,EAGV,2BAA2B,EAG3B,mBAAmB,EACpB,wBAAoB;AAoBrB;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC,CA8B7C"}
|