cogxai 2.8.0 → 2.8.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/README.md +10 -19
- package/dist/agents/types.js +2 -2
- package/dist/cli/banner.d.ts.map +1 -1
- package/dist/cli/banner.js +6 -13
- package/dist/cli/banner.js.map +1 -1
- package/dist/cli/init.js +30 -30
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/register.js +3 -3
- package/dist/cli/register.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +10 -3
- package/dist/cli/setup.js.map +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.js +3 -3
- package/dist/config.js.map +1 -1
- package/dist/core/allium-client.d.ts +4 -4
- package/dist/core/allium-client.js +27 -27
- package/dist/core/allium-client.js.map +1 -1
- package/dist/core/base-client.d.ts +40 -0
- package/dist/core/base-client.d.ts.map +1 -0
- package/dist/core/base-client.js +166 -0
- package/dist/core/base-client.js.map +1 -0
- package/dist/core/claude-client.js +1 -1
- package/dist/core/claude-client.js.map +1 -1
- package/dist/core/database.js +2 -2
- package/dist/core/encryption.d.ts +9 -8
- package/dist/core/encryption.d.ts.map +1 -1
- package/dist/core/encryption.js +31 -20
- package/dist/core/encryption.js.map +1 -1
- package/dist/core/guardrails.js +10 -10
- package/dist/core/guardrails.js.map +1 -1
- package/dist/core/input-guardrails.js +4 -4
- package/dist/core/input-guardrails.js.map +1 -1
- package/dist/core/memory-graph.js +2 -2
- package/dist/core/memory-graph.js.map +1 -1
- package/dist/core/memory.d.ts +1 -1
- package/dist/core/memory.d.ts.map +1 -1
- package/dist/core/memory.js +7 -7
- package/dist/core/memory.js.map +1 -1
- package/dist/core/price-oracle.js +3 -3
- package/dist/core/price-oracle.js.map +1 -1
- package/dist/core/venice-client.js +1 -1
- package/dist/core/venice-client.js.map +1 -1
- package/dist/features/market-monitor.js +7 -7
- package/dist/features/onchain-opinion.js +6 -6
- package/dist/features/onchain-opinion.js.map +1 -1
- package/dist/features/x-sentiment-monitor.js +1 -1
- package/dist/features/x-sentiment-monitor.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/knowledge/tokenomics.js +1 -1
- package/dist/knowledge/tokenomics.js.map +1 -1
- package/dist/mcp/server.js +3 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/mentions/dispatcher.js +2 -2
- package/dist/mentions/dispatcher.js.map +1 -1
- package/dist/sdk/cortex.js +11 -11
- package/dist/sdk/cortex.js.map +1 -1
- package/dist/sdk/types.d.ts +7 -7
- package/dist/sdk/types.d.ts.map +1 -1
- package/dist/types/api.d.ts +1 -1
- package/dist/types/api.d.ts.map +1 -1
- package/dist/utils/constants.d.ts +1 -3
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +3 -5
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/format.d.ts +0 -1
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/format.js +0 -4
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/text.d.ts +1 -1
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/text.js +3 -3
- package/dist/utils/text.js.map +1 -1
- package/dist/verify-app/routes.d.ts.map +1 -1
- package/dist/verify-app/routes.js +15 -50
- package/dist/verify-app/routes.js.map +1 -1
- package/dist/webhook/agent-routes.js +2 -2
- package/dist/webhook/agent-routes.js.map +1 -1
- package/dist/webhook/cortex-routes.d.ts.map +1 -1
- package/dist/webhook/cortex-routes.js +32 -28
- package/dist/webhook/cortex-routes.js.map +1 -1
- package/dist/webhook/dashboard-routes.js +1 -1
- package/dist/webhook/dashboard-routes.js.map +1 -1
- package/dist/webhook/server.js +20 -20
- package/dist/webhook/server.js.map +1 -1
- package/package.json +5 -4
- package/supabase-schema.sql +4 -4
- package/dist/core/solana-client.d.ts +0 -39
- package/dist/core/solana-client.d.ts.map +0 -1
- package/dist/core/solana-client.js +0 -366
- package/dist/core/solana-client.js.map +0 -1
|
@@ -1,366 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Solana client — MEMO WRITES + MEMORY REGISTRY.
|
|
4
|
-
*
|
|
5
|
-
* SECURITY: This module can only:
|
|
6
|
-
* 1. Write memo data to Solana
|
|
7
|
-
* 2. Initialize/interact with the memory registry PDA
|
|
8
|
-
* It has NO fund transfer, token transfer, or swap capability.
|
|
9
|
-
* The bot wallet is used exclusively for signing memo/registry transactions.
|
|
10
|
-
* Any attempt to add transfer functionality should be rejected in code review.
|
|
11
|
-
*/
|
|
12
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
-
}
|
|
18
|
-
Object.defineProperty(o, k2, desc);
|
|
19
|
-
}) : (function(o, m, k, k2) {
|
|
20
|
-
if (k2 === undefined) k2 = k;
|
|
21
|
-
o[k2] = m[k];
|
|
22
|
-
}));
|
|
23
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
-
}) : function(o, v) {
|
|
26
|
-
o["default"] = v;
|
|
27
|
-
});
|
|
28
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
-
var ownKeys = function(o) {
|
|
30
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
-
var ar = [];
|
|
32
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
-
return ar;
|
|
34
|
-
};
|
|
35
|
-
return ownKeys(o);
|
|
36
|
-
};
|
|
37
|
-
return function (mod) {
|
|
38
|
-
if (mod && mod.__esModule) return mod;
|
|
39
|
-
var result = {};
|
|
40
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
-
__setModuleDefault(result, mod);
|
|
42
|
-
return result;
|
|
43
|
-
};
|
|
44
|
-
})();
|
|
45
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
-
};
|
|
48
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
-
exports.getConnection = getConnection;
|
|
50
|
-
exports._configureSolana = _configureSolana;
|
|
51
|
-
exports.getBotWallet = getBotWallet;
|
|
52
|
-
exports.writeMemo = writeMemo;
|
|
53
|
-
exports.writeMemoDevnet = writeMemoDevnet;
|
|
54
|
-
exports.verifySignature = verifySignature;
|
|
55
|
-
exports.solscanTxUrl = solscanTxUrl;
|
|
56
|
-
exports._configureMemoryRegistry = _configureMemoryRegistry;
|
|
57
|
-
exports.isRegistryEnabled = isRegistryEnabled;
|
|
58
|
-
exports.initializeRegistry = initializeRegistry;
|
|
59
|
-
exports.registerMemoryOnChain = registerMemoryOnChain;
|
|
60
|
-
exports.verifyMemoryOnChain = verifyMemoryOnChain;
|
|
61
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
62
|
-
const bs58Module = __importStar(require("bs58"));
|
|
63
|
-
const bs58 = bs58Module.default || bs58Module;
|
|
64
|
-
const config_1 = require("../config");
|
|
65
|
-
const logger_1 = require("./logger");
|
|
66
|
-
const tweetnacl_1 = __importDefault(require("tweetnacl"));
|
|
67
|
-
const constants_1 = require("../utils/constants");
|
|
68
|
-
const log = (0, logger_1.createChildLogger)('solana-client');
|
|
69
|
-
let connection;
|
|
70
|
-
let botWallet = null;
|
|
71
|
-
const MEMO_PROGRAM_ID = new web3_js_1.PublicKey(constants_1.MEMO_PROGRAM_ID);
|
|
72
|
-
function getConnection() {
|
|
73
|
-
if (!connection) {
|
|
74
|
-
connection = new web3_js_1.Connection(config_1.config.solana.rpcUrl, 'confirmed');
|
|
75
|
-
}
|
|
76
|
-
return connection;
|
|
77
|
-
}
|
|
78
|
-
/** @internal SDK escape hatch — allows Cortex to inject Solana config. */
|
|
79
|
-
function _configureSolana(rpcUrl, privateKey) {
|
|
80
|
-
connection = new web3_js_1.Connection(rpcUrl, 'confirmed');
|
|
81
|
-
if (privateKey) {
|
|
82
|
-
try {
|
|
83
|
-
const raw = privateKey.trim();
|
|
84
|
-
let secretKey;
|
|
85
|
-
if (raw.startsWith('[')) {
|
|
86
|
-
secretKey = Uint8Array.from(JSON.parse(raw));
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
secretKey = bs58.decode(raw);
|
|
90
|
-
}
|
|
91
|
-
botWallet = web3_js_1.Keypair.fromSecretKey(secretKey);
|
|
92
|
-
}
|
|
93
|
-
catch (err) {
|
|
94
|
-
log.error({ err }, 'SDK: Failed to load bot wallet');
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
function getBotWallet() {
|
|
99
|
-
if (!botWallet && config_1.config.solana.botWalletPrivateKey) {
|
|
100
|
-
try {
|
|
101
|
-
let secretKey;
|
|
102
|
-
const raw = config_1.config.solana.botWalletPrivateKey.trim();
|
|
103
|
-
if (raw.startsWith('[')) {
|
|
104
|
-
// JSON array format: [1,2,3,...]
|
|
105
|
-
secretKey = Uint8Array.from(JSON.parse(raw));
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
// Base58 encoded format
|
|
109
|
-
secretKey = bs58.decode(raw);
|
|
110
|
-
}
|
|
111
|
-
botWallet = web3_js_1.Keypair.fromSecretKey(secretKey);
|
|
112
|
-
log.info({ publicKey: botWallet.publicKey.toBase58() }, 'Bot wallet loaded');
|
|
113
|
-
}
|
|
114
|
-
catch (err) {
|
|
115
|
-
log.error({ err }, 'Failed to load bot wallet');
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return botWallet;
|
|
119
|
-
}
|
|
120
|
-
async function writeMemo(memo) {
|
|
121
|
-
const wallet = getBotWallet();
|
|
122
|
-
if (!wallet) {
|
|
123
|
-
log.error('No bot wallet configured, cannot write memo');
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
126
|
-
const conn = getConnection();
|
|
127
|
-
const truncatedMemo = memo.slice(0, constants_1.MEMO_MAX_LENGTH);
|
|
128
|
-
const instruction = new web3_js_1.TransactionInstruction({
|
|
129
|
-
keys: [{ pubkey: wallet.publicKey, isSigner: true, isWritable: true }],
|
|
130
|
-
programId: MEMO_PROGRAM_ID,
|
|
131
|
-
data: Buffer.from(truncatedMemo, 'utf-8'),
|
|
132
|
-
});
|
|
133
|
-
const transaction = new web3_js_1.Transaction().add(instruction);
|
|
134
|
-
try {
|
|
135
|
-
const signature = await (0, web3_js_1.sendAndConfirmTransaction)(conn, transaction, [wallet]);
|
|
136
|
-
log.info({ signature, memoLength: truncatedMemo.length }, 'Memo written on-chain');
|
|
137
|
-
return signature;
|
|
138
|
-
}
|
|
139
|
-
catch (err) {
|
|
140
|
-
log.error({ err }, 'Failed to write memo');
|
|
141
|
-
return null;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
let devnetConnection;
|
|
145
|
-
function getDevnetConnection() {
|
|
146
|
-
if (!devnetConnection) {
|
|
147
|
-
devnetConnection = new web3_js_1.Connection('https://api.devnet.solana.com', 'confirmed');
|
|
148
|
-
}
|
|
149
|
-
return devnetConnection;
|
|
150
|
-
}
|
|
151
|
-
async function writeMemoDevnet(memo) {
|
|
152
|
-
const wallet = getBotWallet();
|
|
153
|
-
if (!wallet) {
|
|
154
|
-
log.error('No bot wallet configured, cannot write devnet memo');
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
const conn = getDevnetConnection();
|
|
158
|
-
const truncatedMemo = memo.slice(0, constants_1.MEMO_MAX_LENGTH);
|
|
159
|
-
const instruction = new web3_js_1.TransactionInstruction({
|
|
160
|
-
keys: [{ pubkey: wallet.publicKey, isSigner: true, isWritable: true }],
|
|
161
|
-
programId: MEMO_PROGRAM_ID,
|
|
162
|
-
data: Buffer.from(truncatedMemo, 'utf-8'),
|
|
163
|
-
});
|
|
164
|
-
const transaction = new web3_js_1.Transaction().add(instruction);
|
|
165
|
-
try {
|
|
166
|
-
const signature = await (0, web3_js_1.sendAndConfirmTransaction)(conn, transaction, [wallet]);
|
|
167
|
-
log.info({ signature, memoLength: truncatedMemo.length }, 'Memo written on devnet');
|
|
168
|
-
return signature;
|
|
169
|
-
}
|
|
170
|
-
catch (err) {
|
|
171
|
-
log.error({ err }, 'Failed to write devnet memo');
|
|
172
|
-
return null;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
function verifySignature(message, signature, publicKey) {
|
|
176
|
-
const messageBytes = new TextEncoder().encode(message);
|
|
177
|
-
return tweetnacl_1.default.sign.detached.verify(messageBytes, signature, publicKey);
|
|
178
|
-
}
|
|
179
|
-
function solscanTxUrl(signature) {
|
|
180
|
-
return `${constants_1.SOLSCAN_TX_BASE_URL}/${signature}`;
|
|
181
|
-
}
|
|
182
|
-
// ============================================================
|
|
183
|
-
// ON-CHAIN MEMORY REGISTRY (Anchor program — raw instructions)
|
|
184
|
-
//
|
|
185
|
-
// Uses raw TransactionInstruction to avoid @coral-xyz/anchor client
|
|
186
|
-
// dependency, keeping the SDK lightweight. The instruction data layout
|
|
187
|
-
// matches the Anchor program's Borsh serialization.
|
|
188
|
-
// ============================================================
|
|
189
|
-
let registryProgramId = null;
|
|
190
|
-
let registryInitialized = false;
|
|
191
|
-
/** @internal SDK escape hatch — configure the memory registry program ID. */
|
|
192
|
-
function _configureMemoryRegistry(programId) {
|
|
193
|
-
try {
|
|
194
|
-
registryProgramId = new web3_js_1.PublicKey(programId);
|
|
195
|
-
log.info({ programId: programId.slice(0, 12) + '...' }, 'Memory registry program configured');
|
|
196
|
-
}
|
|
197
|
-
catch (err) {
|
|
198
|
-
log.error({ err }, 'Invalid memory registry program ID');
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
/** Check if memory registry is configured. */
|
|
202
|
-
function isRegistryEnabled() {
|
|
203
|
-
return registryProgramId !== null;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Derive the registry PDA for a wallet.
|
|
207
|
-
*/
|
|
208
|
-
function deriveRegistryPDA(authority) {
|
|
209
|
-
if (!registryProgramId)
|
|
210
|
-
throw new Error('Registry program not configured');
|
|
211
|
-
return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('memory-registry'), authority.toBuffer()], registryProgramId);
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Compute Anchor instruction discriminator: sha256("global:<method_name>")[0..8]
|
|
215
|
-
*/
|
|
216
|
-
function anchorDiscriminator(name) {
|
|
217
|
-
const { createHash } = require('crypto');
|
|
218
|
-
const hash = createHash('sha256').update(`global:${name}`).digest();
|
|
219
|
-
return hash.subarray(0, 8);
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Initialize the registry PDA for the bot wallet (one-time).
|
|
223
|
-
* Silently succeeds if already initialized.
|
|
224
|
-
*/
|
|
225
|
-
async function initializeRegistry() {
|
|
226
|
-
if (registryInitialized)
|
|
227
|
-
return;
|
|
228
|
-
const wallet = getBotWallet();
|
|
229
|
-
if (!wallet || !registryProgramId)
|
|
230
|
-
return;
|
|
231
|
-
const conn = getConnection();
|
|
232
|
-
const [registryPDA] = deriveRegistryPDA(wallet.publicKey);
|
|
233
|
-
// Check if PDA already exists
|
|
234
|
-
const accountInfo = await conn.getAccountInfo(registryPDA);
|
|
235
|
-
if (accountInfo) {
|
|
236
|
-
registryInitialized = true;
|
|
237
|
-
log.info({ registry: registryPDA.toBase58() }, 'Registry PDA already exists');
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
const discriminator = anchorDiscriminator('initialize');
|
|
241
|
-
const instruction = new web3_js_1.TransactionInstruction({
|
|
242
|
-
keys: [
|
|
243
|
-
{ pubkey: registryPDA, isSigner: false, isWritable: true },
|
|
244
|
-
{ pubkey: wallet.publicKey, isSigner: true, isWritable: true },
|
|
245
|
-
{ pubkey: web3_js_1.SystemProgram.programId, isSigner: false, isWritable: false },
|
|
246
|
-
],
|
|
247
|
-
programId: registryProgramId,
|
|
248
|
-
data: discriminator,
|
|
249
|
-
});
|
|
250
|
-
const transaction = new web3_js_1.Transaction().add(instruction);
|
|
251
|
-
try {
|
|
252
|
-
const signature = await (0, web3_js_1.sendAndConfirmTransaction)(conn, transaction, [wallet]);
|
|
253
|
-
registryInitialized = true;
|
|
254
|
-
log.info({ signature, registry: registryPDA.toBase58() }, 'Registry PDA initialized on-chain');
|
|
255
|
-
}
|
|
256
|
-
catch (err) {
|
|
257
|
-
log.error({ err }, 'Failed to initialize registry PDA');
|
|
258
|
-
throw err;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Memory type string to on-chain u8 index.
|
|
263
|
-
*/
|
|
264
|
-
function memoryTypeToU8(type) {
|
|
265
|
-
switch (type) {
|
|
266
|
-
case 'episodic': return 0;
|
|
267
|
-
case 'semantic': return 1;
|
|
268
|
-
case 'procedural': return 2;
|
|
269
|
-
case 'self_model': return 3;
|
|
270
|
-
default: return 0;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Importance float to tier u8.
|
|
275
|
-
*/
|
|
276
|
-
function importanceToTier(importance) {
|
|
277
|
-
if (importance > 0.7)
|
|
278
|
-
return 2; // high
|
|
279
|
-
if (importance >= 0.3)
|
|
280
|
-
return 1; // medium
|
|
281
|
-
return 0; // low
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* Register a memory's content hash in the on-chain registry.
|
|
285
|
-
* Returns the transaction signature or null on failure.
|
|
286
|
-
*/
|
|
287
|
-
async function registerMemoryOnChain(contentHash, memoryType, importance, memoryId, encrypted) {
|
|
288
|
-
const wallet = getBotWallet();
|
|
289
|
-
if (!wallet || !registryProgramId)
|
|
290
|
-
return null;
|
|
291
|
-
const conn = getConnection();
|
|
292
|
-
const [registryPDA] = deriveRegistryPDA(wallet.publicKey);
|
|
293
|
-
const discriminator = anchorDiscriminator('register_memory');
|
|
294
|
-
// Borsh-serialize arguments:
|
|
295
|
-
// content_hash: [u8; 32]
|
|
296
|
-
// memory_type: u8
|
|
297
|
-
// importance_tier: u8
|
|
298
|
-
// memory_id: u64 (LE)
|
|
299
|
-
// encrypted: bool (u8)
|
|
300
|
-
const data = Buffer.alloc(8 + 32 + 1 + 1 + 8 + 1); // discriminator + args
|
|
301
|
-
discriminator.copy(data, 0);
|
|
302
|
-
contentHash.copy(data, 8, 0, 32);
|
|
303
|
-
data.writeUInt8(memoryTypeToU8(memoryType), 40);
|
|
304
|
-
data.writeUInt8(importanceToTier(importance), 41);
|
|
305
|
-
data.writeBigUInt64LE(BigInt(memoryId), 42);
|
|
306
|
-
data.writeUInt8(encrypted ? 1 : 0, 50);
|
|
307
|
-
const instruction = new web3_js_1.TransactionInstruction({
|
|
308
|
-
keys: [
|
|
309
|
-
{ pubkey: registryPDA, isSigner: false, isWritable: true },
|
|
310
|
-
{ pubkey: wallet.publicKey, isSigner: true, isWritable: true },
|
|
311
|
-
{ pubkey: web3_js_1.SystemProgram.programId, isSigner: false, isWritable: false },
|
|
312
|
-
],
|
|
313
|
-
programId: registryProgramId,
|
|
314
|
-
data,
|
|
315
|
-
});
|
|
316
|
-
const transaction = new web3_js_1.Transaction().add(instruction);
|
|
317
|
-
try {
|
|
318
|
-
const signature = await (0, web3_js_1.sendAndConfirmTransaction)(conn, transaction, [wallet]);
|
|
319
|
-
log.info({ signature: signature.slice(0, 16), memoryId }, 'Memory registered on-chain');
|
|
320
|
-
return signature;
|
|
321
|
-
}
|
|
322
|
-
catch (err) {
|
|
323
|
-
log.warn({ err, memoryId }, 'Failed to register memory on-chain');
|
|
324
|
-
return null;
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
/**
|
|
328
|
-
* Verify a content hash exists in the on-chain registry.
|
|
329
|
-
* Returns true if found, false otherwise.
|
|
330
|
-
*/
|
|
331
|
-
async function verifyMemoryOnChain(contentHash, authority) {
|
|
332
|
-
const wallet = getBotWallet();
|
|
333
|
-
const authPubkey = authority || wallet?.publicKey;
|
|
334
|
-
if (!authPubkey || !registryProgramId)
|
|
335
|
-
return false;
|
|
336
|
-
const conn = getConnection();
|
|
337
|
-
const [registryPDA] = deriveRegistryPDA(authPubkey);
|
|
338
|
-
try {
|
|
339
|
-
const accountInfo = await conn.getAccountInfo(registryPDA);
|
|
340
|
-
if (!accountInfo || !accountInfo.data)
|
|
341
|
-
return false;
|
|
342
|
-
// Parse the account data (Anchor discriminator + Borsh)
|
|
343
|
-
// Skip 8 bytes discriminator + 32 bytes authority + 8 bytes memory_count + 1 byte bump
|
|
344
|
-
// Then 4 bytes vec length prefix, then entries
|
|
345
|
-
const data = accountInfo.data;
|
|
346
|
-
if (data.length < 53)
|
|
347
|
-
return false; // Too small to contain any entries
|
|
348
|
-
const vecLen = data.readUInt32LE(49);
|
|
349
|
-
const ENTRY_SIZE = 56; // Matches MemoryEntry on-chain size
|
|
350
|
-
const entriesStart = 53;
|
|
351
|
-
for (let i = 0; i < vecLen; i++) {
|
|
352
|
-
const offset = entriesStart + i * ENTRY_SIZE;
|
|
353
|
-
if (offset + 32 > data.length)
|
|
354
|
-
break;
|
|
355
|
-
const hash = data.subarray(offset, offset + 32);
|
|
356
|
-
if (contentHash.equals(hash))
|
|
357
|
-
return true;
|
|
358
|
-
}
|
|
359
|
-
return false;
|
|
360
|
-
}
|
|
361
|
-
catch (err) {
|
|
362
|
-
log.warn({ err }, 'Failed to verify memory on-chain');
|
|
363
|
-
return false;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
//# sourceMappingURL=solana-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"solana-client.js","sourceRoot":"","sources":["../../src/core/solana-client.ts"],"names":[],"mappings":"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"}
|