torch-liquidation-bot 3.0.1 → 3.0.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.
- package/package.json +1 -1
- package/readme.md +15 -2
- package/dist/config.d.ts +0 -13
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -34
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts +0 -19
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -171
- package/dist/index.js.map +0 -1
- package/dist/types.d.ts +0 -12
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -6
- package/dist/types.js.map +0 -1
- package/dist/utils.d.ts +0 -9
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -48
- package/dist/utils.js.map +0 -1
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# torch-liquidation-bot v3.0.
|
|
1
|
+
# torch-liquidation-bot v3.0.2 (Vault Mode)
|
|
2
2
|
|
|
3
3
|
Vault-based liquidation bot for [Torch Market](https://torch.market) on Solana. Generates an agent keypair in-process — no user wallet required. All operations route through a Torch Vault.
|
|
4
4
|
|
|
@@ -147,7 +147,20 @@ pnpm test
|
|
|
147
147
|
- Authority can unlink the agent wallet instantly via `buildUnlinkWalletTransaction()`
|
|
148
148
|
- Minimal dependencies: `@solana/web3.js` + `torchsdk` -- both pinned to exact versions
|
|
149
149
|
- No post-install hooks, no remote code fetching
|
|
150
|
-
-
|
|
150
|
+
- `disable-model-invocation: true` -- agents cannot invoke this skill autonomously
|
|
151
|
+
|
|
152
|
+
### External Runtime Dependencies
|
|
153
|
+
|
|
154
|
+
The SDK makes outbound HTTPS requests to two external services at runtime (the bot does **not** contact SAID Protocol):
|
|
155
|
+
|
|
156
|
+
| Service | Purpose | When Called |
|
|
157
|
+
|---------|---------|------------|
|
|
158
|
+
| **CoinGecko** (`api.coingecko.com`) | SOL/USD price for display | Token queries via `getTokens()` |
|
|
159
|
+
| **Irys Gateway** (`gateway.irys.xyz`) | Token metadata fallback (name, symbol, image) | `getTokens()` when on-chain metadata URI points to Irys |
|
|
160
|
+
|
|
161
|
+
`confirmTransaction()` does NOT contact SAID — it only calls `connection.getParsedTransaction()` (Solana RPC). The SDK exports a `verifySaid()` function that contacts `api.saidprotocol.com`, but the bot never calls it.
|
|
162
|
+
|
|
163
|
+
No credentials are sent to any external service. All requests are read-only GET. No private key material is ever transmitted.
|
|
151
164
|
|
|
152
165
|
## Links
|
|
153
166
|
|
package/dist/config.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* config.ts — loads environment variables into a typed BotConfig.
|
|
3
|
-
*
|
|
4
|
-
* env vars:
|
|
5
|
-
* SOLANA_RPC_URL — solana RPC endpoint (required, fallback: RPC_URL)
|
|
6
|
-
* VAULT_CREATOR — vault creator pubkey (required)
|
|
7
|
-
* SOLANA_PRIVATE_KEY — disposable controller keypair, base58 (optional)
|
|
8
|
-
* SCAN_INTERVAL_MS — ms between scan cycles (default 30000, min 5000)
|
|
9
|
-
* LOG_LEVEL — debug | info | warn | error (default info)
|
|
10
|
-
*/
|
|
11
|
-
import type { BotConfig } from './types';
|
|
12
|
-
export declare const loadConfig: () => BotConfig;
|
|
13
|
-
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,SAAS,CAAA;AAIlD,eAAO,MAAM,UAAU,QAAO,SAoB7B,CAAA"}
|
package/dist/config.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* config.ts — loads environment variables into a typed BotConfig.
|
|
4
|
-
*
|
|
5
|
-
* env vars:
|
|
6
|
-
* SOLANA_RPC_URL — solana RPC endpoint (required, fallback: RPC_URL)
|
|
7
|
-
* VAULT_CREATOR — vault creator pubkey (required)
|
|
8
|
-
* SOLANA_PRIVATE_KEY — disposable controller keypair, base58 (optional)
|
|
9
|
-
* SCAN_INTERVAL_MS — ms between scan cycles (default 30000, min 5000)
|
|
10
|
-
* LOG_LEVEL — debug | info | warn | error (default info)
|
|
11
|
-
*/
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.loadConfig = void 0;
|
|
14
|
-
const LOG_LEVELS = ['debug', 'info', 'warn', 'error'];
|
|
15
|
-
const loadConfig = () => {
|
|
16
|
-
const rpcUrl = process.env.SOLANA_RPC_URL ?? process.env.RPC_URL;
|
|
17
|
-
if (!rpcUrl)
|
|
18
|
-
throw new Error('SOLANA_RPC_URL env var is required (fallback: RPC_URL)');
|
|
19
|
-
const vaultCreator = process.env.VAULT_CREATOR;
|
|
20
|
-
if (!vaultCreator)
|
|
21
|
-
throw new Error('VAULT_CREATOR env var is required (vault creator pubkey)');
|
|
22
|
-
const privateKey = process.env.SOLANA_PRIVATE_KEY ?? null;
|
|
23
|
-
const scanIntervalMs = parseInt(process.env.SCAN_INTERVAL_MS ?? '30000', 10);
|
|
24
|
-
if (isNaN(scanIntervalMs) || scanIntervalMs < 5000) {
|
|
25
|
-
throw new Error('SCAN_INTERVAL_MS must be a number >= 5000');
|
|
26
|
-
}
|
|
27
|
-
const logLevel = (process.env.LOG_LEVEL ?? 'info');
|
|
28
|
-
if (!LOG_LEVELS.includes(logLevel)) {
|
|
29
|
-
throw new Error(`LOG_LEVEL must be one of: ${LOG_LEVELS.join(', ')}`);
|
|
30
|
-
}
|
|
31
|
-
return { rpcUrl, vaultCreator, privateKey, scanIntervalMs, logLevel };
|
|
32
|
-
};
|
|
33
|
-
exports.loadConfig = loadConfig;
|
|
34
|
-
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAIH,MAAM,UAAU,GAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AAE1D,MAAM,UAAU,GAAG,GAAc,EAAE;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAA;IAChE,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAEtF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;IAC9C,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAE9F,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAA;IAEzD,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,EAAE,EAAE,CAAC,CAAA;IAC5E,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,IAAI,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC9D,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAa,CAAA;IAC9D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,6BAA6B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvE,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAA;AACvE,CAAC,CAAA;AApBY,QAAA,UAAU,cAoBtB"}
|
package/dist/index.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* torch-liquidation-bot — vault-based liquidation bot.
|
|
4
|
-
*
|
|
5
|
-
* generates an agent keypair in-process (or uses SOLANA_PRIVATE_KEY if provided).
|
|
6
|
-
* all operations route through a torch vault identified by VAULT_CREATOR.
|
|
7
|
-
*
|
|
8
|
-
* usage:
|
|
9
|
-
* VAULT_CREATOR=<pubkey> SOLANA_RPC_URL=<rpc> npx tsx src/index.ts
|
|
10
|
-
*
|
|
11
|
-
* env:
|
|
12
|
-
* SOLANA_RPC_URL — solana RPC endpoint (required, fallback: RPC_URL)
|
|
13
|
-
* VAULT_CREATOR — vault creator pubkey (required)
|
|
14
|
-
* SOLANA_PRIVATE_KEY — disposable controller keypair, base58 (optional)
|
|
15
|
-
* SCAN_INTERVAL_MS — ms between scan cycles (default 30000, min 5000)
|
|
16
|
-
* LOG_LEVEL — debug | info | warn | error (default info)
|
|
17
|
-
*/
|
|
18
|
-
export {};
|
|
19
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
|
package/dist/index.js
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
/**
|
|
4
|
-
* torch-liquidation-bot — vault-based liquidation bot.
|
|
5
|
-
*
|
|
6
|
-
* generates an agent keypair in-process (or uses SOLANA_PRIVATE_KEY if provided).
|
|
7
|
-
* all operations route through a torch vault identified by VAULT_CREATOR.
|
|
8
|
-
*
|
|
9
|
-
* usage:
|
|
10
|
-
* VAULT_CREATOR=<pubkey> SOLANA_RPC_URL=<rpc> npx tsx src/index.ts
|
|
11
|
-
*
|
|
12
|
-
* env:
|
|
13
|
-
* SOLANA_RPC_URL — solana RPC endpoint (required, fallback: RPC_URL)
|
|
14
|
-
* VAULT_CREATOR — vault creator pubkey (required)
|
|
15
|
-
* SOLANA_PRIVATE_KEY — disposable controller keypair, base58 (optional)
|
|
16
|
-
* SCAN_INTERVAL_MS — ms between scan cycles (default 30000, min 5000)
|
|
17
|
-
* LOG_LEVEL — debug | info | warn | error (default info)
|
|
18
|
-
*/
|
|
19
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
21
|
-
const torchsdk_1 = require("torchsdk");
|
|
22
|
-
const config_1 = require("./config");
|
|
23
|
-
const utils_1 = require("./utils");
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
// scan & liquidate
|
|
26
|
-
// ---------------------------------------------------------------------------
|
|
27
|
-
const scanAndLiquidate = async (connection, log, vaultCreator, agentKeypair) => {
|
|
28
|
-
const { tokens } = await (0, torchsdk_1.getTokens)(connection, {
|
|
29
|
-
status: 'migrated',
|
|
30
|
-
sort: 'volume',
|
|
31
|
-
limit: 50,
|
|
32
|
-
});
|
|
33
|
-
log('debug', `discovered ${tokens.length} migrated tokens`);
|
|
34
|
-
for (const token of tokens) {
|
|
35
|
-
let lending;
|
|
36
|
-
try {
|
|
37
|
-
lending = await (0, torchsdk_1.getLendingInfo)(connection, token.mint);
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
continue; // lending not enabled for this token
|
|
41
|
-
}
|
|
42
|
-
if (!lending.active_loans || lending.active_loans === 0)
|
|
43
|
-
continue;
|
|
44
|
-
log('debug', `${token.symbol} — ${lending.active_loans} active loans, ` +
|
|
45
|
-
`threshold: ${(0, utils_1.bpsToPercent)(lending.liquidation_threshold_bps)}, ` +
|
|
46
|
-
`bonus: ${(0, utils_1.bpsToPercent)(lending.liquidation_bonus_bps)}`);
|
|
47
|
-
// get holders as potential borrowers
|
|
48
|
-
let holders;
|
|
49
|
-
try {
|
|
50
|
-
const result = await (0, torchsdk_1.getHolders)(connection, token.mint);
|
|
51
|
-
holders = result.holders;
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
log('debug', `${token.symbol} — could not fetch holders, skipping`);
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
for (const holder of holders) {
|
|
58
|
-
let position;
|
|
59
|
-
try {
|
|
60
|
-
position = await (0, torchsdk_1.getLoanPosition)(connection, token.mint, holder.address);
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
continue; // no loan position for this holder
|
|
64
|
-
}
|
|
65
|
-
// SDK provides health status directly — skip non-liquidatable positions
|
|
66
|
-
if (position.health !== 'liquidatable')
|
|
67
|
-
continue;
|
|
68
|
-
log('info', `LIQUIDATABLE | ${token.symbol} | borrower=${holder.address.slice(0, 8)}... | ` +
|
|
69
|
-
`LTV=${position.current_ltv_bps != null ? (0, utils_1.bpsToPercent)(position.current_ltv_bps) : '?'} > ` +
|
|
70
|
-
`threshold=${(0, utils_1.bpsToPercent)(lending.liquidation_threshold_bps)} | ` +
|
|
71
|
-
`owed=${(0, utils_1.sol)(position.total_owed)} SOL`);
|
|
72
|
-
// build and execute liquidation through the vault
|
|
73
|
-
try {
|
|
74
|
-
const { transaction, message } = await (0, torchsdk_1.buildLiquidateTransaction)(connection, {
|
|
75
|
-
mint: token.mint,
|
|
76
|
-
liquidator: agentKeypair.publicKey.toBase58(),
|
|
77
|
-
borrower: holder.address,
|
|
78
|
-
vault: vaultCreator,
|
|
79
|
-
});
|
|
80
|
-
transaction.sign(agentKeypair);
|
|
81
|
-
const signature = await connection.sendRawTransaction(transaction.serialize());
|
|
82
|
-
await (0, torchsdk_1.confirmTransaction)(connection, signature, agentKeypair.publicKey.toBase58());
|
|
83
|
-
log('info', `LIQUIDATED | ${token.symbol} | borrower=${holder.address.slice(0, 8)}... | ` +
|
|
84
|
-
`sig=${signature.slice(0, 16)}... | ${message}`);
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
log('warn', `LIQUIDATION FAILED | ${token.symbol} | ${holder.address.slice(0, 8)}... | ${err.message}`);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
// ---------------------------------------------------------------------------
|
|
93
|
-
// main — vault-routed liquidation loop
|
|
94
|
-
// ---------------------------------------------------------------------------
|
|
95
|
-
const main = async () => {
|
|
96
|
-
const config = (0, config_1.loadConfig)();
|
|
97
|
-
const log = (0, utils_1.createLogger)(config.logLevel);
|
|
98
|
-
const connection = new web3_js_1.Connection(config.rpcUrl, 'confirmed');
|
|
99
|
-
// load or generate agent keypair
|
|
100
|
-
let agentKeypair;
|
|
101
|
-
if (config.privateKey) {
|
|
102
|
-
try {
|
|
103
|
-
const parsed = JSON.parse(config.privateKey);
|
|
104
|
-
if (Array.isArray(parsed)) {
|
|
105
|
-
agentKeypair = web3_js_1.Keypair.fromSecretKey(Uint8Array.from(parsed));
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
throw new Error('SOLANA_PRIVATE_KEY JSON must be a byte array');
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
catch (e) {
|
|
112
|
-
if (e.message?.includes('byte array'))
|
|
113
|
-
throw e;
|
|
114
|
-
// not JSON — try base58
|
|
115
|
-
agentKeypair = web3_js_1.Keypair.fromSecretKey((0, utils_1.decodeBase58)(config.privateKey));
|
|
116
|
-
}
|
|
117
|
-
log('info', 'loaded keypair from SOLANA_PRIVATE_KEY');
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
agentKeypair = web3_js_1.Keypair.generate();
|
|
121
|
-
log('info', 'generated fresh agent keypair');
|
|
122
|
-
}
|
|
123
|
-
console.log('=== torch liquidation bot ===');
|
|
124
|
-
console.log(`agent wallet: ${agentKeypair.publicKey.toBase58()}`);
|
|
125
|
-
console.log(`vault creator: ${config.vaultCreator}`);
|
|
126
|
-
console.log(`scan interval: ${config.scanIntervalMs}ms`);
|
|
127
|
-
console.log();
|
|
128
|
-
// verify vault exists
|
|
129
|
-
const vault = await (0, torchsdk_1.getVault)(connection, config.vaultCreator);
|
|
130
|
-
if (!vault) {
|
|
131
|
-
throw new Error(`vault not found for creator ${config.vaultCreator}`);
|
|
132
|
-
}
|
|
133
|
-
log('info', `vault found — authority=${vault.authority}`);
|
|
134
|
-
// verify agent wallet is linked to vault
|
|
135
|
-
const link = await (0, torchsdk_1.getVaultForWallet)(connection, agentKeypair.publicKey.toBase58());
|
|
136
|
-
if (!link) {
|
|
137
|
-
console.log();
|
|
138
|
-
console.log('--- ACTION REQUIRED ---');
|
|
139
|
-
console.log('agent wallet is NOT linked to the vault.');
|
|
140
|
-
console.log('link it by running (from your authority wallet):');
|
|
141
|
-
console.log();
|
|
142
|
-
console.log(` buildLinkWalletTransaction(connection, {`);
|
|
143
|
-
console.log(` authority: "<your-authority-pubkey>",`);
|
|
144
|
-
console.log(` vault_creator: "${config.vaultCreator}",`);
|
|
145
|
-
console.log(` wallet_to_link: "${agentKeypair.publicKey.toBase58()}"`);
|
|
146
|
-
console.log(` })`);
|
|
147
|
-
console.log();
|
|
148
|
-
console.log('then restart the bot.');
|
|
149
|
-
console.log('-----------------------');
|
|
150
|
-
process.exit(1);
|
|
151
|
-
}
|
|
152
|
-
log('info', 'agent wallet linked to vault — starting scan loop');
|
|
153
|
-
log('info', `treasury: ${(0, utils_1.sol)(vault.sol_balance ?? 0)} SOL`);
|
|
154
|
-
// scan loop
|
|
155
|
-
while (true) {
|
|
156
|
-
try {
|
|
157
|
-
log('debug', '--- scan cycle start ---');
|
|
158
|
-
await scanAndLiquidate(connection, log, config.vaultCreator, agentKeypair);
|
|
159
|
-
log('debug', '--- scan cycle end ---');
|
|
160
|
-
}
|
|
161
|
-
catch (err) {
|
|
162
|
-
log('error', `scan cycle error: ${err.message}`);
|
|
163
|
-
}
|
|
164
|
-
await new Promise((resolve) => setTimeout(resolve, config.scanIntervalMs));
|
|
165
|
-
}
|
|
166
|
-
};
|
|
167
|
-
main().catch((err) => {
|
|
168
|
-
console.error('FATAL:', err.message ?? err);
|
|
169
|
-
process.exit(1);
|
|
170
|
-
});
|
|
171
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* types.ts — interfaces for the vault-based liquidation bot.
|
|
3
|
-
*/
|
|
4
|
-
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
5
|
-
export interface BotConfig {
|
|
6
|
-
rpcUrl: string;
|
|
7
|
-
vaultCreator: string;
|
|
8
|
-
privateKey: string | null;
|
|
9
|
-
scanIntervalMs: number;
|
|
10
|
-
logLevel: LogLevel;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,QAAQ,CAAA;CACnB"}
|
package/dist/types.js
DELETED
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/dist/utils.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* utils.ts — shared helpers.
|
|
3
|
-
*/
|
|
4
|
-
import type { LogLevel } from './types';
|
|
5
|
-
export declare const sol: (lamports: number) => string;
|
|
6
|
-
export declare const bpsToPercent: (bps: number) => string;
|
|
7
|
-
export declare const decodeBase58: (s: string) => Uint8Array;
|
|
8
|
-
export declare function createLogger(minLevel: LogLevel): (level: LogLevel, msg: string) => void;
|
|
9
|
-
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,GAAG,GAAI,UAAU,MAAM,WAA6C,CAAA;AAEjF,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,WAAiC,CAAA;AAKzE,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,KAAG,UAmBxC,CAAA;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,IAGzB,OAAO,QAAQ,EAAE,KAAK,MAAM,UAMjD"}
|
package/dist/utils.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* utils.ts — shared helpers.
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.decodeBase58 = exports.bpsToPercent = exports.sol = void 0;
|
|
7
|
-
exports.createLogger = createLogger;
|
|
8
|
-
const torchsdk_1 = require("torchsdk");
|
|
9
|
-
const sol = (lamports) => (lamports / torchsdk_1.LAMPORTS_PER_SOL).toFixed(4);
|
|
10
|
-
exports.sol = sol;
|
|
11
|
-
const bpsToPercent = (bps) => (bps / 100).toFixed(2) + '%';
|
|
12
|
-
exports.bpsToPercent = bpsToPercent;
|
|
13
|
-
// base58 decoder — avoids ESM-only bs58 dependency
|
|
14
|
-
const B58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
15
|
-
const decodeBase58 = (s) => {
|
|
16
|
-
const result = [];
|
|
17
|
-
for (let i = 0; i < s.length; i++) {
|
|
18
|
-
let carry = B58.indexOf(s[i]);
|
|
19
|
-
if (carry < 0)
|
|
20
|
-
throw new Error(`invalid base58 character: ${s[i]}`);
|
|
21
|
-
for (let j = 0; j < result.length; j++) {
|
|
22
|
-
carry += result[j] * 58;
|
|
23
|
-
result[j] = carry & 0xff;
|
|
24
|
-
carry >>= 8;
|
|
25
|
-
}
|
|
26
|
-
while (carry > 0) {
|
|
27
|
-
result.push(carry & 0xff);
|
|
28
|
-
carry >>= 8;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
for (let i = 0; i < s.length && s[i] === '1'; i++) {
|
|
32
|
-
result.push(0);
|
|
33
|
-
}
|
|
34
|
-
return new Uint8Array(result.reverse());
|
|
35
|
-
};
|
|
36
|
-
exports.decodeBase58 = decodeBase58;
|
|
37
|
-
const LEVEL_ORDER = ['debug', 'info', 'warn', 'error'];
|
|
38
|
-
function createLogger(minLevel) {
|
|
39
|
-
const minIdx = LEVEL_ORDER.indexOf(minLevel);
|
|
40
|
-
return function log(level, msg) {
|
|
41
|
-
if (LEVEL_ORDER.indexOf(level) < minIdx)
|
|
42
|
-
return;
|
|
43
|
-
const ts = new Date().toISOString().substr(11, 12);
|
|
44
|
-
const tag = level.toUpperCase().padEnd(5);
|
|
45
|
-
console.log(`[${ts}] ${tag} ${msg}`);
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAmCH,oCASC;AA1CD,uCAA2C;AAGpC,MAAM,GAAG,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,QAAQ,GAAG,2BAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAApE,QAAA,GAAG,OAAiE;AAE1E,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAA;AAA5D,QAAA,YAAY,gBAAgD;AAEzE,mDAAmD;AACnD,MAAM,GAAG,GAAG,4DAA4D,CAAA;AAEjE,MAAM,YAAY,GAAG,CAAC,CAAS,EAAc,EAAE;IACpD,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7B,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;YACvB,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAA;YACxB,KAAK,KAAK,CAAC,CAAA;QACb,CAAC;QACD,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;YACzB,KAAK,KAAK,CAAC,CAAA;QACb,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;AACzC,CAAC,CAAA;AAnBY,QAAA,YAAY,gBAmBxB;AAED,MAAM,WAAW,GAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AAElE,SAAgB,YAAY,CAAC,QAAkB;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAE5C,OAAO,SAAS,GAAG,CAAC,KAAe,EAAE,GAAW;QAC9C,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM;YAAE,OAAM;QAC/C,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAClD,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,CAAA;IACtC,CAAC,CAAA;AACH,CAAC"}
|