@solard/cli 0.2.16 → 0.2.17
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/package.json +4 -3
- package/src/accounting-commands.ts +621 -0
- package/src/backtest-batch-command.ts +1 -1
- package/src/backtest-command.ts +1 -1
- package/src/commands/buy.ts +1 -1
- package/src/commands/jupiter-swap.ts +1 -1
- package/src/commands/sell.ts +1 -1
- package/src/commands/trade-result.ts +5 -1
- package/src/commands/trade-targets.ts +1 -1
- package/src/commands/trade-venue.ts +1 -1
- package/src/commands/transfer.ts +1 -1
- package/src/fairfun-commands.ts +213 -61
- package/src/index.ts +143 -44
- package/src/meteora-commands.ts +1 -1
- package/src/pump/external-deployment-cli.ts +1 -1
- package/src/pump/spam-buy-cli.ts +1 -1
- package/src/pump/token-launch-cli.ts +3 -3
- package/src/pump/vamp-cli.ts +1 -1
- package/src/raydium-commands.ts +1 -1
- package/src/refs.ts +1 -1
- package/src/token-history-command.ts +11 -33
- package/src/vault-onboarding.ts +1 -1
package/src/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
+
import { configure } from "measure-fn";
|
|
2
3
|
import {
|
|
3
4
|
addExternalContact,
|
|
4
|
-
configureSolardMeasure,
|
|
5
5
|
createSolardMeasureCollector,
|
|
6
6
|
executeRegistrySolSweep,
|
|
7
7
|
executeRegistryTokenLiquidation,
|
|
@@ -21,10 +21,10 @@ import {
|
|
|
21
21
|
simulateRegistryTokenLiquidation,
|
|
22
22
|
wrappedSolAta,
|
|
23
23
|
type TokenRow,
|
|
24
|
-
} from "@solard/
|
|
24
|
+
} from "@solard/core";
|
|
25
25
|
|
|
26
26
|
import { handleMeteoraCommand } from "./meteora-commands.ts";
|
|
27
|
-
import {
|
|
27
|
+
import { handleAccountingCommand } from "./accounting-commands.ts";
|
|
28
28
|
import { resolveDestinationRef } from "./refs.ts";
|
|
29
29
|
import {
|
|
30
30
|
VaultOnboardingError,
|
|
@@ -77,7 +77,12 @@ function int(flags: Flags, key: string, fallback?: number): number | undefined {
|
|
|
77
77
|
function json(value: unknown): string {
|
|
78
78
|
return JSON.stringify(
|
|
79
79
|
value,
|
|
80
|
-
(_, item) =>
|
|
80
|
+
(_, item) =>
|
|
81
|
+
typeof item === "bigint"
|
|
82
|
+
? item.toString()
|
|
83
|
+
: item instanceof Map
|
|
84
|
+
? Object.fromEntries(item)
|
|
85
|
+
: item,
|
|
81
86
|
2,
|
|
82
87
|
);
|
|
83
88
|
}
|
|
@@ -319,7 +324,7 @@ function commandNeedsSigningVault(
|
|
|
319
324
|
}
|
|
320
325
|
|
|
321
326
|
async function storedWalletCount(): Promise<number> {
|
|
322
|
-
const { createTraderSolard } = await import("@solard/
|
|
327
|
+
const { createTraderSolard } = await import("@solard/core");
|
|
323
328
|
const probe = createTraderSolard();
|
|
324
329
|
try {
|
|
325
330
|
return (probe.db.wallets.select().all() as unknown[]).length;
|
|
@@ -357,6 +362,8 @@ External contacts (public addresses only; never signing wallets or group members
|
|
|
357
362
|
slrd tokens
|
|
358
363
|
slrd holders <token|ca> [--exclude <a,b>] [--min-raw N] [--json] Complete on-chain holder snapshot
|
|
359
364
|
slrd events <token|ca> [--all|--swaps|--transfers|--creates] [--jsonl] Live typed Pump/PumpSwap + transfer/create stream
|
|
365
|
+
slrd events history <token|ca> [--provider auto|solscan|rpc] [--from-slot N] [--to-slot N] [--slot-order] [--json]
|
|
366
|
+
Historical holder-balance movements with explicit completeness verification
|
|
360
367
|
|
|
361
368
|
Vanity mints
|
|
362
369
|
slrd vanity --suffix pump --out .\\mint.json [--count <n>]
|
|
@@ -398,8 +405,8 @@ Transfers and consolidation
|
|
|
398
405
|
Without --wallets, sweep considers all stored signing wallets
|
|
399
406
|
|
|
400
407
|
Token liquidation
|
|
401
|
-
slrd liquidate tokens --except <token|mint> [--wallets <a,b,...>] [--slippage-bps 1500] [--no-jupiter] [--burn-unsellable] [--simulate | --live]
|
|
402
|
-
Sell supported tokens
|
|
408
|
+
slrd liquidate tokens [--except <token|mint>] [--wallets <a,b,...>] [--except-wallet <wallet>] [--except-wallets <a,b,...>] [--slippage-bps 1500] [--no-jupiter] [--burn-unsellable] [--simulate | --live]
|
|
409
|
+
Sell all supported tokens unless protected with --except; excluded wallets are not scanned or touched
|
|
403
410
|
|
|
404
411
|
RPC
|
|
405
412
|
All Solard JSON-RPC traffic is globally rate-limited to 5 req/s by default.
|
|
@@ -424,11 +431,15 @@ Trading
|
|
|
424
431
|
slrd transfer-many --wallet <wallet> (--token <mint>|--sol) --file <allocations.json> [--id <stable-id> --live]
|
|
425
432
|
slrd transfer-many status <stable-id>
|
|
426
433
|
slrd transfer-many resume <stable-id> [--sender rpc|helius]
|
|
427
|
-
slrd rewards
|
|
428
|
-
|
|
429
|
-
|
|
434
|
+
slrd rewards history <token|ca> [--wallet <reward-recipient>] [--provider auto|solscan|rpc] [--json]
|
|
435
|
+
slrd rewards distribute <token|ca> --wallet <beneficiary> --snapshot <snapshot.json> [--reward-mint <mint>] [--live]
|
|
436
|
+
Pay every outstanding cumulative holder entitlement and exit when complete
|
|
437
|
+
slrd rewards stop <token|ca> Ask the currently running distribution for this token to stop before its next transfer
|
|
438
|
+
slrd rewards status <token|ca> Show remembered cumulative entitlement/payment state
|
|
439
|
+
slrd rewards audit <token|ca> [--holder <wallet>] Show entitlement and confirmed-payment history
|
|
430
440
|
slrd rewards inspect <token|ca> Show claim source, quote asset, estimated accrued creator reward, and payout address
|
|
431
|
-
slrd rewards claim <token|ca> --wallet <fee-payer>
|
|
441
|
+
slrd rewards claim <token|ca> --wallet <fee-payer> [--id <stable-claim-id> --basis <reward-basis.json>]
|
|
442
|
+
slrd rewards claim-status <stable-claim-id>
|
|
432
443
|
|
|
433
444
|
Scripts (strategies stay outside the kernel)
|
|
434
445
|
slrd scripts List scripts registered in slrd.config.ts
|
|
@@ -483,6 +494,7 @@ Environment
|
|
|
483
494
|
RPC_ENDPOINT required only for chain operations
|
|
484
495
|
HELIUS_SENDER_URL regional/global Helius Sender endpoint used by launch scripts
|
|
485
496
|
HELIUS_RPC_URL RPC endpoint used for ordinary Helius-RPC buyer lane
|
|
497
|
+
SOLSCAN_API_KEY optional indexed token-history provider; enables authoritative historical transfer reconstruction
|
|
486
498
|
HELIUS_TIP_ACCOUNT, HELIUS_TIP_LAMPORTS, HELIUS_PRIORITY_MICRO_LAMPORTS launch transport policy
|
|
487
499
|
SLRD_LAUNCH_* launch resend/timeout policy; shared environment, not per-token metadata
|
|
488
500
|
JITO_BLOCK_ENGINE_URL only when explicitly selecting the separate Jito sender
|
|
@@ -508,7 +520,7 @@ async function main() {
|
|
|
508
520
|
flags.has("measure-stream") ||
|
|
509
521
|
process.env.SLRD_MEASURE_STREAM === "1" ||
|
|
510
522
|
process.env.SLRD_MEASURE_STREAM === "true";
|
|
511
|
-
|
|
523
|
+
configure(
|
|
512
524
|
streamMeasures
|
|
513
525
|
? {
|
|
514
526
|
silent: false,
|
|
@@ -638,7 +650,7 @@ async function main() {
|
|
|
638
650
|
listVanityMintPool,
|
|
639
651
|
releaseVanityMintReservation,
|
|
640
652
|
saveMintKeypairFile,
|
|
641
|
-
} = await import("@solard/
|
|
653
|
+
} = await import("@solard/core");
|
|
642
654
|
|
|
643
655
|
if (values[0] === "pool") {
|
|
644
656
|
const action = values[1] ?? "list";
|
|
@@ -816,13 +828,13 @@ async function main() {
|
|
|
816
828
|
process.env.JITO_BLOCK_ENGINE_URL ??
|
|
817
829
|
"https://mainnet.block-engine.jito.wtf"
|
|
818
830
|
).replace(/\/$/, "");
|
|
819
|
-
const { getJitoTipAccounts } = await import("@solard/
|
|
831
|
+
const { getJitoTipAccounts } = await import("@solard/core");
|
|
820
832
|
const tipAccounts = await getJitoTipAccounts(endpoint);
|
|
821
833
|
emit(json({ endpoint, tipAccounts }) + "\n");
|
|
822
834
|
return;
|
|
823
835
|
}
|
|
824
836
|
if (command === "metadata" && values[0] === "upload") {
|
|
825
|
-
const { uploadPumpMetadata } = await import("@solard/
|
|
837
|
+
const { uploadPumpMetadata } = await import("@solard/core");
|
|
826
838
|
const uploaded = await uploadPumpMetadata(
|
|
827
839
|
{
|
|
828
840
|
imagePath: need(flags, "image"),
|
|
@@ -848,13 +860,13 @@ async function main() {
|
|
|
848
860
|
}
|
|
849
861
|
const [{ sol, formatRaw }, { shortKey }, { createTraderSolard }] =
|
|
850
862
|
await Promise.all([
|
|
851
|
-
import("@solard/
|
|
852
|
-
import("@solard/
|
|
853
|
-
import("@solard/
|
|
863
|
+
import("@solard/core"),
|
|
864
|
+
import("@solard/core"),
|
|
865
|
+
import("@solard/core"),
|
|
854
866
|
]);
|
|
855
867
|
const slrd = createTraderSolard();
|
|
856
868
|
try {
|
|
857
|
-
if (await
|
|
869
|
+
if (await handleAccountingCommand({ command, values, flags, slrd, emit })) {
|
|
858
870
|
return;
|
|
859
871
|
}
|
|
860
872
|
|
|
@@ -986,11 +998,8 @@ async function main() {
|
|
|
986
998
|
(vanityResult
|
|
987
999
|
? ` vanity suffix=${vanityResult.suffix} attempts=${vanityResult.attempts}\n`
|
|
988
1000
|
: "") +
|
|
989
|
-
` storage encrypted in Solard's local wallet database\n` +
|
|
990
|
-
` password NOT saved; you will enter it again next invocation\n` +
|
|
991
1001
|
`╰──────────────────────────────────────────────────────╯\n` +
|
|
992
|
-
`\nNext: slrd balances --wallet ${wallet.name}\n
|
|
993
|
-
`Backup: slrd export ${wallet.name} --out .\\${wallet.name}-key.txt\n`,
|
|
1002
|
+
`\nNext: slrd balances --wallet ${wallet.name}\n`,
|
|
994
1003
|
);
|
|
995
1004
|
} else {
|
|
996
1005
|
emit(`${OWL} created @${wallet.name} ${wallet.address}\n`);
|
|
@@ -1612,7 +1621,7 @@ async function main() {
|
|
|
1612
1621
|
throw new Error(
|
|
1613
1622
|
"Provide --uri <metadata_uri> or --image <local_path> --description <text>",
|
|
1614
1623
|
);
|
|
1615
|
-
const { uploadPumpMetadata } = await import("@solard/
|
|
1624
|
+
const { uploadPumpMetadata } = await import("@solard/core");
|
|
1616
1625
|
uploadedMetadata = await uploadPumpMetadata(
|
|
1617
1626
|
{
|
|
1618
1627
|
imagePath: need(flags, "image"),
|
|
@@ -1864,11 +1873,18 @@ async function main() {
|
|
|
1864
1873
|
}
|
|
1865
1874
|
if (command === "liquidate" && (values[0] ?? "tokens") === "tokens") {
|
|
1866
1875
|
const except = csv(flags.get("except"));
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
);
|
|
1871
|
-
|
|
1876
|
+
const exceptWalletValue =
|
|
1877
|
+
flags.get("except-wallet") ?? flags.get("exceptWallet");
|
|
1878
|
+
const exceptWalletsValue =
|
|
1879
|
+
flags.get("except-wallets") ?? flags.get("exceptWallets");
|
|
1880
|
+
if (exceptWalletValue === "true")
|
|
1881
|
+
throw new Error("Missing --except-wallet <wallet>");
|
|
1882
|
+
if (exceptWalletsValue === "true")
|
|
1883
|
+
throw new Error("Missing --except-wallets <a,b,...>");
|
|
1884
|
+
const exceptWalletRefs = [
|
|
1885
|
+
...(exceptWalletValue ? [exceptWalletValue] : []),
|
|
1886
|
+
...csv(exceptWalletsValue),
|
|
1887
|
+
].filter((ref, index, refs) => refs.indexOf(ref) === index);
|
|
1872
1888
|
if (flags.has("simulate") && flags.has("live")) {
|
|
1873
1889
|
throw new Error("Use either --simulate or --live, not both");
|
|
1874
1890
|
}
|
|
@@ -1884,6 +1900,10 @@ async function main() {
|
|
|
1884
1900
|
const mint = resolveTokenMintForPolicy(slrd, ref);
|
|
1885
1901
|
emit(`PROTECT ${ref} -> ${mint}\n`);
|
|
1886
1902
|
}
|
|
1903
|
+
for (const ref of exceptWalletRefs) {
|
|
1904
|
+
const wallet = slrd.resolveWallet(ref);
|
|
1905
|
+
emit(`EXCLUDE ${ref} -> ${wallet.address.toBase58()}\n`);
|
|
1906
|
+
}
|
|
1887
1907
|
emit(
|
|
1888
1908
|
`RPC hard limit ${process.env.SLRD_RPC_MAX_RPS ?? "5"} req/s\n`,
|
|
1889
1909
|
);
|
|
@@ -1899,19 +1919,27 @@ async function main() {
|
|
|
1899
1919
|
name: string | null;
|
|
1900
1920
|
amountUi: string;
|
|
1901
1921
|
kind: string;
|
|
1922
|
+
tokenAccount?: string;
|
|
1902
1923
|
},
|
|
1903
1924
|
) => {
|
|
1904
1925
|
const label = action.symbol ?? action.name ?? shortKey(action.mint);
|
|
1926
|
+
const account =
|
|
1927
|
+
action.kind === "close-empty" && action.tokenAccount
|
|
1928
|
+
? flags.has("verbose")
|
|
1929
|
+
? action.tokenAccount
|
|
1930
|
+
: shortKey(action.tokenAccount)
|
|
1931
|
+
: null;
|
|
1905
1932
|
emit(
|
|
1906
1933
|
`${prefix} ${index}/${total} @${action.walletName} ` +
|
|
1907
1934
|
`${action.kind === "unwrap-wsol" ? "WSOL" : label} ${action.amountUi}` +
|
|
1908
|
-
`${action.kind === "close-empty" ?
|
|
1935
|
+
`${action.kind === "close-empty" ? ` [close empty account${account ? ` ${account}` : ""}]` : ""}\n`,
|
|
1909
1936
|
);
|
|
1910
1937
|
};
|
|
1911
1938
|
|
|
1912
1939
|
const options = {
|
|
1913
1940
|
except,
|
|
1914
1941
|
walletRefs: csv(flags.get("wallets")),
|
|
1942
|
+
exceptWalletRefs,
|
|
1915
1943
|
slippageBps: int(flags, "slippage-bps", 1500) ?? 1500,
|
|
1916
1944
|
via: flags.get("sender") ?? "rpc",
|
|
1917
1945
|
delayMs: int(flags, "delay-ms", 0) ?? 0,
|
|
@@ -1941,6 +1969,13 @@ async function main() {
|
|
|
1941
1969
|
);
|
|
1942
1970
|
} else if (event.stage === "action-done") {
|
|
1943
1971
|
showAction("OK ", event.index, event.total, event.action);
|
|
1972
|
+
} else if (event.stage === "action-pending") {
|
|
1973
|
+
showAction("WAIT", event.index, event.total, event.action);
|
|
1974
|
+
if (flags.has("verbose")) {
|
|
1975
|
+
emit(
|
|
1976
|
+
` attempt=${event.attempt}/${event.maxAttempts} signature=${event.signature ?? "-"} ${event.reason}\n`,
|
|
1977
|
+
);
|
|
1978
|
+
}
|
|
1944
1979
|
} else if (event.stage === "action-error") {
|
|
1945
1980
|
showAction("FAIL", event.index, event.total, event.action);
|
|
1946
1981
|
emit(` ${event.error}\n`);
|
|
@@ -1981,7 +2016,7 @@ async function main() {
|
|
|
1981
2016
|
}
|
|
1982
2017
|
|
|
1983
2018
|
emit(
|
|
1984
|
-
`KEEP ${plan.totals.keepProtected} protected
|
|
2019
|
+
`KEEP ${plan.totals.keepProtected} protected token holding(s)\n` +
|
|
1985
2020
|
`SKIP ${plan.totals.skipUnsupported} unsupported/no-liquidity holding(s)`,
|
|
1986
2021
|
);
|
|
1987
2022
|
if (plan.totals.skipUnsupported > 0) {
|
|
@@ -2423,23 +2458,84 @@ async function main() {
|
|
|
2423
2458
|
}
|
|
2424
2459
|
if (command === "rewards") {
|
|
2425
2460
|
const action = values[0] ?? "inspect";
|
|
2461
|
+
|
|
2462
|
+
if (action === "claim-status") {
|
|
2463
|
+
const id = values[1];
|
|
2464
|
+
if (!id)
|
|
2465
|
+
throw new Error("Usage: slrd rewards claim-status <stable-claim-id>");
|
|
2466
|
+
emit(json(slrd.claims.creatorFees.status(id)) + "\n");
|
|
2467
|
+
return;
|
|
2468
|
+
}
|
|
2469
|
+
|
|
2426
2470
|
const tokenRef = values[1];
|
|
2427
2471
|
if (!tokenRef)
|
|
2428
2472
|
throw new Error(
|
|
2429
|
-
"Usage: slrd rewards <inspect|claim> <token|ca> [--wallet <fee-payer>]",
|
|
2473
|
+
"Usage: slrd rewards <inspect|claim|claim-status> <token|ca> [--wallet <fee-payer>]",
|
|
2430
2474
|
);
|
|
2431
2475
|
|
|
2432
2476
|
if (action === "claim") {
|
|
2433
2477
|
const wallet = need(flags, "wallet");
|
|
2434
|
-
const
|
|
2478
|
+
const basisPath = flags.get("basis");
|
|
2479
|
+
let basis:
|
|
2480
|
+
| {
|
|
2481
|
+
id: string;
|
|
2482
|
+
slot: number;
|
|
2483
|
+
hash: string;
|
|
2484
|
+
observedAtMs?: number | null;
|
|
2485
|
+
}
|
|
2486
|
+
| undefined;
|
|
2487
|
+
if (basisPath && basisPath !== "true") {
|
|
2488
|
+
const { readFileSync } = await import("node:fs");
|
|
2489
|
+
const { resolve } = await import("node:path");
|
|
2490
|
+
const parsed = JSON.parse(
|
|
2491
|
+
readFileSync(resolve(basisPath), "utf8"),
|
|
2492
|
+
) as Record<string, unknown>;
|
|
2493
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
2494
|
+
throw new Error("Reward basis file must contain a JSON object");
|
|
2495
|
+
basis = {
|
|
2496
|
+
id: String(parsed.id ?? "").trim(),
|
|
2497
|
+
slot: Number(parsed.slot),
|
|
2498
|
+
hash: String(parsed.hash ?? "").trim(),
|
|
2499
|
+
observedAtMs:
|
|
2500
|
+
parsed.observedAtMs == null ? null : Number(parsed.observedAtMs),
|
|
2501
|
+
};
|
|
2502
|
+
}
|
|
2503
|
+
const result = await slrd.claims.creatorFees.claim(tokenRef, wallet, {
|
|
2504
|
+
id: flags.get("id"),
|
|
2505
|
+
basis,
|
|
2435
2506
|
via: flags.get("sender") ?? "rpc",
|
|
2507
|
+
skipSimulation: flags.has("skip-simulation"),
|
|
2508
|
+
skipPreflight: flags.has("skip-preflight"),
|
|
2436
2509
|
});
|
|
2437
2510
|
emit(
|
|
2438
2511
|
json({
|
|
2439
2512
|
action: "claim",
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
|
|
2513
|
+
claimId: result.claimId,
|
|
2514
|
+
token: result.tokenMint,
|
|
2515
|
+
feePayer: result.feePayer,
|
|
2516
|
+
source: result.source,
|
|
2517
|
+
quote: result.quoteAsset,
|
|
2518
|
+
estimatedClaimRaw: result.estimatedClaimRaw,
|
|
2519
|
+
claimedRaw: result.claimedRaw,
|
|
2520
|
+
claimedUi:
|
|
2521
|
+
result.claimedRaw == null
|
|
2522
|
+
? null
|
|
2523
|
+
: formatRaw(result.claimedRaw, result.quoteAsset.decimals),
|
|
2524
|
+
payouts: result.payouts,
|
|
2525
|
+
receipt: result.receipt,
|
|
2526
|
+
basis: result.basis,
|
|
2527
|
+
checkpoint:
|
|
2528
|
+
result.claimedRaw == null
|
|
2529
|
+
? null
|
|
2530
|
+
: {
|
|
2531
|
+
id: result.claimId ?? result.claimSignature,
|
|
2532
|
+
claimSignature: result.claimSignature,
|
|
2533
|
+
slot: result.claimSlot,
|
|
2534
|
+
claimedRaw: result.claimedRaw,
|
|
2535
|
+
quoteMint: result.quoteAsset.mint,
|
|
2536
|
+
observedAtMs: result.observedAtMs,
|
|
2537
|
+
basis: result.basis,
|
|
2538
|
+
},
|
|
2443
2539
|
}) + "\n",
|
|
2444
2540
|
);
|
|
2445
2541
|
return;
|
|
@@ -2449,24 +2545,27 @@ async function main() {
|
|
|
2449
2545
|
let token = slrd.resolveToken(tokenRef);
|
|
2450
2546
|
try {
|
|
2451
2547
|
token = await slrd.refreshToken(token);
|
|
2452
|
-
} catch {
|
|
2453
|
-
// A registered token can still expose a useful claim plan when one
|
|
2454
|
-
// enrichment source is temporarily unavailable.
|
|
2455
|
-
}
|
|
2548
|
+
} catch {}
|
|
2456
2549
|
const { PublicKey } = await import("@solana/web3.js");
|
|
2457
2550
|
const probeUser = token.creator
|
|
2458
2551
|
? new PublicKey(token.creator)
|
|
2459
2552
|
: new PublicKey(token.mint);
|
|
2460
2553
|
const plan = await slrd.resolveClaim(token, probeUser);
|
|
2554
|
+
const payoutAddresses = plan.payouts?.length
|
|
2555
|
+
? plan.payouts.map((row) => row.address.toBase58())
|
|
2556
|
+
: typeof plan.meta?.payoutAddress === "string"
|
|
2557
|
+
? [plan.meta.payoutAddress]
|
|
2558
|
+
: token.creator
|
|
2559
|
+
? [token.creator]
|
|
2560
|
+
: [];
|
|
2461
2561
|
const payoutAddress =
|
|
2462
|
-
|
|
2463
|
-
? plan.meta.payoutAddress
|
|
2464
|
-
: token.creator;
|
|
2562
|
+
payoutAddresses.length === 1 ? payoutAddresses[0] : null;
|
|
2465
2563
|
const output = {
|
|
2466
2564
|
action: "inspect",
|
|
2467
2565
|
token: token.mint,
|
|
2468
2566
|
source: plan.source,
|
|
2469
2567
|
payoutAddress: payoutAddress ?? null,
|
|
2568
|
+
payoutAddresses,
|
|
2470
2569
|
quote: {
|
|
2471
2570
|
kind: plan.quoteAsset.kind,
|
|
2472
2571
|
mint: plan.quoteAsset.mint.toBase58(),
|
|
@@ -2486,7 +2585,7 @@ async function main() {
|
|
|
2486
2585
|
return;
|
|
2487
2586
|
}
|
|
2488
2587
|
|
|
2489
|
-
throw new Error("Usage: slrd rewards <inspect|claim>
|
|
2588
|
+
throw new Error("Usage: slrd rewards <inspect|claim|claim-status> ...");
|
|
2490
2589
|
}
|
|
2491
2590
|
|
|
2492
2591
|
if (command === "claim") {
|
package/src/meteora-commands.ts
CHANGED
package/src/pump/spam-buy-cli.ts
CHANGED
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
type TokenMetadata,
|
|
45
45
|
type TraderSubmitMode,
|
|
46
46
|
type VanityMintPoolReservation,
|
|
47
|
-
} from "@solard/
|
|
47
|
+
} from "@solard/core";
|
|
48
48
|
|
|
49
49
|
export type Flags = Map<string, string[]>;
|
|
50
50
|
|
|
@@ -1697,7 +1697,7 @@ export async function runPumpTokenLaunchFromArgs(
|
|
|
1697
1697
|
spam,
|
|
1698
1698
|
kind: `cli:launch:pump:${input.alias}`,
|
|
1699
1699
|
reporter: report,
|
|
1700
|
-
|
|
1700
|
+
beforeDeploymentSubmission:
|
|
1701
1701
|
armedEndpoints.length > 0
|
|
1702
1702
|
? async () => {
|
|
1703
1703
|
await releaseArmedBuyerEndpoints({
|
|
@@ -1709,7 +1709,7 @@ export async function runPumpTokenLaunchFromArgs(
|
|
|
1709
1709
|
});
|
|
1710
1710
|
}
|
|
1711
1711
|
: undefined,
|
|
1712
|
-
|
|
1712
|
+
onDeploymentSubmissionFailure:
|
|
1713
1713
|
armedEndpoints.length > 0
|
|
1714
1714
|
? async (error) => {
|
|
1715
1715
|
await abortArmedBuyerEndpoints({
|
package/src/pump/vamp-cli.ts
CHANGED
package/src/raydium-commands.ts
CHANGED
package/src/refs.ts
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
import type { Solard } from "@solard/
|
|
1
|
+
import type { Solard } from "@solard/core";
|
|
2
2
|
import {
|
|
3
3
|
analyzeTokenHistory,
|
|
4
4
|
analyzeTokenHistoryForensicsFromStore,
|
|
5
|
-
backfillTokenHistory,
|
|
6
|
-
backfillRaydiumTokenHistory,
|
|
7
5
|
getTokenHistoryCoverage,
|
|
8
6
|
loadTokenHistoryTrades,
|
|
9
|
-
TokenHistoryError,
|
|
10
7
|
type BackfillTokenHistoryOptions,
|
|
11
8
|
type TokenHistoryCoverage,
|
|
12
9
|
type TokenHistoryTrade,
|
|
13
|
-
} from "@solard/
|
|
10
|
+
} from "@solard/core";
|
|
14
11
|
|
|
15
12
|
export type TokenHistoryCliFlags = Map<string, string>;
|
|
16
13
|
|
|
@@ -212,34 +209,15 @@ async function runBackfill(args: {
|
|
|
212
209
|
}
|
|
213
210
|
},
|
|
214
211
|
};
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
)
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
!(error instanceof TokenHistoryError) ||
|
|
225
|
-
error.code !== "UNSUPPORTED_TOKEN"
|
|
226
|
-
)
|
|
227
|
-
throw error;
|
|
228
|
-
progress(
|
|
229
|
-
"VENUE Pump history unsupported; trying Raydium/LaunchLab discovery",
|
|
230
|
-
);
|
|
231
|
-
result = await backfillRaydiumTokenHistory(
|
|
232
|
-
args.slrd.connection(),
|
|
233
|
-
args.mint,
|
|
234
|
-
{
|
|
235
|
-
...backfillOptions,
|
|
236
|
-
maxRaydiumPools: Math.max(
|
|
237
|
-
1,
|
|
238
|
-
Math.trunc(numberFlag(args.flags, "raydium-pools", 8) ?? 8),
|
|
239
|
-
),
|
|
240
|
-
},
|
|
241
|
-
);
|
|
242
|
-
}
|
|
212
|
+
const market = await args.slrd.history.market(args.mint, {
|
|
213
|
+
...backfillOptions,
|
|
214
|
+
backfill: true,
|
|
215
|
+
maxRaydiumPools: Math.max(
|
|
216
|
+
1,
|
|
217
|
+
Math.trunc(numberFlag(args.flags, "raydium-pools", 8) ?? 8),
|
|
218
|
+
),
|
|
219
|
+
});
|
|
220
|
+
const result: TokenHistoryCoverage = market.coverage;
|
|
243
221
|
if (jsonMode) {
|
|
244
222
|
args.emit(`${json(result)}\n`);
|
|
245
223
|
return;
|
package/src/vault-onboarding.ts
CHANGED
|
@@ -115,7 +115,7 @@ async function confirmNewPassword(): Promise<string> {
|
|
|
115
115
|
|
|
116
116
|
async function validateAllStoredWallets(password: string): Promise<void> {
|
|
117
117
|
setMasterKey(password);
|
|
118
|
-
const { createTraderSolard } = await import("@solard/
|
|
118
|
+
const { createTraderSolard } = await import("@solard/core");
|
|
119
119
|
const probe = createTraderSolard();
|
|
120
120
|
try {
|
|
121
121
|
const integrity = probe.wallets.integrity();
|