torchsdk 3.5.0 → 3.6.0

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.
@@ -0,0 +1,216 @@
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
+ exports.getRaydiumMigrationAccounts = exports.getRaydiumObservationPda = exports.getRaydiumVaultPda = exports.getRaydiumLpMintPda = exports.getRaydiumPoolStatePda = exports.getRaydiumAuthorityPda = exports.orderTokensForRaydium = exports.calculateBondingProgress = exports.calculatePrice = exports.calculateSolOut = exports.calculateTokensOut = exports.getProgram = exports.getVaultWalletLinkPda = exports.getTorchVaultPda = exports.getCollateralVaultPda = exports.getLoanPositionPda = exports.getStarRecordPda = exports.getUserStatsPda = exports.getProtocolTreasuryPda = exports.getTokenTreasuryPda = exports.getVoteRecordPda = exports.getUserPositionPda = exports.getTreasuryTokenAccount = exports.getBondingCurvePda = exports.getGlobalConfigPda = exports.decodeString = exports.PROGRAM_ID = void 0;
7
+ const anchor_1 = require("@coral-xyz/anchor");
8
+ const web3_js_1 = require("@solana/web3.js");
9
+ const constants_1 = require("./constants");
10
+ Object.defineProperty(exports, "PROGRAM_ID", { enumerable: true, get: function () { return constants_1.PROGRAM_ID; } });
11
+ const spl_token_1 = require("@solana/spl-token");
12
+ const torch_market_json_1 = __importDefault(require("./torch_market.json"));
13
+ // Helper to decode byte arrays to strings
14
+ const decodeString = (bytes) => {
15
+ return Buffer.from(bytes).toString('utf8').replace(/\0/g, '');
16
+ };
17
+ exports.decodeString = decodeString;
18
+ // PDA derivation helpers
19
+ const getGlobalConfigPda = () => {
20
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.GLOBAL_CONFIG_SEED)], constants_1.PROGRAM_ID);
21
+ };
22
+ exports.getGlobalConfigPda = getGlobalConfigPda;
23
+ const getBondingCurvePda = (mint) => {
24
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.BONDING_CURVE_SEED), mint.toBuffer()], constants_1.PROGRAM_ID);
25
+ };
26
+ exports.getBondingCurvePda = getBondingCurvePda;
27
+ // [V13] Treasury's token account (ATA) - holds vote vault tokens during bonding
28
+ const getTreasuryTokenAccount = (mint, treasury) => {
29
+ return (0, spl_token_1.getAssociatedTokenAddressSync)(mint, treasury, true, // allowOwnerOffCurve (PDA)
30
+ constants_1.TOKEN_2022_PROGRAM_ID);
31
+ };
32
+ exports.getTreasuryTokenAccount = getTreasuryTokenAccount;
33
+ const getUserPositionPda = (bondingCurve, user) => {
34
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.USER_POSITION_SEED), bondingCurve.toBuffer(), user.toBuffer()], constants_1.PROGRAM_ID);
35
+ };
36
+ exports.getUserPositionPda = getUserPositionPda;
37
+ const getVoteRecordPda = (bondingCurve, voter) => {
38
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.VOTE_SEED), bondingCurve.toBuffer(), voter.toBuffer()], constants_1.PROGRAM_ID);
39
+ };
40
+ exports.getVoteRecordPda = getVoteRecordPda;
41
+ const getTokenTreasuryPda = (mint) => {
42
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.TREASURY_SEED), mint.toBuffer()], constants_1.PROGRAM_ID);
43
+ };
44
+ exports.getTokenTreasuryPda = getTokenTreasuryPda;
45
+ // V11: Protocol treasury PDA
46
+ const getProtocolTreasuryPda = () => {
47
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.PROTOCOL_TREASURY_SEED)], constants_1.PROGRAM_ID);
48
+ };
49
+ exports.getProtocolTreasuryPda = getProtocolTreasuryPda;
50
+ // V4: User stats PDA
51
+ const getUserStatsPda = (user) => {
52
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.USER_STATS_SEED), user.toBuffer()], constants_1.PROGRAM_ID);
53
+ };
54
+ exports.getUserStatsPda = getUserStatsPda;
55
+ // V10: Star record PDA (per user-token, not user-creator)
56
+ const getStarRecordPda = (user, mint) => {
57
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.STAR_RECORD_SEED), user.toBuffer(), mint.toBuffer()], constants_1.PROGRAM_ID);
58
+ };
59
+ exports.getStarRecordPda = getStarRecordPda;
60
+ // V2.4: Loan position PDA (per user-token)
61
+ const getLoanPositionPda = (mint, borrower) => {
62
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.LOAN_SEED), mint.toBuffer(), borrower.toBuffer()], constants_1.PROGRAM_ID);
63
+ };
64
+ exports.getLoanPositionPda = getLoanPositionPda;
65
+ // V2.4: Collateral vault PDA (per token)
66
+ const getCollateralVaultPda = (mint) => {
67
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.COLLATERAL_VAULT_SEED), mint.toBuffer()], constants_1.PROGRAM_ID);
68
+ };
69
+ exports.getCollateralVaultPda = getCollateralVaultPda;
70
+ // V2.0: Torch Vault PDA (per creator)
71
+ const getTorchVaultPda = (creator) => {
72
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.TORCH_VAULT_SEED), creator.toBuffer()], constants_1.PROGRAM_ID);
73
+ };
74
+ exports.getTorchVaultPda = getTorchVaultPda;
75
+ // V2.0: Vault Wallet Link PDA (per wallet)
76
+ const getVaultWalletLinkPda = (wallet) => {
77
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.VAULT_WALLET_LINK_SEED), wallet.toBuffer()], constants_1.PROGRAM_ID);
78
+ };
79
+ exports.getVaultWalletLinkPda = getVaultWalletLinkPda;
80
+ // Get program instance
81
+ const getProgram = (provider) => {
82
+ return new anchor_1.Program(torch_market_json_1.default, provider);
83
+ };
84
+ exports.getProgram = getProgram;
85
+ // [V25] Flat treasury SOL rate: 20% → 5% across all tiers (reverted from V24 tiered fees)
86
+ const TREASURY_SOL_MAX_BPS = 2000; // 20% at start
87
+ const TREASURY_SOL_MIN_BPS = 500; // 5% at completion
88
+ // Calculate tokens out for a given SOL amount (V2.3: dynamic treasury rate, V24: tiered)
89
+ const calculateTokensOut = (solAmount, virtualSolReserves, virtualTokenReserves, realSolReserves = BigInt(0), // V2.3: needed for dynamic rate calculation
90
+ protocolFeeBps = 100, // 1% protocol fee (75% protocol treasury, 25% dev)
91
+ treasuryFeeBps = 100, // 1% treasury fee
92
+ bondingTarget = BigInt('200000000000')) => {
93
+ // Calculate protocol fee (1%)
94
+ const protocolFee = (solAmount * BigInt(protocolFeeBps)) / BigInt(10000);
95
+ // Calculate treasury fee (1%)
96
+ const treasuryFee = (solAmount * BigInt(treasuryFeeBps)) / BigInt(10000);
97
+ const solAfterFees = solAmount - protocolFee - treasuryFee;
98
+ // [V25] Flat 20% → 5% treasury rate across all tiers
99
+ const resolvedTarget = bondingTarget === BigInt(0) ? BigInt('200000000000') : bondingTarget;
100
+ // V2.3: Dynamic treasury rate - decays from 20% to 5% as bonding progresses
101
+ const rateRange = BigInt(TREASURY_SOL_MAX_BPS - TREASURY_SOL_MIN_BPS);
102
+ const decay = (realSolReserves * rateRange) / resolvedTarget;
103
+ const treasuryRateBps = Math.max(TREASURY_SOL_MAX_BPS - Number(decay), TREASURY_SOL_MIN_BPS);
104
+ // Split remaining SOL using dynamic rate
105
+ const solToTreasurySplit = (solAfterFees * BigInt(treasuryRateBps)) / BigInt(10000);
106
+ const solToCurve = solAfterFees - solToTreasurySplit;
107
+ // Total to treasury = flat fee + dynamic split
108
+ const solToTreasury = treasuryFee + solToTreasurySplit;
109
+ // Calculate tokens using constant product formula (based on SOL going to curve)
110
+ const tokensOut = (virtualTokenReserves * solToCurve) / (virtualSolReserves + solToCurve);
111
+ // Split tokens: 90% to user, 10% to community treasury
112
+ // No permanent burn during bonding - community votes on treasury tokens at migration
113
+ const tokensToUser = (tokensOut * BigInt(9000)) / BigInt(10000);
114
+ const tokensToCommunity = tokensOut - tokensToUser;
115
+ return {
116
+ tokensOut,
117
+ tokensToUser,
118
+ tokensToCommunity,
119
+ protocolFee,
120
+ treasuryFee,
121
+ solToCurve,
122
+ solToTreasury,
123
+ treasuryRateBps,
124
+ };
125
+ };
126
+ exports.calculateTokensOut = calculateTokensOut;
127
+ // Calculate SOL out for a given token amount (no sell fee)
128
+ const calculateSolOut = (tokenAmount, virtualSolReserves, virtualTokenReserves) => {
129
+ // Calculate SOL using inverse formula
130
+ const solOut = (virtualSolReserves * tokenAmount) / (virtualTokenReserves + tokenAmount);
131
+ // No fees on sells - user gets full amount
132
+ return { solOut, solToUser: solOut };
133
+ };
134
+ exports.calculateSolOut = calculateSolOut;
135
+ // Calculate current token price in SOL
136
+ const calculatePrice = (virtualSolReserves, virtualTokenReserves) => {
137
+ // Price = virtualSol / virtualTokens
138
+ return Number(virtualSolReserves) / Number(virtualTokenReserves);
139
+ };
140
+ exports.calculatePrice = calculatePrice;
141
+ // Calculate bonding progress percentage
142
+ const calculateBondingProgress = (realSolReserves) => {
143
+ const target = BigInt('200000000000'); // 200 SOL in lamports
144
+ if (realSolReserves >= target)
145
+ return 100;
146
+ return (Number(realSolReserves) / Number(target)) * 100;
147
+ };
148
+ exports.calculateBondingProgress = calculateBondingProgress;
149
+ // ============================================================================
150
+ // RAYDIUM CPMM PDA DERIVATION (V5)
151
+ // ============================================================================
152
+ // Order tokens for Raydium (token_0 < token_1 by pubkey bytes)
153
+ const orderTokensForRaydium = (tokenA, tokenB) => {
154
+ const aBytes = tokenA.toBuffer();
155
+ const bBytes = tokenB.toBuffer();
156
+ for (let i = 0; i < 32; i++) {
157
+ if (aBytes[i] < bBytes[i]) {
158
+ return { token0: tokenA, token1: tokenB, isToken0First: true };
159
+ }
160
+ else if (aBytes[i] > bBytes[i]) {
161
+ return { token0: tokenB, token1: tokenA, isToken0First: false };
162
+ }
163
+ }
164
+ // Equal - shouldn't happen
165
+ return { token0: tokenA, token1: tokenB, isToken0First: true };
166
+ };
167
+ exports.orderTokensForRaydium = orderTokensForRaydium;
168
+ // Raydium authority PDA
169
+ const getRaydiumAuthorityPda = () => {
170
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('vault_and_lp_mint_auth_seed')], constants_1.RAYDIUM_CPMM_PROGRAM);
171
+ };
172
+ exports.getRaydiumAuthorityPda = getRaydiumAuthorityPda;
173
+ // Raydium pool state PDA
174
+ const getRaydiumPoolStatePda = (ammConfig, token0Mint, token1Mint) => {
175
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('pool'), ammConfig.toBuffer(), token0Mint.toBuffer(), token1Mint.toBuffer()], constants_1.RAYDIUM_CPMM_PROGRAM);
176
+ };
177
+ exports.getRaydiumPoolStatePda = getRaydiumPoolStatePda;
178
+ // Raydium LP mint PDA
179
+ const getRaydiumLpMintPda = (poolState) => {
180
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('pool_lp_mint'), poolState.toBuffer()], constants_1.RAYDIUM_CPMM_PROGRAM);
181
+ };
182
+ exports.getRaydiumLpMintPda = getRaydiumLpMintPda;
183
+ // Raydium pool vault PDA
184
+ const getRaydiumVaultPda = (poolState, tokenMint) => {
185
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('pool_vault'), poolState.toBuffer(), tokenMint.toBuffer()], constants_1.RAYDIUM_CPMM_PROGRAM);
186
+ };
187
+ exports.getRaydiumVaultPda = getRaydiumVaultPda;
188
+ // Raydium observation state PDA
189
+ const getRaydiumObservationPda = (poolState) => {
190
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('observation'), poolState.toBuffer()], constants_1.RAYDIUM_CPMM_PROGRAM);
191
+ };
192
+ exports.getRaydiumObservationPda = getRaydiumObservationPda;
193
+ // Get all Raydium accounts needed for migration
194
+ const getRaydiumMigrationAccounts = (tokenMint) => {
195
+ const { token0, token1, isToken0First } = (0, exports.orderTokensForRaydium)(constants_1.WSOL_MINT, tokenMint);
196
+ const isWsolToken0 = isToken0First;
197
+ const [raydiumAuthority] = (0, exports.getRaydiumAuthorityPda)();
198
+ const [poolState] = (0, exports.getRaydiumPoolStatePda)(constants_1.RAYDIUM_AMM_CONFIG, token0, token1);
199
+ const [lpMint] = (0, exports.getRaydiumLpMintPda)(poolState);
200
+ const [token0Vault] = (0, exports.getRaydiumVaultPda)(poolState, token0);
201
+ const [token1Vault] = (0, exports.getRaydiumVaultPda)(poolState, token1);
202
+ const [observationState] = (0, exports.getRaydiumObservationPda)(poolState);
203
+ return {
204
+ token0,
205
+ token1,
206
+ isWsolToken0,
207
+ raydiumAuthority,
208
+ poolState,
209
+ lpMint,
210
+ token0Vault,
211
+ token1Vault,
212
+ observationState,
213
+ };
214
+ };
215
+ exports.getRaydiumMigrationAccounts = getRaydiumMigrationAccounts;
216
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Quote calculations
3
+ *
4
+ * Get expected output for buy/sell operations.
5
+ */
6
+ import { Connection } from '@solana/web3.js';
7
+ import { BuyQuoteResult, SellQuoteResult } from './types';
8
+ /**
9
+ * Get a buy quote: how many tokens for a given SOL amount.
10
+ */
11
+ export declare const getBuyQuote: (connection: Connection, mintStr: string, amountSolLamports: number) => Promise<BuyQuoteResult>;
12
+ /**
13
+ * Get a sell quote: how much SOL for a given token amount.
14
+ */
15
+ export declare const getSellQuote: (connection: Connection, mintStr: string, amountTokens: number) => Promise<SellQuoteResult>;
16
+ //# sourceMappingURL=quotes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotes.d.ts","sourceRoot":"","sources":["../src/quotes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,iBAAiB,CAAA;AAIvD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAEzD;;GAEG;AACH,eAAO,MAAM,WAAW,GACtB,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,mBAAmB,MAAM,KACxB,OAAO,CAAC,cAAc,CAwCxB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GACvB,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,cAAc,MAAM,KACnB,OAAO,CAAC,eAAe,CAiCzB,CAAA"}
package/dist/quotes.js ADDED
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * Quote calculations
4
+ *
5
+ * Get expected output for buy/sell operations.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.getSellQuote = exports.getBuyQuote = void 0;
9
+ const web3_js_1 = require("@solana/web3.js");
10
+ const program_1 = require("./program");
11
+ const constants_1 = require("./constants");
12
+ const tokens_1 = require("./tokens");
13
+ /**
14
+ * Get a buy quote: how many tokens for a given SOL amount.
15
+ */
16
+ const getBuyQuote = async (connection, mintStr, amountSolLamports) => {
17
+ const mint = new web3_js_1.PublicKey(mintStr);
18
+ const tokenData = await (0, tokens_1.fetchTokenRaw)(connection, mint);
19
+ if (!tokenData) {
20
+ throw new Error(`Token not found: ${mintStr}`);
21
+ }
22
+ const { bondingCurve } = tokenData;
23
+ if (bondingCurve.bonding_complete) {
24
+ throw new Error('Bonding curve complete, trade on DEX');
25
+ }
26
+ const virtualSol = BigInt(bondingCurve.virtual_sol_reserves.toString());
27
+ const virtualTokens = BigInt(bondingCurve.virtual_token_reserves.toString());
28
+ const realSol = BigInt(bondingCurve.real_sol_reserves.toString());
29
+ const bondingTarget = BigInt(bondingCurve.bonding_target.toString());
30
+ const amountSol = BigInt(amountSolLamports);
31
+ const result = (0, program_1.calculateTokensOut)(amountSol, virtualSol, virtualTokens, realSol, 100, 100, bondingTarget);
32
+ const priceBefore = (0, program_1.calculatePrice)(virtualSol, virtualTokens);
33
+ const priceAfter = (0, program_1.calculatePrice)(virtualSol + result.solToCurve, virtualTokens - result.tokensOut);
34
+ const priceImpact = ((priceAfter - priceBefore) / priceBefore) * 100;
35
+ const minOutput = (result.tokensToUser * BigInt(99)) / BigInt(100);
36
+ return {
37
+ input_sol: Number(amountSol),
38
+ output_tokens: Number(result.tokensOut),
39
+ tokens_to_user: Number(result.tokensToUser),
40
+ tokens_to_treasury: Number(result.tokensToCommunity),
41
+ protocol_fee_sol: Number(result.protocolFee),
42
+ price_per_token_sol: (priceBefore * constants_1.TOKEN_MULTIPLIER) / constants_1.LAMPORTS_PER_SOL,
43
+ price_impact_percent: priceImpact,
44
+ min_output_tokens: Number(minOutput),
45
+ };
46
+ };
47
+ exports.getBuyQuote = getBuyQuote;
48
+ /**
49
+ * Get a sell quote: how much SOL for a given token amount.
50
+ */
51
+ const getSellQuote = async (connection, mintStr, amountTokens) => {
52
+ const mint = new web3_js_1.PublicKey(mintStr);
53
+ const tokenData = await (0, tokens_1.fetchTokenRaw)(connection, mint);
54
+ if (!tokenData) {
55
+ throw new Error(`Token not found: ${mintStr}`);
56
+ }
57
+ const { bondingCurve } = tokenData;
58
+ if (bondingCurve.bonding_complete) {
59
+ throw new Error('Bonding curve complete, trade on DEX');
60
+ }
61
+ const virtualSol = BigInt(bondingCurve.virtual_sol_reserves.toString());
62
+ const virtualTokens = BigInt(bondingCurve.virtual_token_reserves.toString());
63
+ const tokenAmount = BigInt(amountTokens);
64
+ const result = (0, program_1.calculateSolOut)(tokenAmount, virtualSol, virtualTokens);
65
+ const priceBefore = (0, program_1.calculatePrice)(virtualSol, virtualTokens);
66
+ const priceAfter = (0, program_1.calculatePrice)(virtualSol - result.solOut, virtualTokens + tokenAmount);
67
+ const priceImpact = ((priceBefore - priceAfter) / priceBefore) * 100;
68
+ const minOutput = (result.solToUser * BigInt(99)) / BigInt(100);
69
+ return {
70
+ input_tokens: Number(tokenAmount),
71
+ output_sol: Number(result.solToUser),
72
+ protocol_fee_sol: 0,
73
+ price_per_token_sol: (priceBefore * constants_1.TOKEN_MULTIPLIER) / constants_1.LAMPORTS_PER_SOL,
74
+ price_impact_percent: priceImpact,
75
+ min_output_sol: Number(minOutput),
76
+ };
77
+ };
78
+ exports.getSellQuote = getSellQuote;
79
+ //# sourceMappingURL=quotes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotes.js","sourceRoot":"","sources":["../src/quotes.ts"],"names":[],"mappings":"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"}
package/dist/said.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * SAID Protocol integration
3
+ *
4
+ * Verify wallet reputation and confirm transactions for SAID feedback.
5
+ */
6
+ import { Connection } from '@solana/web3.js';
7
+ import { SaidVerification, ConfirmResult } from './types';
8
+ /**
9
+ * Check SAID verification status for a wallet.
10
+ *
11
+ * @param wallet - Wallet address to verify
12
+ * @returns Verification status including trust tier
13
+ */
14
+ export declare const verifySaid: (wallet: string) => Promise<SaidVerification>;
15
+ /**
16
+ * Confirm a transaction on-chain and determine event type.
17
+ *
18
+ * After an agent submits a transaction, call this to verify it succeeded
19
+ * and determine the event type for reputation tracking.
20
+ *
21
+ * @param connection - Solana RPC connection
22
+ * @param signature - Transaction signature to confirm
23
+ * @param wallet - Wallet address that signed the transaction
24
+ * @returns Confirmation result with event type
25
+ */
26
+ export declare const confirmTransaction: (connection: Connection, signature: string, wallet: string) => Promise<ConfirmResult>;
27
+ //# sourceMappingURL=said.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"said.d.ts","sourceRoot":"","sources":["../src/said.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAQzD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAgBzE,CAAA;AAMD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAC7B,YAAY,UAAU,EACtB,WAAW,MAAM,EACjB,QAAQ,MAAM,KACb,OAAO,CAAC,aAAa,CAkDvB,CAAA"}
package/dist/said.js ADDED
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /**
3
+ * SAID Protocol integration
4
+ *
5
+ * Verify wallet reputation and confirm transactions for SAID feedback.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.confirmTransaction = exports.verifySaid = void 0;
9
+ const constants_1 = require("./constants");
10
+ const SAID_API_URL = 'https://api.saidprotocol.com/api';
11
+ // ============================================================================
12
+ // Verify
13
+ // ============================================================================
14
+ /**
15
+ * Check SAID verification status for a wallet.
16
+ *
17
+ * @param wallet - Wallet address to verify
18
+ * @returns Verification status including trust tier
19
+ */
20
+ const verifySaid = async (wallet) => {
21
+ try {
22
+ const res = await fetch(`${SAID_API_URL}/verify/${wallet}`);
23
+ const data = (await res.json());
24
+ return {
25
+ verified: data.verified ?? false,
26
+ trustTier: data.trustTier ?? null,
27
+ name: data.name,
28
+ };
29
+ }
30
+ catch {
31
+ return { verified: false, trustTier: null };
32
+ }
33
+ };
34
+ exports.verifySaid = verifySaid;
35
+ // ============================================================================
36
+ // Confirm
37
+ // ============================================================================
38
+ /**
39
+ * Confirm a transaction on-chain and determine event type.
40
+ *
41
+ * After an agent submits a transaction, call this to verify it succeeded
42
+ * and determine the event type for reputation tracking.
43
+ *
44
+ * @param connection - Solana RPC connection
45
+ * @param signature - Transaction signature to confirm
46
+ * @param wallet - Wallet address that signed the transaction
47
+ * @returns Confirmation result with event type
48
+ */
49
+ const confirmTransaction = async (connection, signature, wallet) => {
50
+ const tx = await connection.getParsedTransaction(signature, {
51
+ maxSupportedTransactionVersion: 0,
52
+ commitment: 'confirmed',
53
+ });
54
+ if (!tx)
55
+ throw new Error('Transaction not found or not confirmed');
56
+ if (tx.meta?.err)
57
+ throw new Error('Transaction failed on-chain');
58
+ // Verify wallet was a signer
59
+ const signers = tx.transaction.message.accountKeys
60
+ .filter((key) => key.signer)
61
+ .map((key) => key.pubkey.toString());
62
+ if (!signers.includes(wallet)) {
63
+ throw new Error('Wallet was not a signer on this transaction');
64
+ }
65
+ // Find Torch Market instructions
66
+ const torchInstructions = tx.transaction.message.instructions.filter((ix) => {
67
+ const programId = 'programId' in ix ? ix.programId.toString() : '';
68
+ return programId === constants_1.PROGRAM_ID.toString();
69
+ });
70
+ if (torchInstructions.length === 0) {
71
+ throw new Error('Transaction does not involve Torch Market');
72
+ }
73
+ // Determine event type from logs
74
+ const logs = tx.meta?.logMessages || [];
75
+ const isCreateToken = logs.some((log) => log.includes('Instruction: CreateToken') || log.includes('create_token'));
76
+ const isBuy = logs.some((log) => log.includes('Instruction: Buy') || log.includes('Program log: Buy'));
77
+ const isSell = logs.some((log) => log.includes('Instruction: Sell') || log.includes('Program log: Sell'));
78
+ const isVote = logs.some((log) => log.includes('Instruction: Vote') || log.includes('Program log: Vote'));
79
+ let event_type = 'unknown';
80
+ if (isCreateToken)
81
+ event_type = 'token_launch';
82
+ else if (isBuy || isSell)
83
+ event_type = 'trade_complete';
84
+ else if (isVote)
85
+ event_type = 'governance_vote';
86
+ return { confirmed: true, event_type };
87
+ };
88
+ exports.confirmTransaction = confirmTransaction;
89
+ //# sourceMappingURL=said.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"said.js","sourceRoot":"","sources":["../src/said.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Token data fetching
3
+ *
4
+ * Read-only functions for querying token state from Solana.
5
+ */
6
+ import { Connection, PublicKey } from '@solana/web3.js';
7
+ import { BondingCurve, Treasury } from './program';
8
+ import { TokenDetail, TokenListParams, TokenListResult, HoldersResult, MessagesResult, LendingInfo, LoanPositionInfo, VaultInfo, VaultWalletLinkInfo } from './types';
9
+ declare const fetchTokenRaw: (connection: Connection, mint: PublicKey) => Promise<{
10
+ bondingCurve: BondingCurve;
11
+ treasury: Treasury | null;
12
+ } | null>;
13
+ /**
14
+ * List tokens with optional filtering and sorting.
15
+ */
16
+ export declare const getTokens: (connection: Connection, params?: TokenListParams) => Promise<TokenListResult>;
17
+ /**
18
+ * Get detailed info for a single token.
19
+ */
20
+ export declare const getToken: (connection: Connection, mintStr: string) => Promise<TokenDetail>;
21
+ /**
22
+ * Get top holders for a token.
23
+ */
24
+ export declare const getHolders: (connection: Connection, mintStr: string, limit?: number) => Promise<HoldersResult>;
25
+ /**
26
+ * Get messages (memos) for a token.
27
+ */
28
+ export declare const getMessages: (connection: Connection, mintStr: string, limit?: number) => Promise<MessagesResult>;
29
+ /**
30
+ * Get lending info for a migrated token.
31
+ *
32
+ * Returns interest rates, LTV limits, and active loan statistics.
33
+ * Lending is available on all migrated tokens with treasury SOL.
34
+ */
35
+ export declare const getLendingInfo: (connection: Connection, mintStr: string) => Promise<LendingInfo>;
36
+ /**
37
+ * Get loan position for a wallet on a specific token.
38
+ *
39
+ * Returns collateral locked, SOL owed, health status, etc.
40
+ * Returns health="none" if no active loan exists.
41
+ */
42
+ export declare const getLoanPosition: (connection: Connection, mintStr: string, walletStr: string) => Promise<LoanPositionInfo>;
43
+ /**
44
+ * Get vault state by the vault creator's public key.
45
+ *
46
+ * Returns vault balance, authority, linked wallet count, etc.
47
+ * Returns null if no vault exists for this creator.
48
+ */
49
+ export declare const getVault: (connection: Connection, creatorStr: string) => Promise<VaultInfo | null>;
50
+ /**
51
+ * Get vault state by looking up a linked wallet's VaultWalletLink.
52
+ *
53
+ * Useful when you have an agent wallet and need to find its vault.
54
+ * Returns null if the wallet is not linked to any vault.
55
+ */
56
+ export declare const getVaultForWallet: (connection: Connection, walletStr: string) => Promise<VaultInfo | null>;
57
+ /**
58
+ * Get wallet link state for a specific wallet.
59
+ *
60
+ * Returns the link info (which vault it's linked to, when) or null if not linked.
61
+ */
62
+ export declare const getVaultWalletLink: (connection: Connection, walletStr: string) => Promise<VaultWalletLinkInfo | null>;
63
+ export { fetchTokenRaw };
64
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGvD,OAAO,EACL,YAAY,EACZ,QAAQ,EAcT,MAAM,WAAW,CAAA;AAalB,OAAO,EAEL,WAAW,EAEX,eAAe,EACf,eAAe,EAEf,aAAa,EAEb,cAAc,EAEd,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,mBAAmB,EACpB,MAAM,SAAS,CAAA;AAuLhB,QAAA,MAAM,aAAa,GACjB,YAAY,UAAU,EACtB,MAAM,SAAS,KACd,OAAO,CAAC;IAAE,YAAY,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAwB1E,CAAA;AAMD;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,YAAY,UAAU,EACtB,SAAQ,eAAoB,KAC3B,OAAO,CAAC,eAAe,CAWzB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAU,YAAY,UAAU,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,WAAW,CA4D3F,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,GACrB,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,QAAO,MAAW,KACjB,OAAO,CAAC,aAAa,CA6DvB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,GACtB,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,QAAO,MAAW,KACjB,OAAO,CAAC,cAAc,CA6ExB,CAAA;AAYD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,YAAY,UAAU,EACtB,SAAS,MAAM,KACd,OAAO,CAAC,WAAW,CA4DrB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,WAAW,MAAM,KAChB,OAAO,CAAC,gBAAgB,CA6F1B,CAAA;AAMD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GACnB,YAAY,UAAU,EACtB,YAAY,MAAM,KACjB,OAAO,CAAC,SAAS,GAAG,IAAI,CAuB1B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,YAAY,UAAU,EACtB,WAAW,MAAM,KAChB,OAAO,CAAC,SAAS,GAAG,IAAI,CA6B1B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,YAAY,UAAU,EACtB,WAAW,MAAM,KAChB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAiBpC,CAAA;AAGD,OAAO,EAAE,aAAa,EAAE,CAAA"}