@shapeshiftoss/swapper 20.4.0 → 20.5.0
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/dist/cjs/.tsbuildinfo +1 -1
- package/dist/cjs/constants.js +6 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/swappers/AcrossSwapper/utils/getAcrossStepData.js +7 -15
- package/dist/cjs/swappers/AvnuSwapper/endpoints.js +17 -12
- package/dist/cjs/swappers/BebopSwapper/utils/getBebopStepData.js +17 -22
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.test.js +1 -0
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.js +3 -4
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.test.js +2 -2
- package/dist/cjs/swappers/CetusSwapper/endpoints.js +2 -3
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getCetusStepData.js +13 -8
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getCetusTradeContext.js +1 -2
- package/dist/cjs/swappers/CetusSwapper/utils/constants.d.ts +0 -1
- package/dist/cjs/swappers/CetusSwapper/utils/constants.js +1 -2
- package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +3 -3
- package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +6 -17
- package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +0 -1
- package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +9 -16
- package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +0 -3
- package/dist/cjs/swappers/FyndSwapper/utils/getFyndStepData.js +5 -7
- package/dist/cjs/swappers/KyberSwapper/KyberSwapper.d.ts +2 -0
- package/dist/cjs/swappers/KyberSwapper/KyberSwapper.js +5 -0
- package/dist/cjs/swappers/KyberSwapper/endpoints.d.ts +2 -0
- package/dist/cjs/swappers/KyberSwapper/endpoints.js +14 -0
- package/dist/cjs/swappers/KyberSwapper/index.d.ts +2 -0
- package/dist/cjs/swappers/KyberSwapper/index.js +7 -0
- package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.d.ts +4 -0
- package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.js +64 -0
- package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeRate.d.ts +4 -0
- package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeRate.js +31 -0
- package/dist/cjs/swappers/KyberSwapper/types.d.ts +62 -0
- package/dist/cjs/swappers/KyberSwapper/types.js +2 -0
- package/dist/cjs/swappers/KyberSwapper/utils/constants.d.ts +21 -0
- package/dist/cjs/swappers/KyberSwapper/utils/constants.js +24 -0
- package/dist/cjs/swappers/KyberSwapper/utils/fetchFromKyber.d.ts +23 -0
- package/dist/cjs/swappers/KyberSwapper/utils/fetchFromKyber.js +38 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.d.ts +27 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.js +47 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.test.d.ts +1 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.test.js +92 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberTradeContext.d.ts +20 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberTradeContext.js +63 -0
- package/dist/cjs/swappers/KyberSwapper/utils/helpers.d.ts +27 -0
- package/dist/cjs/swappers/KyberSwapper/utils/helpers.js +172 -0
- package/dist/cjs/swappers/KyberSwapper/utils/helpers.test.d.ts +1 -0
- package/dist/cjs/swappers/KyberSwapper/utils/helpers.test.js +110 -0
- package/dist/cjs/swappers/KyberSwapper/utils/kyberService.d.ts +5 -0
- package/dist/cjs/swappers/KyberSwapper/utils/kyberService.js +9 -0
- package/dist/cjs/swappers/NearIntentsSwapper/NearIntentsSwapper.js +1 -0
- package/dist/cjs/swappers/NearIntentsSwapper/endpoints.js +13 -14
- package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +1 -1
- package/dist/cjs/swappers/NearIntentsSwapper/types.d.ts +4 -4
- package/dist/cjs/swappers/NearIntentsSwapper/types.js +2 -0
- package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +28 -0
- package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.js +2 -2
- package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.js +36 -55
- package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.test.js +2 -2
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.js +7 -15
- package/dist/cjs/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.js +2 -2
- package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +3 -1
- package/dist/cjs/swappers/ZrxSwapper/utils/getZrxStepData.d.ts +3 -1
- package/dist/cjs/swappers/ZrxSwapper/utils/getZrxStepData.js +29 -10
- package/dist/cjs/types.d.ts +36 -8
- package/dist/cjs/types.js +1 -0
- package/dist/cjs/utils/aptos/constants.d.ts +2 -0
- package/dist/cjs/utils/aptos/constants.js +7 -0
- package/dist/cjs/utils/aptos/getAptosTransactionFees.d.ts +2 -0
- package/dist/cjs/utils/aptos/getAptosTransactionFees.js +13 -0
- package/dist/cjs/utils/aptos/getUnsignedAptosTransaction.d.ts +2 -0
- package/dist/cjs/utils/aptos/getUnsignedAptosTransaction.js +16 -0
- package/dist/cjs/utils/aptos/index.d.ts +3 -0
- package/dist/cjs/utils/aptos/index.js +19 -0
- package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.d.ts +19 -6
- package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.js +45 -35
- package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
- package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.js +103 -0
- package/dist/cjs/utils/evm/stateOverride.d.ts +3 -0
- package/dist/cjs/utils/evm/stateOverride.js +10 -4
- package/dist/cjs/utils/helpers.js +1 -0
- package/dist/cjs/utils/helpers.test.js +1 -0
- package/dist/cjs/utils/index.d.ts +3 -2
- package/dist/cjs/utils/index.js +11 -27
- package/dist/esm/.tsbuildinfo +1 -1
- package/dist/esm/constants.js +6 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/swappers/AcrossSwapper/utils/getAcrossStepData.js +8 -16
- package/dist/esm/swappers/AvnuSwapper/endpoints.js +18 -13
- package/dist/esm/swappers/BebopSwapper/utils/getBebopStepData.js +18 -23
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.test.js +1 -0
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.js +4 -5
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.test.js +2 -2
- package/dist/esm/swappers/CetusSwapper/endpoints.js +3 -4
- package/dist/esm/swappers/CetusSwapper/swapperApi/getCetusStepData.js +13 -8
- package/dist/esm/swappers/CetusSwapper/swapperApi/getCetusTradeContext.js +2 -3
- package/dist/esm/swappers/CetusSwapper/utils/constants.d.ts +0 -1
- package/dist/esm/swappers/CetusSwapper/utils/constants.js +0 -1
- package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +3 -3
- package/dist/esm/swappers/CetusSwapper/utils/helpers.js +4 -15
- package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +0 -1
- package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +9 -16
- package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +0 -3
- package/dist/esm/swappers/FyndSwapper/utils/getFyndStepData.js +6 -8
- package/dist/esm/swappers/KyberSwapper/KyberSwapper.d.ts +2 -0
- package/dist/esm/swappers/KyberSwapper/KyberSwapper.js +2 -0
- package/dist/esm/swappers/KyberSwapper/endpoints.d.ts +2 -0
- package/dist/esm/swappers/KyberSwapper/endpoints.js +11 -0
- package/dist/esm/swappers/KyberSwapper/index.d.ts +2 -0
- package/dist/esm/swappers/KyberSwapper/index.js +2 -0
- package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.d.ts +4 -0
- package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.js +60 -0
- package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeRate.d.ts +4 -0
- package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeRate.js +27 -0
- package/dist/esm/swappers/KyberSwapper/types.d.ts +62 -0
- package/dist/esm/swappers/KyberSwapper/types.js +1 -0
- package/dist/esm/swappers/KyberSwapper/utils/constants.d.ts +21 -0
- package/dist/esm/swappers/KyberSwapper/utils/constants.js +21 -0
- package/dist/esm/swappers/KyberSwapper/utils/fetchFromKyber.d.ts +23 -0
- package/dist/esm/swappers/KyberSwapper/utils/fetchFromKyber.js +33 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.d.ts +27 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.js +43 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.test.d.ts +1 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.test.js +90 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberTradeContext.d.ts +20 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberTradeContext.js +59 -0
- package/dist/esm/swappers/KyberSwapper/utils/helpers.d.ts +27 -0
- package/dist/esm/swappers/KyberSwapper/utils/helpers.js +158 -0
- package/dist/esm/swappers/KyberSwapper/utils/helpers.test.d.ts +1 -0
- package/dist/esm/swappers/KyberSwapper/utils/helpers.test.js +108 -0
- package/dist/esm/swappers/KyberSwapper/utils/kyberService.d.ts +5 -0
- package/dist/esm/swappers/KyberSwapper/utils/kyberService.js +3 -0
- package/dist/esm/swappers/NearIntentsSwapper/NearIntentsSwapper.js +2 -1
- package/dist/esm/swappers/NearIntentsSwapper/endpoints.js +13 -14
- package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +1 -1
- package/dist/esm/swappers/NearIntentsSwapper/types.d.ts +4 -4
- package/dist/esm/swappers/NearIntentsSwapper/types.js +2 -0
- package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +29 -1
- package/dist/esm/swappers/NearIntentsSwapper/utils/helpers.js +2 -2
- package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.js +34 -53
- package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.test.js +2 -2
- package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.js +9 -17
- package/dist/esm/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.js +2 -2
- package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +3 -1
- package/dist/esm/swappers/ZrxSwapper/utils/getZrxStepData.d.ts +3 -1
- package/dist/esm/swappers/ZrxSwapper/utils/getZrxStepData.js +31 -12
- package/dist/esm/types.d.ts +36 -8
- package/dist/esm/types.js +1 -0
- package/dist/esm/utils/aptos/constants.d.ts +2 -0
- package/dist/esm/utils/aptos/constants.js +4 -0
- package/dist/esm/utils/aptos/getAptosTransactionFees.d.ts +2 -0
- package/dist/esm/utils/aptos/getAptosTransactionFees.js +9 -0
- package/dist/esm/utils/aptos/getUnsignedAptosTransaction.d.ts +2 -0
- package/dist/esm/utils/aptos/getUnsignedAptosTransaction.js +12 -0
- package/dist/esm/utils/aptos/index.d.ts +3 -0
- package/dist/esm/utils/aptos/index.js +3 -0
- package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.d.ts +19 -6
- package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.js +42 -35
- package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
- package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.js +101 -0
- package/dist/esm/utils/evm/stateOverride.d.ts +3 -0
- package/dist/esm/utils/evm/stateOverride.js +8 -3
- package/dist/esm/utils/helpers.js +2 -1
- package/dist/esm/utils/helpers.test.js +1 -0
- package/dist/esm/utils/index.d.ts +3 -2
- package/dist/esm/utils/index.js +9 -26
- package/package.json +10 -11
|
@@ -37,7 +37,6 @@ async function getRelayStepData({ data, sellAsset, sellAmountCryptoBaseUnit, spe
|
|
|
37
37
|
to,
|
|
38
38
|
value,
|
|
39
39
|
data: callData,
|
|
40
|
-
gasLimit: (0, utils_1.bnOrZero)(relayGasLimit).gt(0) ? relayGasLimit : undefined,
|
|
41
40
|
};
|
|
42
41
|
const adapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
|
|
43
42
|
const stateOverride = {
|
|
@@ -46,20 +45,12 @@ async function getRelayStepData({ data, sellAsset, sellAmountCryptoBaseUnit, spe
|
|
|
46
45
|
spenderAddress,
|
|
47
46
|
};
|
|
48
47
|
if (type === 'rate') {
|
|
49
|
-
const networkFeeCryptoBaseUnit = await (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
supportsEIP1559,
|
|
56
|
-
stateOverride,
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
return fallbackNetworkFeeCryptoBaseUnit;
|
|
61
|
-
}
|
|
62
|
-
})();
|
|
48
|
+
const networkFeeCryptoBaseUnit = await (0, evm_1.getEvmRateNetworkFeeCryptoBaseUnit)({
|
|
49
|
+
adapter,
|
|
50
|
+
supportsEIP1559,
|
|
51
|
+
providerGasLimit: relayGasLimit,
|
|
52
|
+
simulation: { transactionData, from, stateOverride },
|
|
53
|
+
}).catch(() => fallbackNetworkFeeCryptoBaseUnit);
|
|
63
54
|
const stepData = { networkFeeCryptoBaseUnit };
|
|
64
55
|
return (0, monads_1.Ok)(stepData);
|
|
65
56
|
}
|
|
@@ -71,6 +62,7 @@ async function getRelayStepData({ data, sellAsset, sellAmountCryptoBaseUnit, spe
|
|
|
71
62
|
from,
|
|
72
63
|
supportsEIP1559,
|
|
73
64
|
stateOverride,
|
|
65
|
+
providerGasLimit: relayGasLimit,
|
|
74
66
|
});
|
|
75
67
|
const stepData = { transactionData, networkFeeCryptoBaseUnit };
|
|
76
68
|
return (0, monads_1.Ok)(stepData);
|
|
@@ -81,7 +81,7 @@ const expectedQuoteResponse = [
|
|
|
81
81
|
asset: assets_1.ETH,
|
|
82
82
|
},
|
|
83
83
|
},
|
|
84
|
-
networkFeeCryptoBaseUnit: '
|
|
84
|
+
networkFeeCryptoBaseUnit: '480000',
|
|
85
85
|
},
|
|
86
86
|
rate: '143505.61489594191334131621',
|
|
87
87
|
source: types_1.SwapperName.Thorchain,
|
|
@@ -132,7 +132,7 @@ const expectedQuoteResponse = [
|
|
|
132
132
|
asset: assets_1.ETH,
|
|
133
133
|
},
|
|
134
134
|
},
|
|
135
|
-
networkFeeCryptoBaseUnit: '
|
|
135
|
+
networkFeeCryptoBaseUnit: '480000',
|
|
136
136
|
},
|
|
137
137
|
rate: '157530.57158846677816130059',
|
|
138
138
|
source: `${types_1.SwapperName.Thorchain} • Streaming`,
|
|
@@ -42,7 +42,7 @@ const getZrxTradeQuote = async (input, deps) => {
|
|
|
42
42
|
});
|
|
43
43
|
if (maybeZrxQuoteResponse.isErr())
|
|
44
44
|
return (0, monads_1.Err)(maybeZrxQuoteResponse.unwrapErr());
|
|
45
|
-
const { sellAmount, buyAmount, fees, permit2, transaction, route } = maybeZrxQuoteResponse.unwrap();
|
|
45
|
+
const { sellAmount, buyAmount, fees, permit2, transaction, totalNetworkFee, route } = maybeZrxQuoteResponse.unwrap();
|
|
46
46
|
const permit2Eip712 = permit2?.eip712;
|
|
47
47
|
const permit2Deadline = permit2Eip712 ? Number(permit2Eip712.message.deadline) : undefined;
|
|
48
48
|
if (permit2Deadline !== undefined &&
|
|
@@ -93,6 +93,8 @@ const getZrxTradeQuote = async (input, deps) => {
|
|
|
93
93
|
type: 'quote',
|
|
94
94
|
input,
|
|
95
95
|
transaction,
|
|
96
|
+
totalNetworkFee,
|
|
97
|
+
sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
96
98
|
permit2Eip712,
|
|
97
99
|
from: receiveAddress,
|
|
98
100
|
});
|
|
@@ -5,10 +5,12 @@ export type GetZrxStepDataArgs = StepDataArgs<unknown, {
|
|
|
5
5
|
totalNetworkFee: string | null;
|
|
6
6
|
}, {
|
|
7
7
|
transaction: ZrxQuoteResponse['transaction'];
|
|
8
|
+
totalNetworkFee: string | null;
|
|
9
|
+
sellAmountCryptoBaseUnit: string;
|
|
8
10
|
permit2Eip712: NonNullable<ZrxQuoteResponse['permit2']>['eip712'] | undefined;
|
|
9
11
|
}>;
|
|
10
12
|
type ZrxRateStepData = {
|
|
11
|
-
networkFeeCryptoBaseUnit: string;
|
|
13
|
+
networkFeeCryptoBaseUnit: string | undefined;
|
|
12
14
|
};
|
|
13
15
|
type ZrxQuoteStepData = {
|
|
14
16
|
transactionData: TxBuildData;
|
|
@@ -7,21 +7,22 @@ const monads_1 = require("@sniptt/monads");
|
|
|
7
7
|
const utils_2 = require("../../../utils");
|
|
8
8
|
const evm_1 = require("../../../utils/evm");
|
|
9
9
|
async function getZrxStepData(args) {
|
|
10
|
+
// 0x's total includes the L1 data fee on OP-stack chains, which pricing their gas limit would drop
|
|
10
11
|
if (args.type === 'rate') {
|
|
11
12
|
const stepData = {
|
|
12
|
-
networkFeeCryptoBaseUnit:
|
|
13
|
+
networkFeeCryptoBaseUnit: args.totalNetworkFee ?? undefined,
|
|
13
14
|
};
|
|
14
15
|
return (0, monads_1.Ok)(stepData);
|
|
15
16
|
}
|
|
16
|
-
const { sellAsset, transaction, permit2Eip712, from, input, deps } = args;
|
|
17
|
+
const { sellAsset, sellAmountCryptoBaseUnit, transaction, totalNetworkFee, permit2Eip712, from, input, deps, } = args;
|
|
18
|
+
const adapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
|
|
19
|
+
const supportsEIP1559 = 'supportsEIP1559' in input ? input.supportsEIP1559 : false;
|
|
17
20
|
const transactionData = {
|
|
18
21
|
type: 'evm',
|
|
19
22
|
chainId: Number((0, caip_1.fromChainId)(sellAsset.chainId).chainReference),
|
|
20
23
|
to: transaction.to,
|
|
21
24
|
data: transaction.data,
|
|
22
25
|
value: transaction.value,
|
|
23
|
-
// 0x simulate with a valid permit2 signature, which can't be reproduced before signing, so trust their gas limit
|
|
24
|
-
gasLimit: transaction.gas || undefined,
|
|
25
26
|
...(permit2Eip712 && {
|
|
26
27
|
signatureRequired: {
|
|
27
28
|
type: 'permit2',
|
|
@@ -30,12 +31,30 @@ async function getZrxStepData(args) {
|
|
|
30
31
|
}),
|
|
31
32
|
};
|
|
32
33
|
try {
|
|
33
|
-
const networkFeeCryptoBaseUnit = await (
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
const networkFeeCryptoBaseUnit = await (async () => {
|
|
35
|
+
// Permit2 calldata needs the signature, so it can't be simulated before signing
|
|
36
|
+
if (permit2Eip712) {
|
|
37
|
+
if (!(0, evm_1.isPositiveGasLimit)(transaction.gas))
|
|
38
|
+
throw new Error('missing 0x gas limit');
|
|
39
|
+
transactionData.gasLimit = (0, evm_1.bufferGasLimit)(transaction.gas);
|
|
40
|
+
// 0x's total is their gas cost plus the L1 data fee on OP-stack chains
|
|
41
|
+
const l1FeeCryptoBaseUnit = utils_1.BigNumber.max((0, utils_1.bnOrZero)(totalNetworkFee).minus((0, utils_1.bnOrZero)(transaction.gas).times(transaction.gasPrice)), 0);
|
|
42
|
+
const networkFeeCryptoBaseUnit = await (0, evm_1.getEvmNetworkFeeCryptoBaseUnit)({
|
|
43
|
+
adapter,
|
|
44
|
+
supportsEIP1559,
|
|
45
|
+
gasLimit: transactionData.gasLimit,
|
|
46
|
+
});
|
|
47
|
+
return (0, utils_1.bnOrZero)(networkFeeCryptoBaseUnit).plus(l1FeeCryptoBaseUnit).toFixed(0);
|
|
48
|
+
}
|
|
49
|
+
return (0, evm_1.getEvmNetworkFeeCryptoBaseUnit)({
|
|
50
|
+
adapter,
|
|
51
|
+
transactionData,
|
|
52
|
+
from,
|
|
53
|
+
supportsEIP1559,
|
|
54
|
+
stateOverride: { sellAsset, sellAmountCryptoBaseUnit },
|
|
55
|
+
providerGasLimit: transaction.gas,
|
|
56
|
+
});
|
|
57
|
+
})();
|
|
39
58
|
const stepData = { transactionData, networkFeeCryptoBaseUnit };
|
|
40
59
|
return (0, monads_1.Ok)(stepData);
|
|
41
60
|
}
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AccountId, AssetId, ChainId } from '@shapeshiftoss/caip';
|
|
2
|
-
import type { ChainAdapter, CosmosSdkChainAdapter, EvmChainAdapter, near, SignTx, solana, starknet, sui, ton, tron, UtxoChainAdapter } from '@shapeshiftoss/chain-adapters';
|
|
3
|
-
import type { HDWallet, SolanaSignTx, StarknetSignTx, SuiSignTx } from '@shapeshiftoss/hdwallet-core';
|
|
4
|
-
import type { Asset, AssetsByIdPartial, CosmosSdkChainId, EvmChainId, KnownChainIds, NearChainId, OrderCreation, PartialRecord, SolanaChainId, StarknetChainId, SuiChainId, TonChainId, TronChainId, UtxoAccountType, UtxoChainId } from '@shapeshiftoss/types';
|
|
2
|
+
import type { aptos, ChainAdapter, CosmosSdkChainAdapter, EvmChainAdapter, near, SignTx, solana, starknet, sui, ton, tron, UtxoChainAdapter } from '@shapeshiftoss/chain-adapters';
|
|
3
|
+
import type { AptosSignTx, HDWallet, SolanaSignTx, StarknetSignTx, SuiSignTx } from '@shapeshiftoss/hdwallet-core';
|
|
4
|
+
import type { AptosChainId, Asset, AssetsByIdPartial, CosmosSdkChainId, EvmChainId, KnownChainIds, NearChainId, OrderCreation, PartialRecord, SolanaChainId, StarknetChainId, SuiChainId, TonChainId, TronChainId, UtxoAccountType, UtxoChainId } from '@shapeshiftoss/types';
|
|
5
5
|
import type { TxStatus } from '@shapeshiftoss/unchained-client';
|
|
6
6
|
import type { Result } from '@sniptt/monads';
|
|
7
7
|
import type { TransactionInstruction } from '@solana/web3.js';
|
|
@@ -44,6 +44,7 @@ export type SwapperConfig = {
|
|
|
44
44
|
VITE_PORTALS_BASE_URL: string;
|
|
45
45
|
VITE_ZRX_BASE_URL: string;
|
|
46
46
|
VITE_FYND_BASE_URL: string;
|
|
47
|
+
VITE_KYBER_BASE_URL: string;
|
|
47
48
|
VITE_CHAINFLIP_API_KEY: string;
|
|
48
49
|
VITE_CHAINFLIP_API_URL: string;
|
|
49
50
|
VITE_FEATURE_CHAINFLIP_SWAP_DCA: boolean;
|
|
@@ -80,7 +81,8 @@ export declare enum SwapperName {
|
|
|
80
81
|
Debridge = "deBridge",
|
|
81
82
|
BobGateway = "BOB Gateway",
|
|
82
83
|
Symbiosis = "Symbiosis",
|
|
83
|
-
Fynd = "Fynd"
|
|
84
|
+
Fynd = "Fynd",
|
|
85
|
+
KyberSwap = "KyberSwap"
|
|
84
86
|
}
|
|
85
87
|
export type SwapSource = SwapperName | `${SwapperName} • ${string}`;
|
|
86
88
|
export type SwapErrorRight = {
|
|
@@ -182,6 +184,12 @@ export type GetTonTradeQuoteInput = CommonTradeQuoteInput & {
|
|
|
182
184
|
export type GetTonTradeRateInput = CommonTradeRateInput & {
|
|
183
185
|
chainId: TonChainId;
|
|
184
186
|
};
|
|
187
|
+
export type GetAptosTradeQuoteInput = CommonTradeQuoteInput & {
|
|
188
|
+
chainId: AptosChainId;
|
|
189
|
+
};
|
|
190
|
+
export type GetAptosTradeRateInput = CommonTradeRateInput & {
|
|
191
|
+
chainId: AptosChainId;
|
|
192
|
+
};
|
|
185
193
|
export type GetSolanaTradeQuoteInput = CommonTradeQuoteInput & {
|
|
186
194
|
chainId: SolanaChainId;
|
|
187
195
|
};
|
|
@@ -213,8 +221,8 @@ export type GetUtxoTradeRateInput = CommonTradeRateInput & {
|
|
|
213
221
|
xpub: string | undefined;
|
|
214
222
|
};
|
|
215
223
|
export type GetUtxoTradeQuoteInput = GetUtxoTradeQuoteWithWallet;
|
|
216
|
-
export type GetTradeQuoteInput = GetUtxoTradeQuoteInput | GetEvmTradeQuoteInput | GetCosmosSdkTradeQuoteInput | GetTronTradeQuoteInput | GetNearTradeQuoteInput | GetTonTradeQuoteInput | GetSolanaTradeQuoteInput | GetStarknetTradeQuoteInput | GetSuiTradeQuoteInput;
|
|
217
|
-
export type GetTradeRateInput = GetEvmTradeRateInput | GetCosmosSdkTradeRateInput | GetUtxoTradeRateInput | GetTronTradeRateInput | GetNearTradeRateInput | GetTonTradeRateInput | GetSolanaTradeRateInput | GetStarknetTradeRateInput | GetSuiTradeRateInput;
|
|
224
|
+
export type GetTradeQuoteInput = GetUtxoTradeQuoteInput | GetEvmTradeQuoteInput | GetCosmosSdkTradeQuoteInput | GetTronTradeQuoteInput | GetNearTradeQuoteInput | GetTonTradeQuoteInput | GetSolanaTradeQuoteInput | GetStarknetTradeQuoteInput | GetSuiTradeQuoteInput | GetAptosTradeQuoteInput;
|
|
225
|
+
export type GetTradeRateInput = GetEvmTradeRateInput | GetCosmosSdkTradeRateInput | GetUtxoTradeRateInput | GetTronTradeRateInput | GetNearTradeRateInput | GetTonTradeRateInput | GetSolanaTradeRateInput | GetStarknetTradeRateInput | GetSuiTradeRateInput | GetAptosTradeRateInput;
|
|
218
226
|
export type WithExactBuyAmount<T extends {
|
|
219
227
|
sellAmountIncludingProtocolFeesCryptoBaseUnit: string;
|
|
220
228
|
}> = T extends unknown ? Omit<T, 'sellAmountIncludingProtocolFeesCryptoBaseUnit'> & {
|
|
@@ -269,12 +277,15 @@ export type StarknetSwapperDeps = {
|
|
|
269
277
|
export type TonSwapperDeps = {
|
|
270
278
|
assertGetTonChainAdapter: (chainId: ChainId) => ton.ChainAdapter;
|
|
271
279
|
};
|
|
280
|
+
export type AptosSwapperDeps = {
|
|
281
|
+
assertGetAptosChainAdapter: (chainId: ChainId) => aptos.ChainAdapter;
|
|
282
|
+
};
|
|
272
283
|
export type SwapperDeps = {
|
|
273
284
|
assetsById: AssetsByIdPartial;
|
|
274
285
|
config: SwapperConfig;
|
|
275
286
|
mixPanel: Mixpanel | undefined;
|
|
276
287
|
assertGetChainAdapter: (chainId: ChainId) => ChainAdapter<KnownChainIds>;
|
|
277
|
-
} & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps;
|
|
288
|
+
} & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps & AptosSwapperDeps;
|
|
278
289
|
export type AffiliateFee = {
|
|
279
290
|
assetId: AssetId;
|
|
280
291
|
amountCryptoBaseUnit: string;
|
|
@@ -328,6 +339,11 @@ export type TxBuildData = {
|
|
|
328
339
|
value: string;
|
|
329
340
|
data?: string;
|
|
330
341
|
memo?: string;
|
|
342
|
+
} | {
|
|
343
|
+
type: 'aptos';
|
|
344
|
+
payload: string;
|
|
345
|
+
gasUnitPrice: string;
|
|
346
|
+
maxGasAmount: string;
|
|
331
347
|
} | {
|
|
332
348
|
type: 'cowswap';
|
|
333
349
|
chainId: ChainId;
|
|
@@ -515,6 +531,9 @@ export type StarknetTransactionExecutionProps = {
|
|
|
515
531
|
export type TonTransactionExecutionProps = {
|
|
516
532
|
signAndBroadcastTransaction: (txToSign: ton.TonSignTx) => Promise<string>;
|
|
517
533
|
};
|
|
534
|
+
export type AptosTransactionExecutionProps = {
|
|
535
|
+
signAndBroadcastTransaction: (txToSign: AptosSignTx) => Promise<string>;
|
|
536
|
+
};
|
|
518
537
|
type EvmAccountMetadata = {
|
|
519
538
|
from: string;
|
|
520
539
|
};
|
|
@@ -532,6 +551,7 @@ type NearAccountMetadata = {
|
|
|
532
551
|
};
|
|
533
552
|
type StarknetAccountMetadata = {
|
|
534
553
|
from: string;
|
|
554
|
+
callsOnly?: boolean;
|
|
535
555
|
};
|
|
536
556
|
type UtxoAccountMetadata = {
|
|
537
557
|
senderAddress: string;
|
|
@@ -561,6 +581,10 @@ type TonAccountMetadata = {
|
|
|
561
581
|
from: string;
|
|
562
582
|
};
|
|
563
583
|
export type GetUnsignedTonTransactionArgs = CommonGetUnsignedTransactionArgs & TonAccountMetadata & TonSwapperDeps;
|
|
584
|
+
type AptosAccountMetadata = {
|
|
585
|
+
from: string;
|
|
586
|
+
};
|
|
587
|
+
export type GetUnsignedAptosTransactionArgs = CommonGetUnsignedTransactionArgs & AptosAccountMetadata & AptosSwapperDeps;
|
|
564
588
|
export type GetUnsignedEvmMessageArgs = CommonGetUnsignedTransactionArgs & EvmAccountMetadata & Omit<EvmSwapperDeps, 'fetchIsSmartContractAddressQuery'>;
|
|
565
589
|
export type GetUnsignedSolanaMessageArgs = CommonGetUnsignedTransactionArgs;
|
|
566
590
|
export type GetUnsignedUtxoTransactionArgs = CommonGetUnsignedTransactionArgs & UtxoAccountMetadata & UtxoSwapperDeps;
|
|
@@ -572,7 +596,7 @@ export type CheckTradeStatusInput = {
|
|
|
572
596
|
stepIndex: SupportedTradeQuoteStepIndex;
|
|
573
597
|
config: SwapperConfig;
|
|
574
598
|
swap: Swap | undefined;
|
|
575
|
-
} & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps;
|
|
599
|
+
} & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps & AptosSwapperDeps;
|
|
576
600
|
export type TradeStatus = {
|
|
577
601
|
status: TxStatus;
|
|
578
602
|
buyTxHash: string | undefined;
|
|
@@ -598,6 +622,7 @@ export type Swapper = {
|
|
|
598
622
|
executeNearTransaction?: (txToSign: near.NearSignTx, callbacks: NearTransactionExecutionProps) => Promise<string>;
|
|
599
623
|
executeStarknetTransaction?: (txToSign: StarknetSignTx, callbacks: StarknetTransactionExecutionProps) => Promise<string>;
|
|
600
624
|
executeTonTransaction?: (txToSign: ton.TonSignTx, callbacks: TonTransactionExecutionProps) => Promise<string>;
|
|
625
|
+
executeAptosTransaction?: (txToSign: AptosSignTx, callbacks: AptosTransactionExecutionProps) => Promise<string>;
|
|
601
626
|
};
|
|
602
627
|
export type SwapperApi = {
|
|
603
628
|
checkTradeStatus: (input: CheckTradeStatusInput) => Promise<TradeStatus>;
|
|
@@ -616,6 +641,7 @@ export type SwapperApi = {
|
|
|
616
641
|
getUnsignedNearTransaction?: (input: GetUnsignedNearTransactionArgs) => Promise<near.NearSignTx>;
|
|
617
642
|
getUnsignedStarknetTransaction?: (input: GetUnsignedStarknetTransactionArgs) => Promise<StarknetSignTx>;
|
|
618
643
|
getUnsignedTonTransaction?: (input: GetUnsignedTonTransactionArgs) => Promise<ton.TonSignTx>;
|
|
644
|
+
getUnsignedAptosTransaction?: (input: GetUnsignedAptosTransactionArgs) => Promise<AptosSignTx>;
|
|
619
645
|
getEvmTransactionFees?: (input: GetUnsignedEvmTransactionArgs) => Promise<string>;
|
|
620
646
|
getSolanaTransactionFees?: (input: GetUnsignedSolanaTransactionArgs) => Promise<string>;
|
|
621
647
|
getSuiTransactionFees?: (input: GetUnsignedSuiTransactionArgs) => Promise<string>;
|
|
@@ -625,6 +651,7 @@ export type SwapperApi = {
|
|
|
625
651
|
getNearTransactionFees?: (input: GetUnsignedNearTransactionArgs) => Promise<string>;
|
|
626
652
|
getStarknetTransactionFees?: (input: GetUnsignedStarknetTransactionArgs) => Promise<string>;
|
|
627
653
|
getTonTransactionFees?: (input: GetUnsignedTonTransactionArgs) => Promise<string>;
|
|
654
|
+
getAptosTransactionFees?: (input: GetUnsignedAptosTransactionArgs) => Promise<string>;
|
|
628
655
|
};
|
|
629
656
|
export type QuoteResult = Result<TradeQuote[], SwapErrorRight> & {
|
|
630
657
|
swapperName: SwapperName;
|
|
@@ -653,6 +680,7 @@ export type SuiTransactionExecutionInput = CommonTradeExecutionInput & SuiTransa
|
|
|
653
680
|
export type NearTransactionExecutionInput = CommonTradeExecutionInput & NearTransactionExecutionProps & NearAccountMetadata;
|
|
654
681
|
export type StarknetTransactionExecutionInput = CommonTradeExecutionInput & StarknetTransactionExecutionProps & StarknetAccountMetadata;
|
|
655
682
|
export type TonTransactionExecutionInput = CommonTradeExecutionInput & TonTransactionExecutionProps & TonAccountMetadata;
|
|
683
|
+
export type AptosTransactionExecutionInput = CommonTradeExecutionInput & AptosTransactionExecutionProps & AptosAccountMetadata;
|
|
656
684
|
export declare enum TradeExecutionEvent {
|
|
657
685
|
SellTxHash = "sellTxHash",
|
|
658
686
|
Status = "status",
|
package/dist/cjs/types.js
CHANGED
|
@@ -24,6 +24,7 @@ var SwapperName;
|
|
|
24
24
|
SwapperName["BobGateway"] = "BOB Gateway";
|
|
25
25
|
SwapperName["Symbiosis"] = "Symbiosis";
|
|
26
26
|
SwapperName["Fynd"] = "Fynd";
|
|
27
|
+
SwapperName["KyberSwap"] = "KyberSwap";
|
|
27
28
|
})(SwapperName || (exports.SwapperName = SwapperName = {}));
|
|
28
29
|
var TradeQuoteError;
|
|
29
30
|
(function (TradeQuoteError) {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.APTOS_RATE_SIMULATION_VALUE = exports.APTOS_PLACEHOLDER_ADDRESS = void 0;
|
|
4
|
+
// The aptos framework account usable as a sender stand-in for walletless rates
|
|
5
|
+
exports.APTOS_PLACEHOLDER_ADDRESS = '0x1';
|
|
6
|
+
// Rates only price the transfer, so the sender doesn't need to hold the sell amount
|
|
7
|
+
exports.APTOS_RATE_SIMULATION_VALUE = '1';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAptosTransactionFees = void 0;
|
|
4
|
+
const utils_1 = require("../../utils");
|
|
5
|
+
const getAptosTransactionFees = ({ tradeQuote, stepIndex, }) => {
|
|
6
|
+
if (!(0, utils_1.isExecutableTradeQuote)(tradeQuote))
|
|
7
|
+
throw new Error('Unable to execute a trade rate quote');
|
|
8
|
+
const step = (0, utils_1.getExecutableTradeStep)(tradeQuote, stepIndex);
|
|
9
|
+
if (!step.feeData.networkFeeCryptoBaseUnit)
|
|
10
|
+
throw new Error('Missing network fee in quote');
|
|
11
|
+
return Promise.resolve(step.feeData.networkFeeCryptoBaseUnit);
|
|
12
|
+
};
|
|
13
|
+
exports.getAptosTransactionFees = getAptosTransactionFees;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { GetUnsignedAptosTransactionArgs } from '../../types';
|
|
2
|
+
export declare const getUnsignedAptosTransaction: ({ stepIndex, tradeQuote, from, assertGetAptosChainAdapter, }: GetUnsignedAptosTransactionArgs) => Promise<import("@shapeshiftoss/hdwallet-core").AptosSignTx>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUnsignedAptosTransaction = void 0;
|
|
4
|
+
const utils_1 = require("../../utils");
|
|
5
|
+
const getUnsignedAptosTransaction = ({ stepIndex, tradeQuote, from, assertGetAptosChainAdapter, }) => {
|
|
6
|
+
if (!(0, utils_1.isExecutableTradeQuote)(tradeQuote))
|
|
7
|
+
throw new Error('Unable to execute a trade rate');
|
|
8
|
+
const step = (0, utils_1.getExecutableTradeStep)(tradeQuote, stepIndex);
|
|
9
|
+
const { accountNumber, sellAsset, transactionData } = step;
|
|
10
|
+
if (transactionData?.type !== 'aptos')
|
|
11
|
+
throw new Error('Missing aptos transactionData');
|
|
12
|
+
const adapter = assertGetAptosChainAdapter(sellAsset.chainId);
|
|
13
|
+
const { payload, gasUnitPrice, maxGasAmount } = transactionData;
|
|
14
|
+
return adapter.buildCustomApiTx({ from, accountNumber, payload, gasUnitPrice, maxGasAmount });
|
|
15
|
+
};
|
|
16
|
+
exports.getUnsignedAptosTransaction = getUnsignedAptosTransaction;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./constants"), exports);
|
|
18
|
+
__exportStar(require("./getAptosTransactionFees"), exports);
|
|
19
|
+
__exportStar(require("./getUnsignedAptosTransaction"), exports);
|
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
import type { EvmChainAdapter } from '@shapeshiftoss/chain-adapters';
|
|
2
2
|
import type { Asset } from '@shapeshiftoss/types';
|
|
3
3
|
import type { TxBuildData } from '../../types';
|
|
4
|
-
|
|
4
|
+
export declare const EVM_GAS_LIMIT_BUFFER = 1.2;
|
|
5
|
+
export declare const bufferGasLimit: (gasLimit: string) => string;
|
|
6
|
+
export declare const isPositiveGasLimit: (gasLimit: string | null | undefined) => gasLimit is string;
|
|
7
|
+
type EvmFeeArgs = {
|
|
5
8
|
adapter: EvmChainAdapter;
|
|
6
9
|
supportsEIP1559: boolean;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
} | {
|
|
10
|
+
};
|
|
11
|
+
type EvmSimulationArgs = {
|
|
10
12
|
transactionData: Extract<TxBuildData, {
|
|
11
13
|
type: 'evm';
|
|
12
14
|
}>;
|
|
13
15
|
from: string;
|
|
14
|
-
gasLimitBuffer?: number;
|
|
15
16
|
stateOverride?: {
|
|
16
17
|
sellAsset: Asset;
|
|
17
18
|
sellAmountCryptoBaseUnit: string;
|
|
18
19
|
spenderAddress?: string;
|
|
19
20
|
};
|
|
20
|
-
}
|
|
21
|
+
};
|
|
22
|
+
type FixedGasLimitArgs = {
|
|
23
|
+
gasLimit: string;
|
|
24
|
+
};
|
|
25
|
+
type SimulatedGasLimitArgs = EvmSimulationArgs & {
|
|
26
|
+
providerGasLimit?: string | null;
|
|
27
|
+
};
|
|
28
|
+
type GetEvmNetworkFeeCryptoBaseUnitArgs = EvmFeeArgs & (FixedGasLimitArgs | SimulatedGasLimitArgs);
|
|
21
29
|
export declare const getEvmNetworkFeeCryptoBaseUnit: (args: GetEvmNetworkFeeCryptoBaseUnitArgs) => Promise<string>;
|
|
30
|
+
type GetEvmRateNetworkFeeCryptoBaseUnitArgs = EvmFeeArgs & {
|
|
31
|
+
providerGasLimit: string | null | undefined;
|
|
32
|
+
simulation?: EvmSimulationArgs;
|
|
33
|
+
};
|
|
34
|
+
export declare const getEvmRateNetworkFeeCryptoBaseUnit: ({ providerGasLimit, simulation, ...feeArgs }: GetEvmRateNetworkFeeCryptoBaseUnitArgs) => Promise<string>;
|
|
22
35
|
export {};
|
|
@@ -1,52 +1,62 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getEvmNetworkFeeCryptoBaseUnit = void 0;
|
|
3
|
+
exports.getEvmRateNetworkFeeCryptoBaseUnit = exports.getEvmNetworkFeeCryptoBaseUnit = exports.isPositiveGasLimit = exports.bufferGasLimit = exports.EVM_GAS_LIMIT_BUFFER = void 0;
|
|
4
4
|
const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
|
|
5
5
|
const utils_1 = require("@shapeshiftoss/utils");
|
|
6
6
|
const stateOverride_1 = require("./stateOverride");
|
|
7
|
+
exports.EVM_GAS_LIMIT_BUFFER = 1.2;
|
|
8
|
+
const bufferGasLimit = (gasLimit) => (0, utils_1.bnOrZero)(gasLimit).times(exports.EVM_GAS_LIMIT_BUFFER).toFixed(0);
|
|
9
|
+
exports.bufferGasLimit = bufferGasLimit;
|
|
10
|
+
const isPositiveGasLimit = (gasLimit) => (0, utils_1.bnOrZero)(gasLimit).gt(0);
|
|
11
|
+
exports.isPositiveGasLimit = isPositiveGasLimit;
|
|
12
|
+
const priceGasLimit = async ({ adapter, supportsEIP1559 }, gasLimit) => {
|
|
13
|
+
const { average: gasPrices } = await adapter.getGasFeeData();
|
|
14
|
+
return chain_adapters_1.evm.calcNetworkFeeCryptoBaseUnit({ ...gasPrices, supportsEIP1559, gasLimit });
|
|
15
|
+
};
|
|
16
|
+
// Prices the buffered limit, since the signer must hold enough to cover the full limit
|
|
7
17
|
const getEvmNetworkFeeCryptoBaseUnit = async (args) => {
|
|
8
18
|
const { adapter, supportsEIP1559 } = args;
|
|
9
|
-
// Price a provider gas limit with fresh gas prices - no on chain estimation
|
|
10
|
-
const priceProviderGasLimit = async (gasLimit) => {
|
|
11
|
-
const { average: gasPrices } = await adapter.getGasFeeData();
|
|
12
|
-
return chain_adapters_1.evm.calcNetworkFeeCryptoBaseUnit({ ...gasPrices, supportsEIP1559, gasLimit });
|
|
13
|
-
};
|
|
14
|
-
// Rate network fee: the caller passed a provider gas limit directly
|
|
15
19
|
if (!('transactionData' in args))
|
|
16
|
-
return
|
|
17
|
-
const { transactionData, from,
|
|
18
|
-
// Executable quote: the provider supplied a gas limit on the tx data, price it as-is
|
|
19
|
-
const providerGasLimit = transactionData.gasLimit;
|
|
20
|
-
if (providerGasLimit && (0, utils_1.bnOrZero)(providerGasLimit).gt(0)) {
|
|
21
|
-
return priceProviderGasLimit(providerGasLimit);
|
|
22
|
-
}
|
|
20
|
+
return priceGasLimit(args, args.gasLimit);
|
|
21
|
+
const { transactionData, from, providerGasLimit } = args;
|
|
23
22
|
const { to, data, value } = transactionData;
|
|
24
23
|
if (args.stateOverride) {
|
|
25
24
|
const { sellAsset, sellAmountCryptoBaseUnit, spenderAddress } = args.stateOverride;
|
|
26
|
-
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
spenderAddress,
|
|
34
|
-
value,
|
|
35
|
-
};
|
|
36
|
-
const stateOverride = await (0, stateOverride_1.getMinimalStateOverride)(overrideArgs);
|
|
37
|
-
if (!stateOverride)
|
|
25
|
+
const overrideArgs = { sellAsset, sellAmountCryptoBaseUnit, from, spenderAddress, value };
|
|
26
|
+
// null when the override can't be built (an undiscoverable storage slot or a failed read),
|
|
27
|
+
// undefined when nothing needs overriding or the simulation timed out
|
|
28
|
+
const overriddenGasLimit = await (0, stateOverride_1.withTimeout)((0, stateOverride_1.getMinimalStateOverride)(overrideArgs).then(stateOverride => stateOverride &&
|
|
29
|
+
(0, stateOverride_1.estimateGasWithStateOverride)({ ...overrideArgs, to, data, stateOverride }), () => null)).catch(error => {
|
|
30
|
+
// The missing state makes a plain estimate revert too, so only a timeout falls through to it
|
|
31
|
+
if (error instanceof stateOverride_1.EstimationTimeoutError)
|
|
38
32
|
return undefined;
|
|
39
|
-
|
|
40
|
-
})
|
|
33
|
+
throw error;
|
|
34
|
+
});
|
|
35
|
+
if (overriddenGasLimit === null && (0, exports.isPositiveGasLimit)(providerGasLimit)) {
|
|
36
|
+
transactionData.gasLimit = (0, exports.bufferGasLimit)(providerGasLimit);
|
|
37
|
+
return priceGasLimit(args, transactionData.gasLimit);
|
|
38
|
+
}
|
|
41
39
|
if (overriddenGasLimit) {
|
|
42
|
-
transactionData.gasLimit = (0,
|
|
43
|
-
return
|
|
40
|
+
transactionData.gasLimit = (0, exports.bufferGasLimit)(overriddenGasLimit);
|
|
41
|
+
return priceGasLimit(args, transactionData.gasLimit);
|
|
44
42
|
}
|
|
45
43
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
const { average: { chainSpecific: feeData }, } = await adapter.getFeeData({ to, value, chainSpecific: { from, data } });
|
|
45
|
+
transactionData.gasLimit = (0, exports.bufferGasLimit)(feeData.gasLimit);
|
|
46
|
+
return chain_adapters_1.evm.calcNetworkFeeCryptoBaseUnit({
|
|
47
|
+
...feeData,
|
|
48
|
+
supportsEIP1559,
|
|
49
|
+
gasLimit: transactionData.gasLimit,
|
|
50
|
+
});
|
|
51
51
|
};
|
|
52
52
|
exports.getEvmNetworkFeeCryptoBaseUnit = getEvmNetworkFeeCryptoBaseUnit;
|
|
53
|
+
// Rates price a provider's limit as given (it carries its own margin) and simulate without one
|
|
54
|
+
const getEvmRateNetworkFeeCryptoBaseUnit = ({ providerGasLimit, simulation, ...feeArgs }) => {
|
|
55
|
+
if ((0, exports.isPositiveGasLimit)(providerGasLimit)) {
|
|
56
|
+
return priceGasLimit(feeArgs, providerGasLimit);
|
|
57
|
+
}
|
|
58
|
+
if (simulation)
|
|
59
|
+
return (0, exports.getEvmNetworkFeeCryptoBaseUnit)({ ...feeArgs, ...simulation });
|
|
60
|
+
return Promise.reject(new Error('no gas limit to price'));
|
|
61
|
+
};
|
|
62
|
+
exports.getEvmRateNetworkFeeCryptoBaseUnit = getEvmRateNetworkFeeCryptoBaseUnit;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|