clawclick-sdk 0.1.7 → 0.1.9

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/dist/chain.js ADDED
@@ -0,0 +1,414 @@
1
+ "use strict";
2
+ /**
3
+ * ClawClick SDK — On-chain operations
4
+ *
5
+ * Deploy token, mint birth certificate, store memory, read agent data.
6
+ * All operations work with viem — no ethers dependency.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createStandaloneLaunch = createStandaloneLaunch;
10
+ exports.mintBirthCertificate = mintBirthCertificate;
11
+ exports.launchAndMint = launchAndMint;
12
+ exports.getAgentByNftId = getAgentByNftId;
13
+ exports.getNftIdByWallet = getNftIdByWallet;
14
+ exports.getTotalAgents = getTotalAgents;
15
+ exports.getAgentByWallet = getAgentByWallet;
16
+ exports.storeMemory = storeMemory;
17
+ exports.getMemoryCount = getMemoryCount;
18
+ exports.getMemory = getMemory;
19
+ exports.updateBirthCertMemory = updateBirthCertMemory;
20
+ exports.immortalizeAgent = immortalizeAgent;
21
+ const viem_1 = require("viem");
22
+ const accounts_1 = require("viem/accounts");
23
+ const contracts_1 = require("./contracts");
24
+ const abi_1 = require("./abi");
25
+ // ── Constants ──
26
+ const MIN_BOOTSTRAP_ETH = '0.001';
27
+ const ZERO = '0x0000000000000000000000000000000000000000';
28
+ // ── Deploy Functions ──────────────────────────────────────────────────────
29
+ /** Standalone: Create token launch via ClawclickFactory */
30
+ async function createStandaloneLaunch(publicClient, walletClient, network, params) {
31
+ const addrs = (0, contracts_1.getAddresses)(network);
32
+ if (!addrs.factory)
33
+ throw new Error(`Factory not deployed on ${network}`);
34
+ // Build fee split arrays — always 5 elements
35
+ const wallets = [];
36
+ const percentages = [];
37
+ if (params.taxWallets && params.taxWallets.length > 0) {
38
+ for (let i = 0; i < 5; i++) {
39
+ wallets.push(params.taxWallets[i] || ZERO);
40
+ percentages.push(((params.taxPercentages?.[i] || 0) * 100)); // % → BPS
41
+ }
42
+ }
43
+ else {
44
+ // Default: 100% to beneficiary
45
+ wallets.push(params.beneficiary, ZERO, ZERO, ZERO, ZERO);
46
+ percentages.push(10000, 0, 0, 0, 0);
47
+ }
48
+ const walletCount = wallets.filter(w => w !== ZERO).length;
49
+ const devBuyAmount = (params.targetMcapETH * (params.devBuyPercent || 0)) / 100;
50
+ const bootstrapValue = Math.max(devBuyAmount, parseFloat(MIN_BOOTSTRAP_ETH));
51
+ const createParams = {
52
+ name: params.name,
53
+ symbol: params.symbol,
54
+ beneficiary: params.beneficiary,
55
+ agentWallet: params.agentWallet,
56
+ targetMcapETH: (0, viem_1.parseEther)(params.targetMcapETH.toString()),
57
+ feeSplit: {
58
+ wallets: wallets,
59
+ percentages: percentages,
60
+ count: walletCount,
61
+ },
62
+ launchType: 0, // DIRECT
63
+ };
64
+ const chain = walletClient.chain;
65
+ const account = walletClient.account;
66
+ const txHash = await walletClient.writeContract({
67
+ address: addrs.factory,
68
+ abi: abi_1.FACTORY_ABI,
69
+ functionName: 'createLaunch',
70
+ args: [createParams],
71
+ value: (0, viem_1.parseEther)(bootstrapValue.toString()),
72
+ gas: BigInt(8_000_000),
73
+ chain,
74
+ account,
75
+ });
76
+ // Wait for receipt
77
+ const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
78
+ if (receipt.status === 'reverted') {
79
+ throw new Error(`createLaunch reverted. Tx: ${txHash}`);
80
+ }
81
+ // Parse TokenLaunched event
82
+ let tokenAddress = ZERO;
83
+ let poolId = '0x';
84
+ for (const log of receipt.logs) {
85
+ try {
86
+ const decoded = (0, viem_1.decodeEventLog)({ abi: abi_1.FACTORY_ABI, data: log.data, topics: log.topics });
87
+ if (decoded.eventName === 'TokenLaunched') {
88
+ const args = decoded.args;
89
+ tokenAddress = args.token;
90
+ poolId = args.poolId;
91
+ break;
92
+ }
93
+ }
94
+ catch { /* not our event */ }
95
+ }
96
+ // Fallback: read latest token from factory
97
+ if (tokenAddress === ZERO) {
98
+ const count = await publicClient.readContract({
99
+ address: addrs.factory, abi: abi_1.FACTORY_ABI, functionName: 'getTokenCount',
100
+ });
101
+ tokenAddress = await publicClient.readContract({
102
+ address: addrs.factory, abi: abi_1.FACTORY_ABI, functionName: 'getTokenAtIndex', args: [count - 1n],
103
+ });
104
+ try {
105
+ const info = await publicClient.readContract({
106
+ address: addrs.factory, abi: abi_1.FACTORY_ABI, functionName: 'launchByToken', args: [tokenAddress],
107
+ });
108
+ poolId = info.poolId || '0x';
109
+ }
110
+ catch { /* poolId is optional */ }
111
+ }
112
+ return { txHash, tokenAddress, poolId };
113
+ }
114
+ /** Mint birth certificate NFT */
115
+ async function mintBirthCertificate(publicClient, walletClient, network, params) {
116
+ const addrs = (0, contracts_1.getAddresses)(network);
117
+ const chain = walletClient.chain;
118
+ const account = walletClient.account;
119
+ const txHash = await walletClient.writeContract({
120
+ address: addrs.birthCertificate,
121
+ abi: contracts_1.BIRTH_CERTIFICATE_ABI,
122
+ functionName: 'mintBirthCertificate',
123
+ args: [
124
+ params.agentWallet,
125
+ params.tokenAddress,
126
+ params.creator,
127
+ params.name,
128
+ params.socialHandle || '',
129
+ params.memoryCID || '',
130
+ params.avatarCID || '',
131
+ params.ensName || '',
132
+ ],
133
+ value: (0, viem_1.parseEther)(contracts_1.IMMORTALIZATION_FEE),
134
+ gas: 500000n,
135
+ chain,
136
+ account,
137
+ });
138
+ const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
139
+ if (receipt.status === 'reverted') {
140
+ throw new Error(`mintBirthCertificate reverted. Tx: ${txHash}`);
141
+ }
142
+ // Extract nftId from Transfer event
143
+ let nftId = 0n;
144
+ const transferTopic = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
145
+ const transferLog = receipt.logs.find(l => l.topics[0] === transferTopic && l.address.toLowerCase() === addrs.birthCertificate.toLowerCase());
146
+ if (transferLog?.topics[3]) {
147
+ nftId = BigInt(transferLog.topics[3]);
148
+ }
149
+ return { txHash, nftId };
150
+ }
151
+ // ── Bundled Deploy (1-tx) ──────────────────────────────────────────────────
152
+ /**
153
+ * Launch token + mint birth certificate in ONE transaction via AgentLaunchBundler.
154
+ * msg.value = bootstrapETH + 0.005 ETH (immortalization fee)
155
+ *
156
+ * Falls back to error if bundler is not deployed.
157
+ */
158
+ async function launchAndMint(publicClient, walletClient, network, params) {
159
+ const addrs = (0, contracts_1.getAddresses)(network);
160
+ if (!addrs.bundler) {
161
+ throw new Error(`Bundler not deployed on ${network}. Use createStandaloneLaunch() + mintBirthCertificate() separately.`);
162
+ }
163
+ // Build fee split arrays — always 5 elements
164
+ const wallets = [];
165
+ const percentages = [];
166
+ if (params.taxWallets && params.taxWallets.length > 0) {
167
+ for (let i = 0; i < 5; i++) {
168
+ wallets.push(params.taxWallets[i] || ZERO);
169
+ percentages.push(((params.taxPercentages?.[i] || 0) * 100));
170
+ }
171
+ }
172
+ else {
173
+ wallets.push(params.beneficiary, ZERO, ZERO, ZERO, ZERO);
174
+ percentages.push(10000, 0, 0, 0, 0);
175
+ }
176
+ const walletCount = wallets.filter(w => w !== ZERO).length;
177
+ const devBuyAmount = (params.targetMcapETH * (params.devBuyPercent || 0)) / 100;
178
+ const bootstrapValue = Math.max(devBuyAmount, parseFloat(MIN_BOOTSTRAP_ETH));
179
+ const totalValue = bootstrapValue + parseFloat(contracts_1.IMMORTALIZATION_FEE);
180
+ const createParams = {
181
+ name: params.name,
182
+ symbol: params.symbol,
183
+ beneficiary: params.beneficiary,
184
+ agentWallet: params.agentWallet,
185
+ targetMcapETH: (0, viem_1.parseEther)(params.targetMcapETH.toString()),
186
+ feeSplit: {
187
+ wallets: wallets,
188
+ percentages: percentages,
189
+ count: walletCount,
190
+ },
191
+ launchType: 0, // DIRECT
192
+ };
193
+ const chain = walletClient.chain;
194
+ const account = walletClient.account;
195
+ const txHash = await walletClient.writeContract({
196
+ address: addrs.bundler,
197
+ abi: contracts_1.LAUNCH_BUNDLER_ABI,
198
+ functionName: 'launchAndMint',
199
+ args: [
200
+ createParams,
201
+ params.agentWallet,
202
+ params.creator,
203
+ params.name,
204
+ params.socialHandle || '',
205
+ params.memoryCID || '',
206
+ params.avatarCID || '',
207
+ params.ensName || '',
208
+ ],
209
+ value: (0, viem_1.parseEther)(totalValue.toString()),
210
+ gas: BigInt(10_000_000),
211
+ chain,
212
+ account,
213
+ });
214
+ const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
215
+ if (receipt.status === 'reverted') {
216
+ throw new Error(`launchAndMint reverted. Tx: ${txHash}`);
217
+ }
218
+ // Parse AgentLaunchBundled event
219
+ let tokenAddress = ZERO;
220
+ let poolId = '0x';
221
+ let nftId = 0n;
222
+ for (const log of receipt.logs) {
223
+ try {
224
+ const decoded = (0, viem_1.decodeEventLog)({ abi: contracts_1.LAUNCH_BUNDLER_ABI, data: log.data, topics: log.topics });
225
+ if (decoded.eventName === 'AgentLaunchBundled') {
226
+ const args = decoded.args;
227
+ tokenAddress = args.token;
228
+ poolId = args.poolId;
229
+ nftId = args.nftId;
230
+ break;
231
+ }
232
+ }
233
+ catch { /* not our event */ }
234
+ }
235
+ // Fallback: parse TokenLaunched if bundled event not found
236
+ if (tokenAddress === ZERO) {
237
+ for (const log of receipt.logs) {
238
+ try {
239
+ const decoded = (0, viem_1.decodeEventLog)({ abi: abi_1.FACTORY_ABI, data: log.data, topics: log.topics });
240
+ if (decoded.eventName === 'TokenLaunched') {
241
+ const args = decoded.args;
242
+ tokenAddress = args.token;
243
+ poolId = args.poolId;
244
+ break;
245
+ }
246
+ }
247
+ catch { /* not our event */ }
248
+ }
249
+ }
250
+ return { txHash, tokenAddress, poolId, nftId };
251
+ }
252
+ // ── Read Functions ──────────────────────────────────────────────────────────
253
+ /** Get agent data by NFT ID */
254
+ async function getAgentByNftId(client, network, nftId) {
255
+ const addrs = (0, contracts_1.getAddresses)(network);
256
+ const data = await client.readContract({
257
+ address: addrs.birthCertificate,
258
+ abi: contracts_1.BIRTH_CERTIFICATE_ABI,
259
+ functionName: 'agentByNFT',
260
+ args: [nftId],
261
+ });
262
+ // Contract returns flat tuple, map to object
263
+ if (Array.isArray(data)) {
264
+ return {
265
+ nftId: data[0], birthTimestamp: data[1], name: data[2], wallet: data[3],
266
+ tokenAddress: data[4], creator: data[5], socialHandle: data[6], memoryCID: data[7],
267
+ avatarCID: data[8], ensName: data[9], dnaHash: data[10], immortalized: data[11],
268
+ spawnedAgents: data[12],
269
+ };
270
+ }
271
+ return data;
272
+ }
273
+ /** Get agent NFT ID by wallet address */
274
+ async function getNftIdByWallet(client, network, wallet) {
275
+ const addrs = (0, contracts_1.getAddresses)(network);
276
+ return await client.readContract({
277
+ address: addrs.birthCertificate,
278
+ abi: contracts_1.BIRTH_CERTIFICATE_ABI,
279
+ functionName: 'nftByWallet',
280
+ args: [wallet],
281
+ });
282
+ }
283
+ /** Get total number of registered agents */
284
+ async function getTotalAgents(client, network) {
285
+ const addrs = (0, contracts_1.getAddresses)(network);
286
+ return await client.readContract({
287
+ address: addrs.birthCertificate,
288
+ abi: contracts_1.BIRTH_CERTIFICATE_ABI,
289
+ functionName: 'totalAgents',
290
+ });
291
+ }
292
+ /** Get agent by wallet (convenience: nftByWallet → agentByNFT) */
293
+ async function getAgentByWallet(client, network, wallet) {
294
+ const nftId = await getNftIdByWallet(client, network, wallet);
295
+ if (nftId === 0n)
296
+ return null;
297
+ return getAgentByNftId(client, network, nftId);
298
+ }
299
+ // ── Memory Functions ────────────────────────────────────────────────────────
300
+ /**
301
+ * Store memory text directly on-chain via MemoryStorage (signature-based).
302
+ * Agent key signs the content, creator/submitter pays gas.
303
+ */
304
+ async function storeMemory(publicClient, walletClient, network, agentWallet, agentPrivateKey, text) {
305
+ const addrs = (0, contracts_1.getAddresses)(network);
306
+ const chain = walletClient.chain;
307
+ const account = walletClient.account;
308
+ // Use keccak256 of text as a content-addressed "CID"
309
+ const contentHash = (0, viem_1.keccak256)(new TextEncoder().encode(text));
310
+ // Get current nonce for the agent
311
+ const nonce = await publicClient.readContract({
312
+ address: addrs.memoryStorage,
313
+ abi: contracts_1.MEMORY_STORAGE_ABI,
314
+ functionName: 'getNonce',
315
+ args: [agentWallet],
316
+ });
317
+ // Build the message the contract will verify:
318
+ // keccak256(abi.encodePacked(ipfsCID, nonce, chainid, contractAddress))
319
+ const messageHash = (0, viem_1.keccak256)((0, viem_1.encodePacked)(['string', 'uint256', 'uint256', 'address'], [contentHash, nonce, BigInt(chain.id), addrs.memoryStorage]));
320
+ // Agent signs the raw hash (EIP-191 personal sign)
321
+ const agentAccount = (0, accounts_1.privateKeyToAccount)(agentPrivateKey);
322
+ const signature = await agentAccount.signMessage({ message: { raw: messageHash } });
323
+ // Submit tx — anyone can call, gas paid by walletClient account
324
+ const txHash = await walletClient.writeContract({
325
+ address: addrs.memoryStorage,
326
+ abi: contracts_1.MEMORY_STORAGE_ABI,
327
+ functionName: 'storeMemory',
328
+ args: [contentHash, text, nonce, signature],
329
+ chain,
330
+ account,
331
+ });
332
+ const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
333
+ if (receipt.status === 'reverted')
334
+ throw new Error(`storeMemory reverted. Tx: ${txHash}`);
335
+ return txHash;
336
+ }
337
+ /** Get memory count for an agent (by wallet address) */
338
+ async function getMemoryCount(client, network, agentWallet) {
339
+ const addrs = (0, contracts_1.getAddresses)(network);
340
+ return await client.readContract({
341
+ address: addrs.memoryStorage,
342
+ abi: contracts_1.MEMORY_STORAGE_ABI,
343
+ functionName: 'getMemoryCount',
344
+ args: [agentWallet],
345
+ });
346
+ }
347
+ /** Get a specific memory entry */
348
+ async function getMemory(client, network, agentWallet, index) {
349
+ const addrs = (0, contracts_1.getAddresses)(network);
350
+ return await client.readContract({
351
+ address: addrs.memoryStorage,
352
+ abi: contracts_1.MEMORY_STORAGE_ABI,
353
+ functionName: 'getMemory',
354
+ args: [agentWallet, index],
355
+ });
356
+ }
357
+ // ── Immortalization ────────────────────────────────────────────────────────
358
+ /**
359
+ * Update the birth certificate memory CID and set immortalized = true.
360
+ *
361
+ * MUST be called by the agent wallet itself (msg.sender = agent wallet).
362
+ * The agent wallet needs ETH for gas.
363
+ */
364
+ async function updateBirthCertMemory(publicClient, agentWalletClient, network, memoryCID) {
365
+ const addrs = (0, contracts_1.getAddresses)(network);
366
+ const chain = agentWalletClient.chain;
367
+ const account = agentWalletClient.account;
368
+ const txHash = await agentWalletClient.writeContract({
369
+ address: addrs.birthCertificate,
370
+ abi: contracts_1.BIRTH_CERTIFICATE_ABI,
371
+ functionName: 'updateMemory',
372
+ args: [memoryCID],
373
+ chain,
374
+ account,
375
+ });
376
+ const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
377
+ if (receipt.status === 'reverted') {
378
+ throw new Error(`updateMemory reverted. Tx: ${txHash}`);
379
+ }
380
+ return txHash;
381
+ }
382
+ /**
383
+ * Immortalize an agent: store memory on-chain + update birth certificate.
384
+ *
385
+ * Convenience function that does both steps:
386
+ * 1. Store memory text in MemoryStorage (creator pays gas, agent signs)
387
+ * 2. Auto-fund agent wallet if needed (creator sends ETH for gas)
388
+ * 3. Update birth certificate memoryCID (agent wallet pays gas, sets immortalized = true)
389
+ */
390
+ async function immortalizeAgent(publicClient, creatorWalletClient, agentWalletClient, network, agentWallet, agentPrivateKey, text) {
391
+ // Step 1: Store memory in MemoryStorage (creator pays gas)
392
+ const memoryTxHash = await storeMemory(publicClient, creatorWalletClient, network, agentWallet, agentPrivateKey, text);
393
+ // Use keccak256 of text as the CID (same as storeMemory does)
394
+ const memoryCID = (0, viem_1.keccak256)(new TextEncoder().encode(text));
395
+ // Step 2: Auto-fund agent wallet if it doesn't have enough ETH for gas
396
+ const MIN_AGENT_GAS = (0, viem_1.parseEther)('0.0005');
397
+ let fundTxHash;
398
+ const agentBalance = await publicClient.getBalance({ address: agentWallet });
399
+ if (agentBalance < MIN_AGENT_GAS) {
400
+ const chain = creatorWalletClient.chain;
401
+ const account = creatorWalletClient.account;
402
+ fundTxHash = await creatorWalletClient.sendTransaction({
403
+ to: agentWallet,
404
+ value: MIN_AGENT_GAS,
405
+ chain,
406
+ account,
407
+ });
408
+ await publicClient.waitForTransactionReceipt({ hash: fundTxHash });
409
+ }
410
+ // Step 3: Update birth certificate (agent wallet pays gas, sets immortalized = true)
411
+ const immortalizeTxHash = await updateBirthCertMemory(publicClient, agentWalletClient, network, memoryCID);
412
+ return { memoryTxHash, immortalizeTxHash, memoryCID, fundTxHash };
413
+ }
414
+ //# sourceMappingURL=chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}