@0xkoaj/sdk 0.0.1-beta.14 → 0.0.1-beta.16
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/services/quotes/quote-sources/cow-amm-quote-source.d.ts +35 -0
- package/dist/services/quotes/quote-sources/cow-amm-quote-source.js +180 -0
- package/dist/services/quotes/quote-sources/cow-amm-quote-source.js.map +1 -0
- package/dist/services/quotes/quote-sources/pendle-quote-source.d.ts +17 -0
- package/dist/services/quotes/quote-sources/pendle-quote-source.js +94 -0
- package/dist/services/quotes/quote-sources/pendle-quote-source.js.map +1 -0
- package/dist/services/quotes/quote-sources/uniswap-v4-quote-source.d.ts +16 -0
- package/dist/services/quotes/quote-sources/uniswap-v4-quote-source.js +109 -0
- package/dist/services/quotes/quote-sources/uniswap-v4-quote-source.js.map +1 -0
- package/dist/services/quotes/source-registry.d.ts +7 -1
- package/dist/services/quotes/source-registry.js +6 -0
- package/dist/services/quotes/source-registry.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { QuoteParams, QuoteSourceMetadata, SourceQuoteResponse, SourceQuoteTransaction, BuildTxParams } from './types';
|
|
2
|
+
import { AlwaysValidConfigAndContextSource } from './base/always-valid-source';
|
|
3
|
+
import { type Address as ViemAddress } from 'viem';
|
|
4
|
+
type CowAMMSupport = {
|
|
5
|
+
buyOrders: true;
|
|
6
|
+
swapAndTransfer: true;
|
|
7
|
+
};
|
|
8
|
+
type CowAMMConfig = {
|
|
9
|
+
appData?: string;
|
|
10
|
+
};
|
|
11
|
+
type CowAMMData = {
|
|
12
|
+
orderUid: string;
|
|
13
|
+
order: CowOrder;
|
|
14
|
+
validTo: number;
|
|
15
|
+
};
|
|
16
|
+
interface CowOrder {
|
|
17
|
+
sellToken: ViemAddress;
|
|
18
|
+
buyToken: ViemAddress;
|
|
19
|
+
receiver: ViemAddress;
|
|
20
|
+
sellAmount: string;
|
|
21
|
+
buyAmount: string;
|
|
22
|
+
validTo: number;
|
|
23
|
+
appData: string;
|
|
24
|
+
feeAmount: string;
|
|
25
|
+
kind: 'sell' | 'buy';
|
|
26
|
+
partiallyFillable: boolean;
|
|
27
|
+
sellTokenBalance: 'erc20' | 'internal' | 'external';
|
|
28
|
+
buyTokenBalance: 'erc20' | 'internal';
|
|
29
|
+
}
|
|
30
|
+
export declare class CowAMMQuoteSource extends AlwaysValidConfigAndContextSource<CowAMMSupport, CowAMMConfig, CowAMMData> {
|
|
31
|
+
getMetadata(): QuoteSourceMetadata<CowAMMSupport>;
|
|
32
|
+
quote({ components: { fetchService }, request: { chainId, sellToken, buyToken, order, config: { slippagePercentage, timeout, txValidFor }, accounts: { takeFrom, recipient }, }, config, }: QuoteParams<CowAMMSupport, CowAMMConfig>): Promise<SourceQuoteResponse<CowAMMData>>;
|
|
33
|
+
buildTx({ request: { customData } }: BuildTxParams<CowAMMConfig, CowAMMData>): Promise<SourceQuoteTransaction>;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CowAMMQuoteSource = void 0;
|
|
4
|
+
const _chains_1 = require("../../../chains");
|
|
5
|
+
const constants_1 = require("../../../shared/constants");
|
|
6
|
+
const utils_1 = require("../../../shared/utils");
|
|
7
|
+
const utils_2 = require("./utils");
|
|
8
|
+
const always_valid_source_1 = require("./base/always-valid-source");
|
|
9
|
+
const viem_1 = require("viem");
|
|
10
|
+
// Same contracts as CoW Swap
|
|
11
|
+
const VAULT_RELAYER = '0xC92E8bdf79f0507f65a392b0ab4667716BFE0110';
|
|
12
|
+
const GPV2_SETTLEMENT = '0x9008D19f58AAbD9eD0D60971565AA8510560ab41';
|
|
13
|
+
const API_ENDPOINTS = {
|
|
14
|
+
[_chains_1.Chains.ETHEREUM.chainId]: 'https://api.cow.fi/mainnet/api/v1',
|
|
15
|
+
[_chains_1.Chains.GNOSIS.chainId]: 'https://api.cow.fi/xdai/api/v1',
|
|
16
|
+
[_chains_1.Chains.ARBITRUM.chainId]: 'https://api.cow.fi/arbitrum_one/api/v1',
|
|
17
|
+
[_chains_1.Chains.BASE.chainId]: 'https://api.cow.fi/base/api/v1',
|
|
18
|
+
};
|
|
19
|
+
const DEFAULT_APP_DATA = '0x0000000000000000000000000000000000000000000000000000000000000000';
|
|
20
|
+
const COW_AMM_METADATA = {
|
|
21
|
+
name: 'CoW AMM',
|
|
22
|
+
supports: {
|
|
23
|
+
chains: [
|
|
24
|
+
_chains_1.Chains.ETHEREUM.chainId,
|
|
25
|
+
_chains_1.Chains.GNOSIS.chainId,
|
|
26
|
+
_chains_1.Chains.ARBITRUM.chainId,
|
|
27
|
+
_chains_1.Chains.BASE.chainId,
|
|
28
|
+
],
|
|
29
|
+
swapAndTransfer: true,
|
|
30
|
+
buyOrders: true,
|
|
31
|
+
},
|
|
32
|
+
logoURI: 'ipfs://bafkreih75uruzdjtculei5md434pvtbw66gkzwcjb53kjgj4gz7xicuw54',
|
|
33
|
+
};
|
|
34
|
+
// Uses priceQuality: 'verified' — triggers on-chain solver simulation,
|
|
35
|
+
// giving CoW AMM pools a chance to compete and surface better rates.
|
|
36
|
+
class CowAMMQuoteSource extends always_valid_source_1.AlwaysValidConfigAndContextSource {
|
|
37
|
+
getMetadata() {
|
|
38
|
+
return COW_AMM_METADATA;
|
|
39
|
+
}
|
|
40
|
+
async quote({ components: { fetchService }, request: { chainId, sellToken, buyToken, order, config: { slippagePercentage, timeout, txValidFor }, accounts: { takeFrom, recipient }, }, config, }) {
|
|
41
|
+
const evmChainId = chainId;
|
|
42
|
+
const apiEndpoint = API_ENDPOINTS[evmChainId];
|
|
43
|
+
if (!apiEndpoint) {
|
|
44
|
+
(0, utils_2.failed)(COW_AMM_METADATA, chainId, sellToken, buyToken, `Unsupported chain: ${chainId}`);
|
|
45
|
+
}
|
|
46
|
+
const chain = (0, _chains_1.getChainByKey)(chainId);
|
|
47
|
+
if (!chain) {
|
|
48
|
+
(0, utils_2.failed)(COW_AMM_METADATA, chainId, sellToken, buyToken, `Unknown chain: ${chainId}`);
|
|
49
|
+
}
|
|
50
|
+
const sellTokenMapped = (0, utils_1.isSameAddress)(sellToken, constants_1.Addresses.NATIVE_TOKEN) ? chain.wToken : sellToken;
|
|
51
|
+
const buyTokenMapped = (0, utils_1.isSameAddress)(buyToken, constants_1.Addresses.NATIVE_TOKEN) ? chain.wToken : buyToken;
|
|
52
|
+
const recipientAddress = recipient ?? takeFrom;
|
|
53
|
+
const validTo = (0, utils_1.calculateDeadline)(txValidFor ?? '30m');
|
|
54
|
+
const appData = config?.appData ?? DEFAULT_APP_DATA;
|
|
55
|
+
const quoteRequest = {
|
|
56
|
+
sellToken: sellTokenMapped,
|
|
57
|
+
buyToken: buyTokenMapped,
|
|
58
|
+
receiver: recipientAddress,
|
|
59
|
+
appData,
|
|
60
|
+
from: takeFrom,
|
|
61
|
+
priceQuality: 'verified', // triggers on-chain simulation for CoW AMM pool competition
|
|
62
|
+
signingScheme: 'presign',
|
|
63
|
+
onchainOrder: false,
|
|
64
|
+
...(order.type === 'sell'
|
|
65
|
+
? { kind: 'sell', sellAmountBeforeFee: order.sellAmount.toString() }
|
|
66
|
+
: { kind: 'buy', buyAmountAfterFee: order.buyAmount.toString() }),
|
|
67
|
+
};
|
|
68
|
+
const response = await fetchService.fetch(`${apiEndpoint}/quote`, {
|
|
69
|
+
method: 'POST',
|
|
70
|
+
headers: { 'Content-Type': 'application/json' },
|
|
71
|
+
body: JSON.stringify(quoteRequest),
|
|
72
|
+
timeout,
|
|
73
|
+
});
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
const errorText = await response.text();
|
|
76
|
+
(0, utils_2.failed)(COW_AMM_METADATA, chainId, sellToken, buyToken, errorText || `Failed with status ${response.status}`);
|
|
77
|
+
}
|
|
78
|
+
const quoteResponse = await response.json();
|
|
79
|
+
const cowOrder = quoteResponse.quote;
|
|
80
|
+
const orderDigest = computeOrderDigest(cowOrder, evmChainId);
|
|
81
|
+
const orderUid = computeOrderUid(orderDigest, takeFrom, cowOrder.validTo);
|
|
82
|
+
const sellAmount = BigInt(cowOrder.sellAmount);
|
|
83
|
+
const buyAmount = BigInt(cowOrder.buyAmount);
|
|
84
|
+
const feeAmount = BigInt(cowOrder.feeAmount);
|
|
85
|
+
const totalSellAmount = sellAmount + feeAmount;
|
|
86
|
+
const quote = {
|
|
87
|
+
sellAmount: totalSellAmount,
|
|
88
|
+
buyAmount,
|
|
89
|
+
estimatedGas: 100000n,
|
|
90
|
+
allowanceTarget: (0, utils_2.calculateAllowanceTarget)(sellToken, VAULT_RELAYER),
|
|
91
|
+
customData: {
|
|
92
|
+
orderUid,
|
|
93
|
+
order: {
|
|
94
|
+
sellToken: cowOrder.sellToken,
|
|
95
|
+
buyToken: cowOrder.buyToken,
|
|
96
|
+
receiver: cowOrder.receiver,
|
|
97
|
+
sellAmount: cowOrder.sellAmount,
|
|
98
|
+
buyAmount: cowOrder.buyAmount,
|
|
99
|
+
validTo: cowOrder.validTo,
|
|
100
|
+
appData: cowOrder.appData,
|
|
101
|
+
feeAmount: cowOrder.feeAmount,
|
|
102
|
+
kind: cowOrder.kind,
|
|
103
|
+
partiallyFillable: cowOrder.partiallyFillable,
|
|
104
|
+
sellTokenBalance: cowOrder.sellTokenBalance,
|
|
105
|
+
buyTokenBalance: cowOrder.buyTokenBalance,
|
|
106
|
+
},
|
|
107
|
+
validTo: cowOrder.validTo,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
return (0, utils_2.addQuoteSlippage)(quote, order.type, slippagePercentage);
|
|
111
|
+
}
|
|
112
|
+
async buildTx({ request: { customData } }) {
|
|
113
|
+
const { orderUid } = customData;
|
|
114
|
+
const calldata = (0, viem_1.encodeFunctionData)({
|
|
115
|
+
abi: GPV2_SETTLEMENT_ABI,
|
|
116
|
+
functionName: 'setPreSignature',
|
|
117
|
+
args: [orderUid, true],
|
|
118
|
+
});
|
|
119
|
+
return {
|
|
120
|
+
to: GPV2_SETTLEMENT,
|
|
121
|
+
calldata,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.CowAMMQuoteSource = CowAMMQuoteSource;
|
|
126
|
+
function computeOrderDigest(order, chainId) {
|
|
127
|
+
const ORDER_TYPE_HASH = (0, viem_1.keccak256)((0, viem_1.toHex)('Order(address sellToken,address buyToken,address receiver,uint256 sellAmount,uint256 buyAmount,uint32 validTo,bytes32 appData,uint256 feeAmount,string kind,bool partiallyFillable,string sellTokenBalance,string buyTokenBalance)'));
|
|
128
|
+
const DOMAIN_SEPARATOR = computeDomainSeparator(chainId);
|
|
129
|
+
const orderStructHash = (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)([
|
|
130
|
+
{ type: 'bytes32' },
|
|
131
|
+
{ type: 'address' },
|
|
132
|
+
{ type: 'address' },
|
|
133
|
+
{ type: 'address' },
|
|
134
|
+
{ type: 'uint256' },
|
|
135
|
+
{ type: 'uint256' },
|
|
136
|
+
{ type: 'uint32' },
|
|
137
|
+
{ type: 'bytes32' },
|
|
138
|
+
{ type: 'uint256' },
|
|
139
|
+
{ type: 'bytes32' },
|
|
140
|
+
{ type: 'bool' },
|
|
141
|
+
{ type: 'bytes32' },
|
|
142
|
+
{ type: 'bytes32' },
|
|
143
|
+
], [
|
|
144
|
+
ORDER_TYPE_HASH,
|
|
145
|
+
order.sellToken,
|
|
146
|
+
order.buyToken,
|
|
147
|
+
order.receiver,
|
|
148
|
+
BigInt(order.sellAmount),
|
|
149
|
+
BigInt(order.buyAmount),
|
|
150
|
+
order.validTo,
|
|
151
|
+
order.appData,
|
|
152
|
+
BigInt(order.feeAmount),
|
|
153
|
+
(0, viem_1.keccak256)((0, viem_1.toHex)(order.kind)),
|
|
154
|
+
order.partiallyFillable,
|
|
155
|
+
(0, viem_1.keccak256)((0, viem_1.toHex)(order.sellTokenBalance)),
|
|
156
|
+
(0, viem_1.keccak256)((0, viem_1.toHex)(order.buyTokenBalance)),
|
|
157
|
+
]));
|
|
158
|
+
return (0, viem_1.keccak256)((0, viem_1.concat)(['0x1901', DOMAIN_SEPARATOR, orderStructHash]));
|
|
159
|
+
}
|
|
160
|
+
function computeDomainSeparator(chainId) {
|
|
161
|
+
const DOMAIN_TYPE_HASH = (0, viem_1.keccak256)((0, viem_1.toHex)('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'));
|
|
162
|
+
return (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)([{ type: 'bytes32' }, { type: 'bytes32' }, { type: 'bytes32' }, { type: 'uint256' }, { type: 'address' }], [DOMAIN_TYPE_HASH, (0, viem_1.keccak256)((0, viem_1.toHex)('Gnosis Protocol')), (0, viem_1.keccak256)((0, viem_1.toHex)('v2')), BigInt(chainId), GPV2_SETTLEMENT]));
|
|
163
|
+
}
|
|
164
|
+
function computeOrderUid(orderDigest, owner, validTo) {
|
|
165
|
+
const validToHex = (0, viem_1.pad)((0, viem_1.toHex)(validTo), { size: 4 });
|
|
166
|
+
return (0, viem_1.concat)([orderDigest, owner, validToHex]);
|
|
167
|
+
}
|
|
168
|
+
const GPV2_SETTLEMENT_ABI = [
|
|
169
|
+
{
|
|
170
|
+
inputs: [
|
|
171
|
+
{ name: 'orderUid', type: 'bytes' },
|
|
172
|
+
{ name: 'signed', type: 'bool' },
|
|
173
|
+
],
|
|
174
|
+
name: 'setPreSignature',
|
|
175
|
+
outputs: [],
|
|
176
|
+
stateMutability: 'nonpayable',
|
|
177
|
+
type: 'function',
|
|
178
|
+
},
|
|
179
|
+
];
|
|
180
|
+
//# sourceMappingURL=cow-amm-quote-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cow-amm-quote-source.js","sourceRoot":"","sources":["../../../../src/services/quotes/quote-sources/cow-amm-quote-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IQuoteSource, QuoteParams, QuoteSourceMetadata, SourceQuoteResponse, SourceQuoteTransaction, BuildTxParams } from './types';
|
|
2
|
+
type PendleConfig = {};
|
|
3
|
+
type PendleSupport = {
|
|
4
|
+
buyOrders: false;
|
|
5
|
+
swapAndTransfer: true;
|
|
6
|
+
};
|
|
7
|
+
type PendleData = {
|
|
8
|
+
tx: SourceQuoteTransaction;
|
|
9
|
+
};
|
|
10
|
+
export declare class PendleQuoteSource implements IQuoteSource<PendleSupport, PendleConfig, PendleData> {
|
|
11
|
+
getMetadata(): QuoteSourceMetadata<PendleSupport>;
|
|
12
|
+
quote({ components: { fetchService }, request }: QuoteParams<PendleSupport, PendleConfig>): Promise<SourceQuoteResponse<PendleData>>;
|
|
13
|
+
buildTx({ request }: BuildTxParams<PendleConfig, PendleData>): Promise<SourceQuoteTransaction>;
|
|
14
|
+
isConfigAndContextValidForQuoting(_config: Partial<PendleConfig> | undefined): _config is PendleConfig;
|
|
15
|
+
isConfigAndContextValidForTxBuilding(_config: Partial<PendleConfig> | undefined): _config is PendleConfig;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PendleQuoteSource = void 0;
|
|
4
|
+
const _chains_1 = require("../../../chains");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
const constants_1 = require("../../../shared/constants");
|
|
7
|
+
const utils_2 = require("../../../shared/utils");
|
|
8
|
+
const PENDLE_API_URL = 'https://api-v2.pendle.finance/core';
|
|
9
|
+
const PENDLE_METADATA = {
|
|
10
|
+
name: 'Pendle',
|
|
11
|
+
supports: {
|
|
12
|
+
chains: [
|
|
13
|
+
_chains_1.Chains.ETHEREUM.chainId,
|
|
14
|
+
_chains_1.Chains.ARBITRUM.chainId,
|
|
15
|
+
_chains_1.Chains.BNB_CHAIN.chainId,
|
|
16
|
+
_chains_1.Chains.OPTIMISM.chainId,
|
|
17
|
+
_chains_1.Chains.BASE.chainId,
|
|
18
|
+
_chains_1.Chains.MANTLE.chainId,
|
|
19
|
+
_chains_1.Chains.SONIC.chainId,
|
|
20
|
+
],
|
|
21
|
+
swapAndTransfer: true,
|
|
22
|
+
buyOrders: false,
|
|
23
|
+
},
|
|
24
|
+
logoURI: 'ipfs://QmXhFJmjkBqBKb4YXpDHAGS2YKwW7uZiZtpATcWmjVnPV8',
|
|
25
|
+
};
|
|
26
|
+
class PendleQuoteSource {
|
|
27
|
+
getMetadata() {
|
|
28
|
+
return PENDLE_METADATA;
|
|
29
|
+
}
|
|
30
|
+
async quote({ components: { fetchService }, request }) {
|
|
31
|
+
const { chainId, sellToken, buyToken, order, accounts: { takeFrom, recipient }, config: { slippagePercentage, timeout }, } = request;
|
|
32
|
+
const chain = (0, _chains_1.getChainByKey)(chainId);
|
|
33
|
+
if (!chain) {
|
|
34
|
+
(0, utils_1.failed)(PENDLE_METADATA, chainId, sellToken, buyToken, `Unknown chain: ${chainId}`);
|
|
35
|
+
}
|
|
36
|
+
// Pendle doesn't handle raw native tokens — map to wrapped native
|
|
37
|
+
const tokenIn = (0, utils_2.isSameAddress)(sellToken, constants_1.Addresses.NATIVE_TOKEN) ? chain.wToken : sellToken;
|
|
38
|
+
const tokenOut = (0, utils_2.isSameAddress)(buyToken, constants_1.Addresses.NATIVE_TOKEN) ? chain.wToken : buyToken;
|
|
39
|
+
// Pendle slippage is 0-1 (e.g. 0.005 = 0.5%)
|
|
40
|
+
const slippage = slippagePercentage / 100;
|
|
41
|
+
const body = {
|
|
42
|
+
receiver: recipient ?? takeFrom,
|
|
43
|
+
slippage,
|
|
44
|
+
enableAggregator: true,
|
|
45
|
+
inputs: [{ token: tokenIn, amount: order.sellAmount.toString() }],
|
|
46
|
+
outputs: [tokenOut],
|
|
47
|
+
};
|
|
48
|
+
const response = await fetchService.fetch(`${PENDLE_API_URL}/v3/${chainId}/convert`, {
|
|
49
|
+
method: 'POST',
|
|
50
|
+
headers: { 'Content-Type': 'application/json' },
|
|
51
|
+
body: JSON.stringify(body),
|
|
52
|
+
timeout,
|
|
53
|
+
});
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
(0, utils_1.failed)(PENDLE_METADATA, chainId, sellToken, buyToken, await response.text());
|
|
56
|
+
}
|
|
57
|
+
const data = await response.json();
|
|
58
|
+
const route = data.routes?.[0];
|
|
59
|
+
if (!route?.tx || !route.outputs?.[0]) {
|
|
60
|
+
(0, utils_1.failed)(PENDLE_METADATA, chainId, sellToken, buyToken, 'No route found');
|
|
61
|
+
}
|
|
62
|
+
const buyAmount = BigInt(route.outputs[0].amount);
|
|
63
|
+
// Pendle enforces min amount on-chain based on slippage; mirror it here
|
|
64
|
+
const slippageBps = BigInt(Math.round(slippagePercentage * 100));
|
|
65
|
+
const minBuyAmount = (buyAmount * (10000n - slippageBps)) / 10000n;
|
|
66
|
+
return {
|
|
67
|
+
sellAmount: order.sellAmount,
|
|
68
|
+
maxSellAmount: order.sellAmount,
|
|
69
|
+
buyAmount,
|
|
70
|
+
minBuyAmount,
|
|
71
|
+
estimatedGas: 350000n,
|
|
72
|
+
allowanceTarget: (0, utils_1.calculateAllowanceTarget)(sellToken, route.tx.to),
|
|
73
|
+
type: 'sell',
|
|
74
|
+
customData: {
|
|
75
|
+
tx: {
|
|
76
|
+
to: route.tx.to,
|
|
77
|
+
calldata: route.tx.data,
|
|
78
|
+
value: BigInt(route.tx.value ?? '0'),
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
async buildTx({ request }) {
|
|
84
|
+
return request.customData.tx;
|
|
85
|
+
}
|
|
86
|
+
isConfigAndContextValidForQuoting(_config) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
isConfigAndContextValidForTxBuilding(_config) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.PendleQuoteSource = PendleQuoteSource;
|
|
94
|
+
//# sourceMappingURL=pendle-quote-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pendle-quote-source.js","sourceRoot":"","sources":["../../../../src/services/quotes/quote-sources/pendle-quote-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { QuoteParams, QuoteSourceMetadata, SourceQuoteResponse, SourceQuoteTransaction, BuildTxParams } from './types';
|
|
2
|
+
import { AlwaysValidConfigAndContextSource } from './base/always-valid-source';
|
|
3
|
+
type UniswapV4Support = {
|
|
4
|
+
buyOrders: true;
|
|
5
|
+
swapAndTransfer: true;
|
|
6
|
+
};
|
|
7
|
+
type UniswapV4Config = {};
|
|
8
|
+
type UniswapV4Data = {
|
|
9
|
+
tx: SourceQuoteTransaction;
|
|
10
|
+
};
|
|
11
|
+
export declare class UniswapV4QuoteSource extends AlwaysValidConfigAndContextSource<UniswapV4Support, UniswapV4Config, UniswapV4Data> {
|
|
12
|
+
getMetadata(): QuoteSourceMetadata<UniswapV4Support>;
|
|
13
|
+
quote({ components: { fetchService }, request: { chainId, sellToken, buyToken, order, config: { slippagePercentage, timeout, txValidFor }, accounts: { takeFrom, recipient }, }, }: QuoteParams<UniswapV4Support>): Promise<SourceQuoteResponse<UniswapV4Data>>;
|
|
14
|
+
buildTx({ request }: BuildTxParams<UniswapV4Config, UniswapV4Data>): Promise<SourceQuoteTransaction>;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UniswapV4QuoteSource = void 0;
|
|
4
|
+
const _chains_1 = require("../../../chains");
|
|
5
|
+
const constants_1 = require("../../../shared/constants");
|
|
6
|
+
const utils_1 = require("../../../shared/utils");
|
|
7
|
+
const utils_2 = require("./utils");
|
|
8
|
+
const always_valid_source_1 = require("./base/always-valid-source");
|
|
9
|
+
const _chains_2 = require("../../../chains");
|
|
10
|
+
const UNISWAP_V4_CHAINS = [
|
|
11
|
+
_chains_1.Chains.ETHEREUM.chainId,
|
|
12
|
+
_chains_1.Chains.OPTIMISM.chainId,
|
|
13
|
+
_chains_1.Chains.POLYGON.chainId,
|
|
14
|
+
_chains_1.Chains.ARBITRUM.chainId,
|
|
15
|
+
_chains_1.Chains.BASE.chainId,
|
|
16
|
+
_chains_1.Chains.BNB_CHAIN.chainId,
|
|
17
|
+
_chains_1.Chains.AVALANCHE.chainId,
|
|
18
|
+
_chains_1.Chains.UNICHAIN.chainId,
|
|
19
|
+
];
|
|
20
|
+
const UNISWAP_V4_METADATA = {
|
|
21
|
+
name: 'Uniswap v4',
|
|
22
|
+
supports: {
|
|
23
|
+
chains: UNISWAP_V4_CHAINS,
|
|
24
|
+
swapAndTransfer: true,
|
|
25
|
+
buyOrders: true,
|
|
26
|
+
},
|
|
27
|
+
logoURI: 'ipfs://QmNa3YBYAYS5qSCLuXataV5XCbtxP9ZB4rHUfomRxrpRhJ',
|
|
28
|
+
};
|
|
29
|
+
class UniswapV4QuoteSource extends always_valid_source_1.AlwaysValidConfigAndContextSource {
|
|
30
|
+
getMetadata() {
|
|
31
|
+
return UNISWAP_V4_METADATA;
|
|
32
|
+
}
|
|
33
|
+
async quote({ components: { fetchService }, request: { chainId, sellToken, buyToken, order, config: { slippagePercentage, timeout, txValidFor }, accounts: { takeFrom, recipient }, }, }) {
|
|
34
|
+
const isSellTokenNative = (0, utils_1.isSameAddress)(sellToken, constants_1.Addresses.NATIVE_TOKEN);
|
|
35
|
+
const isBuyTokenNative = (0, utils_1.isSameAddress)(buyToken, constants_1.Addresses.NATIVE_TOKEN);
|
|
36
|
+
const chain = (0, _chains_2.getChainByKey)(chainId);
|
|
37
|
+
const tokenIn = isSellTokenNative && chain ? chain.wToken : sellToken;
|
|
38
|
+
const tokenOut = isBuyTokenNative && chain ? chain.wToken : buyToken;
|
|
39
|
+
const amount = order.type === 'sell' ? order.sellAmount : order.buyAmount;
|
|
40
|
+
const deadline = Math.floor(Date.now() / 1000) + (0, utils_1.timeToSeconds)(txValidFor ?? '3h');
|
|
41
|
+
recipient = recipient ?? takeFrom;
|
|
42
|
+
const body = {
|
|
43
|
+
tokenInChainId: chainId,
|
|
44
|
+
tokenOutChainId: chainId,
|
|
45
|
+
tokenIn,
|
|
46
|
+
tokenOut,
|
|
47
|
+
amount: amount.toString(),
|
|
48
|
+
sendPortionEnabled: false,
|
|
49
|
+
type: order.type === 'sell' ? 'EXACT_INPUT' : 'EXACT_OUTPUT',
|
|
50
|
+
intent: 'quote',
|
|
51
|
+
configs: [
|
|
52
|
+
{
|
|
53
|
+
protocols: ['V4'],
|
|
54
|
+
routingType: 'CLASSIC',
|
|
55
|
+
recipient,
|
|
56
|
+
slippageTolerance: slippagePercentage.toString(),
|
|
57
|
+
deadline,
|
|
58
|
+
enableUniversalRouter: true,
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
const headers = {
|
|
63
|
+
'content-type': 'application/json',
|
|
64
|
+
origin: 'https://app.uniswap.org',
|
|
65
|
+
referer: 'https://app.uniswap.org/',
|
|
66
|
+
};
|
|
67
|
+
const response = await fetchService.fetch('https://api.uniswap.org/v2/quote', {
|
|
68
|
+
method: 'POST',
|
|
69
|
+
body: JSON.stringify(body),
|
|
70
|
+
headers,
|
|
71
|
+
timeout,
|
|
72
|
+
});
|
|
73
|
+
if (!response.ok) {
|
|
74
|
+
(0, utils_2.failed)(UNISWAP_V4_METADATA, chainId, sellToken, buyToken, await response.text());
|
|
75
|
+
}
|
|
76
|
+
const data = await response.json();
|
|
77
|
+
const quoteData = data.quote;
|
|
78
|
+
if (!quoteData?.methodParameters) {
|
|
79
|
+
(0, utils_2.failed)(UNISWAP_V4_METADATA, chainId, sellToken, buyToken, 'No v4 route found for this pair');
|
|
80
|
+
}
|
|
81
|
+
const { calldata, to: routerAddress, value: rawValue } = quoteData.methodParameters;
|
|
82
|
+
const quotedAmount = order.type === 'sell'
|
|
83
|
+
? quoteData.output?.amount ?? quoteData.quoteDecimals
|
|
84
|
+
: quoteData.input?.amount ?? quoteData.quoteDecimals;
|
|
85
|
+
const sellAmount = order.type === 'sell' ? order.sellAmount : BigInt(quotedAmount);
|
|
86
|
+
const buyAmount = order.type === 'sell' ? BigInt(quotedAmount) : order.buyAmount;
|
|
87
|
+
const value = isSellTokenNative ? sellAmount : undefined;
|
|
88
|
+
const gasUseEstimate = BigInt(quoteData.gasUseEstimate ?? quoteData.gasEstimate ?? 200_000);
|
|
89
|
+
const quote = {
|
|
90
|
+
sellAmount,
|
|
91
|
+
buyAmount,
|
|
92
|
+
estimatedGas: gasUseEstimate,
|
|
93
|
+
allowanceTarget: (0, utils_2.calculateAllowanceTarget)(sellToken, routerAddress),
|
|
94
|
+
customData: {
|
|
95
|
+
tx: {
|
|
96
|
+
to: routerAddress,
|
|
97
|
+
calldata: calldata,
|
|
98
|
+
value,
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
return (0, utils_2.addQuoteSlippage)(quote, order.type, slippagePercentage);
|
|
103
|
+
}
|
|
104
|
+
async buildTx({ request }) {
|
|
105
|
+
return request.customData.tx;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.UniswapV4QuoteSource = UniswapV4QuoteSource;
|
|
109
|
+
//# sourceMappingURL=uniswap-v4-quote-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uniswap-v4-quote-source.js","sourceRoot":"","sources":["../../../../src/services/quotes/quote-sources/uniswap-v4-quote-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { ParaswapQuoteSource } from './quote-sources/paraswap-quote-source';
|
|
|
6
6
|
import { ZRXQuoteSource } from './quote-sources/0x-quote-source';
|
|
7
7
|
import { OneInchQuoteSource } from './quote-sources/1inch-quote-source';
|
|
8
8
|
import { UniswapQuoteSource } from './quote-sources/uniswap-quote-source';
|
|
9
|
+
import { UniswapV4QuoteSource } from './quote-sources/uniswap-v4-quote-source';
|
|
9
10
|
import { OpenOceanQuoteSource } from './quote-sources/open-ocean-quote-source';
|
|
10
11
|
import { LiFiQuoteSource } from './quote-sources/li-fi-quote-source';
|
|
11
12
|
import { KyberswapQuoteSource } from './quote-sources/kyberswap-quote-source';
|
|
@@ -28,7 +29,9 @@ import { NordsternQuoteSource } from './quote-sources/nordstern-quote-source';
|
|
|
28
29
|
import { RelayQuoteSource } from './quote-sources/relay-quote-source';
|
|
29
30
|
import { AerodromeQuoteSource } from './quote-sources/aerodrome-quote-source';
|
|
30
31
|
import { CowSwapQuoteSource } from './quote-sources/cow-swap-quote-source';
|
|
32
|
+
import { CowAMMQuoteSource } from './quote-sources/cow-amm-quote-source';
|
|
31
33
|
import { AcrossQuoteSource } from './quote-sources/across-quote-source';
|
|
34
|
+
import { PendleQuoteSource } from './quote-sources/pendle-quote-source';
|
|
32
35
|
import { JupiterQuoteSource } from './quote-sources/jupiter-quote-source';
|
|
33
36
|
export declare const QUOTE_SOURCES: {
|
|
34
37
|
bebop: BebopQuoteSource;
|
|
@@ -58,10 +61,13 @@ export declare const QUOTE_SOURCES: {
|
|
|
58
61
|
relay: RelayQuoteSource;
|
|
59
62
|
aerodrome: AerodromeQuoteSource;
|
|
60
63
|
'cow-swap': CowSwapQuoteSource;
|
|
64
|
+
'cow-amm': CowAMMQuoteSource;
|
|
61
65
|
across: AcrossQuoteSource;
|
|
66
|
+
pendle: PendleQuoteSource;
|
|
67
|
+
'uniswap-v4': UniswapV4QuoteSource;
|
|
62
68
|
jupiter: JupiterQuoteSource;
|
|
63
69
|
};
|
|
64
|
-
export declare const SOURCES_METADATA: Record<"0x" | "open-ocean" | "paraswap" | "1inch" | "fly-trade" | "bebop" | "xy-finance" | "uniswap" | "li-fi" | "kyberswap" | "odos" | "braindex" | "barter" | "rango" | "changelly" | "squid" | "portals-fi" | "enso" | "okx-dex" | "conveyor" | "dodo" | "swing" | "sushiswap" | "nordstern" | "relay" | "aerodrome" | "cow-swap" | "across" | "jupiter", SourceMetadata>;
|
|
70
|
+
export declare const SOURCES_METADATA: Record<"0x" | "open-ocean" | "paraswap" | "1inch" | "fly-trade" | "bebop" | "xy-finance" | "uniswap" | "li-fi" | "kyberswap" | "odos" | "braindex" | "barter" | "rango" | "changelly" | "squid" | "portals-fi" | "enso" | "okx-dex" | "conveyor" | "dodo" | "swing" | "sushiswap" | "nordstern" | "relay" | "aerodrome" | "cow-swap" | "cow-amm" | "across" | "pendle" | "uniswap-v4" | "jupiter", SourceMetadata>;
|
|
65
71
|
export type SourceWithConfigId = keyof LocalSourcesConfig;
|
|
66
72
|
export type SourceConfig = {
|
|
67
73
|
global?: GlobalQuoteSourceConfig;
|
|
@@ -6,6 +6,7 @@ const paraswap_quote_source_1 = require("./quote-sources/paraswap-quote-source")
|
|
|
6
6
|
const _0x_quote_source_1 = require("./quote-sources/0x-quote-source");
|
|
7
7
|
const _1inch_quote_source_1 = require("./quote-sources/1inch-quote-source");
|
|
8
8
|
const uniswap_quote_source_1 = require("./quote-sources/uniswap-quote-source");
|
|
9
|
+
const uniswap_v4_quote_source_1 = require("./quote-sources/uniswap-v4-quote-source");
|
|
9
10
|
const open_ocean_quote_source_1 = require("./quote-sources/open-ocean-quote-source");
|
|
10
11
|
const li_fi_quote_source_1 = require("./quote-sources/li-fi-quote-source");
|
|
11
12
|
const kyberswap_quote_source_1 = require("./quote-sources/kyberswap-quote-source");
|
|
@@ -28,7 +29,9 @@ const nordstern_quote_source_1 = require("./quote-sources/nordstern-quote-source
|
|
|
28
29
|
const relay_quote_source_1 = require("./quote-sources/relay-quote-source");
|
|
29
30
|
const aerodrome_quote_source_1 = require("./quote-sources/aerodrome-quote-source");
|
|
30
31
|
const cow_swap_quote_source_1 = require("./quote-sources/cow-swap-quote-source");
|
|
32
|
+
const cow_amm_quote_source_1 = require("./quote-sources/cow-amm-quote-source");
|
|
31
33
|
const across_quote_source_1 = require("./quote-sources/across-quote-source");
|
|
34
|
+
const pendle_quote_source_1 = require("./quote-sources/pendle-quote-source");
|
|
32
35
|
// Solana sources
|
|
33
36
|
const jupiter_quote_source_1 = require("./quote-sources/jupiter-quote-source");
|
|
34
37
|
exports.QUOTE_SOURCES = {
|
|
@@ -59,7 +62,10 @@ exports.QUOTE_SOURCES = {
|
|
|
59
62
|
relay: new relay_quote_source_1.RelayQuoteSource(),
|
|
60
63
|
aerodrome: new aerodrome_quote_source_1.AerodromeQuoteSource(),
|
|
61
64
|
'cow-swap': new cow_swap_quote_source_1.CowSwapQuoteSource(),
|
|
65
|
+
'cow-amm': new cow_amm_quote_source_1.CowAMMQuoteSource(),
|
|
62
66
|
across: new across_quote_source_1.AcrossQuoteSource(),
|
|
67
|
+
pendle: new pendle_quote_source_1.PendleQuoteSource(),
|
|
68
|
+
'uniswap-v4': new uniswap_v4_quote_source_1.UniswapV4QuoteSource(),
|
|
63
69
|
// Solana sources
|
|
64
70
|
jupiter: new jupiter_quote_source_1.JupiterQuoteSource(),
|
|
65
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-registry.js","sourceRoot":"","sources":["../../../src/services/quotes/source-registry.ts"],"names":[],"mappings":";;;AAGA,yEAAoE;AACpE,iFAA4E;AAC5E,sEAAiE;AACjE,4EAAwE;AACxE,+EAA0E;AAC1E,qFAA+E;AAC/E,2EAAqE;AACrE,mFAA8E;AAC9E,2EAAsE;AACtE,mFAA8E;AAC9E,qFAA+E;AAC/E,+EAAyE;AACzE,2EAAsE;AACtE,qFAA+E;AAC/E,mFAA6E;AAC7E,2EAAsE;AACtE,iFAA4E;AAC5E,yEAAoE;AACpE,iFAA4E;AAC5E,6EAAwE;AACxE,yEAAuE;AACvE,2EAAsE;AACtE,mFAA8E;AAC9E,mFAA8E;AAC9E,2EAAsE;AACtE,mFAA8E;AAC9E,iFAA2E;AAC3E,6EAAwE;AACxE,iBAAiB;AACjB,+EAA0E;AAE7D,QAAA,aAAa,GAAG;IAC3B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,IAAI,EAAE,IAAI,iCAAc,EAAE;IAC1B,OAAO,EAAE,IAAI,wCAAkB,EAAE;IACjC,OAAO,EAAE,IAAI,yCAAkB,EAAE;IACjC,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,OAAO,EAAE,IAAI,oCAAe,EAAE;IAC9B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,IAAI,EAAE,IAAI,mCAAe,EAAE;IAC3B,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,MAAM,EAAE,IAAI,uCAAiB,EAAE;IAC/B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,CAAC,WAAW,CAAC,EAAE,IAAI,4CAAmB,EAAE;IACxC,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,IAAI,EAAE,IAAI,mCAAe,EAAE;IAC3B,SAAS,EAAE,IAAI,wCAAiB,EAAE;IAClC,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,IAAI,EAAE,IAAI,sCAAkB,EAAE;IAC9B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,UAAU,EAAE,IAAI,0CAAkB,EAAE;IACpC,MAAM,EAAE,IAAI,uCAAiB,EAAE;IAC/B,iBAAiB;IACjB,OAAO,EAAE,IAAI,yCAAkB,EAAE;CACgC,CAAC;AAEvD,QAAA,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAChD,MAAM,CAAC,OAAO,CAAC,qBAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CACtC,CAAC"}
|
|
1
|
+
{"version":3,"file":"source-registry.js","sourceRoot":"","sources":["../../../src/services/quotes/source-registry.ts"],"names":[],"mappings":";;;AAGA,yEAAoE;AACpE,iFAA4E;AAC5E,sEAAiE;AACjE,4EAAwE;AACxE,+EAA0E;AAC1E,qFAA+E;AAC/E,qFAA+E;AAC/E,2EAAqE;AACrE,mFAA8E;AAC9E,2EAAsE;AACtE,mFAA8E;AAC9E,qFAA+E;AAC/E,+EAAyE;AACzE,2EAAsE;AACtE,qFAA+E;AAC/E,mFAA6E;AAC7E,2EAAsE;AACtE,iFAA4E;AAC5E,yEAAoE;AACpE,iFAA4E;AAC5E,6EAAwE;AACxE,yEAAuE;AACvE,2EAAsE;AACtE,mFAA8E;AAC9E,mFAA8E;AAC9E,2EAAsE;AACtE,mFAA8E;AAC9E,iFAA2E;AAC3E,+EAAyE;AACzE,6EAAwE;AACxE,6EAAwE;AACxE,iBAAiB;AACjB,+EAA0E;AAE7D,QAAA,aAAa,GAAG;IAC3B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,IAAI,EAAE,IAAI,iCAAc,EAAE;IAC1B,OAAO,EAAE,IAAI,wCAAkB,EAAE;IACjC,OAAO,EAAE,IAAI,yCAAkB,EAAE;IACjC,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,OAAO,EAAE,IAAI,oCAAe,EAAE;IAC9B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,IAAI,EAAE,IAAI,mCAAe,EAAE;IAC3B,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,MAAM,EAAE,IAAI,uCAAiB,EAAE;IAC/B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,CAAC,WAAW,CAAC,EAAE,IAAI,4CAAmB,EAAE;IACxC,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,IAAI,EAAE,IAAI,mCAAe,EAAE;IAC3B,SAAS,EAAE,IAAI,wCAAiB,EAAE;IAClC,QAAQ,EAAE,IAAI,2CAAmB,EAAE;IACnC,IAAI,EAAE,IAAI,sCAAkB,EAAE;IAC9B,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,KAAK,EAAE,IAAI,qCAAgB,EAAE;IAC7B,SAAS,EAAE,IAAI,6CAAoB,EAAE;IACrC,UAAU,EAAE,IAAI,0CAAkB,EAAE;IACpC,SAAS,EAAE,IAAI,wCAAiB,EAAE;IAClC,MAAM,EAAE,IAAI,uCAAiB,EAAE;IAC/B,MAAM,EAAE,IAAI,uCAAiB,EAAE;IAC/B,YAAY,EAAE,IAAI,8CAAoB,EAAE;IACxC,iBAAiB;IACjB,OAAO,EAAE,IAAI,yCAAkB,EAAE;CACgC,CAAC;AAEvD,QAAA,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAChD,MAAM,CAAC,OAAO,CAAC,qBAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CACtC,CAAC"}
|
package/package.json
CHANGED