@clawnch/clawncher-sdk 0.1.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 (98) hide show
  1. package/README.md +603 -0
  2. package/dist/abis.d.ts +935 -0
  3. package/dist/abis.d.ts.map +1 -0
  4. package/dist/abis.js +486 -0
  5. package/dist/abis.js.map +1 -0
  6. package/dist/addresses.d.ts +51 -0
  7. package/dist/addresses.d.ts.map +1 -0
  8. package/dist/addresses.js +80 -0
  9. package/dist/addresses.js.map +1 -0
  10. package/dist/api-deployer-types.d.ts +165 -0
  11. package/dist/api-deployer-types.d.ts.map +1 -0
  12. package/dist/api-deployer-types.js +9 -0
  13. package/dist/api-deployer-types.js.map +1 -0
  14. package/dist/api-deployer.d.ts +114 -0
  15. package/dist/api-deployer.d.ts.map +1 -0
  16. package/dist/api-deployer.js +309 -0
  17. package/dist/api-deployer.js.map +1 -0
  18. package/dist/claimer.d.ts +197 -0
  19. package/dist/claimer.d.ts.map +1 -0
  20. package/dist/claimer.js +311 -0
  21. package/dist/claimer.js.map +1 -0
  22. package/dist/deployer.d.ts +229 -0
  23. package/dist/deployer.d.ts.map +1 -0
  24. package/dist/deployer.js +305 -0
  25. package/dist/deployer.js.map +1 -0
  26. package/dist/erc8004-types.d.ts +94 -0
  27. package/dist/erc8004-types.d.ts.map +1 -0
  28. package/dist/erc8004-types.js +8 -0
  29. package/dist/erc8004-types.js.map +1 -0
  30. package/dist/errors.d.ts +62 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +75 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/index.d.ts +204 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +358 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/liquidity-types.d.ts +198 -0
  39. package/dist/liquidity-types.d.ts.map +1 -0
  40. package/dist/liquidity-types.js +8 -0
  41. package/dist/liquidity-types.js.map +1 -0
  42. package/dist/liquidity.d.ts +111 -0
  43. package/dist/liquidity.d.ts.map +1 -0
  44. package/dist/liquidity.js +608 -0
  45. package/dist/liquidity.js.map +1 -0
  46. package/dist/molten-types.d.ts +282 -0
  47. package/dist/molten-types.d.ts.map +1 -0
  48. package/dist/molten-types.js +8 -0
  49. package/dist/molten-types.js.map +1 -0
  50. package/dist/molten.d.ts +336 -0
  51. package/dist/molten.d.ts.map +1 -0
  52. package/dist/molten.js +560 -0
  53. package/dist/molten.js.map +1 -0
  54. package/dist/portfolio.d.ts +129 -0
  55. package/dist/portfolio.d.ts.map +1 -0
  56. package/dist/portfolio.js +218 -0
  57. package/dist/portfolio.js.map +1 -0
  58. package/dist/reader.d.ts +249 -0
  59. package/dist/reader.d.ts.map +1 -0
  60. package/dist/reader.js +488 -0
  61. package/dist/reader.js.map +1 -0
  62. package/dist/swap-types.d.ts +159 -0
  63. package/dist/swap-types.d.ts.map +1 -0
  64. package/dist/swap-types.js +22 -0
  65. package/dist/swap-types.js.map +1 -0
  66. package/dist/swap.d.ts +762 -0
  67. package/dist/swap.d.ts.map +1 -0
  68. package/dist/swap.js +345 -0
  69. package/dist/swap.js.map +1 -0
  70. package/dist/token-verification-data.d.ts +4 -0
  71. package/dist/token-verification-data.d.ts.map +1 -0
  72. package/dist/token-verification-data.js +6 -0
  73. package/dist/token-verification-data.js.map +1 -0
  74. package/dist/types.d.ts +244 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +5 -0
  77. package/dist/types.js.map +1 -0
  78. package/dist/uniswap-abis.d.ts +470 -0
  79. package/dist/uniswap-abis.d.ts.map +1 -0
  80. package/dist/uniswap-abis.js +322 -0
  81. package/dist/uniswap-abis.js.map +1 -0
  82. package/dist/uniswap-addresses.d.ts +38 -0
  83. package/dist/uniswap-addresses.d.ts.map +1 -0
  84. package/dist/uniswap-addresses.js +67 -0
  85. package/dist/uniswap-addresses.js.map +1 -0
  86. package/dist/vanity.d.ts +115 -0
  87. package/dist/vanity.d.ts.map +1 -0
  88. package/dist/vanity.js +166 -0
  89. package/dist/vanity.js.map +1 -0
  90. package/dist/verify.d.ts +88 -0
  91. package/dist/verify.d.ts.map +1 -0
  92. package/dist/verify.js +181 -0
  93. package/dist/verify.js.map +1 -0
  94. package/dist/watcher.d.ts +112 -0
  95. package/dist/watcher.d.ts.map +1 -0
  96. package/dist/watcher.js +132 -0
  97. package/dist/watcher.js.map +1 -0
  98. package/package.json +59 -0
package/dist/vanity.js ADDED
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Vanity Address Mining for Clawncher Tokens
3
+ *
4
+ * Mines CREATE2 salts to produce token addresses with desired prefixes (e.g., 0xccc).
5
+ *
6
+ * CREATE2 address formula:
7
+ * address = keccak256(0xff ++ factory ++ salt ++ initCodeHash)[12:]
8
+ *
9
+ * Where salt = keccak256(abi.encode(tokenAdmin, userSalt))
10
+ */
11
+ import { keccak256, encodeAbiParameters, parseAbiParameters, concat, toHex, pad, } from 'viem';
12
+ /**
13
+ * Compute the CREATE2 address for a Clawncher token
14
+ *
15
+ * @param factory - Factory address
16
+ * @param tokenAdmin - Token admin address
17
+ * @param userSalt - User-provided salt (bytes32)
18
+ * @param initCodeHash - Hash of the token init code
19
+ * @returns The computed token address
20
+ */
21
+ export function computeTokenAddress(factory, tokenAdmin, userSalt, initCodeHash) {
22
+ // Compute the actual salt: keccak256(abi.encode(tokenAdmin, userSalt))
23
+ const actualSalt = keccak256(encodeAbiParameters(parseAbiParameters('address, bytes32'), [tokenAdmin, userSalt]));
24
+ // CREATE2: keccak256(0xff ++ factory ++ salt ++ initCodeHash)[12:]
25
+ const data = concat([
26
+ '0xff',
27
+ factory,
28
+ actualSalt,
29
+ initCodeHash,
30
+ ]);
31
+ const hash = keccak256(data);
32
+ // Take last 20 bytes (40 hex chars) as address
33
+ return `0x${hash.slice(-40)}`;
34
+ }
35
+ /**
36
+ * Check if an address matches the desired prefix
37
+ */
38
+ function matchesPrefix(address, prefix) {
39
+ // Normalize prefix (remove 0x if present, lowercase)
40
+ const normalizedPrefix = prefix.toLowerCase().replace(/^0x/, '');
41
+ const normalizedAddress = address.toLowerCase().slice(2); // Remove 0x
42
+ return normalizedAddress.startsWith(normalizedPrefix);
43
+ }
44
+ /**
45
+ * Convert a number to a bytes32 hex string
46
+ */
47
+ function numberToBytes32(n) {
48
+ return pad(toHex(n), { size: 32 });
49
+ }
50
+ /**
51
+ * Mine a CREATE2 salt that produces a token address with the desired prefix
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const result = await mineVanityAddress({
56
+ * factory: '0xe31CD9ED1fF67ba51B337C17C2f7da57f7be0166',
57
+ * tokenAdmin: '0x1234...',
58
+ * initCodeHash: '0xabcd...',
59
+ * prefix: '0xccc',
60
+ * onProgress: (attempts, rate) => console.log(`${attempts} attempts, ${rate}/sec`),
61
+ * });
62
+ *
63
+ * console.log(`Found salt: ${result.salt}`);
64
+ * console.log(`Token address: ${result.address}`);
65
+ * ```
66
+ */
67
+ export async function mineVanityAddress(config) {
68
+ const { factory, tokenAdmin, initCodeHash, prefix, maxAttempts = 10_000_000, onProgress, progressInterval = 100_000, } = config;
69
+ const startTime = Date.now();
70
+ let attempts = 0;
71
+ let lastProgressTime = startTime;
72
+ let lastProgressAttempts = 0;
73
+ // Start with a random offset to avoid collisions if mining in parallel
74
+ let nonce = BigInt(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER));
75
+ while (attempts < maxAttempts) {
76
+ const userSalt = numberToBytes32(nonce);
77
+ const address = computeTokenAddress(factory, tokenAdmin, userSalt, initCodeHash);
78
+ if (matchesPrefix(address, prefix)) {
79
+ const timeMs = Date.now() - startTime;
80
+ return {
81
+ salt: userSalt,
82
+ address,
83
+ attempts: attempts + 1,
84
+ timeMs,
85
+ };
86
+ }
87
+ attempts++;
88
+ nonce++;
89
+ // Progress callback
90
+ if (onProgress && attempts % progressInterval === 0) {
91
+ const now = Date.now();
92
+ const elapsed = now - lastProgressTime;
93
+ const attemptsDelta = attempts - lastProgressAttempts;
94
+ const rate = Math.round(attemptsDelta / (elapsed / 1000));
95
+ onProgress(attempts, rate);
96
+ lastProgressTime = now;
97
+ lastProgressAttempts = attempts;
98
+ }
99
+ // Yield to event loop periodically to prevent blocking
100
+ if (attempts % 10_000 === 0) {
101
+ await new Promise(resolve => setTimeout(resolve, 0));
102
+ }
103
+ }
104
+ throw new Error(`Could not find vanity address with prefix "${prefix}" after ${maxAttempts} attempts`);
105
+ }
106
+ /**
107
+ * Estimate the number of attempts needed for a given prefix length
108
+ *
109
+ * @param prefixLength - Number of hex characters in the prefix (after 0x)
110
+ * @returns Expected number of attempts (average case)
111
+ */
112
+ export function estimateAttempts(prefixLength) {
113
+ // Each hex char = 4 bits, so probability of match = 1/16^prefixLength
114
+ return Math.pow(16, prefixLength);
115
+ }
116
+ /**
117
+ * Estimate the time to mine a vanity address
118
+ *
119
+ * @param prefixLength - Number of hex characters in the prefix
120
+ * @param hashesPerSecond - Estimated hash rate (default: 50,000)
121
+ * @returns Estimated time in seconds
122
+ */
123
+ export function estimateTime(prefixLength, hashesPerSecond = 50_000) {
124
+ return estimateAttempts(prefixLength) / hashesPerSecond;
125
+ }
126
+ /**
127
+ * ClawnchToken creation bytecode (without constructor args)
128
+ *
129
+ * This is the compiled bytecode from the Solidity contract.
130
+ * Constructor args are appended to this to form the full init code.
131
+ */
132
+ export const CLAWNCH_TOKEN_BYTECODE = '0x6101806040523461008d57610024610015610147565b96959095949194939293610658565b6040516126b0908161103b823960805181611b60015260a05181611c1d015260c05181611b2a015260e05181611baf01526101005181611bd501526101205181610a2101526101405181610a4a0152610160518181816105b301528181610fa701526114f90152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176100c857604052565b610091565b604051906100dc6040836100a5565b565b81601f8201121561008d578051906001600160401b0382116100c85760405192610112601f8401601f1916602001856100a5565b8284526020838301011161008d57815f9260208093018386015e8301015290565b51906001600160a01b038216820361008d57565b61372b803803806040519261015c82856100a5565b83398101916101008284031261008d5781516001600160401b03811161008d57836101889184016100de565b60208301519091906001600160401b03811161008d57846101aa9185016100de565b936040840151936101bd60608201610133565b60808201519094906001600160401b03811161008d57836101df9184016100de565b60a08301519094906001600160401b03811161008d57846102019185016100de565b60c08401519094906001600160401b03811161008d5760e0916102259186016100de565b930151919796959493929190565b90600182811c92168015610261575b602083101461024d57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610242565b601f8111610277575050565b60035f5260205f20906020601f840160051c830193106102b1575b601f0160051c01905b8181106102a6575050565b5f815560010161029b565b9091508190610292565b601f82116102c857505050565b5f5260205f20906020601f840160051c83019310610300575b601f0160051c01905b8181106102f5575050565b5f81556001016102ea565b90915081906102e1565b8160011b915f199060031b1c19161790565b80519091906001600160401b0381116100c8576103458161033e600454610233565b60046102bb565b602092601f821160011461037857610368929382915f9261036d575b505061030a565b600455565b015190505f80610361565b60045f52601f198216937f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f5b8681106103dc57508360019596106103c4575b505050811b01600455565b01515f1960f88460031b161c191690555f80806103b9565b919260206001819286850151815501940192016103a6565b80519091906001600160401b0381116100c85761041d81610416600e54610233565b600e6102bb565b602092601f82116001146104445761043f929382915f9261036d57505061030a565b600e55565b600e5f52601f198216937fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b8681106104a85750836001959610610490575b505050811b01600e55565b01515f1960f88460031b161c191690555f8080610485565b91926020600181928685015181550194019201610472565b80519091906001600160401b0381116100c8576104e9816104e2600c54610233565b600c6102bb565b602092601f82116001146105105761050b929382915f9261036d57505061030a565b600c55565b600c5f52601f198216937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b868110610574575083600195961061055c575b505050811b01600c55565b01515f1960f88460031b161c191690555f8080610551565b9192602060018192868501518155019401920161053e565b80519091906001600160401b0381116100c8576105b5816105ae600d54610233565b600d6102bb565b602092601f82116001146105dc576105d7929382915f9261036d57505061030a565b600d55565b600d5f52601f198216937fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5915f5b8681106106405750836001959610610628575b505050811b01600d55565b01515f1960f88460031b161c191690555f808061061d565b9192602060018192868501518155019401920161060a565b969594939291966040519061066e6040836100a5565b60018252603160f81b6020830190815281519093906001600160401b0381116100c8576106a5816106a0600354610233565b61026b565b6020601f82116001146107765793610749936106e46107589b9a98946106dc8561074e9a966107539d9a5f9161076b575b5061030a565b60035561031c565b6106ed816108b9565b610120526106fa826109a1565b610140526020815191012060e052519020610100524660a05261071b610a86565b6080523060c052610160819052600b80546001600160a01b0319166001600160a01b03909216919091179055565b6103f4565b6104c0565b61058c565b46146107615750565b6100dc903361080d565b90508501515f6106d6565b60035f52601f198216907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b8181106107f557506107589b9a98946001856107539c9995610749999561074e9c986106e496106107dd575b5050811b0160035561031c565b8601515f1960f88460031b161c191690555f806107d0565b9192602060018192868a0151815501940192016107a4565b91906001600160a01b03831680156108a6576002548281018091116108a1576002555f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a3600254926001600160d01b0380851161088a57506100dc929350610b7c565b630e58ae9360e11b5f52600485905260245260445ffd5b610b68565b63ec442f0560e01b5f525f60045260245ffd5b908151602081105f146108d45750906108d190610ae4565b90565b6001600160401b0381116100c8576108f8816108f1600554610233565b60056102bb565b602092601f82116001146109225761091a929382915f9261036d57505061030a565b60055560ff90565b60055f52601f198216937f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f5b8681106109895750836001959610610971575b505050811b0160055560ff90565b01515f1960f88460031b161c191690555f8080610963565b91926020600181928685015181550194019201610950565b908151602081105f146109b95750906108d190610ae4565b6001600160401b0381116100c8576109dd816109d6600654610233565b60066102bb565b602092601f8211600114610a07576109ff929382915f9261036d57505061030a565b60065560ff90565b60065f52601f198216937ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f915f5b868110610a6e5750836001959610610a56575b505050811b0160065560ff90565b01515f1960f88460031b161c191690555f8080610a48565b91926020600181928685015181550194019201610a35565b60e051610100516040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152610ade60c0826100a5565b51902090565b601f815111610b0f576020815191015160208210610b00571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b6001600160a01b03165f90815260096020526040902090565b634e487b7160e01b5f52601160045260245ffd5b90610b8681610c7b565b9165ffffffffffff4311610c6357600a5480610c2d5750610bc0610bb06100dc945f5b6001610fde565b65ffffffffffff4316600a610f1c565b50506001600160a01b03168015610c15575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7545f9182526040909120546001600160a01b039081169116610daa565b610c26610c2183610c7b565b610cac565b5050610bd2565b92835f198101116108a157600a5f525f5160206136eb5f395f51905f52909301546100dc93610bc091610bb0919060301c610ba9565b6306dfcc6560e41b5f5260306004524360245260445ffd5b6001600160d01b038111610c95576001600160d01b031690565b6306dfcc6560e41b5f5260d060045260245260445ffd5b65ffffffffffff4311610c6357600a5480610cd65750610bb0610cd2915f5b6002610fde565b9091565b805f198101116108a157600a5f525f5160206136eb5f395f51905f520154610cd291610bb09160301c610ccb565b65ffffffffffff4311610c6357805480610d385750610d28610cd2925f6002610fde565b9065ffffffffffff431690610f1c565b805f198101116108a1575f82815260209020015f190154610cd292610d289160301c610ccb565b65ffffffffffff4311610c6357805480610d835750610d28610cd2925f6001610fde565b805f198101116108a1575f82815260209020015f190154610cd292610d289160301c610ba9565b6001600160a01b03808316939291908116908185141580610e7f575b610dd2575b5050505050565b81610e34575b505082610de7575b8080610dcb565b5f51602061370b5f395f51905f5291610e0b610e05610e1193610b4f565b91610c7b565b90610d5f565b604080516001600160d01b039384168152919092166020820152a25f8080610de0565b610e5d610e4e5f51602061370b5f395f51905f5292610b4f565b610e5786610c7b565b90610d04565b604080516001600160d01b039384168152919092166020820152a25f80610dd8565b50831515610dc6565b5f198101919082116108a157565b9065ffffffffffff82549181199060301b169116179055565b908154680100000000000000008110156100c85760018101808455811015610f08576100dc925f5260205f20019065ffffffffffff81511665ffffffffffff19835416178255602060018060d01b039101511690610e96565b634e487b7160e01b5f52603260045260245ffd5b80549293928015610fb457610f33610f3e91610e88565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411610fa557879303610f715750610f6d9250610e96565b9190565b915050610f6d91610f91610f836100cd565b65ffffffffffff9093168352565b6001600160d01b0386166020830152610eaf565b632520601d60e01b5f5260045ffd5b5090610fd991610fc5610f836100cd565b6001600160d01b0385166020830152610eaf565b5f9190565b919091806001146110205760021461100457634e487b7160e01b5f52605160045260245ffd5b6001600160d01b03908116918116919091039081116108a15790565b506001600160d01b03918216908216019081116108a1579056fe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a71461028457806306fdde031461027f578063095ea7b31461027a57806318160ddd1461027557806318bf5077146102705780631c7b2ff41461026b57806323b872dd146102665780632b8c49e314610261578063313ce5671461025c5780633644e51514610257578063392f37e9146102525780633a46b1a81461024d57806342966c68146102485780634bf5d7e914610243578063587cde1e1461023e5780635c19a95c146102395780636fcfff451461023457806370a082311461022f57806379cc67901461022a5780637ecebe001461022557806380007e831461022057806384b0196e1461021b5780638e539e8c14610216578063918b5be11461021157806391ddadf41461020c57806395d89b41146102075780639ab24eb014610202578063a9059cbb146101fd578063aba83150146101f8578063b974b0a3146101f3578063c3cda520146101ee578063d0496d6a146101e9578063d505accf146101e4578063dd62ed3e146101df578063e2f273bd146101da578063eb3d68e7146101d5578063f1127ed8146101d0578063f851a440146101cb5763fc735e99146101c6575f80fd5b6114e7565b6114bf565b61140d565b6112fd565b61128c565b611241565b611136565b611113565b61101b565b610f33565b610f10565b610eea565b610ea3565b610dfe565b610dd3565b610ca3565b610b06565b610a09565b6109e7565b6109af565b61097f565b61095c565b6108fa565b6108d8565b610898565b610808565b6107e9565b610704565b6106c6565b6106a4565b610689565b61061a565b6105e2565b61059e565b610492565b610475565b610444565b61033e565b346103025760203660031901126103025760043563ffffffff60e01b811680910361030257630cccc66560e21b81149081156102f1575b81156102e0575b81156102d7575b506040519015158152602090f35b9050155f6102c9565b6301ffc9a760e01b811491506102c2565b6336372b0760e01b811491506102bb565b5f80fd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90602061033b928181520190610306565b90565b34610302575f366003190112610302576040515f60035461035e81611596565b80845290600181169081156103f45750600114610396575b6103928361038681850382610bf9565b6040519182918261032a565b0390f35b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b8082106103da57509091508101602001610386610376565b9192600181602092548385880101520191019092916103c2565b60ff191660208086019190915291151560051b840190910191506103869050610376565b600435906001600160a01b038216820361030257565b602435906001600160a01b038216820361030257565b346103025760403660031901126103025761046a610460610418565b6024359033611d92565b602060405160018152f35b34610302575f366003190112610302576020600254604051908152f35b34610302576040366003190112610302576104ab610418565b602435906027602160991b01193301610590576001600160a01b03811690811561057d576104e36104de84600254611c98565b600255565b6104ec816117ce565b838154019055815f5f5160206126505f395f51905f526040518061051588829190602083019252565b0390a36002546001600160d01b039081811161056757505082610537916123b5565b60405191825233917fde22baff038e3a3e08407cbdf617deed74e869a7ba517df611e33131c6e6ea0490602090a3005b630e58ae9360e11b5f5260045260245260445b5ffd5b63ec442f0560e01b5f525f60045260245ffd5b6282b42960e81b5f5260045ffd5b34610302575f366003190112610302576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346103025760603660031901126103025761046a6105fe610418565b61060661042e565b604435916106158333836118fe565b6119b6565b3461030257604036600319011261030257610633610418565b6024356027602160991b011933016105905761064f8183611a52565b60405190815233916001600160a01b0316907fb90795a66650155983e242cac3e1ac1a4dc26f8ed2987f3ce416a34e00111fd490602090a3005b34610302575f36600319011261030257602060405160128152f35b34610302575f3660031901126103025760206106be611b27565b604051908152f35b34610302575f366003190112610302576103926040516106f0816106e9816115ce565b0382610bf9565b604051918291602083526020830190610306565b346103025760403660031901126103025761071d610418565b6001600160a01b03165f90815260096020526040902061073e602435611c43565b8154905f829160058411610791575b610758935084611fa1565b908161077657505060205f5b6040516001600160d01b039091168152f35b610781602092611c7c565b905f52815f20015460301c610764565b919261079c81611e44565b81039081116107e45761075893855f5265ffffffffffff8260205f2001541665ffffffffffff8516105f146107d257509161074d565b9291506107de90611c8a565b9061074d565b611582565b346103025760203660031901126103025761080660043533611a52565b005b34610302575f3660031901126103025761082143611df7565b65ffffffffffff8061083243611df7565b169116036108895761039260405161084b604082610bf9565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c740000006020820152604051918291602083526020830190610306565b6301bfc1c560e61b5f5260045ffd5b34610302576020366003190112610302576001600160a01b036108b9610418565b165f526008602052602060018060a01b0360405f205416604051908152f35b34610302576020366003190112610302576108066108f4610418565b33611ca5565b34610302576020366003190112610302576001600160a01b0361091b610418565b165f52600960205260405f205463ffffffff81116109455760405163ffffffff9091168152602090f35b6306dfcc6560e41b5f52602060045260245260445ffd5b346103025760203660031901126103025760206106be61097a610418565b611815565b346103025760403660031901126103025761080661099b610418565b602435906109aa8233836118fe565b611a52565b34610302576020366003190112610302576001600160a01b036109d0610418565b165f526007602052602060405f2054604051908152f35b34610302575f36600319011261030257602060ff600f54166040519015158152f35b34610302575f36600319011261030257610aad610a457f00000000000000000000000000000000000000000000000000000000000000006120d8565b610a6e7f0000000000000000000000000000000000000000000000000000000000000000612131565b6020604051610a7d8282610bf9565b5f815281610abb81830194601f198301368737604051978897600f60f81b895260e0858a015260e0890190610306565b908782036040890152610306565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b828110610aef57505050500390f35b835185528695509381019392810192600101610ae0565b3461030257602036600319011261030257610b22600435611c43565b600a54905f829160058411610b71575b610b3e9350600a611fa1565b80610b4f57506040515f8152602090f35b610b6c610b5d602092611c7c565b600a5f52825f20015460301c90565b610764565b9192610b7c81611e44565b81039081116107e457610b3e93600a5f5265ffffffffffff8260205f2001541665ffffffffffff8516105f14610bb3575091610b32565b929150610bbf90611c8a565b90610b32565b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b03821117610bf457604052565b610bc5565b601f909101601f19168101906001600160401b03821190821017610bf457604052565b60405190610c2b604083610bf9565b565b6020600319820112610302576004356001600160401b0381116103025781602382011215610302576004810135906001600160401b038211610bf45760405192610c81601f8401601f191660200185610bf9565b8284526024838301011161030257815f92602460209301838601378301015290565b3461030257610cb136610c2d565b600b546001600160a01b03163303610dc45780516001600160401b038111610bf457610ce781610ce2600c54611596565b61182f565b6020601f8211600114610d455791610d2682610d35935f5160206126705f395f51905f52955f91610d3a575b508160011b915f199060031b1c19161790565b600c556040519182918261032a565b0390a1005b90508301515f610d13565b600c5f52601f198216905f5160206125d05f395f51905f52915f5b818110610dac5750925f5160206126705f395f51905f52949260019282610d359610610d94575b5050811b01600c55610386565b8401515f1960f88460031b161c191690555f80610d87565b91926020600181928689015181550194019201610d60565b637bfa4b9f60e01b5f5260045ffd5b34610302575f366003190112610302576020610dee43611df7565b65ffffffffffff60405191168152f35b34610302575f366003190112610302576040515f600454610e1e81611596565b80845290600181169081156103f45750600114610e45576103928361038681850382610bf9565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610e8957509091508101602001610386610376565b919260018160209254838588010152019101909291610e71565b34610302576020366003190112610302576001600160a01b03610ec4610418565b165f526009602052602060018060d01b03610ee160405f20611d11565b16604051908152f35b346103025760403660031901126103025761046a610f06610418565b60243590336119b6565b34610302575f366003190112610302576103926040516106f0816106e98161165a565b34610302575f36600319011261030257600b54604051906001600160a01b0316610f6782610f608161165a565b0383610bf9565b610392604051610f7a816106e9816115ce565b610fed60405191610f9583610f8e816116ca565b0384610bf9565b610fdf60405196879660018060a01b037f0000000000000000000000000000000000000000000000000000000000000000168852602088015260a0604088015260a0870190610306565b908582036060870152610306565b908382036080850152610306565b6064359060ff8216820361030257565b6084359060ff8216820361030257565b346103025760c036600319011261030257611034610418565b60243590604435611043610ffb565b6084359060a4359280421161110157916110c893916110ba6110bf9460405160208101917fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf835260018060a01b038a1660408301528a60608301526080820152608081526110b260a082610bf9565b519020611d3b565b612168565b90929192612209565b6110d181611d70565b8093036110e2576108069250611ca5565b90506301d4b62360e61b5f5260018060a01b031660045260245260445ffd5b632341d78760e11b5f5260045260245ffd5b34610302575f366003190112610302576103926040516106f0816106e9816116ca565b346103025760e03660031901126103025761114f610418565b61115761042e565b604435906064359261116761100b565b60a43560c4359086421161122e576111f3926111ee61118586611d70565b9860405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835260018060a01b0389169b8c604084015260018060a01b038b1660608401528b608084015260a083015260c082015260c081526110b260e082610bf9565b611d61565b936001600160a01b0385160361120d576108069350611d92565b6325c0072360e11b5f526001600160a01b038085166004521660245260445ffd5b8663313c898160e11b5f5260045260245ffd5b3461030257604036600319011261030257602061128361125f610418565b61126761042e565b6001600160a01b039091165f9081526001845260409020611800565b54604051908152f35b34610302576020366003190112610302576112a5610418565b600b54906001600160a01b0382169033829003610dc4576001600160a01b03166001600160a01b0319929092168217600b557fcd6ba6b7da89e039d53b5d981527a893755342bb9d8e5c2f61f6638f1fb5192b5f80a3005b346103025761130b36610c2d565b600b546001600160a01b03163303610dc45780516001600160401b038111610bf4576113418161133c600e54611596565b61187f565b6020601f821160011461138e579161137f82610d35935f5160206126305f395f51905f52955f91610d3a57508160011b915f199060031b1c19161790565b600e556040519182918261032a565b600e5f52601f198216905f5160206125f05f395f51905f52915f5b8181106113f55750925f5160206126305f395f51905f52949260019282610d3596106113dd575b5050811b01600e55610386565b8401515f1960f88460031b161c191690555f806113d0565b919260206001819286890151815501940192016113a9565b3461030257604036600319011261030257611426610418565b6024359063ffffffff821682036103025761039291611475916114476118cf565b506114506118cf565b506001600160a01b03165f90815260096020526040902061146f6118cf565b50612285565b506040519061148382610bd9565b5465ffffffffffff811680835260309190911c60209283019081526040805192835290516001600160d01b031692820192909252918291820190565b34610302575f36600319011261030257600b546040516001600160a01b039091168152602090f35b34610302575f366003190112610302577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361157357600f5460ff81166115645760ff1916600117600f5530337f78a953f3f0d92abc078a34e5d4fedf8708e788e1b29300b3d6170e97f88a13fc5f80a3005b630231faf760e31b5f5260045ffd5b63ce7123f560e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b90600182811c921680156115c4575b60208310146115b057565b634e487b7160e01b5f52602260045260245ffd5b91607f16916115a5565b600c545f92916115dd82611596565b808252916001811690811561163e57506001146115f8575050565b600c5f9081529293509091905f5160206125d05f395f51905f525b838310611624575060209250010190565b600181602092949394548385870101520191019190611613565b9050602093945060ff929192191683830152151560051b010190565b600e545f929161166982611596565b808252916001811690811561163e5750600114611684575050565b600e5f9081529293509091905f5160206125f05f395f51905f525b8383106116b0575060209250010190565b60018160209294939454838587010152019101919061169f565b600d545f92916116d982611596565b808252916001811690811561163e57506001146116f4575050565b600d5f9081529293509091907fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb55b838310611733575060209250010190565b600181602092949394548385870101520191019190611722565b5f929181549161175c83611596565b80835292600181169081156117b1575060011461177857505050565b5f9081526020812093945091925b838310611797575060209250010190565b600181602092949394548385870101520191019190611786565b915050602093945060ff929192191683830152151560051b010190565b6001600160a01b03165f90815260208190526040902090565b6001600160a01b03165f90815260096020526040902090565b9060018060a01b03165f5260205260405f2090565b6001600160a01b03165f9081526020819052604090205490565b601f811161183b575050565b600c5f5260205f20906020601f840160051c83019310611875575b601f0160051c01905b81811061186a575050565b5f815560010161185f565b9091508190611856565b601f811161188b575050565b600e5f5260205f20906020601f840160051c830193106118c5575b601f0160051c01905b8181106118ba575050565b5f81556001016118af565b90915081906118a6565b604051906118dc82610bd9565b5f6020838281520152565b6001600160a01b0316600452602452604452606490565b6001600160a01b03165f81815260016020526040902091929091611923908490611800565b545f198110611933575b50505050565b818110611995578215611982576001600160a01b0384161561196f57611965925f526001602052039160405f20611800565b555f80808061192d565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b83637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b038116939291908415611a3f576001600160a01b038216801561057d576119e3826117ce565b5495848710611a2a5784610c2b9697036119fc846117ce565b55611a06846117ce565b8054860190556040518581525f5160206126505f395f51905f5290602090a361241b565b63391434e360e21b5f5261057a8588856118e7565b634b637e8f60e11b5f525f60045260245ffd5b6001600160a01b038116908115611a3f57611a6c816117ce565b54838110611b115790611a8684610c2b95949303916117ce565b5581600254036002555f815f5160206126505f395f51905f5260405180602081018782520390a38015611af9575b611ac5611ac0836122ae565b612380565b50505f908152600860205260408120549080525f5160206126105f395f51905f52546001600160a01b039081169116611ffa565b611b0a611b05836122ae565b61234b565b5050611ab4565b63391434e360e21b5f5261057a918491906118e7565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161480611c1a575b15611b82577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152611c1460c082610bf9565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614611b59565b65ffffffffffff611c5343611df7565b1680821015611c66575061033b90611df7565b90637669fc0f60e11b5f5260045260245260445ffd5b5f198101919082116107e457565b90600182018092116107e457565b919082018092116107e457565b6001600160a01b038181165f81815260086020526040812080548685166001600160a01b031982168117909255610c2b96941694611d0b9390928691907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9080a4611815565b91611ffa565b80549081611d1f5750505f90565b815f198101116107e4575f525f199060205f2001015460301c90565b604290611d46611b27565b906040519161190160f01b8352600283015260228201522090565b9161033b93916110bf93612168565b6001600160a01b03165f90815260076020526040902080546001810190915590565b6001600160a01b0316908115611982576001600160a01b03811692831561196f5780611dea7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593855f52600160205260405f20611800565b55604051908152602090a3565b65ffffffffffff8111611e0f5765ffffffffffff1690565b6306dfcc6560e41b5f52603060045260245260445ffd5b8115611e30570490565b634e487b7160e01b5f52601260045260245ffd5b600181111561033b57806001600160801b821015611f64575b611f0a611f00611ef6611eec611ee2611ed8611ec7611f11976004611f169a600160401b811015611f57575b600160201b811015611f4a575b62010000811015611f3d575b610100811015611f30575b6010811015611f23575b1015611f1b575b60030260011c90565b611ed1818b611e26565b0160011c90565b611ed1818a611e26565b611ed18189611e26565b611ed18188611e26565b611ed18187611e26565b611ed18186611e26565b8093611e26565b821190565b900390565b60011b611ebe565b60041c9160021b91611eb7565b60081c9160041b91611ead565b60101c9160081b91611ea2565b60201c9160101b91611e96565b60401c9160201b91611e89565b5050611f16611f11611f0a611f00611ef6611eec611ee2611ed8611ec7611f8b8a60801c90565b9850600160401b9750611e5d9650505050505050565b905b838310611fb05750505090565b90919280841860011c8185160190835f5265ffffffffffff8260205f2001541665ffffffffffff8416105f14611fea5750925b9190611fa3565b9350611ff590611c8a565b611fe3565b6001600160a01b038083169392919081169081851415806120cf575b612022575b5050505050565b81612084575b505082612037575b808061201b565b5f5160206126905f395f51905f529161205b612055612061936117e7565b916122ae565b90612317565b604080516001600160d01b039384168152919092166020820152a25f8080612030565b6120ad61209e5f5160206126905f395f51905f52926117e7565b6120a7866122ae565b906122df565b604080516001600160d01b039384168152919092166020820152a25f80612028565b50831515612016565b60ff811461211e5760ff811690601f821161210f57604051916120fc604084610bf9565b6020808452838101919036833783525290565b632cd44ac360e21b5f5260045ffd5b5060405161033b816106e981600561174d565b60ff81146121555760ff811690601f821161210f57604051916120fc604084610bf9565b5060405161033b816106e981600661174d565b91906fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384116121e0579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156121d5575f516001600160a01b038116156121cb57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600411156121f557565b634e487b7160e01b5f52602160045260245ffd5b612212816121eb565b8061221b575050565b612224816121eb565b6001810361223b5763f645eedf60e01b5f5260045ffd5b612244816121eb565b6002810361225f575063fce698f760e01b5f5260045260245ffd5b8061226b6003926121eb565b146122735750565b6335e2f38360e21b5f5260045260245ffd5b805482101561229a575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b6001600160d01b0381116122c8576001600160d01b031690565b6306dfcc6560e41b5f5260d060045260245260445ffd5b906122e943611df7565b906122f383611d11565b6001600160d01b0391821690821603919082116107e4576123139261250d565b9091565b9061232143611df7565b9061232b83611d11565b6001600160d01b0391821690821601919082116107e4576123139261250d565b61235443611df7565b9061235f600a611d11565b6001600160d01b03918216908216019081116107e45761231391600a61250d565b61238943611df7565b90612394600a611d11565b6001600160d01b03918216908216039081116107e45761231391600a61250d565b90610c2b916123c6611b05836122ae565b50506001600160a01b03168015612408575b60086020525f5160206126105f395f51905f52545f9182526040909120546001600160a01b039081169116611ffa565b612414611ac0836122ae565b50506123d8565b610c2b92916001600160a01b0390911690811561247e575b6001600160a01b031690811561246b575b5f90815260086020526040808220549282529020546001600160a01b039081169116611ffa565b612477611ac0846122ae565b5050612444565b61248a611b05846122ae565b5050612433565b9065ffffffffffff82549181199060301b169116179055565b8054600160401b811015610bf4576124c791600182018155612285565b6124fa578165ffffffffffff610c2b93511665ffffffffffff19835416178255602060018060d01b039101511690612491565b634e487b7160e01b5f525f60045260245ffd5b805492939280156125a55761252461252f91611c7c565b825f5260205f200190565b8054603081901c9365ffffffffffff9182169291811680841161259657879303612562575061255e9250612491565b9190565b91505061255e91612582612574610c1c565b65ffffffffffff9093168352565b6001600160d01b03861660208301526124aa565b632520601d60e01b5f5260045ffd5b50906125ca916125b6612574610c1c565b6001600160d01b03851660208301526124aa565b5f919056fedf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7bb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7a27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b55524216ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3eff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f4dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a7dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724';
133
+ /**
134
+ * Compute the init code hash for a ClawnchToken deployment
135
+ */
136
+ export function computeInitCodeHash(constructorArgs) {
137
+ const encodedArgs = encodeAbiParameters(parseAbiParameters('string, string, uint256, address, string, string, string, uint256'), [
138
+ constructorArgs.name,
139
+ constructorArgs.symbol,
140
+ constructorArgs.maxSupply,
141
+ constructorArgs.admin,
142
+ constructorArgs.image,
143
+ constructorArgs.metadata,
144
+ constructorArgs.context,
145
+ constructorArgs.initialSupplyChainId,
146
+ ]);
147
+ const initCode = concat([CLAWNCH_TOKEN_BYTECODE, encodedArgs]);
148
+ return keccak256(initCode);
149
+ }
150
+ /**
151
+ * Default vanity prefix for Clawncher tokens
152
+ */
153
+ export const DEFAULT_VANITY_PREFIX = 'ccc';
154
+ /**
155
+ * Quick helper to mine a 0xccc address
156
+ */
157
+ export async function mineCccAddress(factory, tokenAdmin, initCodeHash, onProgress) {
158
+ return mineVanityAddress({
159
+ factory,
160
+ tokenAdmin,
161
+ initCodeHash,
162
+ prefix: DEFAULT_VANITY_PREFIX,
163
+ onProgress,
164
+ });
165
+ }
166
+ //# sourceMappingURL=vanity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vanity.js","sourceRoot":"","sources":["../src/vanity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAGL,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,EACN,KAAK,EACL,GAAG,GACJ,MAAM,MAAM,CAAC;AAoCd;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,UAAmB,EACnB,QAAa,EACb,YAAiB;IAEjB,uEAAuE;IACvE,MAAM,UAAU,GAAG,SAAS,CAC1B,mBAAmB,CACjB,kBAAkB,CAAC,kBAAkB,CAAC,EACtC,CAAC,UAAU,EAAE,QAAQ,CAAC,CACvB,CACF,CAAC;IAEF,mEAAmE;IACnE,MAAM,IAAI,GAAG,MAAM,CAAC;QAClB,MAAM;QACN,OAAO;QACP,UAAU;QACV,YAAY;KACb,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,+CAA+C;IAC/C,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAa,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,OAAgB,EAAE,MAAc;IACrD,qDAAqD;IACrD,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY;IACtE,OAAO,iBAAiB,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,CAAS;IAChC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAwB;IAC9D,MAAM,EACJ,OAAO,EACP,UAAU,EACV,YAAY,EACZ,MAAM,EACN,WAAW,GAAG,UAAU,EACxB,UAAU,EACV,gBAAgB,GAAG,OAAO,GAC3B,GAAG,MAAM,CAAC;IAEX,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IACjC,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAE7B,uEAAuE;IACvE,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAExE,OAAO,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEjF,IAAI,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACtC,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,OAAO;gBACP,QAAQ,EAAE,QAAQ,GAAG,CAAC;gBACtB,MAAM;aACP,CAAC;QACJ,CAAC;QAED,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,CAAC;QAER,oBAAoB;QACpB,IAAI,UAAU,IAAI,QAAQ,GAAG,gBAAgB,KAAK,CAAC,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,GAAG,GAAG,gBAAgB,CAAC;YACvC,MAAM,aAAa,GAAG,QAAQ,GAAG,oBAAoB,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;YAC1D,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC3B,gBAAgB,GAAG,GAAG,CAAC;YACvB,oBAAoB,GAAG,QAAQ,CAAC;QAClC,CAAC;QAED,uDAAuD;QACvD,IAAI,QAAQ,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,8CAA8C,MAAM,WAAW,WAAW,WAAW,CAAC,CAAC;AACzG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,sEAAsE;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,YAAoB,EAAE,eAAe,GAAG,MAAM;IACzE,OAAO,gBAAgB,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAQ,0l3BAA0l3B,CAAC;AAEto3B;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,eASC;IAED,MAAM,WAAW,GAAG,mBAAmB,CACrC,kBAAkB,CAAC,mEAAmE,CAAC,EACvF;QACE,eAAe,CAAC,IAAI;QACpB,eAAe,CAAC,MAAM;QACtB,eAAe,CAAC,SAAS;QACzB,eAAe,CAAC,KAAK;QACrB,eAAe,CAAC,KAAK;QACrB,eAAe,CAAC,QAAQ;QACxB,eAAe,CAAC,OAAO;QACvB,eAAe,CAAC,oBAAoB;KACrC,CACF,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/D,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAgB,EAChB,UAAmB,EACnB,YAAiB,EACjB,UAAqD;IAErD,OAAO,iBAAiB,CAAC;QACvB,OAAO;QACP,UAAU;QACV,YAAY;QACZ,MAAM,EAAE,qBAAqB;QAC7B,UAAU;KACX,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Token contract verification on Basescan
3
+ *
4
+ * Verifies deployed ClawnchToken contracts on Basescan using the
5
+ * Standard JSON Input approach. Every token uses identical source code
6
+ * with different constructor arguments.
7
+ */
8
+ import { type Address } from 'viem';
9
+ import type { NetworkName } from './addresses.js';
10
+ /** Constructor arguments matching ClawnchToken.sol */
11
+ export interface TokenConstructorArgs {
12
+ name: string;
13
+ symbol: string;
14
+ maxSupply: bigint;
15
+ admin: Address;
16
+ image: string;
17
+ metadata: string;
18
+ context: string;
19
+ initialSupplyChainId: bigint;
20
+ }
21
+ /** Verification result */
22
+ export interface VerifyResult {
23
+ success: boolean;
24
+ /** Basescan GUID for checking status */
25
+ guid?: string;
26
+ /** Human-readable message */
27
+ message: string;
28
+ /** Whether the contract was already verified */
29
+ alreadyVerified?: boolean;
30
+ }
31
+ /** Verification status when polling */
32
+ export interface VerifyStatus {
33
+ /** Whether verification is complete */
34
+ done: boolean;
35
+ /** Whether it succeeded (only meaningful when done=true) */
36
+ success: boolean;
37
+ /** Status message from Basescan */
38
+ message: string;
39
+ }
40
+ /**
41
+ * ABI-encode constructor arguments for ClawnchToken
42
+ */
43
+ export declare function encodeConstructorArgs(args: TokenConstructorArgs): `0x${string}`;
44
+ /**
45
+ * Submit a verification request to Basescan
46
+ */
47
+ export declare function verifyToken(options: {
48
+ /** Token contract address */
49
+ tokenAddress: Address;
50
+ /** Constructor arguments */
51
+ constructorArgs: TokenConstructorArgs;
52
+ /** Network */
53
+ network: NetworkName;
54
+ /** Basescan API key */
55
+ apiKey: string;
56
+ }): Promise<VerifyResult>;
57
+ /**
58
+ * Check the status of a pending verification
59
+ */
60
+ export declare function checkVerifyStatus(options: {
61
+ /** GUID returned from verifyToken() */
62
+ guid: string;
63
+ /** Network */
64
+ network: NetworkName;
65
+ /** Basescan API key */
66
+ apiKey: string;
67
+ }): Promise<VerifyStatus>;
68
+ /**
69
+ * Submit verification and poll until complete (convenience wrapper)
70
+ *
71
+ * @param options - Verification options
72
+ * @param pollOptions - Polling options
73
+ * @returns Final verification status
74
+ */
75
+ export declare function verifyTokenAndWait(options: {
76
+ tokenAddress: Address;
77
+ constructorArgs: TokenConstructorArgs;
78
+ network: NetworkName;
79
+ apiKey: string;
80
+ }, pollOptions?: {
81
+ /** Max time to wait in ms (default: 120000 = 2 minutes) */
82
+ timeout?: number;
83
+ /** Poll interval in ms (default: 5000 = 5 seconds) */
84
+ interval?: number;
85
+ /** Progress callback */
86
+ onProgress?: (status: VerifyStatus) => void;
87
+ }): Promise<VerifyResult>;
88
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,OAAO,EAGb,MAAM,MAAM,CAAC;AAMd,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,0BAA0B;AAC1B,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,uCAAuC;AACvC,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAsBD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,KAAK,MAAM,EAAE,CAc/E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,6BAA6B;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,4BAA4B;IAC5B,eAAe,EAAE,oBAAoB,CAAC;IACtC,cAAc;IACd,OAAO,EAAE,WAAW,CAAC;IACrB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8DxB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,OAAO,EAAE,WAAW,CAAC;IACrB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,YAAY,CAAC,CAgDxB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,oBAAoB,CAAC;IACtC,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,EAAE,WAAW,CAAC,EAAE;IACf,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAC7C,GAAG,OAAO,CAAC,YAAY,CAAC,CAoCxB"}
package/dist/verify.js ADDED
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Token contract verification on Basescan
3
+ *
4
+ * Verifies deployed ClawnchToken contracts on Basescan using the
5
+ * Standard JSON Input approach. Every token uses identical source code
6
+ * with different constructor arguments.
7
+ */
8
+ import { encodeAbiParameters, parseAbiParameters, } from 'viem';
9
+ import { CLAWNCH_TOKEN_STANDARD_INPUT_B64, COMPILER_VERSION, CONTRACT_NAME, } from './token-verification-data.js';
10
+ /** Etherscan V2 unified API base URL */
11
+ const ETHERSCAN_V2_API = 'https://api.etherscan.io/v2/api';
12
+ /** Chain IDs for Etherscan V2 API */
13
+ const CHAIN_IDS = {
14
+ mainnet: 8453, // Base Mainnet
15
+ sepolia: 84532, // Base Sepolia
16
+ };
17
+ /**
18
+ * Decompress the embedded Standard JSON Input from gzipped base64.
19
+ * Uses Node.js built-in zlib (SDK targets Node >= 18).
20
+ */
21
+ async function decompressStandardInput() {
22
+ const { gunzipSync } = await import('node:zlib');
23
+ const compressed = Buffer.from(CLAWNCH_TOKEN_STANDARD_INPUT_B64, 'base64');
24
+ const decompressed = gunzipSync(compressed);
25
+ return decompressed.toString('utf-8');
26
+ }
27
+ /**
28
+ * ABI-encode constructor arguments for ClawnchToken
29
+ */
30
+ export function encodeConstructorArgs(args) {
31
+ return encodeAbiParameters(parseAbiParameters('string, string, uint256, address, string, string, string, uint256'), [
32
+ args.name,
33
+ args.symbol,
34
+ args.maxSupply,
35
+ args.admin,
36
+ args.image,
37
+ args.metadata,
38
+ args.context,
39
+ args.initialSupplyChainId,
40
+ ]);
41
+ }
42
+ /**
43
+ * Submit a verification request to Basescan
44
+ */
45
+ export async function verifyToken(options) {
46
+ const { tokenAddress, constructorArgs, network, apiKey } = options;
47
+ const chainId = CHAIN_IDS[network];
48
+ // Decompress the Standard JSON Input
49
+ const standardInput = await decompressStandardInput();
50
+ // Encode constructor arguments (strip 0x prefix for Etherscan)
51
+ const encodedArgs = encodeConstructorArgs(constructorArgs).slice(2);
52
+ // Build the verification request (Etherscan V2 API)
53
+ // chainid goes in the URL, everything else in the POST body
54
+ const apiUrl = `${ETHERSCAN_V2_API}?chainid=${chainId}`;
55
+ const params = new URLSearchParams({
56
+ apikey: apiKey,
57
+ module: 'contract',
58
+ action: 'verifysourcecode',
59
+ contractaddress: tokenAddress,
60
+ sourceCode: standardInput,
61
+ codeformat: 'solidity-standard-json-input',
62
+ contractname: CONTRACT_NAME,
63
+ compilerversion: COMPILER_VERSION,
64
+ constructorArguements: encodedArgs, // Note: Etherscan API uses this misspelling
65
+ });
66
+ const response = await fetch(apiUrl, {
67
+ method: 'POST',
68
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
69
+ body: params.toString(),
70
+ });
71
+ if (!response.ok) {
72
+ return {
73
+ success: false,
74
+ message: `Basescan API error: HTTP ${response.status}`,
75
+ };
76
+ }
77
+ const data = await response.json();
78
+ // Check for "already verified"
79
+ if (data.result && typeof data.result === 'string' &&
80
+ data.result.toLowerCase().includes('already verified')) {
81
+ return {
82
+ success: true,
83
+ message: 'Contract source code already verified',
84
+ alreadyVerified: true,
85
+ };
86
+ }
87
+ if (data.status === '1') {
88
+ return {
89
+ success: true,
90
+ guid: data.result,
91
+ message: 'Verification submitted successfully',
92
+ };
93
+ }
94
+ return {
95
+ success: false,
96
+ message: data.result || data.message || 'Unknown verification error',
97
+ };
98
+ }
99
+ /**
100
+ * Check the status of a pending verification
101
+ */
102
+ export async function checkVerifyStatus(options) {
103
+ const { guid, network, apiKey } = options;
104
+ const chainId = CHAIN_IDS[network];
105
+ const params = new URLSearchParams({
106
+ apikey: apiKey,
107
+ module: 'contract',
108
+ action: 'checkverifystatus',
109
+ guid,
110
+ });
111
+ const response = await fetch(`${ETHERSCAN_V2_API}?chainid=${chainId}&${params.toString()}`);
112
+ if (!response.ok) {
113
+ return {
114
+ done: false,
115
+ success: false,
116
+ message: `Basescan API error: HTTP ${response.status}`,
117
+ };
118
+ }
119
+ const data = await response.json();
120
+ // "Pending in queue" means still processing
121
+ if (data.result && typeof data.result === 'string' &&
122
+ data.result.toLowerCase().includes('pending')) {
123
+ return {
124
+ done: false,
125
+ success: false,
126
+ message: data.result,
127
+ };
128
+ }
129
+ // Status "1" = success
130
+ if (data.status === '1') {
131
+ return {
132
+ done: true,
133
+ success: true,
134
+ message: data.result || 'Pass - Verified',
135
+ };
136
+ }
137
+ // Any other status = failed
138
+ return {
139
+ done: true,
140
+ success: false,
141
+ message: data.result || data.message || 'Verification failed',
142
+ };
143
+ }
144
+ /**
145
+ * Submit verification and poll until complete (convenience wrapper)
146
+ *
147
+ * @param options - Verification options
148
+ * @param pollOptions - Polling options
149
+ * @returns Final verification status
150
+ */
151
+ export async function verifyTokenAndWait(options, pollOptions) {
152
+ const result = await verifyToken(options);
153
+ if (!result.success || !result.guid || result.alreadyVerified) {
154
+ return result;
155
+ }
156
+ const timeout = pollOptions?.timeout ?? 120_000;
157
+ const interval = pollOptions?.interval ?? 5_000;
158
+ const start = Date.now();
159
+ while (Date.now() - start < timeout) {
160
+ await new Promise(resolve => setTimeout(resolve, interval));
161
+ const status = await checkVerifyStatus({
162
+ guid: result.guid,
163
+ network: options.network,
164
+ apiKey: options.apiKey,
165
+ });
166
+ pollOptions?.onProgress?.(status);
167
+ if (status.done) {
168
+ return {
169
+ success: status.success,
170
+ guid: result.guid,
171
+ message: status.message,
172
+ };
173
+ }
174
+ }
175
+ return {
176
+ success: false,
177
+ guid: result.guid,
178
+ message: 'Verification timed out - check status manually on Basescan',
179
+ };
180
+ }
181
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * ClawnchWatcher - Live event watching for Clawncher tokens
3
+ *
4
+ * Watches for new token deployments and swap events in real-time
5
+ * using viem's event subscription (WebSocket recommended).
6
+ *
7
+ * Uses `publicClient.watchContractEvent()` which works with both
8
+ * polling (HTTP) and subscription (WebSocket) transports.
9
+ */
10
+ import { type PublicClient, type Address } from 'viem';
11
+ import { type NetworkName } from './addresses.js';
12
+ /**
13
+ * New token deployment event
14
+ */
15
+ export interface NewTokenEvent {
16
+ /** Deployed token address */
17
+ tokenAddress: Address;
18
+ /** Token admin (deployer) */
19
+ tokenAdmin: Address;
20
+ /** Token name */
21
+ tokenName: string;
22
+ /** Token symbol */
23
+ tokenSymbol: string;
24
+ /** Token image URL */
25
+ tokenImage: string;
26
+ /** Deployer (msg.sender) */
27
+ deployer: Address;
28
+ /** Pool hook address */
29
+ poolHook: Address;
30
+ /** LP locker address */
31
+ locker: Address;
32
+ /** Pool ID (bytes32) */
33
+ poolId: `0x${string}`;
34
+ /** Block number */
35
+ blockNumber: bigint;
36
+ /** Transaction hash */
37
+ txHash: `0x${string}`;
38
+ }
39
+ /**
40
+ * Watcher configuration
41
+ */
42
+ export interface WatcherConfig {
43
+ /** Public client for subscribing to events (WebSocket recommended for live watching) */
44
+ publicClient: PublicClient;
45
+ /** Network to watch */
46
+ network: NetworkName;
47
+ }
48
+ /**
49
+ * ClawnchWatcher - Watch live events from Clawncher contracts
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * import { ClawnchWatcher } from '@clawnch/clawncher-sdk';
54
+ * import { createPublicClient, webSocket } from 'viem';
55
+ * import { base } from 'viem/chains';
56
+ *
57
+ * // WebSocket recommended for live watching
58
+ * const publicClient = createPublicClient({
59
+ * chain: base,
60
+ * transport: webSocket('wss://base-mainnet.g.alchemy.com/v2/YOUR_KEY'),
61
+ * });
62
+ *
63
+ * const watcher = new ClawnchWatcher({
64
+ * publicClient,
65
+ * network: 'mainnet',
66
+ * });
67
+ *
68
+ * // Watch for new token deployments
69
+ * const unwatch = watcher.watchDeployments((event) => {
70
+ * console.log(`New token: ${event.tokenSymbol} at ${event.tokenAddress}`);
71
+ * });
72
+ *
73
+ * // Stop watching later
74
+ * unwatch();
75
+ * ```
76
+ */
77
+ export declare class ClawnchWatcher {
78
+ readonly publicClient: PublicClient;
79
+ readonly network: NetworkName;
80
+ constructor(config: WatcherConfig);
81
+ /**
82
+ * Get contract addresses for configured network
83
+ */
84
+ private getAddresses;
85
+ /**
86
+ * Watch for new token deployments from the factory.
87
+ *
88
+ * Subscribes to TokenCreated events on the factory contract.
89
+ * Returns an unsubscribe function to stop watching.
90
+ *
91
+ * @param callback - Called for each new token deployment
92
+ * @param options - Optional filter by token admin
93
+ * @returns Unsubscribe function
94
+ */
95
+ watchDeployments(callback: (event: NewTokenEvent) => void, options?: {
96
+ tokenAdmin?: Address;
97
+ }): () => void;
98
+ /**
99
+ * Get historical token deployments (past events).
100
+ *
101
+ * Fetches TokenCreated events from the factory within a block range.
102
+ * Useful for building initial state before starting live watching.
103
+ *
104
+ * @param options - Block range and optional filter
105
+ */
106
+ getHistoricalDeployments(options?: {
107
+ fromBlock?: bigint;
108
+ toBlock?: bigint;
109
+ tokenAdmin?: Address;
110
+ }): Promise<NewTokenEvent[]>;
111
+ }
112
+ //# sourceMappingURL=watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,OAAO,EAIb,MAAM,MAAM,CAAC;AAEd,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,wBAAwB;IACxB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IACtB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wFAAwF;IACxF,YAAY,EAAE,YAAY,CAAC;IAC3B,uBAAuB;IACvB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,cAAc;IACzB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;gBAElB,MAAM,EAAE,aAAa;IAKjC;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;;;;;;;;OASG;IACH,gBAAgB,CACd,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,EACxC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,MAAM,IAAI;IAmDb;;;;;;;OAOG;IACG,wBAAwB,CAAC,OAAO,CAAC,EAAE;QACvC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAgC7B"}