pyre-world-kit 2.0.12 → 3.0.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.
Files changed (53) hide show
  1. package/.prettierrc.json +6 -0
  2. package/dist/index.d.ts +38 -4
  3. package/dist/index.js +100 -85
  4. package/dist/providers/action.provider.d.ts +46 -0
  5. package/dist/providers/action.provider.js +331 -0
  6. package/dist/providers/intel.provider.d.ts +29 -0
  7. package/dist/providers/intel.provider.js +363 -0
  8. package/dist/providers/mapper.provider.d.ts +197 -0
  9. package/dist/providers/mapper.provider.js +158 -0
  10. package/dist/providers/registry.provider.d.ts +25 -0
  11. package/dist/providers/registry.provider.js +229 -0
  12. package/dist/providers/state.provider.d.ts +42 -0
  13. package/dist/providers/state.provider.js +348 -0
  14. package/dist/pyre_world.json +34 -229
  15. package/dist/types/action.types.d.ts +41 -0
  16. package/dist/types/action.types.js +2 -0
  17. package/dist/types/intel.types.d.ts +20 -0
  18. package/dist/types/intel.types.js +2 -0
  19. package/dist/types/mapper.types.d.ts +27 -0
  20. package/dist/types/mapper.types.js +22 -0
  21. package/dist/types/registry.types.d.ts +0 -0
  22. package/dist/types/registry.types.js +1 -0
  23. package/dist/types/state.types.d.ts +112 -0
  24. package/dist/types/state.types.js +2 -0
  25. package/dist/types.d.ts +8 -24
  26. package/dist/util.d.ts +29 -0
  27. package/dist/util.js +144 -0
  28. package/dist/vanity.d.ts +3 -3
  29. package/dist/vanity.js +18 -15
  30. package/package.json +4 -2
  31. package/readme.md +134 -122
  32. package/src/index.ts +127 -92
  33. package/src/providers/action.provider.ts +443 -0
  34. package/src/providers/intel.provider.ts +383 -0
  35. package/src/providers/mapper.provider.ts +195 -0
  36. package/src/providers/registry.provider.ts +277 -0
  37. package/src/providers/state.provider.ts +357 -0
  38. package/src/pyre_world.json +35 -230
  39. package/src/types/action.types.ts +76 -0
  40. package/src/types/intel.types.ts +22 -0
  41. package/src/types/mapper.types.ts +84 -0
  42. package/src/types/registry.types.ts +0 -0
  43. package/src/types/state.types.ts +144 -0
  44. package/src/types.ts +329 -333
  45. package/src/util.ts +148 -0
  46. package/src/vanity.ts +27 -14
  47. package/tests/test_e2e.ts +339 -172
  48. package/src/actions.ts +0 -719
  49. package/src/intel.ts +0 -521
  50. package/src/mappers.ts +0 -302
  51. package/src/registry.ts +0 -317
  52. package/tests/test_devnet_e2e.ts +0 -401
  53. package/tests/test_sim.ts +0 -458
package/src/util.ts ADDED
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Pyre Kit Actions
3
+ *
4
+ * Thin wrappers that call torchsdk functions and map params/results
5
+ * into game-semantic Pyre types. No new on-chain logic.
6
+ */
7
+
8
+ import { PublicKey } from '@solana/web3.js'
9
+ import { getRaydiumMigrationAccounts } from 'torchsdk'
10
+ import { Intel } from './types/intel.types'
11
+
12
+ // ─── Blacklist ──────────────────────────────────────────────────────
13
+ // Mints from previous swarm runs. Agents should skip these and only
14
+ // interact with freshly launched factions.
15
+
16
+ const DEFAULT_BLACKLIST = [
17
+ 'E1SgYPW6JXhw5BabrvJkr6L2PyvfFenYaoCTePazyNpy',
18
+ '6jWsyDC87RmfrZZRjuxSAxvUxE665HGZwZ2Z8j5z9epy',
19
+ '6J8PLgFxHb98cNURP2Yt2SKwgnUeEXpN6Us2kxaMz1py',
20
+ '5A297UyPQstxWpJyydDnFvn2zN8whCEYdqvnfB5bF9py',
21
+ '8XdWfSKLJusAcRrYzK3bWJ7dy46AkbU8qxF3B55uSfpy',
22
+ '7ZYrKcJbFFbG36keCYRvfc1j1HScQmJW1zRV3wVVD4py',
23
+ 'ERQPyG2oqx5bdyuY2Nnm5ZbZY2zcB46TfUxqpzYWH5py',
24
+ 'JCvpK3kTnh2EdQG71mqE8ZXcvzLU5EJNG5vgGZme4wpy',
25
+ '9RDFkGSjKpjHtXZ25uuug2MN5P7oSjzkLg16HcrKy3py',
26
+ '2kWcX1ZetV4jUtBPbKKk265q4gS4nuut2kc1MbaZDfpy',
27
+ '3r9FnQim6GToR7NkY5om8igUNu7gfpq5fk2qtv3bV5py',
28
+ '2498F79s1Ghyj3J4VhV1qy5hhznnM53ZwzTXM9iscopy',
29
+ '5VpotyDyc8QKKqLuzu8pfhtEa9gsRG1ww58DbqJUgTpy',
30
+ 'GXi1opahTkavPfAqfUhkoUJRBjPoAmAMVW87kdbDwNpy',
31
+ 'GKFAokGiyhXGXxUPgwQEo8fE5nBjRdJcVX6LVj7SgPpy',
32
+ 'EKFVwfNk1xzqhpyFJSMNw8KDcLRemvqxiGoSyfRtBspy',
33
+ 'GsZLHVt3mTwus5krUcifBWS52xMQSuXSy3RpPhEFtvpy',
34
+ '9azKjXnt2w4RB5ykVcyaicWSssmxoapZ9SSQLMZc4Epy',
35
+ 'BaLwryyMrqhtsMrELkrTSdWF9UYuNdjW4413hrQqbtpy',
36
+ '5p9ibszMVe79mm95M8uubS6WttXem2xZfh3mWmBdvUpy',
37
+ 'CTvoAmTggJcBTnbxcfy91Y1c6t6fU5xq3SRtYh3TgEpy',
38
+ '2kqVCdQS9KSv2kxLiytGZfcLsx5xwKQT6rHTg4V18hpy',
39
+ 'zV7XZcvY8DVk4scKUiw7GGN4L3eBPSXuD7Q1NPxfspy',
40
+ '3UhzKfdU1wgnEN2VCykRURw88qVVqeu3ejRkUnjmhRpy',
41
+ 'FRaS3dAdr1zo6u811XBVGUp9K2mSdQ2yG8qW4qP5hapy',
42
+ '4NHzWVP7hzZhd9LhTrbyxzsSnT8EmNSYVP1DpAKXHYpy',
43
+ 'Yt2rdfp6uzS7L52df3LPmetLoy3GvKChYJ4Lmvk6gpy',
44
+ '9Ejju29KHPWMpda4WpFsJ6ZDHVUqNWyMZHteEisgw9py',
45
+ '2zPC4A7WR2cMNDfBzERp49fEbTBCyqXPKhcrgz3hWcpy',
46
+ '7jBAriydb1qRy7Wg4WAz8woHP4pVxZJSnF7vw95tVQpy',
47
+ 'HvPWKuMFpG3zAdkPMbaadyo78VoJbAMtpXaBYMK1Aqpy',
48
+ 'GyNw9bkqz2rhR66Xx7P4p11PFBrjPi2r6XoCg5gPAdpy',
49
+ '6HveNEes9xtkkchb76JgjWWQ61sbXjESy2vr3A7Maipy',
50
+ '8E3GETvTkTTaCLpzkyHJTnuNMfmGvzUEgAYnurZuLZpy',
51
+ 'AeApaJqppwjW9S2KeZGPZpmg1kAdxZHkFRnXPZc8Kjpy',
52
+ '8FfteyAMQm96upu4w6cJvE5T8RcMKRf5keJMdXbukXpy',
53
+ 'BrEj2Q9XE13WesRU1u8USiprv2DkpBcJfaqQeqQ6grpy',
54
+ 'Dtki37mAB3DiTW1bp8LnZQyv54UuC68Yo5pGZkPdVSpy',
55
+ '77UzTntZ7ThyXhN4hVvSx7m6tjit8uCw6U2LVQHPSqpy',
56
+ 'ASV9kiC6vEpZy3X7xVExuyG257KHKd3Hutbji8AVRUpy',
57
+ 'Fc1V6KcxSriJkUNeDLqz8w5Sm4mp1s8gxornZVLcHEpy',
58
+ 'FEizyHEUoYenqfpF87kqiGnq3w1R2TReodEfsnTrrfpy',
59
+ 'DmwgcVHoJxKeRiij5LtedY9LWDpqoqa3hGfUyVgBkgpy',
60
+ 'GUGz1Em5KZ57aKFqEBSd4Y4Vb6WxBd3H2b16fPCC6upy',
61
+ '6ZWY3Bau5zw1j7vMQQ1czSw4rjBJrExHQ8Renor2vLpy',
62
+ // wave 3
63
+ '4LyPhwUCZNLEp45RsGWdwtkX5tb3wmwydBKEu1V7fxpy',
64
+ 'FYw8FZKzG6vVweUMQgSXBrY9ViHgquWyN4x5QthaK3py',
65
+ 'DhFhRRpRMkPi2Vz3kErZWHNmWqxgQm5YwXT5pFpgVKpy',
66
+ '6GLqPmACtuDi4LcMtVpFK43sYkG8yVouYiDfdfBSSVpy',
67
+ '8YYYewvvCTGPZ2UddgrD6oWUZD7CYXe3DBbA9GBkapy',
68
+ 'FpQT2uDi3oxEpnayKHAUCcWXVhtDaZCb85e7nZzoCUpy',
69
+ '5EWX6grTtA46FQUHGC1kogCW3CsnVfXNvVgrYVtwvRpy',
70
+ '8HSvBFkr6gu9qtbMKcTAZSjzkj4Ag1d1wkdiaMDHHapy',
71
+ '2hgo2kdtNNQGNuvfEPSfydWDqfhSwfbFTzgeVb758wpy',
72
+ 'DKvaEayFig3RHQ9rXHnCKBjvMnJCstzuBmSe77Ybf6py',
73
+ 'Cws3YSPxWYxzrEEfguLi3p13ea2vPNi42mjJwwSMTTpy',
74
+ 'GodcBg2dLzrypiYH5Aqo2bTJ7KiZa5G5XSDwNQ74iYpy',
75
+ '46tUp7tMEhpLeenPXQwvzP8H8V5M4F63vi4M9k4bbbpy',
76
+ 'a5iH2Soh5c8X81vTVbKZq7A7yPckhFdN1amv1Q2tapy',
77
+ '2zTGWtQeJ5GtdHu888QikPzKkyHJPWVFYtoQjNeJJ7py',
78
+ 'HNnpL7z1GKsXuxaEHs2a52zW7tTUjU4dZnrSEf8ZsMpy',
79
+ 'EASit9Yrj1SBg6xchFxDSwVV9Rz11RKdDpB4tcNsekpy',
80
+ 'F7VcdtqsXV6nkDL3yk6esUBu9qGvka4EY9XNTQ7PmZpy',
81
+ '3huHC9Co5dy5Z5U6H8Vf7aVTcuukpKeUr8rDQx8s5Zpy',
82
+ '97ymhwybP8Jh45VcYBJY1pwQ5xkPLX15u7Tg3P7TG7py',
83
+ '92fMEzcYdcoEXX8A5T8i8vfz2S96P39abzoXXuBghfpy',
84
+ '2ZeQsU13WjgX2152qV3wyzxURjLg7GwfXznAiA99Jjpy',
85
+ 'FuUHck8jqaXxGiTuLym4gYXJQrueyEsgd8AMUQx2fMpy',
86
+ 'trTuaGATQZwUeYkYTeyJfQnGGnKRvAriAZRgBWg7Epy',
87
+ 'HEhemzeszztaFzFYR9DjpNwdhghVDD1y7cHxP93EPZpy',
88
+ 'obuf6MkL1ev6WuUDDjH3bq2q6Ryr6MBNMRsA6dEW4py',
89
+ '76ruUbqBpqSKsysoPesDrpaLsDSahWWphQmXrswiLbpy',
90
+ '4ci4scCevt5tXCxkGr5xHoWyaeQY1dahp5nFsTnfYApy',
91
+ 'shzuPKgqedBxJmxdrRyWAtajG3hSNyLr72SufvmEvpy',
92
+ // wave 4 (devnet cleanup)
93
+ 'ZkprRY78cmfSmjMvDmgb4rWRxnxNrQYpF8chejRt3py',
94
+ '4BFfCqG4L6bsS2tEZTpgQPJjsSqqLPQaxuaWMJcaRjpy',
95
+ '5xRA2q9oHjoxN1XgqMTZW3aRBgGppcLCCbLBURepXApy',
96
+ ]
97
+
98
+ const BLACKLISTED_MINTS = new Set<string>(DEFAULT_BLACKLIST)
99
+
100
+ /** Add mints to the blacklist (call at startup with old mints) */
101
+ export function blacklistMints(mints: string[]): void {
102
+ for (const m of mints) BLACKLISTED_MINTS.add(m)
103
+ }
104
+
105
+ /** Check if a mint is blacklisted */
106
+ export function isBlacklistedMint(mint: string): boolean {
107
+ return BLACKLISTED_MINTS.has(mint)
108
+ }
109
+
110
+ /** Get all blacklisted mints */
111
+ export function getBlacklistedMints(): string[] {
112
+ return Array.from(BLACKLISTED_MINTS)
113
+ }
114
+
115
+ /** Create an ephemeral agent keypair (memory-only, zero key management) */
116
+ export { createEphemeralAgent } from 'torchsdk'
117
+
118
+ /** Get the Raydium pool state PDA for an ascended faction's DEX pool */
119
+ export function getDexPool(mint: string): PublicKey {
120
+ const { poolState } = getRaydiumMigrationAccounts(new PublicKey(mint))
121
+ return poolState
122
+ }
123
+
124
+ /** Get Raydium pool vault addresses for an ascended faction */
125
+ export function getDexVaults(mint: string): { solVault: string; tokenVault: string } {
126
+ const accts = getRaydiumMigrationAccounts(new PublicKey(mint))
127
+ return {
128
+ solVault: (accts.isWsolToken0 ? accts.token0Vault : accts.token1Vault).toString(),
129
+ tokenVault: (accts.isWsolToken0 ? accts.token1Vault : accts.token0Vault).toString(),
130
+ }
131
+ }
132
+
133
+ export const startVaultPnlTracker = async (
134
+ intel: Intel,
135
+ wallet: string,
136
+ ): Promise<{ finish: () => Promise<{ spent: number; received: number }> }> => {
137
+ const before = await intel.getAgentSolLamports(wallet)
138
+ return {
139
+ async finish() {
140
+ const after = await intel.getAgentSolLamports(wallet)
141
+ const diff = after - before
142
+ return {
143
+ spent: diff < 0 ? Math.abs(diff) : 0,
144
+ received: diff > 0 ? diff : 0,
145
+ }
146
+ },
147
+ }
148
+ }
package/src/vanity.ts CHANGED
@@ -14,10 +14,7 @@ import {
14
14
  SYSVAR_RENT_PUBKEY,
15
15
  Keypair,
16
16
  } from '@solana/web3.js'
17
- import {
18
- getAssociatedTokenAddressSync,
19
- ASSOCIATED_TOKEN_PROGRAM_ID,
20
- } from '@solana/spl-token'
17
+ import { getAssociatedTokenAddressSync, ASSOCIATED_TOKEN_PROGRAM_ID } from '@solana/spl-token'
21
18
  import { BN, Program, AnchorProvider, Wallet } from '@coral-xyz/anchor'
22
19
  import type { CreateTokenResult, CreateTokenParams } from 'torchsdk'
23
20
  import { PROGRAM_ID } from 'torchsdk'
@@ -63,7 +60,11 @@ const makeDummyProvider = (connection: Connection, payer: PublicKey): AnchorProv
63
60
  return new AnchorProvider(connection, dummyWallet as unknown as Wallet, {})
64
61
  }
65
62
 
66
- const finalizeTransaction = async (connection: Connection, tx: Transaction, feePayer: PublicKey): Promise<void> => {
63
+ const finalizeTransaction = async (
64
+ connection: Connection,
65
+ tx: Transaction,
66
+ feePayer: PublicKey,
67
+ ): Promise<void> => {
67
68
  const { blockhash } = await connection.getLatestBlockhash()
68
69
  tx.recentBlockhash = blockhash
69
70
  tx.feePayer = feePayer
@@ -74,7 +75,7 @@ const finalizeTransaction = async (connection: Connection, tx: Transaction, feeP
74
75
  const PYRE_SUFFIX = 'py'
75
76
 
76
77
  /** Grind for a keypair whose base58 address ends with "py" */
77
- export function grindPyreMint(maxAttempts: number = 500_000): Keypair {
78
+ export const grindPyreMint = (maxAttempts: number = 500_000): Keypair => {
78
79
  for (let i = 0; i < maxAttempts; i++) {
79
80
  const kp = Keypair.generate()
80
81
  if (kp.publicKey.toBase58().endsWith(PYRE_SUFFIX)) {
@@ -86,17 +87,22 @@ export function grindPyreMint(maxAttempts: number = 500_000): Keypair {
86
87
  }
87
88
 
88
89
  /** Check if a mint address is a pyre faction (ends with "py") */
89
- export function isPyreMint(mint: string): boolean {
90
- return mint.endsWith(PYRE_SUFFIX)
91
- }
90
+ export const isPyreMint = (mint: string): boolean => mint.endsWith(PYRE_SUFFIX)
92
91
 
93
92
  // ── Build create transaction with pyre vanity address ──
94
93
 
95
- export async function buildCreateFactionTransaction(
94
+ export const buildCreateFactionTransaction = async (
96
95
  connection: Connection,
97
96
  params: CreateTokenParams,
98
- ): Promise<CreateTokenResult> {
99
- const { creator: creatorStr, name, symbol, metadata_uri, sol_target = 0, community_token = true } = params
97
+ ): Promise<CreateTokenResult> => {
98
+ const {
99
+ creator: creatorStr,
100
+ name,
101
+ symbol,
102
+ metadata_uri,
103
+ sol_target = 0,
104
+ community_token = true,
105
+ } = params
100
106
 
101
107
  const creator = new PublicKey(creatorStr)
102
108
 
@@ -125,8 +131,15 @@ export async function buildCreateFactionTransaction(
125
131
  const provider = makeDummyProvider(connection, creator)
126
132
  const program = new Program(idl as any, provider)
127
133
 
128
- const createIx = await (program.methods
129
- .createToken({ name, symbol, uri: metadata_uri, solTarget: new BN(sol_target), communityToken: community_token }) as any)
134
+ const createIx = await (
135
+ program.methods.createToken({
136
+ name,
137
+ symbol,
138
+ uri: metadata_uri,
139
+ solTarget: new BN(sol_target),
140
+ communityToken: community_token,
141
+ }) as any
142
+ )
130
143
  .accounts({
131
144
  creator,
132
145
  globalConfig,