@peddles/sdk 0.2.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 (124) hide show
  1. package/CLAUDE_PROMPT.md +159 -0
  2. package/LICENSE +21 -0
  3. package/README.md +186 -0
  4. package/dist/abis.d.ts +19 -0
  5. package/dist/abis.d.ts.map +1 -0
  6. package/dist/abis.generated.d.ts +2029 -0
  7. package/dist/abis.generated.d.ts.map +1 -0
  8. package/dist/abis.generated.js +2723 -0
  9. package/dist/abis.generated.js.map +1 -0
  10. package/dist/abis.js +19 -0
  11. package/dist/abis.js.map +1 -0
  12. package/dist/artDex.d.ts +937 -0
  13. package/dist/artDex.d.ts.map +1 -0
  14. package/dist/artDex.js +155 -0
  15. package/dist/artDex.js.map +1 -0
  16. package/dist/client.d.ts +10 -0
  17. package/dist/client.d.ts.map +1 -0
  18. package/dist/client.js +2 -0
  19. package/dist/client.js.map +1 -0
  20. package/dist/clog.d.ts +75 -0
  21. package/dist/clog.d.ts.map +1 -0
  22. package/dist/clog.js +91 -0
  23. package/dist/clog.js.map +1 -0
  24. package/dist/clogInflow.d.ts +136 -0
  25. package/dist/clogInflow.d.ts.map +1 -0
  26. package/dist/clogInflow.js +177 -0
  27. package/dist/clogInflow.js.map +1 -0
  28. package/dist/deployments.d.ts +30 -0
  29. package/dist/deployments.d.ts.map +1 -0
  30. package/dist/deployments.generated.d.ts +92 -0
  31. package/dist/deployments.generated.d.ts.map +1 -0
  32. package/dist/deployments.generated.js +93 -0
  33. package/dist/deployments.generated.js.map +1 -0
  34. package/dist/deployments.js +52 -0
  35. package/dist/deployments.js.map +1 -0
  36. package/dist/feeSplit.d.ts +54 -0
  37. package/dist/feeSplit.d.ts.map +1 -0
  38. package/dist/feeSplit.js +69 -0
  39. package/dist/feeSplit.js.map +1 -0
  40. package/dist/feeTerms.d.ts +46 -0
  41. package/dist/feeTerms.d.ts.map +1 -0
  42. package/dist/feeTerms.js +80 -0
  43. package/dist/feeTerms.js.map +1 -0
  44. package/dist/index.d.ts +102 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +108 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/launch/abi.generated.d.ts +2667 -0
  49. package/dist/launch/abi.generated.d.ts.map +1 -0
  50. package/dist/launch/abi.generated.js +2472 -0
  51. package/dist/launch/abi.generated.js.map +1 -0
  52. package/dist/launch/addresses.d.ts +24 -0
  53. package/dist/launch/addresses.d.ts.map +1 -0
  54. package/dist/launch/addresses.js +35 -0
  55. package/dist/launch/addresses.js.map +1 -0
  56. package/dist/launch/feeTerms.d.ts +52 -0
  57. package/dist/launch/feeTerms.d.ts.map +1 -0
  58. package/dist/launch/feeTerms.js +72 -0
  59. package/dist/launch/feeTerms.js.map +1 -0
  60. package/dist/launch/index.d.ts +33 -0
  61. package/dist/launch/index.d.ts.map +1 -0
  62. package/dist/launch/index.js +24 -0
  63. package/dist/launch/index.js.map +1 -0
  64. package/dist/launch/revert.d.ts +23 -0
  65. package/dist/launch/revert.d.ts.map +1 -0
  66. package/dist/launch/revert.js +169 -0
  67. package/dist/launch/revert.js.map +1 -0
  68. package/dist/launch/salt.d.ts +90 -0
  69. package/dist/launch/salt.d.ts.map +1 -0
  70. package/dist/launch/salt.js +153 -0
  71. package/dist/launch/salt.js.map +1 -0
  72. package/dist/launch/stockCall.d.ts +122 -0
  73. package/dist/launch/stockCall.d.ts.map +1 -0
  74. package/dist/launch/stockCall.js +144 -0
  75. package/dist/launch/stockCall.js.map +1 -0
  76. package/dist/launch/tickMath.d.ts +39 -0
  77. package/dist/launch/tickMath.d.ts.map +1 -0
  78. package/dist/launch/tickMath.js +109 -0
  79. package/dist/launch/tickMath.js.map +1 -0
  80. package/dist/launch/variants.d.ts +64 -0
  81. package/dist/launch/variants.d.ts.map +1 -0
  82. package/dist/launch/variants.js +131 -0
  83. package/dist/launch/variants.js.map +1 -0
  84. package/dist/launch/wethCall.d.ts +133 -0
  85. package/dist/launch/wethCall.d.ts.map +1 -0
  86. package/dist/launch/wethCall.js +173 -0
  87. package/dist/launch/wethCall.js.map +1 -0
  88. package/dist/launch/wethPlan.d.ts +71 -0
  89. package/dist/launch/wethPlan.d.ts.map +1 -0
  90. package/dist/launch/wethPlan.js +146 -0
  91. package/dist/launch/wethPlan.js.map +1 -0
  92. package/dist/perps/abi.generated.d.ts +794 -0
  93. package/dist/perps/abi.generated.d.ts.map +1 -0
  94. package/dist/perps/abi.generated.js +738 -0
  95. package/dist/perps/abi.generated.js.map +1 -0
  96. package/dist/perps/index.d.ts +160 -0
  97. package/dist/perps/index.d.ts.map +1 -0
  98. package/dist/perps/index.js +147 -0
  99. package/dist/perps/index.js.map +1 -0
  100. package/package.json +105 -0
  101. package/src/abis.generated.ts +2738 -0
  102. package/src/abis.ts +35 -0
  103. package/src/artDex.ts +254 -0
  104. package/src/client.ts +10 -0
  105. package/src/clog.ts +171 -0
  106. package/src/clogInflow.ts +217 -0
  107. package/src/deployments.generated.ts +98 -0
  108. package/src/deployments.ts +60 -0
  109. package/src/feeSplit.ts +76 -0
  110. package/src/feeTerms.ts +137 -0
  111. package/src/index.ts +233 -0
  112. package/src/launch/abi.generated.ts +2481 -0
  113. package/src/launch/addresses.ts +58 -0
  114. package/src/launch/feeTerms.ts +93 -0
  115. package/src/launch/index.ts +93 -0
  116. package/src/launch/revert.ts +188 -0
  117. package/src/launch/salt.ts +216 -0
  118. package/src/launch/stockCall.ts +223 -0
  119. package/src/launch/tickMath.ts +139 -0
  120. package/src/launch/variants.ts +183 -0
  121. package/src/launch/wethCall.ts +240 -0
  122. package/src/launch/wethPlan.ts +257 -0
  123. package/src/perps/abi.generated.ts +741 -0
  124. package/src/perps/index.ts +263 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wethCall.js","sourceRoot":"","sources":["../../src/launch/wethCall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import type { ReadClient } from '../client.js';
2
+ import type { LaunchAddresses } from './addresses.js';
3
+ /**
4
+ * The WETH-type launch plan — everything `PeddlesLaunchOrchestratorV20.launch`
5
+ * needs, derived from LIVE chain reads. A pure port of the web app's
6
+ * `buildWethLaunchPlan` (`features/launch/useWethLaunch.ts`).
7
+ *
8
+ * The orchestrator takes `sqrtPriceX96`, `tickLower`, `tickUpper` and
9
+ * `liquidity` as INPUTS and mints exactly the position they describe, so every
10
+ * one of them is derived from reads:
11
+ * - fee tier, tick spacing, pool manager, position manager, hook and quote
12
+ * token come from `PeddlesV4LiquidityExecutor`
13
+ * - the tick range comes from the executor's `defaultSingleSidedTicks` for THIS
14
+ * token's predicted address
15
+ * - the start tick is recovered from that range and the spacing
16
+ * - the liquidity is the largest that fits the POOLED share of the 1e9 supply
17
+ * - the allocation is the launch type's own (orchestrator defaults for type 0,
18
+ * the registered split for any other)
19
+ *
20
+ * Any failed read throws. There is no fallback: a launch assembled from stale
21
+ * pool parameters is a launch that burns a creator's gas.
22
+ */
23
+ /** Every Peddles launch is exactly one billion tokens; the orchestrator enforces it. */
24
+ export declare const SUPPLY_UNITS = 1000000000n;
25
+ /** Every Peddles token launches at 18 decimals. Not a creator choice. */
26
+ export declare const LAUNCH_COIN_DECIMALS = 18;
27
+ export interface WethLaunchPlan {
28
+ readonly predictedToken: `0x${string}`;
29
+ readonly quoteToken: `0x${string}`;
30
+ readonly tokenIsCurrency0: boolean;
31
+ readonly tickLower: number;
32
+ readonly tickUpper: number;
33
+ readonly startTick: number;
34
+ readonly sqrtPriceX96: bigint;
35
+ readonly liquidity: bigint;
36
+ /** Total supply in base units — 1e9 × 10^18. */
37
+ readonly totalSupply: bigint;
38
+ /** The liquidity share of it, in base units — what the position is sized to hold. */
39
+ readonly pooledSupply: bigint;
40
+ readonly poolFeePpm: number;
41
+ readonly tickSpacing: number;
42
+ readonly hook: `0x${string}`;
43
+ readonly poolManager: `0x${string}`;
44
+ readonly positionManager: `0x${string}`;
45
+ readonly liquidityManager: `0x${string}`;
46
+ readonly airdropPublisher: `0x${string}`;
47
+ readonly allocationBps: {
48
+ readonly liquidity: number;
49
+ readonly airdrop: number;
50
+ readonly vesting: number;
51
+ readonly burn: number;
52
+ readonly clog: number;
53
+ };
54
+ /** The clog terms, when this launch type has one. `null` on a plain launch. */
55
+ readonly clog: {
56
+ readonly bps: number;
57
+ readonly sliceBps: number;
58
+ readonly minIntervalSeconds: number;
59
+ } | null;
60
+ /** The launch TYPE this plan was built for; the input builder cannot assemble another. */
61
+ readonly variant: number;
62
+ }
63
+ export interface WethPlanArgs {
64
+ readonly salt: `0x${string}`;
65
+ /** The locally mined address this salt must produce; the factory must agree or the plan fails closed. */
66
+ readonly expectedToken?: `0x${string}` | null;
67
+ /** The factory's variant id, as the creator chose it. REQUIRED — there is no default type. */
68
+ readonly variant: number;
69
+ }
70
+ export declare function buildWethLaunchPlan(client: ReadClient, addresses: LaunchAddresses, args: WethPlanArgs): Promise<WethLaunchPlan>;
71
+ //# sourceMappingURL=wethPlan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wethPlan.d.ts","sourceRoot":"","sources":["../../src/launch/wethPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,wFAAwF;AACxF,eAAO,MAAM,YAAY,cAAiB,CAAC;AAC3C,yEAAyE;AACzE,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,cAAc,EAAE,KAAK,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,KAAK,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,KAAK,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,KAAK,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;KACrC,GAAG,IAAI,CAAC;IACT,0FAA0F;IAC1F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;IAC7B,yGAAyG;IACzG,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;IAC9C,8FAA8F;IAC9F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,cAAc,CAAC,CA8KzB"}
@@ -0,0 +1,146 @@
1
+ import { factoryAbi } from '../abis.js';
2
+ import { launchOrchestratorAbi, liquidityExecutorLaunchAbi } from './abi.generated.js';
3
+ import { liquidityForAmount, getSqrtPriceAtTick } from './tickMath.js';
4
+ import { VARIANT_ASSET } from './variants.js';
5
+ /**
6
+ * The WETH-type launch plan — everything `PeddlesLaunchOrchestratorV20.launch`
7
+ * needs, derived from LIVE chain reads. A pure port of the web app's
8
+ * `buildWethLaunchPlan` (`features/launch/useWethLaunch.ts`).
9
+ *
10
+ * The orchestrator takes `sqrtPriceX96`, `tickLower`, `tickUpper` and
11
+ * `liquidity` as INPUTS and mints exactly the position they describe, so every
12
+ * one of them is derived from reads:
13
+ * - fee tier, tick spacing, pool manager, position manager, hook and quote
14
+ * token come from `PeddlesV4LiquidityExecutor`
15
+ * - the tick range comes from the executor's `defaultSingleSidedTicks` for THIS
16
+ * token's predicted address
17
+ * - the start tick is recovered from that range and the spacing
18
+ * - the liquidity is the largest that fits the POOLED share of the 1e9 supply
19
+ * - the allocation is the launch type's own (orchestrator defaults for type 0,
20
+ * the registered split for any other)
21
+ *
22
+ * Any failed read throws. There is no fallback: a launch assembled from stale
23
+ * pool parameters is a launch that burns a creator's gas.
24
+ */
25
+ /** Every Peddles launch is exactly one billion tokens; the orchestrator enforces it. */
26
+ export const SUPPLY_UNITS = 1000000000n;
27
+ /** Every Peddles token launches at 18 decimals. Not a creator choice. */
28
+ export const LAUNCH_COIN_DECIMALS = 18;
29
+ export async function buildWethLaunchPlan(client, addresses, args) {
30
+ const { orchestrator, factory, liquidityExecutor } = addresses;
31
+ const variant = args.variant;
32
+ const config = await client.multicall({
33
+ allowFailure: false,
34
+ contracts: [
35
+ { address: liquidityExecutor, abi: liquidityExecutorLaunchAbi, functionName: 'quoteToken' },
36
+ { address: liquidityExecutor, abi: liquidityExecutorLaunchAbi, functionName: 'poolManager' },
37
+ { address: liquidityExecutor, abi: liquidityExecutorLaunchAbi, functionName: 'positionManager' },
38
+ { address: liquidityExecutor, abi: liquidityExecutorLaunchAbi, functionName: 'hook' },
39
+ { address: liquidityExecutor, abi: liquidityExecutorLaunchAbi, functionName: 'fee' },
40
+ { address: liquidityExecutor, abi: liquidityExecutorLaunchAbi, functionName: 'tickSpacing' },
41
+ { address: orchestrator, abi: launchOrchestratorAbi, functionName: 'airdropPublisher' },
42
+ { address: orchestrator, abi: launchOrchestratorAbi, functionName: 'defaultLiquidityBps' },
43
+ { address: orchestrator, abi: launchOrchestratorAbi, functionName: 'defaultAirdropBps' },
44
+ { address: orchestrator, abi: launchOrchestratorAbi, functionName: 'defaultVestingBps' },
45
+ { address: orchestrator, abi: launchOrchestratorAbi, functionName: 'defaultBurnBps' },
46
+ { address: factory, abi: factoryAbi, functionName: 'getPeddlesAddress', args: [variant, orchestrator, args.salt] },
47
+ { address: factory, abi: factoryAbi, functionName: 'isVariantSupported', args: [variant] },
48
+ { address: orchestrator, abi: launchOrchestratorAbi, functionName: 'feeHook' },
49
+ ],
50
+ });
51
+ const [quoteToken, poolManager, positionManager, hook, fee, tickSpacing, airdropPublisher, liquidityBps, airdropBps, vestingBps, burnBps, predictedToken, variantSupported, orchestratorHook,] = config;
52
+ if (!variantSupported) {
53
+ throw new Error('This launch type is not open for new launches, so launching is disabled.');
54
+ }
55
+ // Every launch pool is hooked by the fee hook, and the orchestrator refuses an executor pointed
56
+ // anywhere else. Checked here so a repointed contract refuses with a reason instead of reverting.
57
+ const expected = addresses.feeHook.toLowerCase();
58
+ if (hook.toLowerCase() !== expected || orchestratorHook.toLowerCase() !== expected) {
59
+ throw new Error('The launch contracts on this network are not wired to the trading-fee contract this build expects, so launching is disabled.');
60
+ }
61
+ if (args.expectedToken && predictedToken.toLowerCase() !== args.expectedToken.toLowerCase()) {
62
+ throw new Error('The factory predicts a different address for this launch than the one reserved for it. Launching is disabled rather than sending it somewhere else.');
63
+ }
64
+ let alloc = {
65
+ liquidity: Number(liquidityBps),
66
+ airdrop: Number(airdropBps),
67
+ vesting: Number(vestingBps),
68
+ burn: Number(burnBps),
69
+ clog: 0,
70
+ };
71
+ let clogTerms = null;
72
+ if (variant !== VARIANT_ASSET) {
73
+ const declared = (await client.readContract({
74
+ address: factory,
75
+ abi: factoryAbi,
76
+ functionName: 'variantAllocation',
77
+ args: [variant],
78
+ }));
79
+ alloc = {
80
+ liquidity: Number(declared.liquidityBps),
81
+ airdrop: Number(declared.airdropBps),
82
+ vesting: Number(declared.vestingBps),
83
+ burn: Number(declared.burnBps),
84
+ clog: Number(declared.clogBps),
85
+ };
86
+ if (alloc.clog > 0) {
87
+ clogTerms = {
88
+ bps: Number(declared.clogBps),
89
+ sliceBps: Number(declared.clogSliceBps),
90
+ minIntervalSeconds: Number(declared.clogMinInterval),
91
+ };
92
+ if (!addresses.clogVaultFactory) {
93
+ throw new Error('This launch type withholds supply into a clog vault, and no clog vault factory is deployed on this chain. Launching is disabled rather than launching without it.');
94
+ }
95
+ }
96
+ }
97
+ if (alloc.airdrop !== 0 || alloc.burn !== 0 || alloc.vesting !== 0) {
98
+ throw new Error(`This launch type allocates ${alloc.liquidity}/${alloc.airdrop}/${alloc.vesting}/${alloc.burn}/${alloc.clog} bps (liquidity/airdrop/vesting/burn/clog). Launching is disabled until it matches what this build would state.`);
99
+ }
100
+ if (alloc.liquidity + alloc.clog !== 10_000) {
101
+ throw new Error(`This launch type's allocation sums to ${alloc.liquidity + alloc.clog} bps, not 10000. Launching is disabled.`);
102
+ }
103
+ const [tickLower, tickUpper] = (await client.readContract({
104
+ address: liquidityExecutor,
105
+ abi: liquidityExecutorLaunchAbi,
106
+ functionName: 'defaultSingleSidedTicks',
107
+ args: [predictedToken],
108
+ }));
109
+ const tokenIsCurrency0 = BigInt(predictedToken) < BigInt(quoteToken);
110
+ const spacing = Number(tickSpacing);
111
+ // Exactly the harness's derivation: the start price sits one spacing outside the single-sided
112
+ // range, on the side the token does not occupy.
113
+ const startTick = tokenIsCurrency0 ? Number(tickLower) - spacing : Number(tickUpper) + spacing;
114
+ const sqrtPriceX96 = getSqrtPriceAtTick(startTick);
115
+ const totalSupply = SUPPLY_UNITS * 10n ** BigInt(LAUNCH_COIN_DECIMALS);
116
+ // The position holds the LIQUIDITY share, not the whole supply: on a clog type the rest is minted
117
+ // to the clog vault, and a position sized to the whole supply reverts every clog launch.
118
+ const pooledSupply = (totalSupply * BigInt(alloc.liquidity)) / 10000n;
119
+ const quote = liquidityForAmount(tokenIsCurrency0, Number(tickLower), Number(tickUpper), pooledSupply);
120
+ if (!quote) {
121
+ throw new Error('No single-sided position fits the pooled supply at the executor’s current tick range, so the pool parameters for this launch cannot be derived.');
122
+ }
123
+ return {
124
+ predictedToken,
125
+ quoteToken,
126
+ tokenIsCurrency0,
127
+ tickLower: Number(tickLower),
128
+ tickUpper: Number(tickUpper),
129
+ startTick,
130
+ sqrtPriceX96,
131
+ liquidity: quote.liquidity,
132
+ totalSupply,
133
+ pooledSupply,
134
+ poolFeePpm: Number(fee),
135
+ tickSpacing: spacing,
136
+ hook,
137
+ poolManager,
138
+ positionManager,
139
+ liquidityManager: liquidityExecutor,
140
+ airdropPublisher,
141
+ allocationBps: { ...alloc },
142
+ clog: clogTerms,
143
+ variant,
144
+ };
145
+ }
146
+ //# sourceMappingURL=wethPlan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wethPlan.js","sourceRoot":"","sources":["../../src/launch/wethPlan.ts"],"names":[],"mappings":"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"}