@strkfarm/sdk 1.1.68 → 1.1.70
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/index.browser.global.js +3791 -3766
- package/dist/index.browser.mjs +172 -147
- package/dist/index.d.ts +2 -1
- package/dist/index.js +176 -151
- package/dist/index.mjs +172 -147
- package/package.json +1 -1
- package/src/modules/ekubo-quoter.ts +1 -1
- package/src/modules/pricer-lst.ts +1 -1
- package/src/modules/pricer.ts +35 -2
package/dist/index.js
CHANGED
|
@@ -535,6 +535,150 @@ var PricerBase = class {
|
|
|
535
535
|
}
|
|
536
536
|
};
|
|
537
537
|
|
|
538
|
+
// src/modules/avnu.ts
|
|
539
|
+
var import_starknet4 = require("starknet");
|
|
540
|
+
var import_avnu_sdk = require("@avnu/avnu-sdk");
|
|
541
|
+
|
|
542
|
+
// src/utils/oz-merkle.ts
|
|
543
|
+
var import_bytes = require("@ericnordelo/strk-merkle-tree/dist/bytes");
|
|
544
|
+
var import_core = require("@ericnordelo/strk-merkle-tree/dist/core");
|
|
545
|
+
var import_hashes = require("@ericnordelo/strk-merkle-tree/dist/hashes");
|
|
546
|
+
var import_merkletree = require("@ericnordelo/strk-merkle-tree/dist/merkletree");
|
|
547
|
+
var import_starknet2 = require("starknet");
|
|
548
|
+
var import_starknet3 = require("@scure/starknet");
|
|
549
|
+
function hash_leaf(leaf) {
|
|
550
|
+
if (leaf.data.length < 1) {
|
|
551
|
+
throw new Error("Invalid leaf data");
|
|
552
|
+
}
|
|
553
|
+
let firstElement = leaf.data[0];
|
|
554
|
+
let value = firstElement;
|
|
555
|
+
for (let i = 1; i < leaf.data.length; i++) {
|
|
556
|
+
value = pedersen_hash(value, leaf.data[i]);
|
|
557
|
+
}
|
|
558
|
+
return `0x${import_starknet2.num.toHexString(value).replace(/^0x/, "").padStart(64, "0")}`;
|
|
559
|
+
}
|
|
560
|
+
function pedersen_hash(a, b) {
|
|
561
|
+
return BigInt((0, import_starknet3.pedersen)(a, b).toString());
|
|
562
|
+
}
|
|
563
|
+
var StandardMerkleTree = class _StandardMerkleTree extends import_merkletree.MerkleTreeImpl {
|
|
564
|
+
constructor(tree, values, leafEncoding) {
|
|
565
|
+
super(tree, values, (leaf) => {
|
|
566
|
+
return hash_leaf(leaf);
|
|
567
|
+
});
|
|
568
|
+
this.tree = tree;
|
|
569
|
+
this.values = values;
|
|
570
|
+
this.leafEncoding = leafEncoding;
|
|
571
|
+
}
|
|
572
|
+
static of(values, leafEncoding = [], options = {}) {
|
|
573
|
+
const [tree, indexedValues] = import_merkletree.MerkleTreeImpl.prepare(values, options, (leaf) => {
|
|
574
|
+
return hash_leaf(leaf);
|
|
575
|
+
});
|
|
576
|
+
return new _StandardMerkleTree(tree, indexedValues, leafEncoding);
|
|
577
|
+
}
|
|
578
|
+
static verify(root, leafEncoding, leaf, proof) {
|
|
579
|
+
return (0, import_bytes.toHex)(root) === (0, import_core.processProof)((0, import_hashes.standardLeafHash)(leafEncoding, leaf), proof);
|
|
580
|
+
}
|
|
581
|
+
static verifyMultiProof(root, leafEncoding, multiproof) {
|
|
582
|
+
return (0, import_bytes.toHex)(root) === (0, import_core.processMultiProof)({
|
|
583
|
+
leaves: multiproof.leaves.map((leaf) => (0, import_hashes.standardLeafHash)(leafEncoding, leaf)),
|
|
584
|
+
proof: multiproof.proof,
|
|
585
|
+
proofFlags: multiproof.proofFlags
|
|
586
|
+
});
|
|
587
|
+
}
|
|
588
|
+
dump() {
|
|
589
|
+
return {
|
|
590
|
+
format: "standard-v1",
|
|
591
|
+
leafEncoding: this.leafEncoding,
|
|
592
|
+
tree: this.tree,
|
|
593
|
+
values: this.values
|
|
594
|
+
};
|
|
595
|
+
}
|
|
596
|
+
};
|
|
597
|
+
|
|
598
|
+
// src/utils/index.ts
|
|
599
|
+
function assert(condition, message) {
|
|
600
|
+
if (!condition) {
|
|
601
|
+
throw new Error(message);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
function getTrovesEndpoint() {
|
|
605
|
+
return process.env.TROVES_ENDPOINT || "https://app.troves.fi";
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
// src/modules/avnu.ts
|
|
609
|
+
var AvnuWrapper = class {
|
|
610
|
+
async getQuotes(fromToken, toToken, amountWei, taker, retry = 0, excludeSources = ["Haiko(Solvers)"]) {
|
|
611
|
+
const MAX_RETRY = 5;
|
|
612
|
+
const params = {
|
|
613
|
+
sellTokenAddress: fromToken,
|
|
614
|
+
buyTokenAddress: toToken,
|
|
615
|
+
sellAmount: amountWei,
|
|
616
|
+
takerAddress: taker,
|
|
617
|
+
// excludeSources: ['Nostra', 'Haiko(Solvers)']
|
|
618
|
+
excludeSources
|
|
619
|
+
// excludeSources: ['Haiko(Solvers)'] // to resolve InvalidOraclePrice error
|
|
620
|
+
};
|
|
621
|
+
assert(fromToken != toToken, "From and to tokens are the same");
|
|
622
|
+
const quotes = await (0, import_avnu_sdk.fetchQuotes)(params);
|
|
623
|
+
const filteredQuotes = quotes.filter((q) => q.sellAmount.toString() == amountWei);
|
|
624
|
+
if (filteredQuotes.length == 0) {
|
|
625
|
+
if (retry < MAX_RETRY) {
|
|
626
|
+
await new Promise((res) => setTimeout(res, 3e3));
|
|
627
|
+
return await this.getQuotes(fromToken, toToken, amountWei, taker, retry + 1);
|
|
628
|
+
}
|
|
629
|
+
throw new Error("no quotes found");
|
|
630
|
+
}
|
|
631
|
+
return filteredQuotes[0];
|
|
632
|
+
}
|
|
633
|
+
async getSwapInfo(quote, taker, integratorFeeBps, integratorFeeRecipient, minAmount, options) {
|
|
634
|
+
const calldata = await (0, import_avnu_sdk.fetchBuildExecuteTransaction)(quote.quoteId, taker, void 0, void 0, options);
|
|
635
|
+
const call = calldata.calls[1];
|
|
636
|
+
const callData = call.calldata;
|
|
637
|
+
const routesLen = Number(callData[11]);
|
|
638
|
+
assert(routesLen > 0, "No routes found");
|
|
639
|
+
let startIndex = 12;
|
|
640
|
+
const routes = [];
|
|
641
|
+
for (let i = 0; i < routesLen; ++i) {
|
|
642
|
+
const swap_params_len = Number(callData[startIndex + 4]);
|
|
643
|
+
const route = {
|
|
644
|
+
token_from: callData[startIndex],
|
|
645
|
+
token_to: callData[startIndex + 1],
|
|
646
|
+
exchange_address: callData[startIndex + 2],
|
|
647
|
+
percent: Number(callData[startIndex + 3]),
|
|
648
|
+
additional_swap_params: swap_params_len > 0 ? callData.slice(startIndex + 5, startIndex + 5 + swap_params_len) : []
|
|
649
|
+
};
|
|
650
|
+
routes.push(route);
|
|
651
|
+
startIndex += 5 + swap_params_len;
|
|
652
|
+
}
|
|
653
|
+
const _minAmount = minAmount || (quote.buyAmount * 95n / 100n).toString();
|
|
654
|
+
const swapInfo = {
|
|
655
|
+
token_from_address: quote.sellTokenAddress,
|
|
656
|
+
token_from_amount: import_starknet4.uint256.bnToUint256(quote.sellAmount),
|
|
657
|
+
token_to_address: quote.buyTokenAddress,
|
|
658
|
+
token_to_amount: import_starknet4.uint256.bnToUint256(_minAmount),
|
|
659
|
+
token_to_min_amount: import_starknet4.uint256.bnToUint256(_minAmount),
|
|
660
|
+
beneficiary: taker,
|
|
661
|
+
integrator_fee_amount_bps: integratorFeeBps,
|
|
662
|
+
integrator_fee_recipient: integratorFeeRecipient,
|
|
663
|
+
routes
|
|
664
|
+
};
|
|
665
|
+
return swapInfo;
|
|
666
|
+
}
|
|
667
|
+
static buildZeroSwap(tokenToSell, beneficiary, tokenToBuy = tokenToSell) {
|
|
668
|
+
return {
|
|
669
|
+
token_from_address: tokenToSell.address,
|
|
670
|
+
token_from_amount: import_starknet4.uint256.bnToUint256(0),
|
|
671
|
+
token_to_address: tokenToBuy.address,
|
|
672
|
+
token_to_amount: import_starknet4.uint256.bnToUint256(0),
|
|
673
|
+
token_to_min_amount: import_starknet4.uint256.bnToUint256(0),
|
|
674
|
+
beneficiary,
|
|
675
|
+
integrator_fee_amount_bps: 0,
|
|
676
|
+
integrator_fee_recipient: beneficiary,
|
|
677
|
+
routes: []
|
|
678
|
+
};
|
|
679
|
+
}
|
|
680
|
+
};
|
|
681
|
+
|
|
538
682
|
// src/modules/pricer.ts
|
|
539
683
|
var Pricer = class extends PricerBase {
|
|
540
684
|
// e.g. ETH/USDC
|
|
@@ -551,7 +695,7 @@ var Pricer = class extends PricerBase {
|
|
|
551
695
|
*/
|
|
552
696
|
// ! switch to USDC (new) later
|
|
553
697
|
this.PRICE_API = `https://api.coinbase.com/v2/prices/{{PRICER_KEY}}/buy`;
|
|
554
|
-
this.EKUBO_API = "https://
|
|
698
|
+
this.EKUBO_API = "https://prod-api-quoter.ekubo.org/23448594291968334/{{AMOUNT}}/{{TOKEN_ADDRESS}}/0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb";
|
|
555
699
|
this.refreshInterval = refreshInterval;
|
|
556
700
|
this.staleTime = staleTime;
|
|
557
701
|
}
|
|
@@ -685,6 +829,15 @@ var Pricer = class extends PricerBase {
|
|
|
685
829
|
console.warn(`Ekubo: price err [${token.symbol}]: `, error.message);
|
|
686
830
|
console.warn(`Ekubo: price err [${token.symbol}]: `, Object.keys(error));
|
|
687
831
|
}
|
|
832
|
+
case "Avnu":
|
|
833
|
+
try {
|
|
834
|
+
const result = await this._getAvnuPrice(token, new Web3Number(token.priceCheckAmount ? token.priceCheckAmount : 1, token.decimals));
|
|
835
|
+
this.methodToUse[token.symbol] = "Avnu";
|
|
836
|
+
return result;
|
|
837
|
+
} catch (error) {
|
|
838
|
+
console.warn(`Avnu: price err [${token.symbol}]: `, error.message);
|
|
839
|
+
console.warn(`Avnu: price err [${token.symbol}]: `, Object.keys(error));
|
|
840
|
+
}
|
|
688
841
|
}
|
|
689
842
|
if (defaultMethod == "all") {
|
|
690
843
|
return await this._getPrice(token, "Coinbase");
|
|
@@ -700,6 +853,22 @@ var Pricer = class extends PricerBase {
|
|
|
700
853
|
async _getPriceCoinMarketCap(token) {
|
|
701
854
|
throw new Error("Not implemented");
|
|
702
855
|
}
|
|
856
|
+
async _getAvnuPrice(token, amountIn = new Web3Number(1, token.decimals), retry = 0) {
|
|
857
|
+
logger.verbose(`Getting price of ${token.symbol} using Ekubo, amountIn: ${amountIn.toWei()}`);
|
|
858
|
+
const avnuWrapper = new AvnuWrapper();
|
|
859
|
+
const usdcAddress = "0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb";
|
|
860
|
+
const quote = await avnuWrapper.getQuotes(token.address.toString(), usdcAddress, amountIn.toWei(), "0x1");
|
|
861
|
+
const multiplier = 1 / amountIn.toNumber();
|
|
862
|
+
const outputUSDC = Number(Web3Number.fromWei(quote.buyAmount.toString(), 6).toFixed(6)) * multiplier;
|
|
863
|
+
logger.verbose(`Avnu: ${token.symbol} -> USDC: ${outputUSDC}, retry: ${retry}`);
|
|
864
|
+
if (outputUSDC === 0 && retry < 3) {
|
|
865
|
+
const amountIn2 = new Web3Number(100, token.decimals);
|
|
866
|
+
return await this._getAvnuPrice(token, amountIn2, retry + 1);
|
|
867
|
+
}
|
|
868
|
+
const usdcPrice = 1;
|
|
869
|
+
logger.verbose(`USDC Price: ${usdcPrice}`);
|
|
870
|
+
return outputUSDC * usdcPrice;
|
|
871
|
+
}
|
|
703
872
|
async _getPriceEkubo(token, amountIn = new Web3Number(1, token.decimals), retry = 0) {
|
|
704
873
|
logger.verbose(`Getting price of ${token.symbol} using Ekubo, amountIn: ${amountIn.toWei()}`);
|
|
705
874
|
const url = this.EKUBO_API.replace("{{TOKEN_ADDRESS}}", token.address.toString()).replace("{{AMOUNT}}", amountIn.toWei());
|
|
@@ -719,7 +888,7 @@ var Pricer = class extends PricerBase {
|
|
|
719
888
|
};
|
|
720
889
|
|
|
721
890
|
// src/modules/pragma.ts
|
|
722
|
-
var
|
|
891
|
+
var import_starknet5 = require("starknet");
|
|
723
892
|
|
|
724
893
|
// src/data/pragma.abi.json
|
|
725
894
|
var pragma_abi_default = [
|
|
@@ -823,7 +992,7 @@ var pragma_abi_default = [
|
|
|
823
992
|
var Pragma = class {
|
|
824
993
|
constructor(provider2) {
|
|
825
994
|
this.contractAddr = "0x023fb3afbff2c0e3399f896dcf7400acf1a161941cfb386e34a123f228c62832";
|
|
826
|
-
this.contract = new
|
|
995
|
+
this.contract = new import_starknet5.Contract({ abi: pragma_abi_default, address: this.contractAddr, providerOrAccount: provider2 });
|
|
827
996
|
}
|
|
828
997
|
async getPrice(tokenAddr) {
|
|
829
998
|
if (!tokenAddr) {
|
|
@@ -1066,7 +1235,7 @@ var PricerFromApi = class extends PricerBase {
|
|
|
1066
1235
|
};
|
|
1067
1236
|
|
|
1068
1237
|
// src/modules/erc20.ts
|
|
1069
|
-
var
|
|
1238
|
+
var import_starknet6 = require("starknet");
|
|
1070
1239
|
|
|
1071
1240
|
// src/data/erc20.abi.json
|
|
1072
1241
|
var erc20_abi_default = [
|
|
@@ -2199,7 +2368,7 @@ var ERC20 = class {
|
|
|
2199
2368
|
}
|
|
2200
2369
|
contract(addr) {
|
|
2201
2370
|
const _addr = typeof addr === "string" ? addr : addr.address;
|
|
2202
|
-
return new
|
|
2371
|
+
return new import_starknet6.Contract({ abi: erc20_abi_default, address: _addr, providerOrAccount: this.config.provider });
|
|
2203
2372
|
}
|
|
2204
2373
|
async balanceOf(token, address, tokenDecimals) {
|
|
2205
2374
|
const contract = this.contract(token);
|
|
@@ -2213,157 +2382,13 @@ var ERC20 = class {
|
|
|
2213
2382
|
}
|
|
2214
2383
|
};
|
|
2215
2384
|
|
|
2216
|
-
// src/modules/avnu.ts
|
|
2217
|
-
var import_starknet6 = require("starknet");
|
|
2218
|
-
var import_avnu_sdk = require("@avnu/avnu-sdk");
|
|
2219
|
-
|
|
2220
|
-
// src/utils/oz-merkle.ts
|
|
2221
|
-
var import_bytes = require("@ericnordelo/strk-merkle-tree/dist/bytes");
|
|
2222
|
-
var import_core = require("@ericnordelo/strk-merkle-tree/dist/core");
|
|
2223
|
-
var import_hashes = require("@ericnordelo/strk-merkle-tree/dist/hashes");
|
|
2224
|
-
var import_merkletree = require("@ericnordelo/strk-merkle-tree/dist/merkletree");
|
|
2225
|
-
var import_starknet4 = require("starknet");
|
|
2226
|
-
var import_starknet5 = require("@scure/starknet");
|
|
2227
|
-
function hash_leaf(leaf) {
|
|
2228
|
-
if (leaf.data.length < 1) {
|
|
2229
|
-
throw new Error("Invalid leaf data");
|
|
2230
|
-
}
|
|
2231
|
-
let firstElement = leaf.data[0];
|
|
2232
|
-
let value = firstElement;
|
|
2233
|
-
for (let i = 1; i < leaf.data.length; i++) {
|
|
2234
|
-
value = pedersen_hash(value, leaf.data[i]);
|
|
2235
|
-
}
|
|
2236
|
-
return `0x${import_starknet4.num.toHexString(value).replace(/^0x/, "").padStart(64, "0")}`;
|
|
2237
|
-
}
|
|
2238
|
-
function pedersen_hash(a, b) {
|
|
2239
|
-
return BigInt((0, import_starknet5.pedersen)(a, b).toString());
|
|
2240
|
-
}
|
|
2241
|
-
var StandardMerkleTree = class _StandardMerkleTree extends import_merkletree.MerkleTreeImpl {
|
|
2242
|
-
constructor(tree, values, leafEncoding) {
|
|
2243
|
-
super(tree, values, (leaf) => {
|
|
2244
|
-
return hash_leaf(leaf);
|
|
2245
|
-
});
|
|
2246
|
-
this.tree = tree;
|
|
2247
|
-
this.values = values;
|
|
2248
|
-
this.leafEncoding = leafEncoding;
|
|
2249
|
-
}
|
|
2250
|
-
static of(values, leafEncoding = [], options = {}) {
|
|
2251
|
-
const [tree, indexedValues] = import_merkletree.MerkleTreeImpl.prepare(values, options, (leaf) => {
|
|
2252
|
-
return hash_leaf(leaf);
|
|
2253
|
-
});
|
|
2254
|
-
return new _StandardMerkleTree(tree, indexedValues, leafEncoding);
|
|
2255
|
-
}
|
|
2256
|
-
static verify(root, leafEncoding, leaf, proof) {
|
|
2257
|
-
return (0, import_bytes.toHex)(root) === (0, import_core.processProof)((0, import_hashes.standardLeafHash)(leafEncoding, leaf), proof);
|
|
2258
|
-
}
|
|
2259
|
-
static verifyMultiProof(root, leafEncoding, multiproof) {
|
|
2260
|
-
return (0, import_bytes.toHex)(root) === (0, import_core.processMultiProof)({
|
|
2261
|
-
leaves: multiproof.leaves.map((leaf) => (0, import_hashes.standardLeafHash)(leafEncoding, leaf)),
|
|
2262
|
-
proof: multiproof.proof,
|
|
2263
|
-
proofFlags: multiproof.proofFlags
|
|
2264
|
-
});
|
|
2265
|
-
}
|
|
2266
|
-
dump() {
|
|
2267
|
-
return {
|
|
2268
|
-
format: "standard-v1",
|
|
2269
|
-
leafEncoding: this.leafEncoding,
|
|
2270
|
-
tree: this.tree,
|
|
2271
|
-
values: this.values
|
|
2272
|
-
};
|
|
2273
|
-
}
|
|
2274
|
-
};
|
|
2275
|
-
|
|
2276
|
-
// src/utils/index.ts
|
|
2277
|
-
function assert(condition, message) {
|
|
2278
|
-
if (!condition) {
|
|
2279
|
-
throw new Error(message);
|
|
2280
|
-
}
|
|
2281
|
-
}
|
|
2282
|
-
function getTrovesEndpoint() {
|
|
2283
|
-
return process.env.TROVES_ENDPOINT || "https://app.troves.fi";
|
|
2284
|
-
}
|
|
2285
|
-
|
|
2286
|
-
// src/modules/avnu.ts
|
|
2287
|
-
var AvnuWrapper = class {
|
|
2288
|
-
async getQuotes(fromToken, toToken, amountWei, taker, retry = 0, excludeSources = ["Haiko(Solvers)"]) {
|
|
2289
|
-
const MAX_RETRY = 5;
|
|
2290
|
-
const params = {
|
|
2291
|
-
sellTokenAddress: fromToken,
|
|
2292
|
-
buyTokenAddress: toToken,
|
|
2293
|
-
sellAmount: amountWei,
|
|
2294
|
-
takerAddress: taker,
|
|
2295
|
-
// excludeSources: ['Nostra', 'Haiko(Solvers)']
|
|
2296
|
-
excludeSources
|
|
2297
|
-
// excludeSources: ['Haiko(Solvers)'] // to resolve InvalidOraclePrice error
|
|
2298
|
-
};
|
|
2299
|
-
assert(fromToken != toToken, "From and to tokens are the same");
|
|
2300
|
-
const quotes = await (0, import_avnu_sdk.fetchQuotes)(params);
|
|
2301
|
-
const filteredQuotes = quotes.filter((q) => q.sellAmount.toString() == amountWei);
|
|
2302
|
-
if (filteredQuotes.length == 0) {
|
|
2303
|
-
if (retry < MAX_RETRY) {
|
|
2304
|
-
await new Promise((res) => setTimeout(res, 3e3));
|
|
2305
|
-
return await this.getQuotes(fromToken, toToken, amountWei, taker, retry + 1);
|
|
2306
|
-
}
|
|
2307
|
-
throw new Error("no quotes found");
|
|
2308
|
-
}
|
|
2309
|
-
return filteredQuotes[0];
|
|
2310
|
-
}
|
|
2311
|
-
async getSwapInfo(quote, taker, integratorFeeBps, integratorFeeRecipient, minAmount, options) {
|
|
2312
|
-
const calldata = await (0, import_avnu_sdk.fetchBuildExecuteTransaction)(quote.quoteId, taker, void 0, void 0, options);
|
|
2313
|
-
const call = calldata.calls[1];
|
|
2314
|
-
const callData = call.calldata;
|
|
2315
|
-
const routesLen = Number(callData[11]);
|
|
2316
|
-
assert(routesLen > 0, "No routes found");
|
|
2317
|
-
let startIndex = 12;
|
|
2318
|
-
const routes = [];
|
|
2319
|
-
for (let i = 0; i < routesLen; ++i) {
|
|
2320
|
-
const swap_params_len = Number(callData[startIndex + 4]);
|
|
2321
|
-
const route = {
|
|
2322
|
-
token_from: callData[startIndex],
|
|
2323
|
-
token_to: callData[startIndex + 1],
|
|
2324
|
-
exchange_address: callData[startIndex + 2],
|
|
2325
|
-
percent: Number(callData[startIndex + 3]),
|
|
2326
|
-
additional_swap_params: swap_params_len > 0 ? callData.slice(startIndex + 5, startIndex + 5 + swap_params_len) : []
|
|
2327
|
-
};
|
|
2328
|
-
routes.push(route);
|
|
2329
|
-
startIndex += 5 + swap_params_len;
|
|
2330
|
-
}
|
|
2331
|
-
const _minAmount = minAmount || (quote.buyAmount * 95n / 100n).toString();
|
|
2332
|
-
const swapInfo = {
|
|
2333
|
-
token_from_address: quote.sellTokenAddress,
|
|
2334
|
-
token_from_amount: import_starknet6.uint256.bnToUint256(quote.sellAmount),
|
|
2335
|
-
token_to_address: quote.buyTokenAddress,
|
|
2336
|
-
token_to_amount: import_starknet6.uint256.bnToUint256(_minAmount),
|
|
2337
|
-
token_to_min_amount: import_starknet6.uint256.bnToUint256(_minAmount),
|
|
2338
|
-
beneficiary: taker,
|
|
2339
|
-
integrator_fee_amount_bps: integratorFeeBps,
|
|
2340
|
-
integrator_fee_recipient: integratorFeeRecipient,
|
|
2341
|
-
routes
|
|
2342
|
-
};
|
|
2343
|
-
return swapInfo;
|
|
2344
|
-
}
|
|
2345
|
-
static buildZeroSwap(tokenToSell, beneficiary, tokenToBuy = tokenToSell) {
|
|
2346
|
-
return {
|
|
2347
|
-
token_from_address: tokenToSell.address,
|
|
2348
|
-
token_from_amount: import_starknet6.uint256.bnToUint256(0),
|
|
2349
|
-
token_to_address: tokenToBuy.address,
|
|
2350
|
-
token_to_amount: import_starknet6.uint256.bnToUint256(0),
|
|
2351
|
-
token_to_min_amount: import_starknet6.uint256.bnToUint256(0),
|
|
2352
|
-
beneficiary,
|
|
2353
|
-
integrator_fee_amount_bps: 0,
|
|
2354
|
-
integrator_fee_recipient: beneficiary,
|
|
2355
|
-
routes: []
|
|
2356
|
-
};
|
|
2357
|
-
}
|
|
2358
|
-
};
|
|
2359
|
-
|
|
2360
2385
|
// src/modules/ekubo-quoter.ts
|
|
2361
2386
|
var import_axios5 = __toESM(require("axios"));
|
|
2362
2387
|
var EkuboQuoter = class {
|
|
2363
2388
|
// e.g. ETH/USDC'
|
|
2364
2389
|
constructor(config) {
|
|
2365
2390
|
this.config = config;
|
|
2366
|
-
this.ENDPOINT = "https://
|
|
2391
|
+
this.ENDPOINT = "https://prod-api-quoter.ekubo.org/23448594291968334/{{AMOUNT}}/{{TOKEN_FROM_ADDRESS}}/{{TOKEN_TO_ADDRESS}}";
|
|
2367
2392
|
}
|
|
2368
2393
|
/**
|
|
2369
2394
|
*
|
|
@@ -31758,7 +31783,7 @@ var PricerLST2 = class extends Pricer {
|
|
|
31758
31783
|
const staleTime = 6e4;
|
|
31759
31784
|
const allTokens = tokenMaps.map((map) => [map.lst, map.underlying]).flat();
|
|
31760
31785
|
super(config, allTokens, refreshInterval, staleTime);
|
|
31761
|
-
this.EKUBO_API = "https://
|
|
31786
|
+
this.EKUBO_API = "https://prod-api-quoter.ekubo.org/23448594291968334/{{AMOUNT}}/{{TOKEN_ADDRESS}}/{{UNDERLYING_ADDRESS}}";
|
|
31762
31787
|
this.tokenMaps = tokenMaps;
|
|
31763
31788
|
}
|
|
31764
31789
|
isUnderlying(token) {
|