@pepu-chain/sdk 0.0.0-stage → 0.2.1

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 (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +590 -2
  3. package/dist/aa/kernel.cjs +41 -0
  4. package/dist/aa/kernel.cjs.map +1 -0
  5. package/dist/aa/kernel.d.cts +88 -0
  6. package/dist/aa/kernel.d.ts +88 -0
  7. package/dist/aa/kernel.guard.js +15 -0
  8. package/dist/aa/kernel.js +11 -0
  9. package/dist/aa/kernel.js.map +1 -0
  10. package/dist/aa/react-direct.cjs +111 -0
  11. package/dist/aa/react-direct.cjs.map +1 -0
  12. package/dist/aa/react-direct.d.cts +42 -0
  13. package/dist/aa/react-direct.d.ts +42 -0
  14. package/dist/aa/react-direct.guard.js +15 -0
  15. package/dist/aa/react-direct.js +107 -0
  16. package/dist/aa/react-direct.js.map +1 -0
  17. package/dist/aa/react.cjs +152 -0
  18. package/dist/aa/react.cjs.map +1 -0
  19. package/dist/aa/react.d.cts +62 -0
  20. package/dist/aa/react.d.ts +62 -0
  21. package/dist/aa/react.guard.js +15 -0
  22. package/dist/aa/react.js +147 -0
  23. package/dist/aa/react.js.map +1 -0
  24. package/dist/aa.cjs +84 -0
  25. package/dist/aa.cjs.map +1 -0
  26. package/dist/aa.d.cts +85 -0
  27. package/dist/aa.d.ts +85 -0
  28. package/dist/aa.js +11 -0
  29. package/dist/aa.js.map +1 -0
  30. package/dist/api-Dz4sCHH_.d.cts +654 -0
  31. package/dist/api-Dz4sCHH_.d.ts +654 -0
  32. package/dist/calls-BRPjKgjl.d.cts +70 -0
  33. package/dist/calls-z_EQOtFb.d.ts +70 -0
  34. package/dist/chains-DK13zGIp.d.cts +235 -0
  35. package/dist/chains-DK13zGIp.d.ts +235 -0
  36. package/dist/chunk-3XUGQODR.js +194 -0
  37. package/dist/chunk-3XUGQODR.js.map +1 -0
  38. package/dist/chunk-45KSZH26.cjs +145 -0
  39. package/dist/chunk-45KSZH26.cjs.map +1 -0
  40. package/dist/chunk-4GINFJO6.cjs +44 -0
  41. package/dist/chunk-4GINFJO6.cjs.map +1 -0
  42. package/dist/chunk-62M2LKQW.js +136 -0
  43. package/dist/chunk-62M2LKQW.js.map +1 -0
  44. package/dist/chunk-6DSZ4Z2N.js +498 -0
  45. package/dist/chunk-6DSZ4Z2N.js.map +1 -0
  46. package/dist/chunk-7MNJF2OB.cjs +72 -0
  47. package/dist/chunk-7MNJF2OB.cjs.map +1 -0
  48. package/dist/chunk-7PVR7QSE.js +45 -0
  49. package/dist/chunk-7PVR7QSE.js.map +1 -0
  50. package/dist/chunk-A5LP2UCS.cjs +2729 -0
  51. package/dist/chunk-A5LP2UCS.cjs.map +1 -0
  52. package/dist/chunk-AJS4UFQX.cjs +121 -0
  53. package/dist/chunk-AJS4UFQX.cjs.map +1 -0
  54. package/dist/chunk-BGALSKAF.cjs +315 -0
  55. package/dist/chunk-BGALSKAF.cjs.map +1 -0
  56. package/dist/chunk-C2XW44FI.cjs +200 -0
  57. package/dist/chunk-C2XW44FI.cjs.map +1 -0
  58. package/dist/chunk-C7IC36XS.cjs +13 -0
  59. package/dist/chunk-C7IC36XS.cjs.map +1 -0
  60. package/dist/chunk-D52PADVY.js +84 -0
  61. package/dist/chunk-D52PADVY.js.map +1 -0
  62. package/dist/chunk-DH6BFNVJ.cjs +272 -0
  63. package/dist/chunk-DH6BFNVJ.cjs.map +1 -0
  64. package/dist/chunk-DPCZJLB3.cjs +87 -0
  65. package/dist/chunk-DPCZJLB3.cjs.map +1 -0
  66. package/dist/chunk-EHBPIYY4.js +262 -0
  67. package/dist/chunk-EHBPIYY4.js.map +1 -0
  68. package/dist/chunk-ESMNAXUI.js +86 -0
  69. package/dist/chunk-ESMNAXUI.js.map +1 -0
  70. package/dist/chunk-F2R473FR.js +304 -0
  71. package/dist/chunk-F2R473FR.js.map +1 -0
  72. package/dist/chunk-IB2FSPMJ.js +66 -0
  73. package/dist/chunk-IB2FSPMJ.js.map +1 -0
  74. package/dist/chunk-IG7RSL2Y.cjs +178 -0
  75. package/dist/chunk-IG7RSL2Y.cjs.map +1 -0
  76. package/dist/chunk-IY3ALPUJ.js +2716 -0
  77. package/dist/chunk-IY3ALPUJ.js.map +1 -0
  78. package/dist/chunk-J3O2ZGG3.cjs +93 -0
  79. package/dist/chunk-J3O2ZGG3.cjs.map +1 -0
  80. package/dist/chunk-J6UXXHBE.js +37 -0
  81. package/dist/chunk-J6UXXHBE.js.map +1 -0
  82. package/dist/chunk-JLZ4LZ4Z.js +22 -0
  83. package/dist/chunk-JLZ4LZ4Z.js.map +1 -0
  84. package/dist/chunk-K7JSQPZO.cjs +231 -0
  85. package/dist/chunk-K7JSQPZO.cjs.map +1 -0
  86. package/dist/chunk-KJYNF5KH.js +224 -0
  87. package/dist/chunk-KJYNF5KH.js.map +1 -0
  88. package/dist/chunk-KVG3AYYR.js +99 -0
  89. package/dist/chunk-KVG3AYYR.js.map +1 -0
  90. package/dist/chunk-NE3QKDOB.cjs +24 -0
  91. package/dist/chunk-NE3QKDOB.cjs.map +1 -0
  92. package/dist/chunk-NVOPDXTA.cjs +95 -0
  93. package/dist/chunk-NVOPDXTA.cjs.map +1 -0
  94. package/dist/chunk-OH3QMAIB.js +11 -0
  95. package/dist/chunk-OH3QMAIB.js.map +1 -0
  96. package/dist/chunk-PHM3ZORG.cjs +110 -0
  97. package/dist/chunk-PHM3ZORG.cjs.map +1 -0
  98. package/dist/chunk-R5PXQNO3.cjs +209 -0
  99. package/dist/chunk-R5PXQNO3.cjs.map +1 -0
  100. package/dist/chunk-RCMKPJZO.cjs +49 -0
  101. package/dist/chunk-RCMKPJZO.cjs.map +1 -0
  102. package/dist/chunk-SVWRRALU.cjs +17 -0
  103. package/dist/chunk-SVWRRALU.cjs.map +1 -0
  104. package/dist/chunk-T43PQXJD.js +202 -0
  105. package/dist/chunk-T43PQXJD.js.map +1 -0
  106. package/dist/chunk-VBH3JLQ5.js +116 -0
  107. package/dist/chunk-VBH3JLQ5.js.map +1 -0
  108. package/dist/chunk-VF3D6KLQ.cjs +94 -0
  109. package/dist/chunk-VF3D6KLQ.cjs.map +1 -0
  110. package/dist/chunk-VTQIHMF3.js +82 -0
  111. package/dist/chunk-VTQIHMF3.js.map +1 -0
  112. package/dist/chunk-W3JN3YIW.js +15 -0
  113. package/dist/chunk-W3JN3YIW.js.map +1 -0
  114. package/dist/chunk-WANILJZQ.cjs +87 -0
  115. package/dist/chunk-WANILJZQ.cjs.map +1 -0
  116. package/dist/chunk-XC4IBCI2.js +86 -0
  117. package/dist/chunk-XC4IBCI2.js.map +1 -0
  118. package/dist/chunk-YKEWWQEJ.js +165 -0
  119. package/dist/chunk-YKEWWQEJ.js.map +1 -0
  120. package/dist/chunk-YQL7NISX.cjs +515 -0
  121. package/dist/chunk-YQL7NISX.cjs.map +1 -0
  122. package/dist/chunk-ZB6SVBK4.js +89 -0
  123. package/dist/chunk-ZB6SVBK4.js.map +1 -0
  124. package/dist/combo/react.cjs +236 -0
  125. package/dist/combo/react.cjs.map +1 -0
  126. package/dist/combo/react.d.cts +148 -0
  127. package/dist/combo/react.d.ts +148 -0
  128. package/dist/combo/react.guard.js +15 -0
  129. package/dist/combo/react.js +230 -0
  130. package/dist/combo/react.js.map +1 -0
  131. package/dist/combo.cjs +263 -0
  132. package/dist/combo.cjs.map +1 -0
  133. package/dist/combo.d.cts +139 -0
  134. package/dist/combo.d.ts +139 -0
  135. package/dist/combo.guard.js +15 -0
  136. package/dist/combo.js +249 -0
  137. package/dist/combo.js.map +1 -0
  138. package/dist/config-CHjz7ZjZ.d.cts +57 -0
  139. package/dist/config-COjhIZTh.d.ts +57 -0
  140. package/dist/doctor.cjs +354 -0
  141. package/dist/doctor.cjs.map +1 -0
  142. package/dist/doctor.d.cts +177 -0
  143. package/dist/doctor.d.ts +177 -0
  144. package/dist/doctor.js +345 -0
  145. package/dist/doctor.js.map +1 -0
  146. package/dist/erc7677-DOW58QBE.d.cts +111 -0
  147. package/dist/erc7677-DOW58QBE.d.ts +111 -0
  148. package/dist/errors-CgX1vNj7.d.cts +100 -0
  149. package/dist/errors-CgX1vNj7.d.ts +100 -0
  150. package/dist/index.cjs +806 -0
  151. package/dist/index.cjs.map +1 -0
  152. package/dist/index.d.cts +2398 -0
  153. package/dist/index.d.ts +2398 -0
  154. package/dist/index.js +559 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/paymaster/server.cjs +38 -0
  157. package/dist/paymaster/server.cjs.map +1 -0
  158. package/dist/paymaster/server.d.cts +57 -0
  159. package/dist/paymaster/server.d.ts +57 -0
  160. package/dist/paymaster/server.js +36 -0
  161. package/dist/paymaster/server.js.map +1 -0
  162. package/dist/paymaster.cjs +356 -0
  163. package/dist/paymaster.cjs.map +1 -0
  164. package/dist/paymaster.d.cts +1851 -0
  165. package/dist/paymaster.d.ts +1851 -0
  166. package/dist/paymaster.js +289 -0
  167. package/dist/paymaster.js.map +1 -0
  168. package/dist/privy/react.cjs +49 -0
  169. package/dist/privy/react.cjs.map +1 -0
  170. package/dist/privy/react.d.cts +194 -0
  171. package/dist/privy/react.d.ts +194 -0
  172. package/dist/privy/react.guard.js +15 -0
  173. package/dist/privy/react.js +7 -0
  174. package/dist/privy/react.js.map +1 -0
  175. package/dist/privy/server.cjs +44 -0
  176. package/dist/privy/server.cjs.map +1 -0
  177. package/dist/privy/server.d.cts +192 -0
  178. package/dist/privy/server.d.ts +192 -0
  179. package/dist/privy/server.guard.js +15 -0
  180. package/dist/privy/server.js +6 -0
  181. package/dist/privy/server.js.map +1 -0
  182. package/dist/privy/wagmi.d.ts +90 -0
  183. package/dist/privy/wagmi.guard.js +15 -0
  184. package/dist/privy/wagmi.js +55 -0
  185. package/dist/privy/wagmi.js.map +1 -0
  186. package/dist/privy.cjs +34 -0
  187. package/dist/privy.cjs.map +1 -0
  188. package/dist/privy.d.cts +4 -0
  189. package/dist/privy.d.ts +4 -0
  190. package/dist/privy.js +5 -0
  191. package/dist/privy.js.map +1 -0
  192. package/dist/react.cjs +73 -0
  193. package/dist/react.cjs.map +1 -0
  194. package/dist/react.d.cts +66 -0
  195. package/dist/react.d.ts +66 -0
  196. package/dist/react.guard.js +15 -0
  197. package/dist/react.js +68 -0
  198. package/dist/react.js.map +1 -0
  199. package/dist/requirements-C-QiJkL9.d.cts +134 -0
  200. package/dist/requirements-C-QiJkL9.d.ts +134 -0
  201. package/dist/scope-DBRkN7bR.d.cts +94 -0
  202. package/dist/scope-DBRkN7bR.d.ts +94 -0
  203. package/dist/server.cjs +59 -0
  204. package/dist/server.cjs.map +1 -0
  205. package/dist/server.d.cts +208 -0
  206. package/dist/server.d.ts +208 -0
  207. package/dist/server.js +8 -0
  208. package/dist/server.js.map +1 -0
  209. package/dist/session/kernel.cjs +83 -0
  210. package/dist/session/kernel.cjs.map +1 -0
  211. package/dist/session/kernel.d.cts +131 -0
  212. package/dist/session/kernel.d.ts +131 -0
  213. package/dist/session/kernel.guard.js +15 -0
  214. package/dist/session/kernel.js +13 -0
  215. package/dist/session/kernel.js.map +1 -0
  216. package/dist/session/react.cjs +38 -0
  217. package/dist/session/react.cjs.map +1 -0
  218. package/dist/session/react.d.cts +119 -0
  219. package/dist/session/react.d.ts +119 -0
  220. package/dist/session/react.guard.js +15 -0
  221. package/dist/session/react.js +8 -0
  222. package/dist/session/react.js.map +1 -0
  223. package/dist/session/server.cjs +268 -0
  224. package/dist/session/server.cjs.map +1 -0
  225. package/dist/session/server.d.cts +151 -0
  226. package/dist/session/server.d.ts +151 -0
  227. package/dist/session/server.guard.js +15 -0
  228. package/dist/session/server.js +252 -0
  229. package/dist/session/server.js.map +1 -0
  230. package/dist/session.cjs +74 -0
  231. package/dist/session.cjs.map +1 -0
  232. package/dist/session.d.cts +3 -0
  233. package/dist/session.d.ts +3 -0
  234. package/dist/session.js +5 -0
  235. package/dist/session.js.map +1 -0
  236. package/dist/status-Dx9zAFo9.d.ts +327 -0
  237. package/dist/status-wgTM26V7.d.cts +327 -0
  238. package/dist/store-CjmLgp9g.d.cts +64 -0
  239. package/dist/store-CjmLgp9g.d.ts +64 -0
  240. package/dist/types-BEEM7WdG.d.cts +25 -0
  241. package/dist/types-BEEM7WdG.d.ts +25 -0
  242. package/dist/types-BilBTDqK.d.cts +27 -0
  243. package/dist/types-BilBTDqK.d.ts +27 -0
  244. package/package.json +245 -3
@@ -0,0 +1,231 @@
1
+ 'use strict';
2
+
3
+ var chunkDPCZJLB3_cjs = require('./chunk-DPCZJLB3.cjs');
4
+
5
+ // src/contracts.ts
6
+ var MULTICALL3_PENDING_REASON = "Canonical Multicall3 (0xcA11bde05977b3631167028862bE2a173976CA11) was deployed elsewhere via a pre-signed CREATE transaction with a 1,000,000 gas limit. This Arbitrum Nitro chain needs ~14.3M gas to deploy the same bytecode, so that transaction cannot execute here and the canonical address is unreachable. A PEPU-specific deployment is pending; do not substitute the canonical address.";
7
+ var MULTICALL3_MAINNET_NOTES = "PEPU-specific deployment. NOT at the canonical Multicall3 address, which is unreachable on this Nitro chain (the canonical pre-signed CREATE tx carries a 1,000,000 gas limit; this bytecode needs ~14.3M). Deployed from canonical mds1/multicall3 source (solc 0.8.12, optimizer 10,000,000 runs) via the CREATE2 deterministic deployer with a zero salt, so the same source reproduces this address on any chain that has that deployer. Verified on pepuscan. viem/wagmi multicall confirmed working against it.";
8
+ var ZERODEV_NOTES = "Deployed by ZeroDev's one-click Conduit Marketplace integration (mainnet only \u2014 not present on testnet).";
9
+ var PERMIT2_PENDING_REASON = "Not yet deployed on this chain. The CREATE2 deterministic deployer needed to reproduce Permit2's canonical address is live, so this is unblocked, but no deployment has happened (and been verified) yet.";
10
+ var PERMIT2_MAINNET_NOTES = "Deployed at the canonical Permit2 address via the CREATE2 deterministic deployer, same as on every other chain that has it. Verified live 2026-09-24 via eth_getCode (9,152 bytes, matching Permit2's known bytecode size) plus a successful DOMAIN_SEPARATOR() eth_call. This is the canonical Permit2 \u2014 do not confuse it with PepuSwap's own separate Permit2 deployment at pepuSwapContracts.permit2NonCanonical in ./dex.js, which predates this one and is not interchangeable with it.";
11
+ var PAYMASTER_MAINNET_NOTES = "Alias of `paymasterV2`: the tiered PepuSponsoredPaymasterV7 canary (0xdb28...C30D), deployed around block 10537341 and funded in small tranches. Internally reviewed 3x, external audit pending. Owner 0x5966dFaB11c8AEe767e0739083417D02f4a634A1, manager 0x063Ab6C16c38D19A4bC76E7c39A4A0A73afCaBb0. The free pool was seeded with 300 PEPU; free-tier destinations are TapScore only for now. It sponsors only through the hosted policy service (paymaster.pepeunchained.com) with the hosted bundler (bundler.pepeunchained.com). The v1 paymaster is retired (see `paymasterV1`).";
12
+ var VERIFIED_AT = "2026-10-02";
13
+ var PAYMASTER_V2_VERIFIED_AT = "2026-10-14";
14
+ var KERNEL_IMPL_NOTES = ZERODEV_NOTES + " Kernel v3.1 implementation that kernelFactory.implementation() resolves to; same address ZeroDev uses on every chain with this version.";
15
+ var TAPSCORE_NOTES = "TapScore demo contract used by the game-app template. Verified via eth_getCode.";
16
+ var PAYMASTER_V1_NOTES = "RETIRED. The project's first verifying paymaster (PepuVerifyingPaymasterV7). Its EntryPoint deposit was withdrawn (deposit is 0), so it cannot sponsor anything. The contract still has bytecode; do not deposit to it or route new work to it. Superseded by `paymasterV2`. A real sponsored operation ran through the hosted URLs on v1 before retirement (tx 0x57cf2f5a332248476d775c096b4b8339d81867c14211ed3bc4fcb1895dff0f9f).";
17
+ var PAYMASTER_V2_NOTES = "PepuSponsoredPaymasterV7 (v2), deployed on PEPU mainnet as a canary around block 10537341: internally reviewed 3x, external audit pending, funded in small tranches. Owner 0x5966dFaB11c8AEe767e0739083417D02f4a634A1, manager 0x063Ab6C16c38D19A4bC76E7c39A4A0A73afCaBb0. Free pool seeded with 300 PEPU; free-tier destinations are TapScore only for now. Free tier per user is 100 PEPU/day and 50 PEPU/hour, enforced by the policy service; beyond that a dApp deposits into its own project. Record: services/paymaster/contracts/deployed-address-v2.txt.";
18
+ var PAYMASTER_TESTNET_PENDING_REASON = "No paymaster (or any other ERC-4337 infrastructure) has been deployed to testnet \u2014 see TESTNET_AA_PENDING_REASON. The mainnet paymaster is a project-specific deployment, not something that would appear on testnet by default even once the rest of the AA stack does.";
19
+ var TESTNET_AA_PENDING_REASON = "Account-abstraction contracts were deployed on mainnet (97741) only, via ZeroDev's Conduit Marketplace integration. Nothing has been deployed to testnet, and testnet is currently out of scope (no faucet exists, so it cannot be funded without bridging).";
20
+ var pepuContracts = {
21
+ [chunkDPCZJLB3_cjs.pepuMainnet.id]: {
22
+ create2Factory: {
23
+ status: "deployed",
24
+ name: "CREATE2 Deterministic Deployer",
25
+ address: "0x4e59b44847b379578588920cA78FbF26c0B4956C",
26
+ verifiedAt: VERIFIED_AT,
27
+ notes: "Standard Nick's-method deterministic deployer."
28
+ },
29
+ multicall3: {
30
+ status: "deployed",
31
+ name: "Multicall3",
32
+ address: "0x9CE19273Ae9c24437DFF512E8DFCAed4E4B001bd",
33
+ verifiedAt: VERIFIED_AT,
34
+ notes: MULTICALL3_MAINNET_NOTES
35
+ },
36
+ permit2: {
37
+ status: "deployed",
38
+ name: "Permit2",
39
+ address: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
40
+ verifiedAt: VERIFIED_AT,
41
+ notes: PERMIT2_MAINNET_NOTES
42
+ },
43
+ entryPoint06: {
44
+ status: "deployed",
45
+ name: "ERC-4337 EntryPoint v0.6",
46
+ address: "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
47
+ verifiedAt: VERIFIED_AT,
48
+ notes: ZERODEV_NOTES + " At the canonical v0.6 address."
49
+ },
50
+ entryPoint07: {
51
+ status: "deployed",
52
+ name: "ERC-4337 EntryPoint v0.7",
53
+ address: "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
54
+ verifiedAt: VERIFIED_AT,
55
+ notes: ZERODEV_NOTES + " At the canonical v0.7 address; getNonce/balanceOf confirmed live."
56
+ },
57
+ kernelFactory: {
58
+ status: "deployed",
59
+ name: "Kernel v3 Account Factory",
60
+ address: "0xaac5D4240AF87249B3f71BC8E4A2cae074A3E419",
61
+ verifiedAt: VERIFIED_AT,
62
+ notes: ZERODEV_NOTES
63
+ },
64
+ kernelMetaFactory: {
65
+ status: "deployed",
66
+ name: "Kernel MetaFactory",
67
+ address: "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
68
+ verifiedAt: VERIFIED_AT,
69
+ notes: ZERODEV_NOTES
70
+ },
71
+ ecdsaValidator: {
72
+ status: "deployed",
73
+ name: "Kernel ECDSA Validator",
74
+ address: "0x845ADb2C711129d4f3966735eD98a9F09fC4cE57",
75
+ verifiedAt: VERIFIED_AT,
76
+ notes: ZERODEV_NOTES
77
+ },
78
+ paymaster: {
79
+ status: "deployed",
80
+ name: "Sponsored Paymaster v2 (PepuSponsoredPaymasterV7, alias of paymasterV2)",
81
+ address: "0xdb28528C9399C33c9A0297E8A62F39145acbC30D",
82
+ verifiedAt: PAYMASTER_V2_VERIFIED_AT,
83
+ notes: PAYMASTER_MAINNET_NOTES
84
+ },
85
+ kernelImplementation: {
86
+ status: "deployed",
87
+ name: "Kernel v3.1 Implementation",
88
+ address: "0xbAC849bB641841b44E965fb01A4Bf5F074F84B4d",
89
+ verifiedAt: VERIFIED_AT,
90
+ notes: KERNEL_IMPL_NOTES
91
+ },
92
+ kernelEcdsaSignerModule: {
93
+ status: "deployed",
94
+ name: "Kernel ECDSA Signer (permission signer module)",
95
+ address: "0x6A6F069E2a08c2468e7724Ab3250CdBFBA14D4FF",
96
+ verifiedAt: VERIFIED_AT,
97
+ notes: ZERODEV_NOTES + " Used as the signer in permission-validator session keys."
98
+ },
99
+ kernelCallPolicyV004: {
100
+ status: "deployed",
101
+ name: "ZeroDev Call Policy v0.0.4",
102
+ address: "0x9a52283276A0ec8740DF50bF01B28A80D880eaf2",
103
+ verifiedAt: VERIFIED_AT,
104
+ notes: ZERODEV_NOTES + " Scopes a session key to specific targets and selectors."
105
+ },
106
+ kernelTimestampPolicy: {
107
+ status: "deployed",
108
+ name: "ZeroDev Timestamp Policy",
109
+ address: "0xB9f8f524bE6EcD8C945b1b87f9ae5C192FdCE20F",
110
+ verifiedAt: VERIFIED_AT,
111
+ notes: ZERODEV_NOTES + " Bounds a session key to a validity window."
112
+ },
113
+ tapScore: {
114
+ status: "deployed",
115
+ name: "TapScore",
116
+ address: "0x261eA5971B93237a56990206A46Bc80318e4d078",
117
+ verifiedAt: VERIFIED_AT,
118
+ notes: TAPSCORE_NOTES
119
+ },
120
+ paymasterV1: {
121
+ status: "deployed",
122
+ name: "Verifying Paymaster v1 (PepuVerifyingPaymasterV7) - RETIRED",
123
+ address: "0x2B6FED323bFA24f0475f4e1Dd3C7F6Cc1f3ae8B0",
124
+ verifiedAt: VERIFIED_AT,
125
+ retired: true,
126
+ notes: PAYMASTER_V1_NOTES
127
+ },
128
+ paymasterV2: {
129
+ status: "deployed",
130
+ name: "Sponsored Paymaster v2 (PepuSponsoredPaymasterV7), canary",
131
+ address: "0xdb28528C9399C33c9A0297E8A62F39145acbC30D",
132
+ verifiedAt: PAYMASTER_V2_VERIFIED_AT,
133
+ notes: PAYMASTER_V2_NOTES
134
+ }
135
+ },
136
+ [chunkDPCZJLB3_cjs.pepuTestnet.id]: {
137
+ create2Factory: {
138
+ status: "deployed",
139
+ name: "CREATE2 Deterministic Deployer",
140
+ address: "0x4e59b44847b379578588920cA78FbF26c0B4956C",
141
+ notes: "Standard Nick's-method deterministic deployer."
142
+ },
143
+ multicall3: {
144
+ status: "pending",
145
+ name: "Multicall3",
146
+ reason: MULTICALL3_PENDING_REASON
147
+ },
148
+ permit2: {
149
+ status: "pending",
150
+ name: "Permit2",
151
+ reason: PERMIT2_PENDING_REASON
152
+ },
153
+ entryPoint06: {
154
+ status: "pending",
155
+ name: "ERC-4337 EntryPoint v0.6",
156
+ reason: TESTNET_AA_PENDING_REASON
157
+ },
158
+ entryPoint07: {
159
+ status: "pending",
160
+ name: "ERC-4337 EntryPoint v0.7",
161
+ reason: TESTNET_AA_PENDING_REASON
162
+ },
163
+ kernelFactory: {
164
+ status: "pending",
165
+ name: "Kernel v3 Account Factory",
166
+ reason: TESTNET_AA_PENDING_REASON
167
+ },
168
+ kernelMetaFactory: {
169
+ status: "pending",
170
+ name: "Kernel MetaFactory",
171
+ reason: TESTNET_AA_PENDING_REASON
172
+ },
173
+ ecdsaValidator: {
174
+ status: "pending",
175
+ name: "Kernel ECDSA Validator",
176
+ reason: TESTNET_AA_PENDING_REASON
177
+ },
178
+ paymaster: {
179
+ status: "pending",
180
+ name: "Verifying Paymaster (PepuVerifyingPaymasterV7)",
181
+ reason: PAYMASTER_TESTNET_PENDING_REASON
182
+ },
183
+ kernelImplementation: { status: "pending", name: "Kernel v3.1 Implementation", reason: TESTNET_AA_PENDING_REASON },
184
+ kernelEcdsaSignerModule: { status: "pending", name: "Kernel ECDSA Signer (permission signer module)", reason: TESTNET_AA_PENDING_REASON },
185
+ kernelCallPolicyV004: { status: "pending", name: "ZeroDev Call Policy v0.0.4", reason: TESTNET_AA_PENDING_REASON },
186
+ kernelTimestampPolicy: { status: "pending", name: "ZeroDev Timestamp Policy", reason: TESTNET_AA_PENDING_REASON },
187
+ tapScore: { status: "pending", name: "TapScore", reason: "Deployed on mainnet only." },
188
+ paymasterV1: { status: "pending", name: "Verifying Paymaster v1 (PepuVerifyingPaymasterV7)", reason: PAYMASTER_TESTNET_PENDING_REASON },
189
+ paymasterV2: { status: "pending", name: "Verifying Paymaster v2", reason: PAYMASTER_TESTNET_PENDING_REASON }
190
+ }
191
+ };
192
+ function getContract(chainId, name) {
193
+ return pepuContracts[chainId]?.[name];
194
+ }
195
+ function listContracts(chainId) {
196
+ const registry = pepuContracts[chainId];
197
+ return registry ? Object.values(registry) : [];
198
+ }
199
+ function isDeployed(entry) {
200
+ return entry?.status === "deployed";
201
+ }
202
+ function getPepuAddresses(chainId = chunkDPCZJLB3_cjs.pepuMainnet.id) {
203
+ const registry = pepuContracts[chainId];
204
+ if (!registry) return [];
205
+ return Object.keys(registry).map((key) => {
206
+ const e = registry[key];
207
+ return e.status === "deployed" ? {
208
+ key,
209
+ name: e.name,
210
+ status: "deployed",
211
+ address: e.address,
212
+ ...e.verifiedAt ? { verifiedAt: e.verifiedAt } : {},
213
+ ...e.retired ? { retired: true } : {},
214
+ note: e.notes ?? ""
215
+ } : { key, name: e.name, status: "pending", note: e.reason };
216
+ });
217
+ }
218
+ function getPepuAddressMap(chainId = chunkDPCZJLB3_cjs.pepuMainnet.id) {
219
+ const out = {};
220
+ for (const row of getPepuAddresses(chainId)) out[row.key] = row;
221
+ return out;
222
+ }
223
+
224
+ exports.getContract = getContract;
225
+ exports.getPepuAddressMap = getPepuAddressMap;
226
+ exports.getPepuAddresses = getPepuAddresses;
227
+ exports.isDeployed = isDeployed;
228
+ exports.listContracts = listContracts;
229
+ exports.pepuContracts = pepuContracts;
230
+ //# sourceMappingURL=chunk-K7JSQPZO.cjs.map
231
+ //# sourceMappingURL=chunk-K7JSQPZO.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/contracts.ts"],"names":["pepuMainnet","pepuTestnet"],"mappings":"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","file":"chunk-K7JSQPZO.cjs","sourcesContent":["import type { Address } from \"viem\";\n\nimport { pepuMainnet, pepuTestnet } from \"./chains.js\";\n\n/**\n * Canonical keys for contracts tracked by this registry. Adding a new key\n * here (and a corresponding entry per chain below) is not a breaking\n * change for consumers that read the registry through {@link getContract}\n * or {@link listContracts}.\n */\nexport type PepuContractName =\n | \"create2Factory\"\n | \"multicall3\"\n | \"permit2\"\n | \"entryPoint06\"\n | \"entryPoint07\"\n | \"kernelFactory\"\n | \"kernelMetaFactory\"\n | \"ecdsaValidator\"\n | \"paymaster\"\n | \"kernelImplementation\"\n | \"kernelEcdsaSignerModule\"\n | \"kernelCallPolicyV004\"\n | \"kernelTimestampPolicy\"\n | \"tapScore\"\n | \"paymasterV1\"\n | \"paymasterV2\";\n\n/** A contract that is confirmed live on-chain at `address`. */\nexport interface DeployedContract {\n readonly status: \"deployed\";\n /** Human-readable name, for logging/UI. */\n readonly name: string;\n /** Verified contract address. */\n readonly address: Address;\n /** Optional short note, e.g. how the address was verified. */\n readonly notes?: string;\n /**\n * ISO date (YYYY-MM-DD) on which the address was last confirmed to have\n * bytecode via `eth_getCode` against the PEPU mainnet RPC. Re-run\n * `node packages/sdk/scripts/live-check.mjs` to refresh.\n */\n readonly verifiedAt?: string;\n /**\n * True when the contract still has bytecode but must not be used (for example\n * the v1 paymaster, whose EntryPoint deposit was withdrawn). Never route new\n * work to a retired contract.\n */\n readonly retired?: true;\n}\n\n/**\n * A contract that is not yet deployed on this chain. Deliberately has no\n * `address` field — callers must not be able to accidentally read a\n * placeholder value and treat it as real. Use {@link getContract} /\n * {@link isDeployed} to narrow before reading an address.\n */\nexport interface PendingContract {\n readonly status: \"pending\";\n /** Human-readable name, for logging/UI. */\n readonly name: string;\n /** Why this contract has no verified address yet. */\n readonly reason: string;\n}\n\nexport type ContractEntry = DeployedContract | PendingContract;\n\n/** Per-chain contract catalog, keyed by {@link PepuContractName}. */\nexport type PepuContractRegistry = Readonly<\n Record<PepuContractName, ContractEntry>\n>;\n\nconst MULTICALL3_PENDING_REASON =\n \"Canonical Multicall3 (0xcA11bde05977b3631167028862bE2a173976CA11) was \" +\n \"deployed elsewhere via a pre-signed CREATE transaction with a \" +\n \"1,000,000 gas limit. This Arbitrum Nitro chain needs ~14.3M gas to \" +\n \"deploy the same bytecode, so that transaction cannot execute here and \" +\n \"the canonical address is unreachable. A PEPU-specific deployment is \" +\n \"pending; do not substitute the canonical address.\";\n\nconst MULTICALL3_MAINNET_NOTES =\n \"PEPU-specific deployment. NOT at the canonical Multicall3 address, \" +\n \"which is unreachable on this Nitro chain (the canonical pre-signed \" +\n \"CREATE tx carries a 1,000,000 gas limit; this bytecode needs ~14.3M). \" +\n \"Deployed from canonical mds1/multicall3 source (solc 0.8.12, optimizer \" +\n \"10,000,000 runs) via the CREATE2 deterministic deployer with a zero \" +\n \"salt, so the same source reproduces this address on any chain that has \" +\n \"that deployer. Verified on pepuscan. viem/wagmi multicall confirmed \" +\n \"working against it.\";\n\nconst ZERODEV_NOTES =\n \"Deployed by ZeroDev's one-click Conduit Marketplace integration \" +\n \"(mainnet only — not present on testnet).\";\n\nconst PERMIT2_PENDING_REASON =\n \"Not yet deployed on this chain. The CREATE2 deterministic deployer \" +\n \"needed to reproduce Permit2's canonical address is live, so this is \" +\n \"unblocked, but no deployment has happened (and been verified) yet.\";\n\nconst PERMIT2_MAINNET_NOTES =\n \"Deployed at the canonical Permit2 address via the CREATE2 deterministic \" +\n \"deployer, same as on every other chain that has it. Verified live \" +\n \"2026-09-24 via eth_getCode (9,152 bytes, matching Permit2's known \" +\n \"bytecode size) plus a successful DOMAIN_SEPARATOR() eth_call. This is \" +\n \"the canonical Permit2 — do not confuse it with PepuSwap's own separate \" +\n \"Permit2 deployment at pepuSwapContracts.permit2NonCanonical in ./dex.js, \" +\n \"which predates this one and is not interchangeable with it.\";\n\nconst PAYMASTER_MAINNET_NOTES =\n \"Alias of `paymasterV2`: the tiered PepuSponsoredPaymasterV7 canary (0xdb28...C30D), deployed \" +\n \"around block 10537341 and funded in small tranches. Internally reviewed 3x, external audit \" +\n \"pending. Owner 0x5966dFaB11c8AEe767e0739083417D02f4a634A1, manager \" +\n \"0x063Ab6C16c38D19A4bC76E7c39A4A0A73afCaBb0. The free pool was seeded with 300 PEPU; free-tier \" +\n \"destinations are TapScore only for now. It sponsors only through the hosted policy service \" +\n \"(paymaster.pepeunchained.com) with the hosted bundler (bundler.pepeunchained.com). The v1 \" +\n \"paymaster is retired (see `paymasterV1`).\";\n\n/** Date the mainnet addresses below were last checked with eth_getCode. */\nconst VERIFIED_AT = \"2026-10-02\";\n\n/** Date the v2 paymaster canary was verified live (deployment record: deploy-receipt-v2.json). */\nconst PAYMASTER_V2_VERIFIED_AT = \"2026-10-14\";\n\nconst KERNEL_IMPL_NOTES =\n ZERODEV_NOTES +\n \" Kernel v3.1 implementation that kernelFactory.implementation() resolves to; \" +\n \"same address ZeroDev uses on every chain with this version.\";\n\nconst TAPSCORE_NOTES =\n \"TapScore demo contract used by the game-app template. Verified via eth_getCode.\";\n\nconst PAYMASTER_V1_NOTES =\n \"RETIRED. The project's first verifying paymaster (PepuVerifyingPaymasterV7). Its EntryPoint \" +\n \"deposit was withdrawn (deposit is 0), so it cannot sponsor anything. The contract still has \" +\n \"bytecode; do not deposit to it or route new work to it. Superseded by `paymasterV2`. A real \" +\n \"sponsored operation ran through the hosted URLs on v1 before retirement (tx \" +\n \"0x57cf2f5a332248476d775c096b4b8339d81867c14211ed3bc4fcb1895dff0f9f).\";\n\nconst PAYMASTER_V2_NOTES =\n \"PepuSponsoredPaymasterV7 (v2), deployed on PEPU mainnet as a canary around block 10537341: \" +\n \"internally reviewed 3x, external audit pending, funded in small tranches. Owner \" +\n \"0x5966dFaB11c8AEe767e0739083417D02f4a634A1, manager 0x063Ab6C16c38D19A4bC76E7c39A4A0A73afCaBb0. \" +\n \"Free pool seeded with 300 PEPU; free-tier destinations are TapScore only for now. Free tier per \" +\n \"user is 100 PEPU/day and 50 PEPU/hour, enforced by the policy service; beyond that a dApp \" +\n \"deposits into its own project. Record: services/paymaster/contracts/deployed-address-v2.txt.\";\n\nconst PAYMASTER_TESTNET_PENDING_REASON =\n \"No paymaster (or any other ERC-4337 infrastructure) has been deployed to testnet — see \" +\n \"TESTNET_AA_PENDING_REASON. The mainnet paymaster is a project-specific deployment, not \" +\n \"something that would appear on testnet by default even once the rest of the AA stack does.\";\n\nconst TESTNET_AA_PENDING_REASON =\n \"Account-abstraction contracts were deployed on mainnet (97741) only, \" +\n \"via ZeroDev's Conduit Marketplace integration. Nothing has been \" +\n \"deployed to testnet, and testnet is currently out of scope (no faucet \" +\n \"exists, so it cannot be funded without bridging).\";\n\n/**\n * Contract registry, keyed by chain id. Tracked as independent per-chain\n * entries because deployments happen per-chain and have already diverged:\n * mainnet has the CREATE2 deployer, a PEPU-specific Multicall3, the\n * canonical Permit2, the full ZeroDev Kernel v3 AA stack (EntryPoint\n * v0.6/v0.7, Kernel factory/meta-factory, ECDSA validator), and a\n * project-deployed, funded verifying paymaster. Testnet has only the\n * CREATE2 deployer — everything else is `status: \"pending\"` because\n * testnet is out of scope for this package (no faucet exists to fund\n * verification there).\n *\n * Note on the paymaster specifically: `status: \"deployed\"` here means the\n * contract has live bytecode and a real EntryPoint deposit — it does NOT\n * mean gas sponsorship is usable by an application. See\n * `getSponsorshipStatus` in `./aa/status.js`, which is the single source of\n * truth for that separate question.\n */\nexport const pepuContracts: Readonly<\n Record<number, PepuContractRegistry>\n> = {\n [pepuMainnet.id]: {\n create2Factory: {\n status: \"deployed\",\n name: \"CREATE2 Deterministic Deployer\",\n address: \"0x4e59b44847b379578588920cA78FbF26c0B4956C\",\n verifiedAt: VERIFIED_AT,\n notes: \"Standard Nick's-method deterministic deployer.\",\n },\n multicall3: {\n status: \"deployed\",\n name: \"Multicall3\",\n address: \"0x9CE19273Ae9c24437DFF512E8DFCAed4E4B001bd\",\n verifiedAt: VERIFIED_AT,\n notes: MULTICALL3_MAINNET_NOTES,\n },\n permit2: {\n status: \"deployed\",\n name: \"Permit2\",\n address: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n verifiedAt: VERIFIED_AT,\n notes: PERMIT2_MAINNET_NOTES,\n },\n entryPoint06: {\n status: \"deployed\",\n name: \"ERC-4337 EntryPoint v0.6\",\n address: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES + \" At the canonical v0.6 address.\",\n },\n entryPoint07: {\n status: \"deployed\",\n name: \"ERC-4337 EntryPoint v0.7\",\n address: \"0x0000000071727De22E5E9d8BAf0edAc6f37da032\",\n verifiedAt: VERIFIED_AT,\n notes:\n ZERODEV_NOTES +\n \" At the canonical v0.7 address; getNonce/balanceOf confirmed live.\",\n },\n kernelFactory: {\n status: \"deployed\",\n name: \"Kernel v3 Account Factory\",\n address: \"0xaac5D4240AF87249B3f71BC8E4A2cae074A3E419\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES,\n },\n kernelMetaFactory: {\n status: \"deployed\",\n name: \"Kernel MetaFactory\",\n address: \"0xd703aaE79538628d27099B8c4f621bE4CCd142d5\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES,\n },\n ecdsaValidator: {\n status: \"deployed\",\n name: \"Kernel ECDSA Validator\",\n address: \"0x845ADb2C711129d4f3966735eD98a9F09fC4cE57\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES,\n },\n paymaster: {\n status: \"deployed\",\n name: \"Sponsored Paymaster v2 (PepuSponsoredPaymasterV7, alias of paymasterV2)\",\n address: \"0xdb28528C9399C33c9A0297E8A62F39145acbC30D\",\n verifiedAt: PAYMASTER_V2_VERIFIED_AT,\n notes: PAYMASTER_MAINNET_NOTES,\n },\n kernelImplementation: {\n status: \"deployed\",\n name: \"Kernel v3.1 Implementation\",\n address: \"0xbAC849bB641841b44E965fb01A4Bf5F074F84B4d\",\n verifiedAt: VERIFIED_AT,\n notes: KERNEL_IMPL_NOTES,\n },\n kernelEcdsaSignerModule: {\n status: \"deployed\",\n name: \"Kernel ECDSA Signer (permission signer module)\",\n address: \"0x6A6F069E2a08c2468e7724Ab3250CdBFBA14D4FF\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES + \" Used as the signer in permission-validator session keys.\",\n },\n kernelCallPolicyV004: {\n status: \"deployed\",\n name: \"ZeroDev Call Policy v0.0.4\",\n address: \"0x9a52283276A0ec8740DF50bF01B28A80D880eaf2\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES + \" Scopes a session key to specific targets and selectors.\",\n },\n kernelTimestampPolicy: {\n status: \"deployed\",\n name: \"ZeroDev Timestamp Policy\",\n address: \"0xB9f8f524bE6EcD8C945b1b87f9ae5C192FdCE20F\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES + \" Bounds a session key to a validity window.\",\n },\n tapScore: {\n status: \"deployed\",\n name: \"TapScore\",\n address: \"0x261eA5971B93237a56990206A46Bc80318e4d078\",\n verifiedAt: VERIFIED_AT,\n notes: TAPSCORE_NOTES,\n },\n paymasterV1: {\n status: \"deployed\",\n name: \"Verifying Paymaster v1 (PepuVerifyingPaymasterV7) - RETIRED\",\n address: \"0x2B6FED323bFA24f0475f4e1Dd3C7F6Cc1f3ae8B0\",\n verifiedAt: VERIFIED_AT,\n retired: true,\n notes: PAYMASTER_V1_NOTES,\n },\n paymasterV2: {\n status: \"deployed\",\n name: \"Sponsored Paymaster v2 (PepuSponsoredPaymasterV7), canary\",\n address: \"0xdb28528C9399C33c9A0297E8A62F39145acbC30D\",\n verifiedAt: PAYMASTER_V2_VERIFIED_AT,\n notes: PAYMASTER_V2_NOTES,\n },\n },\n [pepuTestnet.id]: {\n create2Factory: {\n status: \"deployed\",\n name: \"CREATE2 Deterministic Deployer\",\n address: \"0x4e59b44847b379578588920cA78FbF26c0B4956C\",\n notes: \"Standard Nick's-method deterministic deployer.\",\n },\n multicall3: {\n status: \"pending\",\n name: \"Multicall3\",\n reason: MULTICALL3_PENDING_REASON,\n },\n permit2: {\n status: \"pending\",\n name: \"Permit2\",\n reason: PERMIT2_PENDING_REASON,\n },\n entryPoint06: {\n status: \"pending\",\n name: \"ERC-4337 EntryPoint v0.6\",\n reason: TESTNET_AA_PENDING_REASON,\n },\n entryPoint07: {\n status: \"pending\",\n name: \"ERC-4337 EntryPoint v0.7\",\n reason: TESTNET_AA_PENDING_REASON,\n },\n kernelFactory: {\n status: \"pending\",\n name: \"Kernel v3 Account Factory\",\n reason: TESTNET_AA_PENDING_REASON,\n },\n kernelMetaFactory: {\n status: \"pending\",\n name: \"Kernel MetaFactory\",\n reason: TESTNET_AA_PENDING_REASON,\n },\n ecdsaValidator: {\n status: \"pending\",\n name: \"Kernel ECDSA Validator\",\n reason: TESTNET_AA_PENDING_REASON,\n },\n paymaster: {\n status: \"pending\",\n name: \"Verifying Paymaster (PepuVerifyingPaymasterV7)\",\n reason: PAYMASTER_TESTNET_PENDING_REASON,\n },\n kernelImplementation: { status: \"pending\", name: \"Kernel v3.1 Implementation\", reason: TESTNET_AA_PENDING_REASON },\n kernelEcdsaSignerModule: { status: \"pending\", name: \"Kernel ECDSA Signer (permission signer module)\", reason: TESTNET_AA_PENDING_REASON },\n kernelCallPolicyV004: { status: \"pending\", name: \"ZeroDev Call Policy v0.0.4\", reason: TESTNET_AA_PENDING_REASON },\n kernelTimestampPolicy: { status: \"pending\", name: \"ZeroDev Timestamp Policy\", reason: TESTNET_AA_PENDING_REASON },\n tapScore: { status: \"pending\", name: \"TapScore\", reason: \"Deployed on mainnet only.\" },\n paymasterV1: { status: \"pending\", name: \"Verifying Paymaster v1 (PepuVerifyingPaymasterV7)\", reason: PAYMASTER_TESTNET_PENDING_REASON },\n paymasterV2: { status: \"pending\", name: \"Verifying Paymaster v2\", reason: PAYMASTER_TESTNET_PENDING_REASON },\n },\n};\n\n/** Look up one contract entry for a chain id. Returns `undefined` if the chain isn't in the registry. */\nexport function getContract(\n chainId: number,\n name: PepuContractName,\n): ContractEntry | undefined {\n return pepuContracts[chainId]?.[name];\n}\n\n/** List all tracked contract entries for a chain id, in registry order. */\nexport function listContracts(\n chainId: number,\n): readonly ContractEntry[] {\n const registry = pepuContracts[chainId];\n return registry ? Object.values(registry) : [];\n}\n\n/** Narrow a {@link ContractEntry} to {@link DeployedContract}. */\nexport function isDeployed(\n entry: ContractEntry | undefined,\n): entry is DeployedContract {\n return entry?.status === \"deployed\";\n}\n\n/** One row of the address table returned by {@link getPepuAddresses}. */\nexport interface PepuAddressRow {\n readonly key: PepuContractName;\n readonly name: string;\n readonly status: \"deployed\" | \"pending\";\n /** Present only when `status` is `\"deployed\"`. */\n readonly address?: Address;\n /** ISO date of the last `eth_getCode` check, when known. */\n readonly verifiedAt?: string;\n /** True for a deployed contract that is retired and must not be used (the v1 paymaster). */\n readonly retired?: true;\n /** Notes (deployed) or reason (pending). */\n readonly note: string;\n}\n\n/**\n * The full supporting-contract table for a chain, flattened for docs and\n * MCP rendering. **Returns an ARRAY of rows** (one {@link PepuAddressRow} per\n * contract, each carrying its own `key`), not an object keyed by contract name:\n * `getPepuAddresses().paymaster` is `undefined`. To look one contract up by name use\n * {@link getContract}, or {@link getPepuAddressMap} for the same rows keyed by name.\n * Pending entries carry no `address`.\n *\n * @example\n * ```ts\n * const rows = getPepuAddresses(); // PepuAddressRow[], mainnet by default\n * const live = rows.filter((r) => r.status === \"deployed\");\n * const paymaster = rows.find((r) => r.key === \"paymaster\");\n * ```\n */\nexport function getPepuAddresses(chainId: number = pepuMainnet.id): readonly PepuAddressRow[] {\n const registry = pepuContracts[chainId];\n if (!registry) return [];\n return (Object.keys(registry) as PepuContractName[]).map((key): PepuAddressRow => {\n const e = registry[key];\n return e.status === \"deployed\"\n ? {\n key,\n name: e.name,\n status: \"deployed\",\n address: e.address,\n ...(e.verifiedAt ? { verifiedAt: e.verifiedAt } : {}),\n ...(e.retired ? { retired: true as const } : {}),\n note: e.notes ?? \"\",\n }\n : { key, name: e.name, status: \"pending\", note: e.reason };\n });\n}\n\n/**\n * The same rows as {@link getPepuAddresses}, keyed by contract name instead of\n * returned as an array. An unknown chain yields an empty object.\n *\n * @example\n * ```ts\n * const map = getPepuAddressMap();\n * map.paymaster?.address; // Address | undefined\n * ```\n */\nexport function getPepuAddressMap(chainId: number = pepuMainnet.id): Partial<Record<PepuContractName, PepuAddressRow>> {\n const out: Partial<Record<PepuContractName, PepuAddressRow>> = {};\n for (const row of getPepuAddresses(chainId)) out[row.key] = row;\n return out;\n}\n"]}
@@ -0,0 +1,224 @@
1
+ import { pepuTestnet, pepuMainnet } from './chunk-VTQIHMF3.js';
2
+
3
+ // src/contracts.ts
4
+ var MULTICALL3_PENDING_REASON = "Canonical Multicall3 (0xcA11bde05977b3631167028862bE2a173976CA11) was deployed elsewhere via a pre-signed CREATE transaction with a 1,000,000 gas limit. This Arbitrum Nitro chain needs ~14.3M gas to deploy the same bytecode, so that transaction cannot execute here and the canonical address is unreachable. A PEPU-specific deployment is pending; do not substitute the canonical address.";
5
+ var MULTICALL3_MAINNET_NOTES = "PEPU-specific deployment. NOT at the canonical Multicall3 address, which is unreachable on this Nitro chain (the canonical pre-signed CREATE tx carries a 1,000,000 gas limit; this bytecode needs ~14.3M). Deployed from canonical mds1/multicall3 source (solc 0.8.12, optimizer 10,000,000 runs) via the CREATE2 deterministic deployer with a zero salt, so the same source reproduces this address on any chain that has that deployer. Verified on pepuscan. viem/wagmi multicall confirmed working against it.";
6
+ var ZERODEV_NOTES = "Deployed by ZeroDev's one-click Conduit Marketplace integration (mainnet only \u2014 not present on testnet).";
7
+ var PERMIT2_PENDING_REASON = "Not yet deployed on this chain. The CREATE2 deterministic deployer needed to reproduce Permit2's canonical address is live, so this is unblocked, but no deployment has happened (and been verified) yet.";
8
+ var PERMIT2_MAINNET_NOTES = "Deployed at the canonical Permit2 address via the CREATE2 deterministic deployer, same as on every other chain that has it. Verified live 2026-09-24 via eth_getCode (9,152 bytes, matching Permit2's known bytecode size) plus a successful DOMAIN_SEPARATOR() eth_call. This is the canonical Permit2 \u2014 do not confuse it with PepuSwap's own separate Permit2 deployment at pepuSwapContracts.permit2NonCanonical in ./dex.js, which predates this one and is not interchangeable with it.";
9
+ var PAYMASTER_MAINNET_NOTES = "Alias of `paymasterV2`: the tiered PepuSponsoredPaymasterV7 canary (0xdb28...C30D), deployed around block 10537341 and funded in small tranches. Internally reviewed 3x, external audit pending. Owner 0x5966dFaB11c8AEe767e0739083417D02f4a634A1, manager 0x063Ab6C16c38D19A4bC76E7c39A4A0A73afCaBb0. The free pool was seeded with 300 PEPU; free-tier destinations are TapScore only for now. It sponsors only through the hosted policy service (paymaster.pepeunchained.com) with the hosted bundler (bundler.pepeunchained.com). The v1 paymaster is retired (see `paymasterV1`).";
10
+ var VERIFIED_AT = "2026-10-02";
11
+ var PAYMASTER_V2_VERIFIED_AT = "2026-10-14";
12
+ var KERNEL_IMPL_NOTES = ZERODEV_NOTES + " Kernel v3.1 implementation that kernelFactory.implementation() resolves to; same address ZeroDev uses on every chain with this version.";
13
+ var TAPSCORE_NOTES = "TapScore demo contract used by the game-app template. Verified via eth_getCode.";
14
+ var PAYMASTER_V1_NOTES = "RETIRED. The project's first verifying paymaster (PepuVerifyingPaymasterV7). Its EntryPoint deposit was withdrawn (deposit is 0), so it cannot sponsor anything. The contract still has bytecode; do not deposit to it or route new work to it. Superseded by `paymasterV2`. A real sponsored operation ran through the hosted URLs on v1 before retirement (tx 0x57cf2f5a332248476d775c096b4b8339d81867c14211ed3bc4fcb1895dff0f9f).";
15
+ var PAYMASTER_V2_NOTES = "PepuSponsoredPaymasterV7 (v2), deployed on PEPU mainnet as a canary around block 10537341: internally reviewed 3x, external audit pending, funded in small tranches. Owner 0x5966dFaB11c8AEe767e0739083417D02f4a634A1, manager 0x063Ab6C16c38D19A4bC76E7c39A4A0A73afCaBb0. Free pool seeded with 300 PEPU; free-tier destinations are TapScore only for now. Free tier per user is 100 PEPU/day and 50 PEPU/hour, enforced by the policy service; beyond that a dApp deposits into its own project. Record: services/paymaster/contracts/deployed-address-v2.txt.";
16
+ var PAYMASTER_TESTNET_PENDING_REASON = "No paymaster (or any other ERC-4337 infrastructure) has been deployed to testnet \u2014 see TESTNET_AA_PENDING_REASON. The mainnet paymaster is a project-specific deployment, not something that would appear on testnet by default even once the rest of the AA stack does.";
17
+ var TESTNET_AA_PENDING_REASON = "Account-abstraction contracts were deployed on mainnet (97741) only, via ZeroDev's Conduit Marketplace integration. Nothing has been deployed to testnet, and testnet is currently out of scope (no faucet exists, so it cannot be funded without bridging).";
18
+ var pepuContracts = {
19
+ [pepuMainnet.id]: {
20
+ create2Factory: {
21
+ status: "deployed",
22
+ name: "CREATE2 Deterministic Deployer",
23
+ address: "0x4e59b44847b379578588920cA78FbF26c0B4956C",
24
+ verifiedAt: VERIFIED_AT,
25
+ notes: "Standard Nick's-method deterministic deployer."
26
+ },
27
+ multicall3: {
28
+ status: "deployed",
29
+ name: "Multicall3",
30
+ address: "0x9CE19273Ae9c24437DFF512E8DFCAed4E4B001bd",
31
+ verifiedAt: VERIFIED_AT,
32
+ notes: MULTICALL3_MAINNET_NOTES
33
+ },
34
+ permit2: {
35
+ status: "deployed",
36
+ name: "Permit2",
37
+ address: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
38
+ verifiedAt: VERIFIED_AT,
39
+ notes: PERMIT2_MAINNET_NOTES
40
+ },
41
+ entryPoint06: {
42
+ status: "deployed",
43
+ name: "ERC-4337 EntryPoint v0.6",
44
+ address: "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
45
+ verifiedAt: VERIFIED_AT,
46
+ notes: ZERODEV_NOTES + " At the canonical v0.6 address."
47
+ },
48
+ entryPoint07: {
49
+ status: "deployed",
50
+ name: "ERC-4337 EntryPoint v0.7",
51
+ address: "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
52
+ verifiedAt: VERIFIED_AT,
53
+ notes: ZERODEV_NOTES + " At the canonical v0.7 address; getNonce/balanceOf confirmed live."
54
+ },
55
+ kernelFactory: {
56
+ status: "deployed",
57
+ name: "Kernel v3 Account Factory",
58
+ address: "0xaac5D4240AF87249B3f71BC8E4A2cae074A3E419",
59
+ verifiedAt: VERIFIED_AT,
60
+ notes: ZERODEV_NOTES
61
+ },
62
+ kernelMetaFactory: {
63
+ status: "deployed",
64
+ name: "Kernel MetaFactory",
65
+ address: "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
66
+ verifiedAt: VERIFIED_AT,
67
+ notes: ZERODEV_NOTES
68
+ },
69
+ ecdsaValidator: {
70
+ status: "deployed",
71
+ name: "Kernel ECDSA Validator",
72
+ address: "0x845ADb2C711129d4f3966735eD98a9F09fC4cE57",
73
+ verifiedAt: VERIFIED_AT,
74
+ notes: ZERODEV_NOTES
75
+ },
76
+ paymaster: {
77
+ status: "deployed",
78
+ name: "Sponsored Paymaster v2 (PepuSponsoredPaymasterV7, alias of paymasterV2)",
79
+ address: "0xdb28528C9399C33c9A0297E8A62F39145acbC30D",
80
+ verifiedAt: PAYMASTER_V2_VERIFIED_AT,
81
+ notes: PAYMASTER_MAINNET_NOTES
82
+ },
83
+ kernelImplementation: {
84
+ status: "deployed",
85
+ name: "Kernel v3.1 Implementation",
86
+ address: "0xbAC849bB641841b44E965fb01A4Bf5F074F84B4d",
87
+ verifiedAt: VERIFIED_AT,
88
+ notes: KERNEL_IMPL_NOTES
89
+ },
90
+ kernelEcdsaSignerModule: {
91
+ status: "deployed",
92
+ name: "Kernel ECDSA Signer (permission signer module)",
93
+ address: "0x6A6F069E2a08c2468e7724Ab3250CdBFBA14D4FF",
94
+ verifiedAt: VERIFIED_AT,
95
+ notes: ZERODEV_NOTES + " Used as the signer in permission-validator session keys."
96
+ },
97
+ kernelCallPolicyV004: {
98
+ status: "deployed",
99
+ name: "ZeroDev Call Policy v0.0.4",
100
+ address: "0x9a52283276A0ec8740DF50bF01B28A80D880eaf2",
101
+ verifiedAt: VERIFIED_AT,
102
+ notes: ZERODEV_NOTES + " Scopes a session key to specific targets and selectors."
103
+ },
104
+ kernelTimestampPolicy: {
105
+ status: "deployed",
106
+ name: "ZeroDev Timestamp Policy",
107
+ address: "0xB9f8f524bE6EcD8C945b1b87f9ae5C192FdCE20F",
108
+ verifiedAt: VERIFIED_AT,
109
+ notes: ZERODEV_NOTES + " Bounds a session key to a validity window."
110
+ },
111
+ tapScore: {
112
+ status: "deployed",
113
+ name: "TapScore",
114
+ address: "0x261eA5971B93237a56990206A46Bc80318e4d078",
115
+ verifiedAt: VERIFIED_AT,
116
+ notes: TAPSCORE_NOTES
117
+ },
118
+ paymasterV1: {
119
+ status: "deployed",
120
+ name: "Verifying Paymaster v1 (PepuVerifyingPaymasterV7) - RETIRED",
121
+ address: "0x2B6FED323bFA24f0475f4e1Dd3C7F6Cc1f3ae8B0",
122
+ verifiedAt: VERIFIED_AT,
123
+ retired: true,
124
+ notes: PAYMASTER_V1_NOTES
125
+ },
126
+ paymasterV2: {
127
+ status: "deployed",
128
+ name: "Sponsored Paymaster v2 (PepuSponsoredPaymasterV7), canary",
129
+ address: "0xdb28528C9399C33c9A0297E8A62F39145acbC30D",
130
+ verifiedAt: PAYMASTER_V2_VERIFIED_AT,
131
+ notes: PAYMASTER_V2_NOTES
132
+ }
133
+ },
134
+ [pepuTestnet.id]: {
135
+ create2Factory: {
136
+ status: "deployed",
137
+ name: "CREATE2 Deterministic Deployer",
138
+ address: "0x4e59b44847b379578588920cA78FbF26c0B4956C",
139
+ notes: "Standard Nick's-method deterministic deployer."
140
+ },
141
+ multicall3: {
142
+ status: "pending",
143
+ name: "Multicall3",
144
+ reason: MULTICALL3_PENDING_REASON
145
+ },
146
+ permit2: {
147
+ status: "pending",
148
+ name: "Permit2",
149
+ reason: PERMIT2_PENDING_REASON
150
+ },
151
+ entryPoint06: {
152
+ status: "pending",
153
+ name: "ERC-4337 EntryPoint v0.6",
154
+ reason: TESTNET_AA_PENDING_REASON
155
+ },
156
+ entryPoint07: {
157
+ status: "pending",
158
+ name: "ERC-4337 EntryPoint v0.7",
159
+ reason: TESTNET_AA_PENDING_REASON
160
+ },
161
+ kernelFactory: {
162
+ status: "pending",
163
+ name: "Kernel v3 Account Factory",
164
+ reason: TESTNET_AA_PENDING_REASON
165
+ },
166
+ kernelMetaFactory: {
167
+ status: "pending",
168
+ name: "Kernel MetaFactory",
169
+ reason: TESTNET_AA_PENDING_REASON
170
+ },
171
+ ecdsaValidator: {
172
+ status: "pending",
173
+ name: "Kernel ECDSA Validator",
174
+ reason: TESTNET_AA_PENDING_REASON
175
+ },
176
+ paymaster: {
177
+ status: "pending",
178
+ name: "Verifying Paymaster (PepuVerifyingPaymasterV7)",
179
+ reason: PAYMASTER_TESTNET_PENDING_REASON
180
+ },
181
+ kernelImplementation: { status: "pending", name: "Kernel v3.1 Implementation", reason: TESTNET_AA_PENDING_REASON },
182
+ kernelEcdsaSignerModule: { status: "pending", name: "Kernel ECDSA Signer (permission signer module)", reason: TESTNET_AA_PENDING_REASON },
183
+ kernelCallPolicyV004: { status: "pending", name: "ZeroDev Call Policy v0.0.4", reason: TESTNET_AA_PENDING_REASON },
184
+ kernelTimestampPolicy: { status: "pending", name: "ZeroDev Timestamp Policy", reason: TESTNET_AA_PENDING_REASON },
185
+ tapScore: { status: "pending", name: "TapScore", reason: "Deployed on mainnet only." },
186
+ paymasterV1: { status: "pending", name: "Verifying Paymaster v1 (PepuVerifyingPaymasterV7)", reason: PAYMASTER_TESTNET_PENDING_REASON },
187
+ paymasterV2: { status: "pending", name: "Verifying Paymaster v2", reason: PAYMASTER_TESTNET_PENDING_REASON }
188
+ }
189
+ };
190
+ function getContract(chainId, name) {
191
+ return pepuContracts[chainId]?.[name];
192
+ }
193
+ function listContracts(chainId) {
194
+ const registry = pepuContracts[chainId];
195
+ return registry ? Object.values(registry) : [];
196
+ }
197
+ function isDeployed(entry) {
198
+ return entry?.status === "deployed";
199
+ }
200
+ function getPepuAddresses(chainId = pepuMainnet.id) {
201
+ const registry = pepuContracts[chainId];
202
+ if (!registry) return [];
203
+ return Object.keys(registry).map((key) => {
204
+ const e = registry[key];
205
+ return e.status === "deployed" ? {
206
+ key,
207
+ name: e.name,
208
+ status: "deployed",
209
+ address: e.address,
210
+ ...e.verifiedAt ? { verifiedAt: e.verifiedAt } : {},
211
+ ...e.retired ? { retired: true } : {},
212
+ note: e.notes ?? ""
213
+ } : { key, name: e.name, status: "pending", note: e.reason };
214
+ });
215
+ }
216
+ function getPepuAddressMap(chainId = pepuMainnet.id) {
217
+ const out = {};
218
+ for (const row of getPepuAddresses(chainId)) out[row.key] = row;
219
+ return out;
220
+ }
221
+
222
+ export { getContract, getPepuAddressMap, getPepuAddresses, isDeployed, listContracts, pepuContracts };
223
+ //# sourceMappingURL=chunk-KJYNF5KH.js.map
224
+ //# sourceMappingURL=chunk-KJYNF5KH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/contracts.ts"],"names":[],"mappings":"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","file":"chunk-KJYNF5KH.js","sourcesContent":["import type { Address } from \"viem\";\n\nimport { pepuMainnet, pepuTestnet } from \"./chains.js\";\n\n/**\n * Canonical keys for contracts tracked by this registry. Adding a new key\n * here (and a corresponding entry per chain below) is not a breaking\n * change for consumers that read the registry through {@link getContract}\n * or {@link listContracts}.\n */\nexport type PepuContractName =\n | \"create2Factory\"\n | \"multicall3\"\n | \"permit2\"\n | \"entryPoint06\"\n | \"entryPoint07\"\n | \"kernelFactory\"\n | \"kernelMetaFactory\"\n | \"ecdsaValidator\"\n | \"paymaster\"\n | \"kernelImplementation\"\n | \"kernelEcdsaSignerModule\"\n | \"kernelCallPolicyV004\"\n | \"kernelTimestampPolicy\"\n | \"tapScore\"\n | \"paymasterV1\"\n | \"paymasterV2\";\n\n/** A contract that is confirmed live on-chain at `address`. */\nexport interface DeployedContract {\n readonly status: \"deployed\";\n /** Human-readable name, for logging/UI. */\n readonly name: string;\n /** Verified contract address. */\n readonly address: Address;\n /** Optional short note, e.g. how the address was verified. */\n readonly notes?: string;\n /**\n * ISO date (YYYY-MM-DD) on which the address was last confirmed to have\n * bytecode via `eth_getCode` against the PEPU mainnet RPC. Re-run\n * `node packages/sdk/scripts/live-check.mjs` to refresh.\n */\n readonly verifiedAt?: string;\n /**\n * True when the contract still has bytecode but must not be used (for example\n * the v1 paymaster, whose EntryPoint deposit was withdrawn). Never route new\n * work to a retired contract.\n */\n readonly retired?: true;\n}\n\n/**\n * A contract that is not yet deployed on this chain. Deliberately has no\n * `address` field — callers must not be able to accidentally read a\n * placeholder value and treat it as real. Use {@link getContract} /\n * {@link isDeployed} to narrow before reading an address.\n */\nexport interface PendingContract {\n readonly status: \"pending\";\n /** Human-readable name, for logging/UI. */\n readonly name: string;\n /** Why this contract has no verified address yet. */\n readonly reason: string;\n}\n\nexport type ContractEntry = DeployedContract | PendingContract;\n\n/** Per-chain contract catalog, keyed by {@link PepuContractName}. */\nexport type PepuContractRegistry = Readonly<\n Record<PepuContractName, ContractEntry>\n>;\n\nconst MULTICALL3_PENDING_REASON =\n \"Canonical Multicall3 (0xcA11bde05977b3631167028862bE2a173976CA11) was \" +\n \"deployed elsewhere via a pre-signed CREATE transaction with a \" +\n \"1,000,000 gas limit. This Arbitrum Nitro chain needs ~14.3M gas to \" +\n \"deploy the same bytecode, so that transaction cannot execute here and \" +\n \"the canonical address is unreachable. A PEPU-specific deployment is \" +\n \"pending; do not substitute the canonical address.\";\n\nconst MULTICALL3_MAINNET_NOTES =\n \"PEPU-specific deployment. NOT at the canonical Multicall3 address, \" +\n \"which is unreachable on this Nitro chain (the canonical pre-signed \" +\n \"CREATE tx carries a 1,000,000 gas limit; this bytecode needs ~14.3M). \" +\n \"Deployed from canonical mds1/multicall3 source (solc 0.8.12, optimizer \" +\n \"10,000,000 runs) via the CREATE2 deterministic deployer with a zero \" +\n \"salt, so the same source reproduces this address on any chain that has \" +\n \"that deployer. Verified on pepuscan. viem/wagmi multicall confirmed \" +\n \"working against it.\";\n\nconst ZERODEV_NOTES =\n \"Deployed by ZeroDev's one-click Conduit Marketplace integration \" +\n \"(mainnet only — not present on testnet).\";\n\nconst PERMIT2_PENDING_REASON =\n \"Not yet deployed on this chain. The CREATE2 deterministic deployer \" +\n \"needed to reproduce Permit2's canonical address is live, so this is \" +\n \"unblocked, but no deployment has happened (and been verified) yet.\";\n\nconst PERMIT2_MAINNET_NOTES =\n \"Deployed at the canonical Permit2 address via the CREATE2 deterministic \" +\n \"deployer, same as on every other chain that has it. Verified live \" +\n \"2026-09-24 via eth_getCode (9,152 bytes, matching Permit2's known \" +\n \"bytecode size) plus a successful DOMAIN_SEPARATOR() eth_call. This is \" +\n \"the canonical Permit2 — do not confuse it with PepuSwap's own separate \" +\n \"Permit2 deployment at pepuSwapContracts.permit2NonCanonical in ./dex.js, \" +\n \"which predates this one and is not interchangeable with it.\";\n\nconst PAYMASTER_MAINNET_NOTES =\n \"Alias of `paymasterV2`: the tiered PepuSponsoredPaymasterV7 canary (0xdb28...C30D), deployed \" +\n \"around block 10537341 and funded in small tranches. Internally reviewed 3x, external audit \" +\n \"pending. Owner 0x5966dFaB11c8AEe767e0739083417D02f4a634A1, manager \" +\n \"0x063Ab6C16c38D19A4bC76E7c39A4A0A73afCaBb0. The free pool was seeded with 300 PEPU; free-tier \" +\n \"destinations are TapScore only for now. It sponsors only through the hosted policy service \" +\n \"(paymaster.pepeunchained.com) with the hosted bundler (bundler.pepeunchained.com). The v1 \" +\n \"paymaster is retired (see `paymasterV1`).\";\n\n/** Date the mainnet addresses below were last checked with eth_getCode. */\nconst VERIFIED_AT = \"2026-10-02\";\n\n/** Date the v2 paymaster canary was verified live (deployment record: deploy-receipt-v2.json). */\nconst PAYMASTER_V2_VERIFIED_AT = \"2026-10-14\";\n\nconst KERNEL_IMPL_NOTES =\n ZERODEV_NOTES +\n \" Kernel v3.1 implementation that kernelFactory.implementation() resolves to; \" +\n \"same address ZeroDev uses on every chain with this version.\";\n\nconst TAPSCORE_NOTES =\n \"TapScore demo contract used by the game-app template. Verified via eth_getCode.\";\n\nconst PAYMASTER_V1_NOTES =\n \"RETIRED. The project's first verifying paymaster (PepuVerifyingPaymasterV7). Its EntryPoint \" +\n \"deposit was withdrawn (deposit is 0), so it cannot sponsor anything. The contract still has \" +\n \"bytecode; do not deposit to it or route new work to it. Superseded by `paymasterV2`. A real \" +\n \"sponsored operation ran through the hosted URLs on v1 before retirement (tx \" +\n \"0x57cf2f5a332248476d775c096b4b8339d81867c14211ed3bc4fcb1895dff0f9f).\";\n\nconst PAYMASTER_V2_NOTES =\n \"PepuSponsoredPaymasterV7 (v2), deployed on PEPU mainnet as a canary around block 10537341: \" +\n \"internally reviewed 3x, external audit pending, funded in small tranches. Owner \" +\n \"0x5966dFaB11c8AEe767e0739083417D02f4a634A1, manager 0x063Ab6C16c38D19A4bC76E7c39A4A0A73afCaBb0. \" +\n \"Free pool seeded with 300 PEPU; free-tier destinations are TapScore only for now. Free tier per \" +\n \"user is 100 PEPU/day and 50 PEPU/hour, enforced by the policy service; beyond that a dApp \" +\n \"deposits into its own project. Record: services/paymaster/contracts/deployed-address-v2.txt.\";\n\nconst PAYMASTER_TESTNET_PENDING_REASON =\n \"No paymaster (or any other ERC-4337 infrastructure) has been deployed to testnet — see \" +\n \"TESTNET_AA_PENDING_REASON. The mainnet paymaster is a project-specific deployment, not \" +\n \"something that would appear on testnet by default even once the rest of the AA stack does.\";\n\nconst TESTNET_AA_PENDING_REASON =\n \"Account-abstraction contracts were deployed on mainnet (97741) only, \" +\n \"via ZeroDev's Conduit Marketplace integration. Nothing has been \" +\n \"deployed to testnet, and testnet is currently out of scope (no faucet \" +\n \"exists, so it cannot be funded without bridging).\";\n\n/**\n * Contract registry, keyed by chain id. Tracked as independent per-chain\n * entries because deployments happen per-chain and have already diverged:\n * mainnet has the CREATE2 deployer, a PEPU-specific Multicall3, the\n * canonical Permit2, the full ZeroDev Kernel v3 AA stack (EntryPoint\n * v0.6/v0.7, Kernel factory/meta-factory, ECDSA validator), and a\n * project-deployed, funded verifying paymaster. Testnet has only the\n * CREATE2 deployer — everything else is `status: \"pending\"` because\n * testnet is out of scope for this package (no faucet exists to fund\n * verification there).\n *\n * Note on the paymaster specifically: `status: \"deployed\"` here means the\n * contract has live bytecode and a real EntryPoint deposit — it does NOT\n * mean gas sponsorship is usable by an application. See\n * `getSponsorshipStatus` in `./aa/status.js`, which is the single source of\n * truth for that separate question.\n */\nexport const pepuContracts: Readonly<\n Record<number, PepuContractRegistry>\n> = {\n [pepuMainnet.id]: {\n create2Factory: {\n status: \"deployed\",\n name: \"CREATE2 Deterministic Deployer\",\n address: \"0x4e59b44847b379578588920cA78FbF26c0B4956C\",\n verifiedAt: VERIFIED_AT,\n notes: \"Standard Nick's-method deterministic deployer.\",\n },\n multicall3: {\n status: \"deployed\",\n name: \"Multicall3\",\n address: \"0x9CE19273Ae9c24437DFF512E8DFCAed4E4B001bd\",\n verifiedAt: VERIFIED_AT,\n notes: MULTICALL3_MAINNET_NOTES,\n },\n permit2: {\n status: \"deployed\",\n name: \"Permit2\",\n address: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n verifiedAt: VERIFIED_AT,\n notes: PERMIT2_MAINNET_NOTES,\n },\n entryPoint06: {\n status: \"deployed\",\n name: \"ERC-4337 EntryPoint v0.6\",\n address: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES + \" At the canonical v0.6 address.\",\n },\n entryPoint07: {\n status: \"deployed\",\n name: \"ERC-4337 EntryPoint v0.7\",\n address: \"0x0000000071727De22E5E9d8BAf0edAc6f37da032\",\n verifiedAt: VERIFIED_AT,\n notes:\n ZERODEV_NOTES +\n \" At the canonical v0.7 address; getNonce/balanceOf confirmed live.\",\n },\n kernelFactory: {\n status: \"deployed\",\n name: \"Kernel v3 Account Factory\",\n address: \"0xaac5D4240AF87249B3f71BC8E4A2cae074A3E419\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES,\n },\n kernelMetaFactory: {\n status: \"deployed\",\n name: \"Kernel MetaFactory\",\n address: \"0xd703aaE79538628d27099B8c4f621bE4CCd142d5\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES,\n },\n ecdsaValidator: {\n status: \"deployed\",\n name: \"Kernel ECDSA Validator\",\n address: \"0x845ADb2C711129d4f3966735eD98a9F09fC4cE57\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES,\n },\n paymaster: {\n status: \"deployed\",\n name: \"Sponsored Paymaster v2 (PepuSponsoredPaymasterV7, alias of paymasterV2)\",\n address: \"0xdb28528C9399C33c9A0297E8A62F39145acbC30D\",\n verifiedAt: PAYMASTER_V2_VERIFIED_AT,\n notes: PAYMASTER_MAINNET_NOTES,\n },\n kernelImplementation: {\n status: \"deployed\",\n name: \"Kernel v3.1 Implementation\",\n address: \"0xbAC849bB641841b44E965fb01A4Bf5F074F84B4d\",\n verifiedAt: VERIFIED_AT,\n notes: KERNEL_IMPL_NOTES,\n },\n kernelEcdsaSignerModule: {\n status: \"deployed\",\n name: \"Kernel ECDSA Signer (permission signer module)\",\n address: \"0x6A6F069E2a08c2468e7724Ab3250CdBFBA14D4FF\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES + \" Used as the signer in permission-validator session keys.\",\n },\n kernelCallPolicyV004: {\n status: \"deployed\",\n name: \"ZeroDev Call Policy v0.0.4\",\n address: \"0x9a52283276A0ec8740DF50bF01B28A80D880eaf2\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES + \" Scopes a session key to specific targets and selectors.\",\n },\n kernelTimestampPolicy: {\n status: \"deployed\",\n name: \"ZeroDev Timestamp Policy\",\n address: \"0xB9f8f524bE6EcD8C945b1b87f9ae5C192FdCE20F\",\n verifiedAt: VERIFIED_AT,\n notes: ZERODEV_NOTES + \" Bounds a session key to a validity window.\",\n },\n tapScore: {\n status: \"deployed\",\n name: \"TapScore\",\n address: \"0x261eA5971B93237a56990206A46Bc80318e4d078\",\n verifiedAt: VERIFIED_AT,\n notes: TAPSCORE_NOTES,\n },\n paymasterV1: {\n status: \"deployed\",\n name: \"Verifying Paymaster v1 (PepuVerifyingPaymasterV7) - RETIRED\",\n address: \"0x2B6FED323bFA24f0475f4e1Dd3C7F6Cc1f3ae8B0\",\n verifiedAt: VERIFIED_AT,\n retired: true,\n notes: PAYMASTER_V1_NOTES,\n },\n paymasterV2: {\n status: \"deployed\",\n name: \"Sponsored Paymaster v2 (PepuSponsoredPaymasterV7), canary\",\n address: \"0xdb28528C9399C33c9A0297E8A62F39145acbC30D\",\n verifiedAt: PAYMASTER_V2_VERIFIED_AT,\n notes: PAYMASTER_V2_NOTES,\n },\n },\n [pepuTestnet.id]: {\n create2Factory: {\n status: \"deployed\",\n name: \"CREATE2 Deterministic Deployer\",\n address: \"0x4e59b44847b379578588920cA78FbF26c0B4956C\",\n notes: \"Standard Nick's-method deterministic deployer.\",\n },\n multicall3: {\n status: \"pending\",\n name: \"Multicall3\",\n reason: MULTICALL3_PENDING_REASON,\n },\n permit2: {\n status: \"pending\",\n name: \"Permit2\",\n reason: PERMIT2_PENDING_REASON,\n },\n entryPoint06: {\n status: \"pending\",\n name: \"ERC-4337 EntryPoint v0.6\",\n reason: TESTNET_AA_PENDING_REASON,\n },\n entryPoint07: {\n status: \"pending\",\n name: \"ERC-4337 EntryPoint v0.7\",\n reason: TESTNET_AA_PENDING_REASON,\n },\n kernelFactory: {\n status: \"pending\",\n name: \"Kernel v3 Account Factory\",\n reason: TESTNET_AA_PENDING_REASON,\n },\n kernelMetaFactory: {\n status: \"pending\",\n name: \"Kernel MetaFactory\",\n reason: TESTNET_AA_PENDING_REASON,\n },\n ecdsaValidator: {\n status: \"pending\",\n name: \"Kernel ECDSA Validator\",\n reason: TESTNET_AA_PENDING_REASON,\n },\n paymaster: {\n status: \"pending\",\n name: \"Verifying Paymaster (PepuVerifyingPaymasterV7)\",\n reason: PAYMASTER_TESTNET_PENDING_REASON,\n },\n kernelImplementation: { status: \"pending\", name: \"Kernel v3.1 Implementation\", reason: TESTNET_AA_PENDING_REASON },\n kernelEcdsaSignerModule: { status: \"pending\", name: \"Kernel ECDSA Signer (permission signer module)\", reason: TESTNET_AA_PENDING_REASON },\n kernelCallPolicyV004: { status: \"pending\", name: \"ZeroDev Call Policy v0.0.4\", reason: TESTNET_AA_PENDING_REASON },\n kernelTimestampPolicy: { status: \"pending\", name: \"ZeroDev Timestamp Policy\", reason: TESTNET_AA_PENDING_REASON },\n tapScore: { status: \"pending\", name: \"TapScore\", reason: \"Deployed on mainnet only.\" },\n paymasterV1: { status: \"pending\", name: \"Verifying Paymaster v1 (PepuVerifyingPaymasterV7)\", reason: PAYMASTER_TESTNET_PENDING_REASON },\n paymasterV2: { status: \"pending\", name: \"Verifying Paymaster v2\", reason: PAYMASTER_TESTNET_PENDING_REASON },\n },\n};\n\n/** Look up one contract entry for a chain id. Returns `undefined` if the chain isn't in the registry. */\nexport function getContract(\n chainId: number,\n name: PepuContractName,\n): ContractEntry | undefined {\n return pepuContracts[chainId]?.[name];\n}\n\n/** List all tracked contract entries for a chain id, in registry order. */\nexport function listContracts(\n chainId: number,\n): readonly ContractEntry[] {\n const registry = pepuContracts[chainId];\n return registry ? Object.values(registry) : [];\n}\n\n/** Narrow a {@link ContractEntry} to {@link DeployedContract}. */\nexport function isDeployed(\n entry: ContractEntry | undefined,\n): entry is DeployedContract {\n return entry?.status === \"deployed\";\n}\n\n/** One row of the address table returned by {@link getPepuAddresses}. */\nexport interface PepuAddressRow {\n readonly key: PepuContractName;\n readonly name: string;\n readonly status: \"deployed\" | \"pending\";\n /** Present only when `status` is `\"deployed\"`. */\n readonly address?: Address;\n /** ISO date of the last `eth_getCode` check, when known. */\n readonly verifiedAt?: string;\n /** True for a deployed contract that is retired and must not be used (the v1 paymaster). */\n readonly retired?: true;\n /** Notes (deployed) or reason (pending). */\n readonly note: string;\n}\n\n/**\n * The full supporting-contract table for a chain, flattened for docs and\n * MCP rendering. **Returns an ARRAY of rows** (one {@link PepuAddressRow} per\n * contract, each carrying its own `key`), not an object keyed by contract name:\n * `getPepuAddresses().paymaster` is `undefined`. To look one contract up by name use\n * {@link getContract}, or {@link getPepuAddressMap} for the same rows keyed by name.\n * Pending entries carry no `address`.\n *\n * @example\n * ```ts\n * const rows = getPepuAddresses(); // PepuAddressRow[], mainnet by default\n * const live = rows.filter((r) => r.status === \"deployed\");\n * const paymaster = rows.find((r) => r.key === \"paymaster\");\n * ```\n */\nexport function getPepuAddresses(chainId: number = pepuMainnet.id): readonly PepuAddressRow[] {\n const registry = pepuContracts[chainId];\n if (!registry) return [];\n return (Object.keys(registry) as PepuContractName[]).map((key): PepuAddressRow => {\n const e = registry[key];\n return e.status === \"deployed\"\n ? {\n key,\n name: e.name,\n status: \"deployed\",\n address: e.address,\n ...(e.verifiedAt ? { verifiedAt: e.verifiedAt } : {}),\n ...(e.retired ? { retired: true as const } : {}),\n note: e.notes ?? \"\",\n }\n : { key, name: e.name, status: \"pending\", note: e.reason };\n });\n}\n\n/**\n * The same rows as {@link getPepuAddresses}, keyed by contract name instead of\n * returned as an array. An unknown chain yields an empty object.\n *\n * @example\n * ```ts\n * const map = getPepuAddressMap();\n * map.paymaster?.address; // Address | undefined\n * ```\n */\nexport function getPepuAddressMap(chainId: number = pepuMainnet.id): Partial<Record<PepuContractName, PepuAddressRow>> {\n const out: Partial<Record<PepuContractName, PepuAddressRow>> = {};\n for (const row of getPepuAddresses(chainId)) out[row.key] = row;\n return out;\n}\n"]}