curvance 3.3.4 → 3.3.6

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.
@@ -21,6 +21,17 @@ class FormatConverter {
21
21
  const decimalPrice = FormatConverter.bigIntToUsd(price);
22
22
  return decimalTokens.mul(decimalPrice).toDecimalPlaces(decimals, decimal_js_1.default.ROUND_DOWN);
23
23
  }
24
+ static tokensToTokens(from, to, formatted) {
25
+ const from_value_usd = FormatConverter.decimalTokensToUsd(from.amount, from.price);
26
+ const to_amount = FormatConverter.usdToDecimalTokens(from_value_usd, to.price, to.decimals);
27
+ return formatted ? to_amount : FormatConverter.decimalToBigInt(to_amount, to.decimals);
28
+ }
29
+ /**
30
+ * Convert Decimal representation of tokens to USD representation.
31
+ * @param tokens - The amount of tokens in Decimal representation
32
+ * @param price - The price of a single token in USD (Decimal representation)
33
+ * @returns The equivalent amount in USD
34
+ */
24
35
  static decimalTokensToUsd(tokens, price) {
25
36
  return tokens.mul(price).toDecimalPlaces(18, decimal_js_1.default.ROUND_DOWN);
26
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FormatConverter.js","sourceRoot":"","sources":["../../src/classes/FormatConverter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FormatConverter.js","sourceRoot":"","sources":["../../src/classes/FormatConverter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import Decimal from "decimal.js";
2
+ import { address, curvance_provider } from "../types";
3
+ import { ZapToken } from "./CToken";
4
+ import { Swap } from "./Zapper";
5
+ export default class Kuru {
6
+ api: string;
7
+ static router: address;
8
+ jwt: string | null;
9
+ rps: number;
10
+ dao: address;
11
+ loadJWT(wallet: string): Promise<void>;
12
+ rateLimitSleep(wallet: string): Promise<void>;
13
+ static getAvailableTokens(provider: curvance_provider, query?: string | null): Promise<ZapToken[]>;
14
+ static getCurrentTime(): number;
15
+ static quoteAction(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<{
16
+ action: Swap;
17
+ quote: {
18
+ max_slippage: Decimal;
19
+ type: string;
20
+ status: string;
21
+ output: string;
22
+ minOut: string;
23
+ transaction: {
24
+ calldata: string;
25
+ value: string;
26
+ to: string;
27
+ };
28
+ gasPrices: {
29
+ slow: string;
30
+ standard: string;
31
+ fast: string;
32
+ rapid: string;
33
+ extreme: string;
34
+ };
35
+ };
36
+ }>;
37
+ static quoteMin(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<string>;
38
+ static quote(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<{
39
+ max_slippage: Decimal;
40
+ type: string;
41
+ status: string;
42
+ output: string;
43
+ minOut: string;
44
+ transaction: {
45
+ calldata: string;
46
+ value: string;
47
+ to: string;
48
+ };
49
+ gasPrices: {
50
+ slow: string;
51
+ standard: string;
52
+ fast: string;
53
+ rapid: string;
54
+ extreme: string;
55
+ };
56
+ }>;
57
+ static getSlippage(output: bigint, min_output: bigint): Decimal;
58
+ }
59
+ //# sourceMappingURL=Kuru.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Kuru.d.ts","sourceRoot":"","sources":["../../src/classes/Kuru.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAc,MAAM,UAAU,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAiChC,MAAM,CAAC,OAAO,OAAO,IAAI;IACrB,GAAG,SAAmC;IACtC,MAAM,CAAC,MAAM,EAAmD,OAAO,CAAC;IACxE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1B,GAAG,SAAK;IACR,GAAG,EAAmD,OAAO,CAAC;IAExD,OAAO,CAAC,MAAM,EAAE,MAAM;IAoCtB,cAAc,CAAC,MAAM,EAAE,MAAM;WAatB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW;IAoFxF,MAAM,CAAC,cAAc;WAIR,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;;;;kBArK7H,MAAM;oBACJ,MAAM;oBACN,MAAM;oBACN,MAAM;yBACD;gBACT,QAAQ,EAAE,MAAM,CAAC;gBACjB,KAAK,EAAE,MAAM,CAAC;gBACd,EAAE,EAAE,MAAM,CAAC;aACd;uBACU;gBACP,IAAI,EAAE,MAAM,CAAC;gBACb,QAAQ,EAAE,MAAM,CAAC;gBACjB,IAAI,EAAE,MAAM,CAAC;gBACb,KAAK,EAAE,MAAM,CAAC;gBACd,OAAO,EAAE,MAAM,CAAC;aACnB;;;WAoKY,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;WAKnH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;;cAxLvH,MAAM;gBACJ,MAAM;gBACN,MAAM;gBACN,MAAM;qBACD;YACT,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,EAAE,EAAE,MAAM,CAAC;SACd;mBACU;YACP,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,MAAM,CAAC;SACnB;;IA4ND,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAKxD"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const decimal_js_1 = __importDefault(require("decimal.js"));
7
+ const ERC20_1 = require("./ERC20");
8
+ const helpers_1 = require("../helpers");
9
+ const cached_jwt = new Map();
10
+ const cached_requests = new Map();
11
+ class Kuru {
12
+ api = "https://ws.staging.kuru.io/api";
13
+ static router = "0x96eaC98928437496DdD0Cd2080E54Fe78BaC99b6"; // KuruFlowEntrypoint
14
+ jwt = null;
15
+ rps = 1;
16
+ dao = "0x0Acb7eF4D8733C719d60e0992B489b629bc55C02";
17
+ async loadJWT(wallet) {
18
+ if (cached_jwt.has(wallet)) {
19
+ const cached = cached_jwt.get(wallet);
20
+ const currentTime = Kuru.getCurrentTime();
21
+ if (cached.expires_at > currentTime) {
22
+ this.jwt = cached.token;
23
+ this.rps = cached.rate_limit.rps;
24
+ return;
25
+ }
26
+ else {
27
+ cached_jwt.delete(wallet);
28
+ }
29
+ }
30
+ const resp = await fetch(`${this.api}/generate-token`, {
31
+ method: "POST",
32
+ headers: {
33
+ "Content-Type": "application/json",
34
+ },
35
+ body: JSON.stringify({
36
+ user_address: wallet,
37
+ }),
38
+ keepalive: true
39
+ });
40
+ if (!resp.ok) {
41
+ throw new Error(`Failed to fetch JWT: ${resp.status} ${resp.statusText}`);
42
+ }
43
+ const data = await resp.json();
44
+ this.jwt = data.token;
45
+ this.rps = data.rate_limit.rps;
46
+ cached_jwt.set(wallet, data);
47
+ }
48
+ async rateLimitSleep(wallet) {
49
+ const now = Kuru.getCurrentTime();
50
+ const requests = cached_requests.get(wallet) || [];
51
+ const windowStart = now - 2;
52
+ const recentRequests = requests.filter(timestamp => timestamp > windowStart);
53
+ if (recentRequests.length >= this.rps) {
54
+ const earliestRequest = Math.min(...recentRequests);
55
+ const sleepTime = (earliestRequest + 2) - now;
56
+ await new Promise(resolve => setTimeout(resolve, sleepTime * 2000));
57
+ }
58
+ }
59
+ static async getAvailableTokens(provider, query = null) {
60
+ const signer = (0, helpers_1.validateProviderAsSigner)(provider);
61
+ const userAddress = signer.address;
62
+ let endpoint = `https://api.kuru.io/api/v2/tokens/search?limit=20&userAddress=${userAddress}`;
63
+ if (query) {
64
+ endpoint += `&q=${encodeURIComponent(query)}`;
65
+ }
66
+ const resp = await fetch(endpoint, {
67
+ method: "GET",
68
+ headers: {
69
+ "Content-Type": "application/json",
70
+ }
71
+ });
72
+ if (!resp.ok) {
73
+ throw new Error(`Failed to fetch available tokens: ${resp.status} ${resp.statusText}`);
74
+ }
75
+ const list = await resp.json();
76
+ let tokens = [];
77
+ for (const token of list.data.data) {
78
+ const erc20 = new ERC20_1.ERC20(provider, token.address, {
79
+ address: token.address,
80
+ name: token.name,
81
+ symbol: token.ticker,
82
+ decimals: BigInt(token.decimals ?? 18),
83
+ totalSupply: BigInt(token.total_supply ?? 0),
84
+ balance: BigInt(token.balance ?? 0),
85
+ image: token.imageurl,
86
+ price: (0, decimal_js_1.default)(token.last_price).div(helpers_1.WAD)
87
+ });
88
+ tokens.push({
89
+ interface: erc20,
90
+ type: 'simple',
91
+ quote: async (tokenIn, tokenOut, amount, slippageTolerance = null) => {
92
+ const raw_amount = (0, helpers_1.toBigInt)(amount, 18n);
93
+ const data = await Kuru.quote(signer.address, tokenIn, tokenOut, raw_amount.toString(), slippageTolerance);
94
+ return {
95
+ output: (0, helpers_1.toDecimal)(BigInt(data.output ?? 0), BigInt(token.decimals ?? 18)),
96
+ minOut: (0, helpers_1.toDecimal)(BigInt(data.minOut ?? 0), BigInt(token.decimals ?? 18)),
97
+ max_slippage: data.max_slippage
98
+ };
99
+ }
100
+ });
101
+ }
102
+ return tokens;
103
+ }
104
+ // Get current time in seconds
105
+ static getCurrentTime() {
106
+ return Math.floor(Date.now() / 1000);
107
+ }
108
+ static async quoteAction(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
109
+ const quote = await Kuru.quote(wallet, tokenIn, tokenOut, amount, slippageTolerance);
110
+ const action = {
111
+ inputToken: tokenIn,
112
+ inputAmount: BigInt(amount),
113
+ outputToken: tokenOut,
114
+ target: quote.transaction.to,
115
+ slippage: slippageTolerance ?? 0n,
116
+ call: `0x${quote.transaction.calldata}`
117
+ };
118
+ return { action, quote };
119
+ }
120
+ static async quoteMin(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
121
+ const quote = await Kuru.quote(wallet, tokenIn, tokenOut, amount, slippageTolerance);
122
+ return quote.minOut;
123
+ }
124
+ static async quote(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
125
+ const kuru = new this();
126
+ await kuru.loadJWT(wallet);
127
+ await kuru.rateLimitSleep(wallet);
128
+ const payload = {
129
+ userAddress: wallet,
130
+ tokenIn: tokenIn,
131
+ tokenOut: tokenOut,
132
+ amount: amount,
133
+ referrerAddress: kuru.dao,
134
+ referrerFeeBps: 10,
135
+ };
136
+ if (!slippageTolerance) {
137
+ payload.autoSlippage = true;
138
+ }
139
+ else {
140
+ payload.slippage_tolerance = Number(slippageTolerance);
141
+ }
142
+ cached_requests.set(wallet, (cached_requests.get(wallet) || []).concat(Kuru.getCurrentTime()));
143
+ const resp = await fetch(`${kuru.api}/quote`, {
144
+ method: "POST",
145
+ headers: {
146
+ "Content-Type": "application/json",
147
+ "Authorization": `Bearer ${kuru.jwt}`
148
+ },
149
+ body: JSON.stringify(payload),
150
+ });
151
+ if (!resp.ok) {
152
+ throw new Error(`Failed to fetch quote: ${resp.status} ${resp.statusText}`);
153
+ }
154
+ const data = await resp.json();
155
+ return {
156
+ ...data,
157
+ max_slippage: Kuru.getSlippage(BigInt(data.output ?? 0), BigInt(data.minOut ?? 0))
158
+ };
159
+ }
160
+ static getSlippage(output, min_output) {
161
+ const diff = output - min_output;
162
+ const decimal = (0, decimal_js_1.default)(diff).div(output).mul(100);
163
+ return decimal ?? (0, decimal_js_1.default)(100);
164
+ }
165
+ }
166
+ exports.default = Kuru;
167
+ //# sourceMappingURL=Kuru.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Kuru.js","sourceRoot":"","sources":["../../src/classes/Kuru.ts"],"names":[],"mappings":";;;;;AAAA,4DAAiC;AAEjC,mCAAgC;AAChC,wCAAgF;AAgChF,MAAM,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;AACtD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoB,CAAC;AAEpD,MAAqB,IAAI;IACrB,GAAG,GAAG,gCAAgC,CAAA;IACtC,MAAM,CAAC,MAAM,GAAG,4CAAuD,CAAC,CAAC,qBAAqB;IAC9F,GAAG,GAAkB,IAAI,CAAC;IAC1B,GAAG,GAAG,CAAC,CAAC;IACR,GAAG,GAAG,4CAAuD,CAAC;IAE9D,KAAK,CAAC,OAAO,CAAC,MAAc;QACxB,IAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;YACvC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,IAAG,MAAM,CAAC,UAAU,GAAG,WAAW,EAAE,CAAC;gBACjC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;gBACxB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;gBACjC,OAAO;YACX,CAAC;iBAAM,CAAC;gBACJ,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,iBAAiB,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;aACrC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,YAAY,EAAE,MAAM;aACvB,CAAC;YACF,SAAS,EAAE,IAAI;SAClB,CAAC,CAAC;QAEH,IAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAqB,CAAC;QAElD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAC/B,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,GAAG,GAAG,CAAC,CAAC;QAE5B,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,GAAG,WAAW,CAAC,CAAC;QAC7E,IAAG,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACnC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YAC9C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAA2B,EAAE,QAAuB,IAAI;QACpF,MAAM,MAAM,GAAG,IAAA,kCAAwB,EAAC,QAAQ,CAAC,CAAC;QAElD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;QACnC,IAAI,QAAQ,GAAG,iEAAiE,WAAW,EAAE,CAAC;QAC9F,IAAG,KAAK,EAAE,CAAC;YACP,QAAQ,IAAI,MAAM,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YAC/B,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;aACrC;SACJ,CAAC,CAAC;QAEH,IAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EA0B3B,CAAC;QAEF,IAAI,MAAM,GAAe,EAAE,CAAC;QAC5B,KAAI,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,aAAK,CACnB,QAAQ,EACR,KAAK,CAAC,OAAkB,EACxB;gBACI,OAAO,EAAE,KAAK,CAAC,OAAkB;gBACjC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACtC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;gBAC5C,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;gBACnC,KAAK,EAAE,KAAK,CAAC,QAAQ;gBACrB,KAAK,EAAE,IAAA,oBAAO,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,aAAG,CAAC;aAC5C,CACJ,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC;gBACR,SAAS,EAAE,KAAK;gBAChB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,KAAK,EAAC,OAAe,EAAE,QAAgB,EAAE,MAAkB,EAAE,oBAAmC,IAAI,EAAE,EAAE;oBAC3G,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,iBAAiB,CAAC,CAAC;oBAC3G,OAAO;wBACH,MAAM,EAAE,IAAA,mBAAS,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;wBACzE,MAAM,EAAE,IAAA,mBAAS,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;wBACzE,YAAY,EAAE,IAAI,CAAC,YAAY;qBAClC,CAAC;gBACN,CAAC;aACJ,CAAC,CAAC;QACP,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,MAAM,CAAC,cAAc;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,OAAe,EAAE,QAAgB,EAAE,MAAc,EAAE,oBAAmC,IAAI;QAC/H,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACrF,MAAM,MAAM,GAAG;YACX,UAAU,EAAE,OAAO;YACnB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YAC3B,WAAW,EAAE,QAAQ;YACrB,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE;YAC5B,QAAQ,EAAE,iBAAiB,IAAI,EAAE;YACjC,IAAI,EAAE,KAAK,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE;SAClC,CAAC;QAEV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAAe,EAAE,QAAgB,EAAE,MAAc,EAAE,oBAAmC,IAAI;QAC5H,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACrF,OAAO,KAAK,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,OAAe,EAAE,QAAgB,EAAE,MAAc,EAAE,oBAAmC,IAAI;QACzH,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,OAAO,GAST;YACA,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,MAAM;YACd,eAAe,EAAE,IAAI,CAAC,GAAG;YACzB,cAAc,EAAE,EAAE;SACrB,CAAC;QAEF,IAAG,CAAC,iBAAiB,EAAE,CAAC;YACpB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;QAChC,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC3D,CAAC;QAED,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAC/F,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,QAAQ,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAChC,CAAC,CAAC;QAEH,IAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAuB,CAAC;QAEpD,OAAO;YACH,GAAG,IAAI;YACP,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;SACrF,CAAC;IACN,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,MAAc,EAAE,UAAkB;QACjD,MAAM,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC;QACjC,MAAM,OAAO,GAAG,IAAA,oBAAO,EAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnD,OAAO,OAAO,IAAI,IAAA,oBAAO,EAAC,GAAG,CAAC,CAAC;IACnC,CAAC;;AA1NL,uBA2NC"}
@@ -0,0 +1,59 @@
1
+ import Decimal from "decimal.js";
2
+ import { address, curvance_provider } from "../types";
3
+ import { ZapToken } from "./CToken";
4
+ import { Swap } from "./Zapper";
5
+ export default class KuruMainnet {
6
+ static api: string;
7
+ static router: address;
8
+ jwt: string | null;
9
+ rps: number;
10
+ dao: address;
11
+ loadJWT(wallet: string): Promise<void>;
12
+ rateLimitSleep(wallet: string): Promise<void>;
13
+ static getAvailableTokens(provider: curvance_provider, query?: string | null): Promise<ZapToken[]>;
14
+ static getCurrentTime(): number;
15
+ static quoteAction(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<{
16
+ action: Swap;
17
+ quote: {
18
+ max_slippage: Decimal;
19
+ type: string;
20
+ status: string;
21
+ output: string;
22
+ minOut: string;
23
+ transaction: {
24
+ calldata: string;
25
+ value: string;
26
+ to: string;
27
+ };
28
+ gasPrices: {
29
+ slow: string;
30
+ standard: string;
31
+ fast: string;
32
+ rapid: string;
33
+ extreme: string;
34
+ };
35
+ };
36
+ }>;
37
+ static quoteMin(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<string>;
38
+ static quote(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<{
39
+ max_slippage: Decimal;
40
+ type: string;
41
+ status: string;
42
+ output: string;
43
+ minOut: string;
44
+ transaction: {
45
+ calldata: string;
46
+ value: string;
47
+ to: string;
48
+ };
49
+ gasPrices: {
50
+ slow: string;
51
+ standard: string;
52
+ fast: string;
53
+ rapid: string;
54
+ extreme: string;
55
+ };
56
+ }>;
57
+ static getSlippage(output: bigint, min_output: bigint): Decimal;
58
+ }
59
+ //# sourceMappingURL=KuruMainnet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KuruMainnet.d.ts","sourceRoot":"","sources":["../../src/classes/KuruMainnet.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAc,MAAM,UAAU,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAiChC,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B,MAAM,CAAC,GAAG,SAA2B;IACrC,MAAM,CAAC,MAAM,EAAmD,OAAO,CAAC;IACxE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1B,GAAG,SAAK;IACR,GAAG,EAAmD,OAAO,CAAC;IAExD,OAAO,CAAC,MAAM,EAAE,MAAM;IAoCtB,cAAc,CAAC,MAAM,EAAE,MAAM;WAatB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW;IAoFxF,MAAM,CAAC,cAAc;WAIR,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;;;;kBArK7H,MAAM;oBACJ,MAAM;oBACN,MAAM;oBACN,MAAM;yBACD;gBACT,QAAQ,EAAE,MAAM,CAAC;gBACjB,KAAK,EAAE,MAAM,CAAC;gBACd,EAAE,EAAE,MAAM,CAAC;aACd;uBACU;gBACP,IAAI,EAAE,MAAM,CAAC;gBACb,QAAQ,EAAE,MAAM,CAAC;gBACjB,IAAI,EAAE,MAAM,CAAC;gBACb,KAAK,EAAE,MAAM,CAAC;gBACd,OAAO,EAAE,MAAM,CAAC;aACnB;;;WAoKY,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;WAKnH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;;cAxLvH,MAAM;gBACJ,MAAM;gBACN,MAAM;gBACN,MAAM;qBACD;YACT,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,EAAE,EAAE,MAAM,CAAC;SACd;mBACU;YACP,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,MAAM,CAAC;SACnB;;IA4ND,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAKxD"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const decimal_js_1 = __importDefault(require("decimal.js"));
7
+ const ERC20_1 = require("./ERC20");
8
+ const helpers_1 = require("../helpers");
9
+ const cached_jwt = new Map();
10
+ const cached_requests = new Map();
11
+ class KuruMainnet {
12
+ static api = "https://ws.kuru.io/api";
13
+ static router = "0xb3e6778480b2E488385E8205eA05E20060B813cb"; // KuruFlowEntrypoint
14
+ jwt = null;
15
+ rps = 1;
16
+ dao = "0x0Acb7eF4D8733C719d60e0992B489b629bc55C02";
17
+ async loadJWT(wallet) {
18
+ if (cached_jwt.has(wallet)) {
19
+ const cached = cached_jwt.get(wallet);
20
+ const currentTime = KuruMainnet.getCurrentTime();
21
+ if (cached.expires_at > currentTime) {
22
+ this.jwt = cached.token;
23
+ this.rps = cached.rate_limit.rps;
24
+ return;
25
+ }
26
+ else {
27
+ cached_jwt.delete(wallet);
28
+ }
29
+ }
30
+ const resp = await fetch(`${KuruMainnet.api}/generate-token`, {
31
+ method: "POST",
32
+ headers: {
33
+ "Content-Type": "application/json",
34
+ },
35
+ body: JSON.stringify({
36
+ user_address: wallet,
37
+ }),
38
+ keepalive: true
39
+ });
40
+ if (!resp.ok) {
41
+ throw new Error(`Failed to fetch JWT: ${resp.status} ${resp.statusText}`);
42
+ }
43
+ const data = await resp.json();
44
+ this.jwt = data.token;
45
+ this.rps = data.rate_limit.rps;
46
+ cached_jwt.set(wallet, data);
47
+ }
48
+ async rateLimitSleep(wallet) {
49
+ const now = KuruMainnet.getCurrentTime();
50
+ const requests = cached_requests.get(wallet) || [];
51
+ const windowStart = now - 2;
52
+ const recentRequests = requests.filter(timestamp => timestamp > windowStart);
53
+ if (recentRequests.length >= this.rps) {
54
+ const earliestRequest = Math.min(...recentRequests);
55
+ const sleepTime = (earliestRequest + 2) - now;
56
+ await new Promise(resolve => setTimeout(resolve, sleepTime * 2000));
57
+ }
58
+ }
59
+ static async getAvailableTokens(provider, query = null) {
60
+ const signer = (0, helpers_1.validateProviderAsSigner)(provider);
61
+ const userAddress = signer.address;
62
+ let endpoint = `https://api.kuru.io/api/v2/tokens/search?limit=20&userAddress=${userAddress}`;
63
+ if (query) {
64
+ endpoint += `&q=${encodeURIComponent(query)}`;
65
+ }
66
+ const resp = await fetch(endpoint, {
67
+ method: "GET",
68
+ headers: {
69
+ "Content-Type": "application/json",
70
+ }
71
+ });
72
+ if (!resp.ok) {
73
+ throw new Error(`Failed to fetch available tokens: ${resp.status} ${resp.statusText}`);
74
+ }
75
+ const list = await resp.json();
76
+ let tokens = [];
77
+ for (const token of list.data.data) {
78
+ const erc20 = new ERC20_1.ERC20(provider, token.address, {
79
+ address: token.address,
80
+ name: token.name,
81
+ symbol: token.ticker,
82
+ decimals: BigInt(token.decimals ?? 18),
83
+ totalSupply: BigInt(token.total_supply ?? 0),
84
+ balance: BigInt(token.balance ?? 0),
85
+ image: token.imageurl,
86
+ price: (0, decimal_js_1.default)(token.last_price).div(helpers_1.WAD)
87
+ });
88
+ tokens.push({
89
+ interface: erc20,
90
+ type: 'simple',
91
+ quote: async (tokenIn, tokenOut, amount, slippageTolerance = null) => {
92
+ const raw_amount = (0, helpers_1.toBigInt)(amount, 18n);
93
+ const data = await KuruMainnet.quote(signer.address, tokenIn, tokenOut, raw_amount.toString(), slippageTolerance);
94
+ return {
95
+ output: (0, helpers_1.toDecimal)(BigInt(data.output ?? 0), BigInt(token.decimals ?? 18)),
96
+ minOut: (0, helpers_1.toDecimal)(BigInt(data.minOut ?? 0), BigInt(token.decimals ?? 18)),
97
+ max_slippage: data.max_slippage
98
+ };
99
+ }
100
+ });
101
+ }
102
+ return tokens;
103
+ }
104
+ // Get current time in seconds
105
+ static getCurrentTime() {
106
+ return Math.floor(Date.now() / 1000);
107
+ }
108
+ static async quoteAction(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
109
+ const quote = await KuruMainnet.quote(wallet, tokenIn, tokenOut, amount, slippageTolerance);
110
+ const action = {
111
+ inputToken: tokenIn,
112
+ inputAmount: BigInt(amount),
113
+ outputToken: tokenOut,
114
+ target: quote.transaction.to,
115
+ slippage: slippageTolerance ?? 0n,
116
+ call: `0x${quote.transaction.calldata}`
117
+ };
118
+ return { action, quote };
119
+ }
120
+ static async quoteMin(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
121
+ const quote = await KuruMainnet.quote(wallet, tokenIn, tokenOut, amount, slippageTolerance);
122
+ return quote.minOut;
123
+ }
124
+ static async quote(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
125
+ const kuru = new this();
126
+ await kuru.loadJWT(wallet);
127
+ await kuru.rateLimitSleep(wallet);
128
+ const payload = {
129
+ userAddress: wallet,
130
+ tokenIn: tokenIn,
131
+ tokenOut: tokenOut,
132
+ amount: amount,
133
+ referrerAddress: kuru.dao,
134
+ referrerFeeBps: 10,
135
+ };
136
+ if (!slippageTolerance) {
137
+ payload.autoSlippage = true;
138
+ }
139
+ else {
140
+ payload.slippage_tolerance = Number(slippageTolerance);
141
+ }
142
+ cached_requests.set(wallet, (cached_requests.get(wallet) || []).concat(KuruMainnet.getCurrentTime()));
143
+ const resp = await fetch(`${KuruMainnet.api}/quote`, {
144
+ method: "POST",
145
+ headers: {
146
+ "Content-Type": "application/json",
147
+ "Authorization": `Bearer ${kuru.jwt}`
148
+ },
149
+ body: JSON.stringify(payload),
150
+ });
151
+ if (!resp.ok) {
152
+ throw new Error(`Failed to fetch quote: ${resp.status} ${resp.statusText}`);
153
+ }
154
+ const data = await resp.json();
155
+ return {
156
+ ...data,
157
+ max_slippage: KuruMainnet.getSlippage(BigInt(data.output ?? 0), BigInt(data.minOut ?? 0))
158
+ };
159
+ }
160
+ static getSlippage(output, min_output) {
161
+ const diff = output - min_output;
162
+ const decimal = (0, decimal_js_1.default)(diff).div(output).mul(100);
163
+ return decimal ?? (0, decimal_js_1.default)(100);
164
+ }
165
+ }
166
+ exports.default = KuruMainnet;
167
+ //# sourceMappingURL=KuruMainnet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KuruMainnet.js","sourceRoot":"","sources":["../../src/classes/KuruMainnet.ts"],"names":[],"mappings":"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"}
@@ -246,6 +246,10 @@ export declare class Market {
246
246
  multiHoldExpiresAt(markets: Market[]): Promise<{
247
247
  [address: `0x${string}`]: Date | null;
248
248
  }>;
249
+ static fetchNativeYields(): Promise<{
250
+ symbol: string;
251
+ apy: number;
252
+ }[]>;
249
253
  /**
250
254
  * Grab all the markets available and set them up using the protocol reader efficient RPC calls / API cached calls
251
255
  * @param reader - instace of the ProtocolReader class
@@ -1 +1 @@
1
- {"version":3,"file":"Market.d.ts","sourceRoot":"","sources":["../../src/classes/Market.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Market.d.ts","sourceRoot":"","sources":["../../src/classes/Market.ts"],"names":[],"mappings":"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"}
@@ -353,8 +353,7 @@ class Market {
353
353
  if (redeem_amount > existing_collateral) {
354
354
  throw new Error(`Insufficient collateral: Existing (${existing_collateral}) < Redeem amount (${redeem_amount})`);
355
355
  }
356
- const new_collateral = existing_collateral - redeem_amount;
357
- const data = await this.reader.getPositionHealth(this.address, user, ctoken.address, helpers_1.EMPTY_ADDRESS, false, new_collateral, false, 0n, 0n);
356
+ const data = await this.reader.getPositionHealth(this.address, user, ctoken.address, helpers_1.EMPTY_ADDRESS, false, redeem_amount, false, 0n, 0n);
358
357
  if (data.errorCodeHit) {
359
358
  throw new Error(`Error code hit when calculating position health preview. This usually means price is stale so we couldn't get a valid health value.`);
360
359
  }
@@ -378,7 +377,7 @@ class Market {
378
377
  async previewPositionHealthBorrow(token, amount) {
379
378
  const provider = (0, helpers_1.validateProviderAsSigner)(this.provider);
380
379
  const user = provider.address;
381
- const data = await this.reader.getPositionHealth(this.address, user, helpers_1.EMPTY_ADDRESS, token.address, false, 0n, false, (0, helpers_1.toBigInt)(amount, token.decimals), 0n);
380
+ const data = await this.reader.getPositionHealth(this.address, user, helpers_1.EMPTY_ADDRESS, token.address, false, 0n, false, FormatConverter_1.default.decimalToBigInt(amount, token.decimals), 0n);
382
381
  if (data.errorCodeHit) {
383
382
  throw new Error(`Error code hit when calculating position health preview. This usually means price is stale so we couldn't get a valid health value.`);
384
383
  }
@@ -393,7 +392,7 @@ class Market {
393
392
  async previewPositionHealthRepay(token, amount) {
394
393
  const provider = (0, helpers_1.validateProviderAsSigner)(this.provider);
395
394
  const user = provider.address;
396
- const data = await this.reader.getPositionHealth(this.address, user, helpers_1.EMPTY_ADDRESS, token.address, false, 0n, true, (0, helpers_1.toBigInt)(amount, token.decimals), 0n);
395
+ const data = await this.reader.getPositionHealth(this.address, user, helpers_1.EMPTY_ADDRESS, token.address, false, 0n, true, FormatConverter_1.default.decimalToBigInt(amount, token.decimals), 0n);
397
396
  if (data.errorCodeHit) {
398
397
  throw new Error(`Error code hit when calculating position health preview. This usually means price is stale so we couldn't get a valid health value.`);
399
398
  }
@@ -443,6 +442,30 @@ class Market {
443
442
  }
444
443
  return cooldowns;
445
444
  }
445
+ static async fetchNativeYields() {
446
+ if (setup_1.setup_config.api_url == null) {
447
+ console.error("You must have an API URL setup to fetch native yields.");
448
+ return [];
449
+ }
450
+ let chain = setup_1.setup_config.chain;
451
+ if (chain == 'monad-mainnet') {
452
+ chain = 'monad';
453
+ }
454
+ try {
455
+ const res = await fetch(`${setup_1.setup_config.api_url}/v1/${chain}/native_apy`);
456
+ const yields = await res.json();
457
+ // Add validation
458
+ if (!yields || !yields.native_apy || !Array.isArray(yields.native_apy)) {
459
+ console.error("Invalid API response structure for native yields");
460
+ return [];
461
+ }
462
+ return yields.native_apy;
463
+ }
464
+ catch (error) {
465
+ console.error("Error fetching native yields:", error);
466
+ return [];
467
+ }
468
+ }
446
469
  /**
447
470
  * Grab all the markets available and set them up using the protocol reader efficient RPC calls / API cached calls
448
471
  * @param reader - instace of the ProtocolReader class
@@ -454,6 +477,7 @@ class Market {
454
477
  const user = "address" in provider ? provider.address : helpers_1.EMPTY_ADDRESS;
455
478
  const all_data = await reader.getAllMarketData(user);
456
479
  const deploy_keys = Object.keys(setup_1.setup_config.contracts.markets);
480
+ const yields = await Market.fetchNativeYields();
457
481
  let markets = [];
458
482
  for (let i = 0; i < all_data.staticMarket.length; i++) {
459
483
  const staticData = all_data.staticMarket[i];
@@ -497,6 +521,12 @@ class Market {
497
521
  if (incentives[market.address] != undefined) {
498
522
  market.incentives = incentives[market.address];
499
523
  }
524
+ for (const token of market.tokens) {
525
+ const api_yield = yields.find(y => y.symbol.toUpperCase() == token.asset.symbol.toUpperCase());
526
+ if (api_yield != undefined) {
527
+ token.nativeYield = api_yield.apy;
528
+ }
529
+ }
500
530
  markets.push(market);
501
531
  }
502
532
  return markets;