@metamask-previews/bridge-controller 13.0.0-preview-c555b24d → 13.0.0-preview-23d1c73f
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 +16 -0
- package/dist/bridge-controller.cjs +59 -4
- package/dist/bridge-controller.cjs.map +1 -1
- package/dist/bridge-controller.d.cts +2 -3
- package/dist/bridge-controller.d.cts.map +1 -1
- package/dist/bridge-controller.d.mts +2 -3
- package/dist/bridge-controller.d.mts.map +1 -1
- package/dist/bridge-controller.mjs +60 -5
- package/dist/bridge-controller.mjs.map +1 -1
- package/dist/constants/bridge.cjs +1 -0
- package/dist/constants/bridge.cjs.map +1 -1
- package/dist/constants/bridge.d.cts.map +1 -1
- package/dist/constants/bridge.d.mts.map +1 -1
- package/dist/constants/bridge.mjs +1 -0
- package/dist/constants/bridge.mjs.map +1 -1
- package/dist/index.cjs +13 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +10 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +10 -1
- package/dist/index.mjs.map +1 -1
- package/dist/selectors.cjs +224 -0
- package/dist/selectors.cjs.map +1 -0
- package/dist/selectors.d.cts +1506 -0
- package/dist/selectors.d.cts.map +1 -0
- package/dist/selectors.d.mts +1506 -0
- package/dist/selectors.d.mts.map +1 -0
- package/dist/selectors.mjs +220 -0
- package/dist/selectors.mjs.map +1 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +44 -14
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +44 -14
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/assets.cjs +30 -0
- package/dist/utils/assets.cjs.map +1 -0
- package/dist/utils/assets.d.cts +9 -0
- package/dist/utils/assets.d.cts.map +1 -0
- package/dist/utils/assets.d.mts +9 -0
- package/dist/utils/assets.d.mts.map +1 -0
- package/dist/utils/assets.mjs +25 -0
- package/dist/utils/assets.mjs.map +1 -0
- package/dist/utils/caip-formatters.cjs +25 -1
- package/dist/utils/caip-formatters.cjs.map +1 -1
- package/dist/utils/caip-formatters.d.cts +10 -0
- package/dist/utils/caip-formatters.d.cts.map +1 -1
- package/dist/utils/caip-formatters.d.mts +10 -0
- package/dist/utils/caip-formatters.d.mts.map +1 -1
- package/dist/utils/caip-formatters.mjs +25 -2
- package/dist/utils/caip-formatters.mjs.map +1 -1
- package/dist/utils/fetch.cjs +61 -1
- package/dist/utils/fetch.cjs.map +1 -1
- package/dist/utils/fetch.d.cts +21 -1
- package/dist/utils/fetch.d.cts.map +1 -1
- package/dist/utils/fetch.d.mts +21 -1
- package/dist/utils/fetch.d.mts.map +1 -1
- package/dist/utils/fetch.mjs +59 -0
- package/dist/utils/fetch.mjs.map +1 -1
- package/dist/utils/quote.cjs +177 -1
- package/dist/utils/quote.cjs.map +1 -1
- package/dist/utils/quote.d.cts +62 -1
- package/dist/utils/quote.d.cts.map +1 -1
- package/dist/utils/quote.d.mts +62 -1
- package/dist/utils/quote.d.mts.map +1 -1
- package/dist/utils/quote.mjs +164 -0
- package/dist/utils/quote.mjs.map +1 -1
- package/package.json +7 -3
package/dist/utils/quote.mjs
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
import { toHex, weiHexToGweiDec } from "@metamask/controller-utils";
|
2
|
+
import { BigNumber } from "bignumber.js";
|
3
|
+
import { isNativeAddress } from "./bridge.mjs";
|
1
4
|
export const isValidQuoteRequest = (partialRequest, requireAmount = true) => {
|
2
5
|
const stringFields = [
|
3
6
|
'srcTokenAddress',
|
@@ -30,4 +33,165 @@ export const isValidQuoteRequest = (partialRequest, requireAmount = true) => {
|
|
30
33
|
? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\d*$/u))
|
31
34
|
: true));
|
32
35
|
};
|
36
|
+
/**
|
37
|
+
* Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps
|
38
|
+
*
|
39
|
+
* @param quote - The quote to generate an identifier for
|
40
|
+
* @returns A pseudo-unique string that identifies the quote
|
41
|
+
*/
|
42
|
+
export const getQuoteIdentifier = (quote) => `${quote.bridgeId}-${quote.bridges[0]}-${quote.steps.length}`;
|
43
|
+
const calcTokenAmount = (value, decimals) => {
|
44
|
+
const divisor = new BigNumber(10).pow(decimals ?? 0);
|
45
|
+
return new BigNumber(value).div(divisor);
|
46
|
+
};
|
47
|
+
export const calcSolanaTotalNetworkFee = (bridgeQuote, { exchangeRate, usdExchangeRate }) => {
|
48
|
+
const { solanaFeesInLamports } = bridgeQuote;
|
49
|
+
const solanaFeeInNative = calcTokenAmount(solanaFeesInLamports ?? '0', 9);
|
50
|
+
return {
|
51
|
+
amount: solanaFeeInNative.toString(),
|
52
|
+
valueInCurrency: exchangeRate
|
53
|
+
? solanaFeeInNative.times(exchangeRate).toString()
|
54
|
+
: null,
|
55
|
+
usd: usdExchangeRate
|
56
|
+
? solanaFeeInNative.times(usdExchangeRate).toString()
|
57
|
+
: null,
|
58
|
+
};
|
59
|
+
};
|
60
|
+
export const calcToAmount = ({ destTokenAmount, destAsset }, { exchangeRate, usdExchangeRate }) => {
|
61
|
+
const normalizedDestAmount = calcTokenAmount(destTokenAmount, destAsset.decimals);
|
62
|
+
return {
|
63
|
+
amount: normalizedDestAmount.toString(),
|
64
|
+
valueInCurrency: exchangeRate
|
65
|
+
? normalizedDestAmount.times(exchangeRate).toString()
|
66
|
+
: null,
|
67
|
+
usd: usdExchangeRate
|
68
|
+
? normalizedDestAmount.times(usdExchangeRate).toString()
|
69
|
+
: null,
|
70
|
+
};
|
71
|
+
};
|
72
|
+
export const calcSentAmount = ({ srcTokenAmount, srcAsset, feeData }, { exchangeRate, usdExchangeRate }) => {
|
73
|
+
const normalizedSentAmount = calcTokenAmount(new BigNumber(srcTokenAmount).plus(feeData.metabridge.amount), srcAsset.decimals);
|
74
|
+
return {
|
75
|
+
amount: normalizedSentAmount.toString(),
|
76
|
+
valueInCurrency: exchangeRate
|
77
|
+
? normalizedSentAmount.times(exchangeRate).toString()
|
78
|
+
: null,
|
79
|
+
usd: usdExchangeRate
|
80
|
+
? normalizedSentAmount.times(usdExchangeRate).toString()
|
81
|
+
: null,
|
82
|
+
};
|
83
|
+
};
|
84
|
+
export const calcRelayerFee = (bridgeQuote, { exchangeRate, usdExchangeRate }) => {
|
85
|
+
const { quote: { srcAsset, srcTokenAmount, feeData }, trade, } = bridgeQuote;
|
86
|
+
const relayerFeeInNative = calcTokenAmount(new BigNumber(trade.value || '0x0', 16).minus(isNativeAddress(srcAsset.address)
|
87
|
+
? new BigNumber(srcTokenAmount).plus(feeData.metabridge.amount)
|
88
|
+
: 0), 18);
|
89
|
+
return {
|
90
|
+
amount: relayerFeeInNative,
|
91
|
+
valueInCurrency: exchangeRate
|
92
|
+
? relayerFeeInNative.times(exchangeRate)
|
93
|
+
: null,
|
94
|
+
usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,
|
95
|
+
};
|
96
|
+
};
|
97
|
+
const calcTotalGasFee = ({ bridgeQuote, feePerGasInDecGwei, priorityFeePerGasInDecGwei, nativeToDisplayCurrencyExchangeRate, nativeToUsdExchangeRate, }) => {
|
98
|
+
const { approval, trade, l1GasFeesInHexWei } = bridgeQuote;
|
99
|
+
const totalGasLimitInDec = new BigNumber(trade.gasLimit?.toString() ?? '0').plus(approval?.gasLimit?.toString() ?? '0');
|
100
|
+
const totalFeePerGasInDecGwei = new BigNumber(feePerGasInDecGwei).plus(priorityFeePerGasInDecGwei);
|
101
|
+
const l1GasFeesInDecGWei = weiHexToGweiDec(toHex(l1GasFeesInHexWei ?? '0'));
|
102
|
+
const gasFeesInDecGwei = totalGasLimitInDec
|
103
|
+
.times(totalFeePerGasInDecGwei)
|
104
|
+
.plus(l1GasFeesInDecGWei);
|
105
|
+
const gasFeesInDecEth = gasFeesInDecGwei.times(new BigNumber(10).pow(-9));
|
106
|
+
const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate
|
107
|
+
? gasFeesInDecEth.times(nativeToDisplayCurrencyExchangeRate.toString())
|
108
|
+
: null;
|
109
|
+
const gasFeesInUSD = nativeToUsdExchangeRate
|
110
|
+
? gasFeesInDecEth.times(nativeToUsdExchangeRate.toString())
|
111
|
+
: null;
|
112
|
+
return {
|
113
|
+
amount: gasFeesInDecEth.toString(),
|
114
|
+
valueInCurrency: gasFeesInDisplayCurrency?.toString() ?? null,
|
115
|
+
usd: gasFeesInUSD?.toString() ?? null,
|
116
|
+
};
|
117
|
+
};
|
118
|
+
export const calcEstimatedAndMaxTotalGasFee = ({ bridgeQuote, estimatedBaseFeeInDecGwei, maxFeePerGasInDecGwei, maxPriorityFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }) => {
|
119
|
+
const { amount, valueInCurrency, usd } = calcTotalGasFee({
|
120
|
+
bridgeQuote,
|
121
|
+
feePerGasInDecGwei: estimatedBaseFeeInDecGwei,
|
122
|
+
priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,
|
123
|
+
nativeToDisplayCurrencyExchangeRate,
|
124
|
+
nativeToUsdExchangeRate,
|
125
|
+
});
|
126
|
+
const { amount: amountMax, valueInCurrency: valueInCurrencyMax, usd: usdMax, } = calcTotalGasFee({
|
127
|
+
bridgeQuote,
|
128
|
+
feePerGasInDecGwei: maxFeePerGasInDecGwei,
|
129
|
+
priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,
|
130
|
+
nativeToDisplayCurrencyExchangeRate,
|
131
|
+
nativeToUsdExchangeRate,
|
132
|
+
});
|
133
|
+
return {
|
134
|
+
amount,
|
135
|
+
amountMax,
|
136
|
+
valueInCurrency,
|
137
|
+
valueInCurrencyMax,
|
138
|
+
usd,
|
139
|
+
usdMax,
|
140
|
+
};
|
141
|
+
};
|
142
|
+
export const calcTotalEstimatedNetworkFee = (gasFee, relayerFee) => {
|
143
|
+
return {
|
144
|
+
amount: new BigNumber(gasFee.amount).plus(relayerFee.amount).toString(),
|
145
|
+
valueInCurrency: gasFee.valueInCurrency
|
146
|
+
? new BigNumber(gasFee.valueInCurrency)
|
147
|
+
.plus(relayerFee.valueInCurrency || '0')
|
148
|
+
.toString()
|
149
|
+
: null,
|
150
|
+
usd: gasFee.usd
|
151
|
+
? new BigNumber(gasFee.usd).plus(relayerFee.usd || '0').toString()
|
152
|
+
: null,
|
153
|
+
};
|
154
|
+
};
|
155
|
+
export const calcTotalMaxNetworkFee = (gasFee, relayerFee) => {
|
156
|
+
return {
|
157
|
+
amount: new BigNumber(gasFee.amountMax).plus(relayerFee.amount).toString(),
|
158
|
+
valueInCurrency: gasFee.valueInCurrencyMax
|
159
|
+
? new BigNumber(gasFee.valueInCurrencyMax)
|
160
|
+
.plus(relayerFee.valueInCurrency || '0')
|
161
|
+
.toString()
|
162
|
+
: null,
|
163
|
+
usd: gasFee.usdMax
|
164
|
+
? new BigNumber(gasFee.usdMax).plus(relayerFee.usd || '0').toString()
|
165
|
+
: null,
|
166
|
+
};
|
167
|
+
};
|
168
|
+
export const calcAdjustedReturn = (toTokenAmount, totalEstimatedNetworkFee) => ({
|
169
|
+
valueInCurrency: toTokenAmount.valueInCurrency && totalEstimatedNetworkFee.valueInCurrency
|
170
|
+
? new BigNumber(toTokenAmount.valueInCurrency)
|
171
|
+
.minus(totalEstimatedNetworkFee.valueInCurrency)
|
172
|
+
.toString()
|
173
|
+
: null,
|
174
|
+
usd: toTokenAmount.usd && totalEstimatedNetworkFee.usd
|
175
|
+
? new BigNumber(toTokenAmount.usd)
|
176
|
+
.minus(totalEstimatedNetworkFee.usd)
|
177
|
+
.toString()
|
178
|
+
: null,
|
179
|
+
});
|
180
|
+
export const calcSwapRate = (sentAmount, destTokenAmount) => new BigNumber(destTokenAmount).div(sentAmount).toString();
|
181
|
+
export const calcCost = (adjustedReturn, sentAmount) => ({
|
182
|
+
valueInCurrency: adjustedReturn.valueInCurrency && sentAmount.valueInCurrency
|
183
|
+
? new BigNumber(sentAmount.valueInCurrency)
|
184
|
+
.minus(adjustedReturn.valueInCurrency)
|
185
|
+
.toString()
|
186
|
+
: null,
|
187
|
+
usd: adjustedReturn.usd && sentAmount.usd
|
188
|
+
? new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toString()
|
189
|
+
: null,
|
190
|
+
});
|
191
|
+
export const formatEtaInMinutes = (estimatedProcessingTimeInSeconds) => {
|
192
|
+
if (estimatedProcessingTimeInSeconds < 60) {
|
193
|
+
return `< 1`;
|
194
|
+
}
|
195
|
+
return (estimatedProcessingTimeInSeconds / 60).toFixed();
|
196
|
+
};
|
33
197
|
//# sourceMappingURL=quote.mjs.map
|
package/dist/utils/quote.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"quote.mjs","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,cAA4C,EAC5C,aAAa,GAAG,IAAI,EACmB,EAAE;IACzC,MAAM,YAAY,GAAG;QACnB,iBAAiB;QACjB,kBAAkB;QAClB,YAAY;QACZ,aAAa;QACb,eAAe;KAChB,CAAC;IACF,IAAI,aAAa,EAAE;QACjB,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACrC;IACD,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,oDAAoD;IACpD,IAAI,cAAc,CAAC,QAAQ,KAAK,SAAS,EAAE;QACzC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC/B;IAED,OAAO,CACL,YAAY,CAAC,KAAK,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,IAAI,cAAc;QACvB,OAAO,cAAc,CAAC,KAAoC,CAAC;YACzD,QAAQ;QACV,cAAc,CAAC,KAAoC,CAAC,KAAK,SAAS;QAClE,cAAc,CAAC,KAAoC,CAAC,KAAK,EAAE;QAC3D,cAAc,CAAC,KAAoC,CAAC,KAAK,IAAI,CAChE;QACD,YAAY,CAAC,KAAK,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,IAAI,cAAc;YACvB,OAAO,cAAc,CAAC,KAAoC,CAAC;gBACzD,QAAQ;YACV,cAAc,CAAC,KAAoC,CAAC,KAAK,SAAS;YAClE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAoC,CAAC,CAAC,CAAC;YACpE,cAAc,CAAC,KAAoC,CAAC,KAAK,IAAI,CAChE;QACD,CAAC,aAAa;YACZ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACrE,CAAC,CAAC,IAAI,CAAC,CACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { GenericQuoteRequest } from '../types';\n\nexport const isValidQuoteRequest = (\n partialRequest: Partial<GenericQuoteRequest>,\n requireAmount = true,\n): partialRequest is GenericQuoteRequest => {\n const stringFields = [\n 'srcTokenAddress',\n 'destTokenAddress',\n 'srcChainId',\n 'destChainId',\n 'walletAddress',\n ];\n if (requireAmount) {\n stringFields.push('srcTokenAmount');\n }\n const numberFields = [];\n // if slippage is defined, require it to be a number\n if (partialRequest.slippage !== undefined) {\n numberFields.push('slippage');\n }\n\n return (\n stringFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'string' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n partialRequest[field as keyof typeof partialRequest] !== '' &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n numberFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'number' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n !isNaN(Number(partialRequest[field as keyof typeof partialRequest])) &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n (requireAmount\n ? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\\d*$/u))\n : true)\n );\n};\n"]}
|
1
|
+
{"version":3,"file":"quote.mjs","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import { toHex, weiHexToGweiDec } from '@metamask/controller-utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { isNativeAddress } from './bridge';\nimport type {\n ExchangeRate,\n GenericQuoteRequest,\n L1GasFees,\n Quote,\n QuoteResponse,\n SolanaFees,\n} from '../types';\n\nexport const isValidQuoteRequest = (\n partialRequest: Partial<GenericQuoteRequest>,\n requireAmount = true,\n): partialRequest is GenericQuoteRequest => {\n const stringFields = [\n 'srcTokenAddress',\n 'destTokenAddress',\n 'srcChainId',\n 'destChainId',\n 'walletAddress',\n ];\n if (requireAmount) {\n stringFields.push('srcTokenAmount');\n }\n const numberFields = [];\n // if slippage is defined, require it to be a number\n if (partialRequest.slippage !== undefined) {\n numberFields.push('slippage');\n }\n\n return (\n stringFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'string' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n partialRequest[field as keyof typeof partialRequest] !== '' &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n numberFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'number' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n !isNaN(Number(partialRequest[field as keyof typeof partialRequest])) &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n (requireAmount\n ? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\\d*$/u))\n : true)\n );\n};\n\n/**\n * Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps\n *\n * @param quote - The quote to generate an identifier for\n * @returns A pseudo-unique string that identifies the quote\n */\nexport const getQuoteIdentifier = (quote: QuoteResponse['quote']) =>\n `${quote.bridgeId}-${quote.bridges[0]}-${quote.steps.length}`;\n\nconst calcTokenAmount = (value: string | BigNumber, decimals: number) => {\n const divisor = new BigNumber(10).pow(decimals ?? 0);\n return new BigNumber(value).div(divisor);\n};\n\nexport const calcSolanaTotalNetworkFee = (\n bridgeQuote: QuoteResponse & SolanaFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { solanaFeesInLamports } = bridgeQuote;\n const solanaFeeInNative = calcTokenAmount(solanaFeesInLamports ?? '0', 9);\n return {\n amount: solanaFeeInNative.toString(),\n valueInCurrency: exchangeRate\n ? solanaFeeInNative.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? solanaFeeInNative.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcToAmount = (\n { destTokenAmount, destAsset }: Quote,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedDestAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedDestAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData }: Quote,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedSentAmount = calcTokenAmount(\n new BigNumber(srcTokenAmount).plus(feeData.metabridge.amount),\n srcAsset.decimals,\n );\n return {\n amount: normalizedSentAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedSentAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedSentAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcRelayerFee = (\n bridgeQuote: QuoteResponse,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const {\n quote: { srcAsset, srcTokenAmount, feeData },\n trade,\n } = bridgeQuote;\n const relayerFeeInNative = calcTokenAmount(\n new BigNumber(trade.value || '0x0', 16).minus(\n isNativeAddress(srcAsset.address)\n ? new BigNumber(srcTokenAmount).plus(feeData.metabridge.amount)\n : 0,\n ),\n 18,\n );\n return {\n amount: relayerFeeInNative,\n valueInCurrency: exchangeRate\n ? relayerFeeInNative.times(exchangeRate)\n : null,\n usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,\n };\n};\n\nconst calcTotalGasFee = ({\n bridgeQuote,\n feePerGasInDecGwei,\n priorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse & L1GasFees;\n feePerGasInDecGwei: string;\n priorityFeePerGasInDecGwei: string;\n nativeToDisplayCurrencyExchangeRate?: string;\n nativeToUsdExchangeRate?: string;\n}) => {\n const { approval, trade, l1GasFeesInHexWei } = bridgeQuote;\n\n const totalGasLimitInDec = new BigNumber(\n trade.gasLimit?.toString() ?? '0',\n ).plus(approval?.gasLimit?.toString() ?? '0');\n\n const totalFeePerGasInDecGwei = new BigNumber(feePerGasInDecGwei).plus(\n priorityFeePerGasInDecGwei,\n );\n const l1GasFeesInDecGWei = weiHexToGweiDec(toHex(l1GasFeesInHexWei ?? '0'));\n const gasFeesInDecGwei = totalGasLimitInDec\n .times(totalFeePerGasInDecGwei)\n .plus(l1GasFeesInDecGWei);\n const gasFeesInDecEth = gasFeesInDecGwei.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth.times(nativeToDisplayCurrencyExchangeRate.toString())\n : null;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth.times(nativeToUsdExchangeRate.toString())\n : null;\n\n return {\n amount: gasFeesInDecEth.toString(),\n valueInCurrency: gasFeesInDisplayCurrency?.toString() ?? null,\n usd: gasFeesInUSD?.toString() ?? null,\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote,\n estimatedBaseFeeInDecGwei,\n maxFeePerGasInDecGwei,\n maxPriorityFeePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse & L1GasFees;\n estimatedBaseFeeInDecGwei: string;\n maxFeePerGasInDecGwei: string;\n maxPriorityFeePerGasInDecGwei: string;\n} & ExchangeRate) => {\n const { amount, valueInCurrency, usd } = calcTotalGasFee({\n bridgeQuote,\n feePerGasInDecGwei: estimatedBaseFeeInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n const {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n } = calcTotalGasFee({\n bridgeQuote,\n feePerGasInDecGwei: maxFeePerGasInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n return {\n amount,\n amountMax,\n valueInCurrency,\n valueInCurrencyMax,\n usd,\n usdMax,\n };\n};\n\nexport const calcTotalEstimatedNetworkFee = (\n gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFee.amount).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.valueInCurrency\n ? new BigNumber(gasFee.valueInCurrency)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFee.usd\n ? new BigNumber(gasFee.usd).plus(relayerFee.usd || '0').toString()\n : null,\n };\n};\n\nexport const calcTotalMaxNetworkFee = (\n gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFee.amountMax).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.valueInCurrencyMax\n ? new BigNumber(gasFee.valueInCurrencyMax)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFee.usdMax\n ? new BigNumber(gasFee.usdMax).plus(relayerFee.usd || '0').toString()\n : null,\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: ReturnType<typeof calcToAmount>,\n totalEstimatedNetworkFee: ReturnType<typeof calcTotalEstimatedNetworkFee>,\n) => ({\n valueInCurrency:\n toTokenAmount.valueInCurrency && totalEstimatedNetworkFee.valueInCurrency\n ? new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toString()\n : null,\n usd:\n toTokenAmount.usd && totalEstimatedNetworkFee.usd\n ? new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toString()\n : null,\n});\n\nexport const calcSwapRate = (sentAmount: string, destTokenAmount: string) =>\n new BigNumber(destTokenAmount).div(sentAmount).toString();\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency && sentAmount.valueInCurrency\n ? new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toString()\n : null,\n usd:\n adjustedReturn.usd && sentAmount.usd\n ? new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toString()\n : null,\n});\n\nexport const formatEtaInMinutes = (\n estimatedProcessingTimeInSeconds: number,\n) => {\n if (estimatedProcessingTimeInSeconds < 60) {\n return `< 1`;\n }\n return (estimatedProcessingTimeInSeconds / 60).toFixed();\n};\n"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@metamask-previews/bridge-controller",
|
3
|
-
"version": "13.0.0-preview-
|
3
|
+
"version": "13.0.0-preview-23d1c73f",
|
4
4
|
"description": "Manages bridge-related quote fetching functionality for MetaMask",
|
5
5
|
"keywords": [
|
6
6
|
"MetaMask",
|
@@ -54,15 +54,18 @@
|
|
54
54
|
"@ethersproject/providers": "^5.7.0",
|
55
55
|
"@metamask/base-controller": "^8.0.0",
|
56
56
|
"@metamask/controller-utils": "^11.7.0",
|
57
|
+
"@metamask/gas-fee-controller": "^23.0.0",
|
57
58
|
"@metamask/keyring-api": "^17.4.0",
|
58
59
|
"@metamask/metamask-eth-abis": "^3.1.1",
|
59
60
|
"@metamask/multichain-network-controller": "^0.3.0",
|
60
61
|
"@metamask/polling-controller": "^13.0.0",
|
61
|
-
"@metamask/
|
62
|
-
"
|
62
|
+
"@metamask/utils": "^11.2.0",
|
63
|
+
"bignumber.js": "^9.1.2",
|
64
|
+
"reselect": "^5.1.1"
|
63
65
|
},
|
64
66
|
"devDependencies": {
|
65
67
|
"@metamask/accounts-controller": "^27.0.0",
|
68
|
+
"@metamask/assets-controllers": "^56.0.0",
|
66
69
|
"@metamask/auto-changelog": "^3.4.4",
|
67
70
|
"@metamask/eth-json-rpc-provider": "^4.1.8",
|
68
71
|
"@metamask/network-controller": "^23.2.0",
|
@@ -82,6 +85,7 @@
|
|
82
85
|
},
|
83
86
|
"peerDependencies": {
|
84
87
|
"@metamask/accounts-controller": "^27.0.0",
|
88
|
+
"@metamask/assets-controllers": "^56.0.0",
|
85
89
|
"@metamask/network-controller": "^23.0.0",
|
86
90
|
"@metamask/snaps-controllers": "^9.19.0",
|
87
91
|
"@metamask/transaction-controller": "^54.0.0"
|