sally-defi-ts-sdk 0.3.2

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.
Files changed (125) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +263 -0
  3. package/dist/aio/client.d.ts +93 -0
  4. package/dist/aio/client.d.ts.map +1 -0
  5. package/dist/aio/client.js +283 -0
  6. package/dist/aio/client.js.map +1 -0
  7. package/dist/aio/index.d.ts +20 -0
  8. package/dist/aio/index.d.ts.map +1 -0
  9. package/dist/aio/index.js +19 -0
  10. package/dist/aio/index.js.map +1 -0
  11. package/dist/aio/modules/fees.d.ts +19 -0
  12. package/dist/aio/modules/fees.d.ts.map +1 -0
  13. package/dist/aio/modules/fees.js +47 -0
  14. package/dist/aio/modules/fees.js.map +1 -0
  15. package/dist/aio/modules/liquidity.d.ts +47 -0
  16. package/dist/aio/modules/liquidity.d.ts.map +1 -0
  17. package/dist/aio/modules/liquidity.js +115 -0
  18. package/dist/aio/modules/liquidity.js.map +1 -0
  19. package/dist/aio/modules/prices.d.ts +18 -0
  20. package/dist/aio/modules/prices.d.ts.map +1 -0
  21. package/dist/aio/modules/prices.js +48 -0
  22. package/dist/aio/modules/prices.js.map +1 -0
  23. package/dist/aio/modules/swap.d.ts +50 -0
  24. package/dist/aio/modules/swap.d.ts.map +1 -0
  25. package/dist/aio/modules/swap.js +267 -0
  26. package/dist/aio/modules/swap.js.map +1 -0
  27. package/dist/aio/modules/wallet.d.ts +13 -0
  28. package/dist/aio/modules/wallet.d.ts.map +1 -0
  29. package/dist/aio/modules/wallet.js +27 -0
  30. package/dist/aio/modules/wallet.js.map +1 -0
  31. package/dist/aio/token.d.ts +19 -0
  32. package/dist/aio/token.d.ts.map +1 -0
  33. package/dist/aio/token.js +50 -0
  34. package/dist/aio/token.js.map +1 -0
  35. package/dist/client.d.ts +142 -0
  36. package/dist/client.d.ts.map +1 -0
  37. package/dist/client.js +452 -0
  38. package/dist/client.js.map +1 -0
  39. package/dist/constants.d.ts +36 -0
  40. package/dist/constants.d.ts.map +1 -0
  41. package/dist/constants.js +39 -0
  42. package/dist/constants.js.map +1 -0
  43. package/dist/data/deployment.json +1 -0
  44. package/dist/deployment.d.ts +44 -0
  45. package/dist/deployment.d.ts.map +1 -0
  46. package/dist/deployment.js +118 -0
  47. package/dist/deployment.js.map +1 -0
  48. package/dist/errors.d.ts +57 -0
  49. package/dist/errors.d.ts.map +1 -0
  50. package/dist/errors.js +197 -0
  51. package/dist/errors.js.map +1 -0
  52. package/dist/index.d.ts +48 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +47 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/modules/fees.d.ts +32 -0
  57. package/dist/modules/fees.d.ts.map +1 -0
  58. package/dist/modules/fees.js +64 -0
  59. package/dist/modules/fees.js.map +1 -0
  60. package/dist/modules/liquidity.d.ts +134 -0
  61. package/dist/modules/liquidity.d.ts.map +1 -0
  62. package/dist/modules/liquidity.js +277 -0
  63. package/dist/modules/liquidity.js.map +1 -0
  64. package/dist/modules/prices.d.ts +47 -0
  65. package/dist/modules/prices.d.ts.map +1 -0
  66. package/dist/modules/prices.js +85 -0
  67. package/dist/modules/prices.js.map +1 -0
  68. package/dist/modules/swap.d.ts +102 -0
  69. package/dist/modules/swap.d.ts.map +1 -0
  70. package/dist/modules/swap.js +400 -0
  71. package/dist/modules/swap.js.map +1 -0
  72. package/dist/modules/wallet.d.ts +16 -0
  73. package/dist/modules/wallet.d.ts.map +1 -0
  74. package/dist/modules/wallet.js +30 -0
  75. package/dist/modules/wallet.js.map +1 -0
  76. package/dist/permit2.d.ts +97 -0
  77. package/dist/permit2.d.ts.map +1 -0
  78. package/dist/permit2.js +130 -0
  79. package/dist/permit2.js.map +1 -0
  80. package/dist/previews.d.ts +57 -0
  81. package/dist/previews.d.ts.map +1 -0
  82. package/dist/previews.js +69 -0
  83. package/dist/previews.js.map +1 -0
  84. package/dist/safety.d.ts +80 -0
  85. package/dist/safety.d.ts.map +1 -0
  86. package/dist/safety.js +133 -0
  87. package/dist/safety.js.map +1 -0
  88. package/dist/token.d.ts +215 -0
  89. package/dist/token.d.ts.map +1 -0
  90. package/dist/token.js +239 -0
  91. package/dist/token.js.map +1 -0
  92. package/dist/types.d.ts +229 -0
  93. package/dist/types.d.ts.map +1 -0
  94. package/dist/types.js +462 -0
  95. package/dist/types.js.map +1 -0
  96. package/dist/util.d.ts +13 -0
  97. package/dist/util.d.ts.map +1 -0
  98. package/dist/util.js +22 -0
  99. package/dist/util.js.map +1 -0
  100. package/package.json +48 -0
  101. package/src/aio/client.ts +329 -0
  102. package/src/aio/index.ts +20 -0
  103. package/src/aio/modules/fees.ts +60 -0
  104. package/src/aio/modules/liquidity.ts +181 -0
  105. package/src/aio/modules/prices.ts +57 -0
  106. package/src/aio/modules/swap.ts +347 -0
  107. package/src/aio/modules/wallet.ts +34 -0
  108. package/src/aio/token.ts +59 -0
  109. package/src/client.ts +526 -0
  110. package/src/constants.ts +43 -0
  111. package/src/data/deployment.json +1 -0
  112. package/src/deployment.ts +132 -0
  113. package/src/errors.ts +215 -0
  114. package/src/index.ts +90 -0
  115. package/src/modules/fees.ts +78 -0
  116. package/src/modules/liquidity.ts +446 -0
  117. package/src/modules/prices.ts +97 -0
  118. package/src/modules/swap.ts +502 -0
  119. package/src/modules/wallet.ts +37 -0
  120. package/src/permit2.ts +169 -0
  121. package/src/previews.ts +95 -0
  122. package/src/safety.ts +152 -0
  123. package/src/token.ts +254 -0
  124. package/src/types.ts +438 -0
  125. package/src/util.ts +20 -0
package/dist/client.js ADDED
@@ -0,0 +1,452 @@
1
+ /**
2
+ * The one object users hold: {@link SallyClient}.
3
+ *
4
+ * Every read is a direct `eth_call` to the on-chain contracts through your RPC —
5
+ * no API, no subgraph / Graph Node, no backend in the data path.
6
+ *
7
+ * Reads work with just an RPC URL. Writes need a signer — pass a `privateKey`, a
8
+ * 12/24-word `mnemonic`, or an ethers `Wallet`/`HDNodeWallet`. To sign with your
9
+ * **own** wallet instead, pass only `address` (no key) and use the build/preview
10
+ * API: every action can return a fully-populated, ABI-decoded, simulated
11
+ * *unsigned* transaction you sign and broadcast yourself.
12
+ *
13
+ * Feature namespaces:
14
+ *
15
+ * client.prices USD / spot pricing + token safety
16
+ * client.swap quote + execute hybrid swaps (+ build/preview)
17
+ * client.wallet balances with live USD valuation
18
+ * client.liquidity add / remove / lock / harvest / positions
19
+ * client.fees referral + batch fee accounting
20
+ */
21
+ import { Contract, HDNodeWallet, JsonRpcProvider, Network, Wallet, getAddress, } from "ethers";
22
+ import * as deployment from "./deployment.js";
23
+ import { SallyConfigError, SallyError, SallyRevert, wrapWeb3Error } from "./errors.js";
24
+ import { SafetyConfig } from "./safety.js";
25
+ import { Token } from "./token.js";
26
+ import { TxPreview } from "./previews.js";
27
+ import { Permit2 } from "./permit2.js";
28
+ import { Prices } from "./modules/prices.js";
29
+ import { Swap } from "./modules/swap.js";
30
+ import { Wallet as WalletModule } from "./modules/wallet.js";
31
+ import { Liquidity } from "./modules/liquidity.js";
32
+ import { Fees } from "./modules/fees.js";
33
+ // Process-wide nonce locks keyed by signer address, so concurrent sends from the
34
+ // same account — even across different SallyClient instances — serialize.
35
+ const _NONCE_LOCKS = new Map();
36
+ function lockFor(address) {
37
+ if (address === null)
38
+ return new AsyncMutex(); // read-only client: lock unused
39
+ const key = address.toLowerCase();
40
+ let lock = _NONCE_LOCKS.get(key);
41
+ if (!lock) {
42
+ lock = new AsyncMutex();
43
+ _NONCE_LOCKS.set(key, lock);
44
+ }
45
+ return lock;
46
+ }
47
+ /** Minimal async mutex: serialize an async critical section. */
48
+ class AsyncMutex {
49
+ _chain = Promise.resolve();
50
+ async run(fn) {
51
+ const prev = this._chain;
52
+ let release;
53
+ this._chain = new Promise((res) => (release = res));
54
+ await prev;
55
+ try {
56
+ return await fn();
57
+ }
58
+ finally {
59
+ release();
60
+ }
61
+ }
62
+ }
63
+ export class SallyClient {
64
+ chainKey;
65
+ chainId;
66
+ safety;
67
+ privateRpcUrl;
68
+ _privateW3 = null;
69
+ w3;
70
+ gasMultiplier;
71
+ account = null;
72
+ _sender = null;
73
+ _sendLock;
74
+ addresses;
75
+ // lazy namespace + contract caches
76
+ _cache = {};
77
+ constructor(chain = "base", rpcUrl, opts = {}) {
78
+ this.chainKey = deployment.normalizeChain(chain);
79
+ this.chainId = deployment.chainId(this.chainKey);
80
+ this.safety = opts.safety ?? new SafetyConfig();
81
+ this.privateRpcUrl = opts.privateRpcUrl ?? process.env.SALLY_PRIVATE_RPC_URL ?? null;
82
+ this.gasMultiplier = opts.gasMultiplier ?? 1.25;
83
+ rpcUrl = rpcUrl ?? process.env.SALLY_RPC_URL ?? null;
84
+ if (!rpcUrl) {
85
+ throw new SallyConfigError("No rpcUrl given and SALLY_RPC_URL is unset. " +
86
+ "Pass rpcUrl='https://…' or set the env var.");
87
+ }
88
+ // Static network so construction never triggers a chainId auto-detect call.
89
+ const network = Network.from(this.chainId);
90
+ this.w3 = new JsonRpcProvider(rpcUrl, network, { staticNetwork: network });
91
+ // POA: ethers handles non-standard extraData natively; flag kept for parity.
92
+ void (opts.poa ?? this.chainKey === "bsc");
93
+ // Signer resolution: account > privateKey > mnemonic. `address` (no key)
94
+ // enables sign-externally mode.
95
+ const key = opts.privateKey ?? process.env.SALLY_PRIVATE_KEY ?? null;
96
+ const phrase = opts.mnemonic ?? process.env.SALLY_MNEMONIC ?? null;
97
+ if (opts.account != null) {
98
+ this.account = opts.account;
99
+ }
100
+ else if (key) {
101
+ this.account = new Wallet(key);
102
+ }
103
+ else if (phrase) {
104
+ const idx = opts.accountIndex ?? 0;
105
+ this.account = HDNodeWallet.fromPhrase(phrase, undefined, `m/44'/60'/0'/0/${idx}`);
106
+ }
107
+ this._sender = this.account
108
+ ? this._accountAddress(this.account)
109
+ : opts.address
110
+ ? getAddress(opts.address)
111
+ : null;
112
+ this._sendLock = lockFor(this._sender);
113
+ this.addresses = Object.fromEntries(Object.entries(deployment.addresses(this.chainKey)).map(([k, v]) => [
114
+ k,
115
+ v.startsWith("0x") ? getAddress(v) : v,
116
+ ]));
117
+ }
118
+ _accountAddress(acc) {
119
+ // Wallet/HDNodeWallet expose `.address` synchronously.
120
+ return getAddress(acc.address);
121
+ }
122
+ // ------------------------------------------------------------------ //
123
+ // Connection / identity
124
+ // ------------------------------------------------------------------ //
125
+ async isConnected() {
126
+ try {
127
+ await this.w3.getBlockNumber();
128
+ return true;
129
+ }
130
+ catch {
131
+ return false;
132
+ }
133
+ }
134
+ /** Sender address — from the signer, or the keyless `address` mode. */
135
+ get address() {
136
+ return this._sender;
137
+ }
138
+ get canSign() {
139
+ return this.account !== null;
140
+ }
141
+ /** The sender address (needs a signer OR keyless `address`). */
142
+ requireAddress() {
143
+ if (!this._sender) {
144
+ throw new SallyConfigError("This action needs a sender. Create the client with privateKey=…, " +
145
+ "mnemonic=…, or address='0x…' (sign-externally mode).");
146
+ }
147
+ return this._sender;
148
+ }
149
+ /** The local signing account (needs a key/mnemonic, not just `address`). */
150
+ requireSigner() {
151
+ if (this.account === null) {
152
+ throw new SallyConfigError("This action signs a transaction and needs a key. Pass privateKey=… " +
153
+ "or mnemonic=…, or use buildOnly=true / .preview() to sign externally.");
154
+ }
155
+ return this.account;
156
+ }
157
+ /** Return a new client on the same RPC/config but with a different signer. */
158
+ withAccount(privateKey) {
159
+ const c = Object.create(SallyClient.prototype);
160
+ Object.assign(c, this);
161
+ c.account = new Wallet(privateKey);
162
+ c._sender = c._accountAddress(c.account);
163
+ c._sendLock = lockFor(c._sender);
164
+ c._privateW3 = null;
165
+ c._cache = {};
166
+ return c;
167
+ }
168
+ // ------------------------------------------------------------------ //
169
+ // Contracts (proxy-fallback aware)
170
+ // ------------------------------------------------------------------ //
171
+ _contract(address, component) {
172
+ return new Contract(getAddress(address), deployment.abi(this.chainKey, component), this.w3);
173
+ }
174
+ _cached(key, make) {
175
+ if (!(key in this._cache))
176
+ this._cache[key] = make();
177
+ return this._cache[key];
178
+ }
179
+ get swapContract() {
180
+ return this._cached("swapContract", () => this._contract(this.addresses["swap"], "swap"));
181
+ }
182
+ get liquidityContract() {
183
+ return this._cached("liquidityContract", () => this._contract(this.addresses["liquidity"], "liquidity"));
184
+ }
185
+ /** Lens ABI bound to the **swap proxy** (v2.0.2 read-fallback). */
186
+ get lensContract() {
187
+ return this._cached("lensContract", () => this._contract(this.addresses["lens"], "lens"));
188
+ }
189
+ /** Sidecar ABI bound to the **liq proxy** (v2.0.2 read-fallback). */
190
+ get sidecarContract() {
191
+ return this._cached("sidecarContract", () => this._contract(this.addresses["sidecar"], "sidecar"));
192
+ }
193
+ token(address) {
194
+ return new Token(this, address);
195
+ }
196
+ // ------------------------------------------------------------------ //
197
+ // Call / simulate / send
198
+ // ------------------------------------------------------------------ //
199
+ /** Execute a read (`eth_call`). Decodes reverts into SallyRevert. */
200
+ async call(fn, args = [], opts = {}) {
201
+ const overrides = {};
202
+ if (opts.value)
203
+ overrides.value = opts.value;
204
+ const sender = opts.sender ?? this.address;
205
+ if (sender)
206
+ overrides.from = sender;
207
+ try {
208
+ return await fn.staticCall(...args, overrides);
209
+ }
210
+ catch (exc) {
211
+ throw wrapWeb3Error(this.chainKey, exc);
212
+ }
213
+ }
214
+ /** Dry-run a state-changing call without sending (revert-safe preview). */
215
+ async simulate(fn, args = [], opts = {}) {
216
+ return this.call(fn, args, { value: opts.value, sender: this.address });
217
+ }
218
+ async estimateGas(fn, args = [], opts = {}) {
219
+ const overrides = { from: this.requireAddress() };
220
+ if (opts.value)
221
+ overrides.value = opts.value;
222
+ try {
223
+ return BigInt(await fn.estimateGas(...args, overrides));
224
+ }
225
+ catch (exc) {
226
+ throw wrapWeb3Error(this.chainKey, exc);
227
+ }
228
+ }
229
+ /** Build a fully-populated, signable EIP-1559 transaction. */
230
+ async buildTx(fn, args = [], opts = {}) {
231
+ const sender = this.requireAddress();
232
+ const overrides = { from: sender };
233
+ if (opts.value)
234
+ overrides.value = opts.value;
235
+ let tx;
236
+ try {
237
+ tx = { ...(await fn.populateTransaction(...args, overrides)) };
238
+ }
239
+ catch (exc) {
240
+ throw wrapWeb3Error(this.chainKey, exc);
241
+ }
242
+ tx.nonce = await this.w3.getTransactionCount(sender, "pending");
243
+ tx.chainId = this.chainId;
244
+ if (opts.value)
245
+ tx.value = opts.value;
246
+ // EIP-1559 fees (fall back to legacy gasPrice on chains without baseFee).
247
+ const latest = await this.w3.getBlock("latest");
248
+ const feeData = await this.w3.getFeeData();
249
+ if (latest && latest.baseFeePerGas != null) {
250
+ let tip = feeData.maxPriorityFeePerGas;
251
+ if (tip == null)
252
+ tip = 1000000000n; // 1 gwei fallback
253
+ tx.maxPriorityFeePerGas = tip;
254
+ tx.maxFeePerGas = tip + 2n * latest.baseFeePerGas;
255
+ tx.type = 2;
256
+ delete tx.gasPrice;
257
+ }
258
+ else {
259
+ tx.gasPrice = feeData.gasPrice ?? 0n;
260
+ tx.type = 0;
261
+ }
262
+ // Gas estimate + safety buffer (state-dependent txs can cost more at
263
+ // execution than at estimation). Explicit `gas` overrides below.
264
+ let gas = opts.gas ?? null;
265
+ if (gas === null) {
266
+ gas = await this.estimateGas(fn, args, { value: opts.value });
267
+ if (this.gasMultiplier && this.gasMultiplier !== 1.0) {
268
+ gas = (gas * BigInt(Math.round(this.gasMultiplier * 1000))) / 1000n;
269
+ }
270
+ }
271
+ tx.gasLimit = gas;
272
+ delete tx.gas;
273
+ return tx;
274
+ }
275
+ /**
276
+ * Build -> sign -> send a transaction.
277
+ *
278
+ * With `buildOnly=true` returns the fully-populated **unsigned** tx (no key
279
+ * required — only a sender `address`); sign and broadcast it with your own
280
+ * wallet. Otherwise: with `wait=true` (default) returns the mined receipt and
281
+ * raises SallyRevert on a failed (status 0) tx; with `wait=false` returns the
282
+ * tx hash. `simulate=true` does a cheap `eth_call` first so reverts surface
283
+ * *before* you spend gas.
284
+ *
285
+ * `private` broadcasts through `privateRpcUrl` (a private mempool / MEV-relay).
286
+ * `timeout` (seconds) bounds the receipt wait.
287
+ */
288
+ async send(fn, args = [], opts = {}) {
289
+ const value = opts.value ?? 0n;
290
+ const wait = opts.wait ?? true;
291
+ const simulate = opts.simulate ?? true;
292
+ const timeout = opts.timeout ?? 180;
293
+ if (simulate) {
294
+ await this.simulate(fn, args, { value });
295
+ }
296
+ if (opts.buildOnly) {
297
+ return this.buildTx(fn, args, { value, gas: opts.gas ?? null });
298
+ }
299
+ const account = this.requireSigner();
300
+ const usePrivate = opts.private == null ? this.privateRpcUrl !== null : opts.private;
301
+ // Hold the per-signer lock across nonce-fetch → broadcast so concurrent sends
302
+ // from one account get distinct, sequential nonces.
303
+ const txh = await this._sendLock.run(async () => {
304
+ const tx = await this.buildTx(fn, args, { value, gas: opts.gas ?? null });
305
+ const raw = await account.signTransaction(tx);
306
+ let hash;
307
+ if (usePrivate) {
308
+ hash = await this._broadcastPrivate(raw);
309
+ }
310
+ else {
311
+ const resp = await this.w3.broadcastTransaction(raw);
312
+ hash = resp.hash;
313
+ }
314
+ return hash;
315
+ });
316
+ if (!wait)
317
+ return txh;
318
+ let receipt;
319
+ try {
320
+ receipt = await this.w3.waitForTransaction(txh, 1, timeout * 1000);
321
+ }
322
+ catch (exc) {
323
+ receipt = null;
324
+ }
325
+ if (receipt === null) {
326
+ const where = usePrivate ? "private relay" : "public mempool";
327
+ throw new SallyError(`tx ${txh} not mined within ${timeout}s via ${where}. It may have been ` +
328
+ `dropped/not included — check the hash before resubmitting.`);
329
+ }
330
+ if (receipt.status !== 1) {
331
+ // A receipt carries no revert data; replay the tx at its block to recover it.
332
+ throw await this._decodeFailedTx(txh, receipt);
333
+ }
334
+ return receipt;
335
+ }
336
+ async _decodeFailedTx(txh, receipt) {
337
+ try {
338
+ const tx = await this.w3.getTransaction(txh);
339
+ if (tx) {
340
+ const callTx = {
341
+ from: tx.from,
342
+ to: tx.to,
343
+ data: tx.data,
344
+ value: tx.value,
345
+ gasLimit: tx.gasLimit,
346
+ };
347
+ await this.w3.call({ ...callTx, blockTag: receipt.blockNumber - 1 });
348
+ }
349
+ }
350
+ catch (exc) {
351
+ const err = wrapWeb3Error(this.chainKey, exc);
352
+ return new SallyError(`tx ${txh} reverted on-chain: ${err.toString()}`);
353
+ }
354
+ return new SallyRevert("Error", [], null, `tx ${txh} reverted on-chain`);
355
+ }
356
+ // ------------------------------------------------------------------ //
357
+ // Preview (sign-externally): build + simulate + ABI-decode, no key
358
+ // ------------------------------------------------------------------ //
359
+ /** ABI-decode a contract call into `[functionName, { arg: value }]`. */
360
+ decodeCall(fn, args = []) {
361
+ const fragment = fn.fragment ?? {};
362
+ const inputs = fragment.inputs ?? [];
363
+ const out = {};
364
+ inputs.forEach((inp, n) => {
365
+ out[inp.name || `arg${n}`] = args[n];
366
+ });
367
+ return [fragment.name ?? "?", out];
368
+ }
369
+ /**
370
+ * Build an unsigned tx + simulate + decode — see it before you broadcast.
371
+ *
372
+ * Returns a {@link TxPreview} with the unsigned transaction (sign it with your
373
+ * own wallet), the decoded function/args, the simulated `eth_call` result, the
374
+ * decoded revert reason if it would fail, and the gas estimate. Needs only a
375
+ * sender `address` — no key.
376
+ */
377
+ async preview(fn, args = [], opts = {}) {
378
+ const value = opts.value ?? 0n;
379
+ const sender = this.requireAddress();
380
+ const [name, decodedArgs] = this.decodeCall(fn, args);
381
+ let simulated = null;
382
+ let revert = null;
383
+ let gas = null;
384
+ let to = this.addresses["swap"];
385
+ try {
386
+ simulated = await this.call(fn, args, { value, sender });
387
+ gas = await this.estimateGas(fn, args, { value });
388
+ }
389
+ catch (exc) {
390
+ if (exc instanceof SallyConfigError)
391
+ throw exc;
392
+ revert = String(exc); // Python: str(exc) — SallyRevert renders "<name>: <detail>"
393
+ }
394
+ let unsigned = {};
395
+ if (revert === null) {
396
+ unsigned = await this.buildTx(fn, args, { value });
397
+ if (unsigned.to)
398
+ to = unsigned.to;
399
+ }
400
+ return new TxPreview({
401
+ unsignedTx: unsigned,
402
+ sender,
403
+ to: String(to),
404
+ function: name,
405
+ args: decodedArgs,
406
+ value,
407
+ simulatedReturn: simulated,
408
+ revert,
409
+ gas,
410
+ });
411
+ }
412
+ /** POST the raw tx to the private relay; return the tx hash. */
413
+ async _broadcastPrivate(rawTx) {
414
+ if (!this.privateRpcUrl) {
415
+ throw new SallyConfigError("private=true but no privateRpcUrl configured. Pass " +
416
+ "new SallyClient(..., { privateRpcUrl: 'https://rpc.flashbots.net/fast' }).");
417
+ }
418
+ if (this._privateW3 === null) {
419
+ this._privateW3 = new JsonRpcProvider(this.privateRpcUrl, Network.from(this.chainId), {
420
+ staticNetwork: Network.from(this.chainId),
421
+ });
422
+ }
423
+ const resp = await this._privateW3.broadcastTransaction(rawTx);
424
+ return resp.hash;
425
+ }
426
+ // ------------------------------------------------------------------ //
427
+ // Namespaces (lazy)
428
+ // ------------------------------------------------------------------ //
429
+ get prices() {
430
+ return this._cached("prices", () => new Prices(this));
431
+ }
432
+ get swap() {
433
+ return this._cached("swap", () => new Swap(this));
434
+ }
435
+ get wallet() {
436
+ return this._cached("wallet", () => new WalletModule(this));
437
+ }
438
+ get liquidity() {
439
+ return this._cached("liquidity", () => new Liquidity(this));
440
+ }
441
+ get fees() {
442
+ return this._cached("fees", () => new Fees(this));
443
+ }
444
+ get permit2() {
445
+ return this._cached("permit2", () => new Permit2(this));
446
+ }
447
+ toString() {
448
+ const who = this.address ?? "read-only";
449
+ return `<SallyClient chain=${this.chainKey} id=${this.chainId} signer=${who}>`;
450
+ }
451
+ }
452
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Well-known token addresses, handy for examples and tests.
3
+ *
4
+ * These are convenience constants only — the SDK itself never depends on them.
5
+ */
6
+ export declare const Base: {
7
+ readonly WETH: "0x4200000000000000000000000000000000000006";
8
+ readonly USDC: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
9
+ readonly USDbC: "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA";
10
+ readonly DAI: "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb";
11
+ readonly cbBTC: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf";
12
+ };
13
+ export declare const Bsc: {
14
+ readonly WBNB: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c";
15
+ readonly USDT: "0x55d398326f99059fF775485246999027B3197955";
16
+ readonly USDC: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d";
17
+ readonly CAKE: "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82";
18
+ };
19
+ export declare const NATIVE_TOKEN = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
20
+ export declare const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
21
+ /**
22
+ * Known private-mempool / MEV-protection relay RPCs.
23
+ *
24
+ * Pass one as `new SallyClient(..., { privateRpcUrl: PrivateRelays.X })`.
25
+ * Flashbots Protect is Ethereum-L1 only; BSC has 48.club / bloXroute; Base's
26
+ * sequencer is centralized (limited public-mempool MEV), so a private relay
27
+ * matters most on L1 — verify your chain actually has one before relying on it.
28
+ */
29
+ export declare const PrivateRelays: {
30
+ readonly FLASHBOTS_FAST: "https://rpc.flashbots.net/fast";
31
+ readonly FLASHBOTS: "https://rpc.flashbots.net";
32
+ readonly MEVBLOCKER: "https://rpc.mevblocker.io";
33
+ readonly BSC_48CLUB: "https://rpc.48.club";
34
+ readonly BSC_BLOXROUTE: "https://bsc.rpc.blxrbdn.com";
35
+ };
36
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,eAAO,MAAM,IAAI;;;;;;CAMP,CAAC;AAGX,eAAO,MAAM,GAAG;;;;;CAKN,CAAC;AAEX,eAAO,MAAM,YAAY,+CAAS,CAAC;AACnC,eAAO,MAAM,YAAY,+CAAO,CAAC;AAEjC;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Well-known token addresses, handy for examples and tests.
3
+ *
4
+ * These are convenience constants only — the SDK itself never depends on them.
5
+ */
6
+ import { NATIVE, ZERO } from "./token.js";
7
+ // Base (chain 8453)
8
+ export const Base = {
9
+ WETH: "0x4200000000000000000000000000000000000006",
10
+ USDC: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
11
+ USDbC: "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA",
12
+ DAI: "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb",
13
+ cbBTC: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf",
14
+ };
15
+ // BSC (chain 56)
16
+ export const Bsc = {
17
+ WBNB: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
18
+ USDT: "0x55d398326f99059fF775485246999027B3197955",
19
+ USDC: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
20
+ CAKE: "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82",
21
+ };
22
+ export const NATIVE_TOKEN = NATIVE;
23
+ export const ZERO_ADDRESS = ZERO;
24
+ /**
25
+ * Known private-mempool / MEV-protection relay RPCs.
26
+ *
27
+ * Pass one as `new SallyClient(..., { privateRpcUrl: PrivateRelays.X })`.
28
+ * Flashbots Protect is Ethereum-L1 only; BSC has 48.club / bloXroute; Base's
29
+ * sequencer is centralized (limited public-mempool MEV), so a private relay
30
+ * matters most on L1 — verify your chain actually has one before relying on it.
31
+ */
32
+ export const PrivateRelays = {
33
+ FLASHBOTS_FAST: "https://rpc.flashbots.net/fast", // ETH mainnet
34
+ FLASHBOTS: "https://rpc.flashbots.net", // ETH mainnet
35
+ MEVBLOCKER: "https://rpc.mevblocker.io", // ETH mainnet
36
+ BSC_48CLUB: "https://rpc.48.club", // BSC
37
+ BSC_BLOXROUTE: "https://bsc.rpc.blxrbdn.com", // BSC
38
+ };
39
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE1C,oBAAoB;AACpB,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,IAAI,EAAE,4CAA4C;IAClD,IAAI,EAAE,4CAA4C;IAClD,KAAK,EAAE,4CAA4C;IACnD,GAAG,EAAE,4CAA4C;IACjD,KAAK,EAAE,4CAA4C;CAC3C,CAAC;AAEX,iBAAiB;AACjB,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,EAAE,4CAA4C;IAClD,IAAI,EAAE,4CAA4C;IAClD,IAAI,EAAE,4CAA4C;IAClD,IAAI,EAAE,4CAA4C;CAC1C,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,cAAc,EAAE,gCAAgC,EAAE,cAAc;IAChE,SAAS,EAAE,2BAA2B,EAAE,cAAc;IACtD,UAAU,EAAE,2BAA2B,EAAE,cAAc;IACvD,UAAU,EAAE,qBAAqB,EAAE,MAAM;IACzC,aAAa,EAAE,6BAA6B,EAAE,MAAM;CAC5C,CAAC"}