@aastar/sdk 0.20.4 → 0.20.6

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 (92) hide show
  1. package/README.md +32 -24
  2. package/dist/BaseClient-BjbYP0cf.d.ts +88 -0
  3. package/dist/UserClient-AIIHB54I.js +6 -0
  4. package/dist/{UserClient-JMNNZT4P.js.map → UserClient-AIIHB54I.js.map} +1 -1
  5. package/dist/account.d.ts +48 -1
  6. package/dist/account.js +3 -3
  7. package/dist/admin.d.ts +62 -1
  8. package/dist/admin.js +3 -3
  9. package/dist/airaccount.d.ts +4 -2
  10. package/dist/airaccount.js +2 -4498
  11. package/dist/airaccount.js.map +1 -1
  12. package/dist/channel-CkRRbzT8.d.ts +77 -0
  13. package/dist/channel.d.ts +64 -1
  14. package/dist/channel.js +3 -3
  15. package/dist/{chunk-YSDWB6DO.js → chunk-4EZD7LPE.js} +30 -24
  16. package/dist/chunk-4EZD7LPE.js.map +1 -0
  17. package/dist/{chunk-TBDMSJVL.js → chunk-6QYXGMCR.js} +513 -322
  18. package/dist/chunk-6QYXGMCR.js.map +1 -0
  19. package/dist/{chunk-QNYP7RPI.js → chunk-7ARJ3OSU.js} +29 -21
  20. package/dist/chunk-7ARJ3OSU.js.map +1 -0
  21. package/dist/{chunk-KL6SCEIU.js → chunk-BN5WY5GM.js} +16 -14
  22. package/dist/chunk-BN5WY5GM.js.map +1 -0
  23. package/dist/{chunk-5TDDS3T5.js → chunk-FJ7XECC5.js} +4 -4
  24. package/dist/chunk-FJ7XECC5.js.map +1 -0
  25. package/dist/{chunk-4KRQXOTI.js → chunk-FUU7RIIA.js} +113 -102
  26. package/dist/chunk-FUU7RIIA.js.map +1 -0
  27. package/dist/{chunk-ZJLIKMCA.js → chunk-G3UJC4EL.js} +17 -8
  28. package/dist/chunk-G3UJC4EL.js.map +1 -0
  29. package/dist/{chunk-M5ORP2PM.js → chunk-KDH3UPKD.js} +10 -13
  30. package/dist/chunk-KDH3UPKD.js.map +1 -0
  31. package/dist/chunk-KISL64KW.js +4245 -0
  32. package/dist/chunk-KISL64KW.js.map +1 -0
  33. package/dist/{chunk-Y3KP7R2Y.js → chunk-LXWIPTPX.js} +5 -5
  34. package/dist/chunk-LXWIPTPX.js.map +1 -0
  35. package/dist/{chunk-NAPMVAVJ.js → chunk-MVEWJIPY.js} +124 -110
  36. package/dist/chunk-MVEWJIPY.js.map +1 -0
  37. package/dist/{chunk-LNICTATJ.js → chunk-PAABYXS6.js} +33 -40
  38. package/dist/chunk-PAABYXS6.js.map +1 -0
  39. package/dist/{chunk-O454V5ML.js → chunk-PKCHRXFR.js} +8 -12
  40. package/dist/chunk-PKCHRXFR.js.map +1 -0
  41. package/dist/{chunk-R2RATIK2.js → chunk-TENYCMJ3.js} +31 -31
  42. package/dist/chunk-TENYCMJ3.js.map +1 -0
  43. package/dist/{contract-addresses-VLAHHXOO.js → contract-addresses-N3TOL2WL.js} +3 -3
  44. package/dist/{contract-addresses-VLAHHXOO.js.map → contract-addresses-N3TOL2WL.js.map} +1 -1
  45. package/dist/core.d.ts +6930 -13
  46. package/dist/core.js +2 -2
  47. package/dist/dapp.d.ts +127 -1
  48. package/dist/dapp.js +12 -13
  49. package/dist/dapp.js.map +1 -1
  50. package/dist/doc-types-471vSmPO.d.ts +16 -0
  51. package/dist/enduser.d.ts +261 -1
  52. package/dist/enduser.js +4 -4
  53. package/dist/identity.d.ts +81 -1
  54. package/dist/identity.js +3 -3
  55. package/dist/index-B6SfEQxo.d.ts +47 -0
  56. package/dist/index.d.ts +55 -14
  57. package/dist/index.js +22 -22
  58. package/dist/index.js.map +1 -1
  59. package/dist/kms.d.ts +2986 -0
  60. package/dist/kms.js +5 -0
  61. package/dist/kms.js.map +1 -0
  62. package/dist/operator.d.ts +164 -1
  63. package/dist/operator.js +3 -3
  64. package/dist/paymaster.d.ts +312 -1
  65. package/dist/paymaster.js +3 -3
  66. package/dist/{index.node-GNYPFVZQ.js → src-L5SI5WNB.js} +4 -4
  67. package/dist/src-L5SI5WNB.js.map +1 -0
  68. package/dist/{dist-WMYQOYRO.js → src-X5MIV3EB.js} +5 -5
  69. package/dist/src-X5MIV3EB.js.map +1 -0
  70. package/dist/tier-router-DLiMxs0h.d.ts +321 -0
  71. package/dist/tokens.d.ts +64 -1
  72. package/dist/tokens.js +3 -3
  73. package/dist/x402.d.ts +373 -1
  74. package/dist/x402.js +3 -3
  75. package/package.json +19 -15
  76. package/LICENSE +0 -180
  77. package/dist/UserClient-JMNNZT4P.js +0 -6
  78. package/dist/chunk-4KRQXOTI.js.map +0 -1
  79. package/dist/chunk-5TDDS3T5.js.map +0 -1
  80. package/dist/chunk-KL6SCEIU.js.map +0 -1
  81. package/dist/chunk-LNICTATJ.js.map +0 -1
  82. package/dist/chunk-M5ORP2PM.js.map +0 -1
  83. package/dist/chunk-NAPMVAVJ.js.map +0 -1
  84. package/dist/chunk-O454V5ML.js.map +0 -1
  85. package/dist/chunk-QNYP7RPI.js.map +0 -1
  86. package/dist/chunk-R2RATIK2.js.map +0 -1
  87. package/dist/chunk-TBDMSJVL.js.map +0 -1
  88. package/dist/chunk-Y3KP7R2Y.js.map +0 -1
  89. package/dist/chunk-YSDWB6DO.js.map +0 -1
  90. package/dist/chunk-ZJLIKMCA.js.map +0 -1
  91. package/dist/dist-WMYQOYRO.js.map +0 -1
  92. package/dist/index.node-GNYPFVZQ.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../admin/dist/ProtocolGovernance.js"],"names":[],"mappings":"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","file":"chunk-5TDDS3T5.js","sourcesContent":["import { BaseClient } from '@aastar/core';\nimport { registryActions } from '@aastar/core'; // L2/L1 Actions\n/**\n * ProtocolGovernance - L3 Pattern\n *\n * Responsibilities:\n * 1. Global Protocol Parameter Management (Registry, EntryPoint)\n * 2. High-level Governance Operations (DAO Transfer, Upgrades)\n * 3. SuperPaymaster & Module Approval\n */\nexport class ProtocolGovernance extends BaseClient {\n registryAddress;\n entryPointAddress;\n constructor(config) {\n super(config);\n this.registryAddress = config.registryAddress;\n this.entryPointAddress = config.entryPointAddress;\n }\n // ===========================================\n // 1. Global Parameter Management\n // ===========================================\n /**\n * Update the Global Treasury Address where protocol fees are collected\n */\n async setTreasury(treasury, options) {\n // Note: Registry might not have direct setTreasury if it relies on SuperPaymaster's config.\n // Assuming Registry has ownership pointers or config pointers.\n // If Logic resides in SuperPaymaster, we would use superPaymasterActions.\n // Based on provided ABI/Actions, Registry manages Role Configs mainly.\n // Let's assume we are updating a System Role or similar global config if available,\n // OR adhering to what registryActions provides.\n // Checking registryActions... it has 'transferOwnership' but maybe not direct 'setTreasury' depending on version.\n // If strictly following ABI, we might need to update a specific Role Parameter (e.g. AOA/Super config).\n throw new Error(\"Method not mapped to RegistryABI v1. Please verify contract capabilities.\");\n }\n /**\n * Update the supported EntryPoint address\n */\n async updateEntryPoint(entryPoint, options) {\n // Placeholder: Real implementation depends on if Registry stores EntryPoint\n // registryActions typically provides getters. Setters usually restricted to Owner.\n // If action not available, throw standard error.\n throw new Error(\"Method not mapped to RegistryABI v1.\");\n }\n // ===========================================\n // 2. Role & Module Governance\n // ===========================================\n /**\n * Approve a new SuperPaymaster contract address\n */\n async setSuperPaymaster(paymaster, options) {\n const registry = registryActions(this.registryAddress);\n return await registry(this.client).setSuperPaymaster({\n paymaster,\n account: options?.account\n });\n }\n /**\n * Set the Staking contract address\n */\n async setStaking(staking, options) {\n const registry = registryActions(this.registryAddress);\n return await registry(this.client).setStaking({\n staking,\n account: options?.account\n });\n }\n /**\n * Configure a Role's parameters (Admin only).\n * Reads the current on-chain config first, then merges the provided overrides\n * and writes back the full struct via configureRole.\n */\n async configureRole(params, options) {\n const registry = registryActions(this.registryAddress)(this.client);\n const current = await registry.getRoleConfig({ roleId: params.roleId });\n return await registry.configureRole({\n roleId: params.roleId,\n config: {\n ...current,\n ...(params.minStake !== undefined && { minStake: params.minStake }),\n ...(params.ticketPrice !== undefined && { ticketPrice: params.ticketPrice }),\n ...(params.exitFeePercent !== undefined && { exitFeePercent: params.exitFeePercent }),\n ...(params.minExitFee !== undefined && { minExitFee: params.minExitFee }),\n },\n account: options?.account,\n });\n }\n // ===========================================\n // 3. Transfer to DAO (Exit/Upgrade)\n // ===========================================\n /**\n * Transfer Protocol Ownership to a DAO (Multisig/Timelock)\n * This is the final step of \"Protocol Admin\" lifecycle.\n */\n async transferToDAO(daoAddress, options) {\n const registry = registryActions(this.registryAddress);\n return await registry(this.client).transferOwnership({\n newOwner: daoAddress,\n account: options?.account\n });\n }\n // ===========================================\n // 4. Query Capabilities\n // ===========================================\n async getProtocolParams() {\n const registry = registryActions(this.registryAddress)(this.client); // Read-only via Client\n // Parallel fetch\n const [sp, staking] = await Promise.all([\n registry.SUPER_PAYMASTER(),\n registry.GTOKEN_STAKING()\n ]);\n return {\n minStake: 0n, // Global default not directly exposed, usually per role\n treasury: await registry.owner(), // Approximation for now\n entryPoint: this.entryPointAddress,\n superPaymaster: sp\n };\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../operator/dist/PaymasterOperatorClient.js","../../operator/dist/ProtocolClient.js","../../operator/dist/OperatorLifecycle.js"],"names":["ProposalState"],"mappings":"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","file":"chunk-KL6SCEIU.js","sourcesContent":["import { parseEther } from 'viem';\nimport { BaseClient, PaymasterABI } from '@aastar/core';\nimport { superPaymasterActions, tokenActions, paymasterActions, registryActions, paymasterFactoryActions } from '@aastar/core';\n/**\n * Client for Paymaster Operators (ROLE_PAYMASTER_SUPER)\n */\nexport class PaymasterOperatorClient extends BaseClient {\n superPaymasterAddress;\n tokenAddress;\n ethUsdPriceFeed;\n xpntsFactory;\n constructor(config) {\n super(config);\n this.superPaymasterAddress = config.superPaymasterAddress;\n this.tokenAddress = config.tokenAddress;\n this.ethUsdPriceFeed = config.ethUsdPriceFeedAddress || '0x694AA1769357215DE4FAC081bf1f309aDC325306'; // Default Sepolia\n this.xpntsFactory = config.xpntsFactoryAddress || '0x0000000000000000000000000000000000000000'; // Should be provided\n }\n // ========================================\n // 0. 注册与入驻 (One-Stop Registration)\n // ========================================\n /**\n * Register as SuperPaymaster Operator (one-stop API).\n * This method handles all necessary steps:\n * 1. Checks prerequisites (must have ROLE_COMMUNITY)\n * 2. Checks and approves GToken to GTokenStaking\n * 3. Registers ROLE_PAYMASTER_SUPER\n * 4. Optionally deposits collateral to SuperPaymaster\n *\n * @param params Registration parameters\n * @param options Transaction options\n * @returns Transaction hash of role registration\n */\n async registerAsSuperPaymasterOperator(params, options) {\n try {\n const registryAddr = this.requireRegistry();\n const gTokenAddr = this.requireGToken();\n const gTokenStakingAddr = this.requireGTokenStaking();\n const registry = registryActions(registryAddr);\n const gToken = tokenActions();\n const publicClient = this.getStartPublicClient();\n // 1. Check prerequisites\n const ROLE_COMMUNITY = await registry(publicClient).ROLE_COMMUNITY();\n const hasCommunity = await registry(publicClient).hasRole({\n user: this.getAddress(),\n roleId: ROLE_COMMUNITY\n });\n if (!hasCommunity) {\n throw new Error('Must have ROLE_COMMUNITY before registering as SuperPaymaster operator');\n }\n // 2. Check if already has role\n const ROLE_PAYMASTER_SUPER = await registry(publicClient).ROLE_PAYMASTER_SUPER();\n const hasSuper = await registry(publicClient).hasRole({\n user: this.getAddress(),\n roleId: ROLE_PAYMASTER_SUPER\n });\n if (hasSuper) {\n // Still handle deposit if requested\n if (params?.depositAmount) {\n return this.depositCollateral(params.depositAmount, options);\n }\n throw new Error('Already registered as SuperPaymaster operator');\n }\n // 3. Prepare stake amount (default 50 GToken as per Registry config)\n const stakeAmount = params?.stakeAmount || parseEther('50');\n // 4. Check and approve GToken to GTokenStaking\n const allowance = await gToken(publicClient).allowance({\n token: gTokenAddr,\n owner: this.getAddress(),\n spender: gTokenStakingAddr\n });\n if (allowance < stakeAmount) {\n const approveHash = await gToken(this.client).approve({\n token: gTokenAddr,\n spender: gTokenStakingAddr,\n amount: stakeAmount * 2n, // Approve 2x for future use\n account: options?.account\n });\n await publicClient.waitForTransactionReceipt({ hash: approveHash });\n }\n // 5. Register ROLE_PAYMASTER_SUPER\n const registerHash = await registry(this.client).registerRoleSelf({\n roleId: ROLE_PAYMASTER_SUPER,\n data: '0x', // SuperPaymaster role doesn't need special data\n account: options?.account\n });\n // Wait for registration to complete\n await publicClient.waitForTransactionReceipt({ hash: registerHash });\n // 6. Optional: Deposit collateral to SuperPaymaster\n if (params?.depositAmount) {\n await this.depositCollateral(params.depositAmount, options);\n }\n return registerHash;\n }\n catch (error) {\n throw error;\n }\n }\n /**\n * Deploy a new Paymaster V4 and Register as AOA Operator (one-stop API).\n * This method handles:\n * 1. Checks prerequisites (ROLE_COMMUNITY)\n * 2. Predicts new Paymaster address\n * 3. Deploys Paymaster V4 via Factory\n * 4. Registers ROLE_PAYMASTER_AOA with staking\n *\n * @param params Deployment parameters\n * @param options Transaction options\n * @returns Object containing new paymaster address and transaction hashes\n */\n async deployAndRegisterPaymasterV4(params, options) {\n try {\n const registryAddr = this.requireRegistry();\n const gTokenAddr = this.requireGToken();\n const gTokenStakingAddr = this.requireGTokenStaking();\n const factoryAddr = this.requirePaymasterFactory();\n const registry = registryActions(registryAddr);\n const gToken = tokenActions();\n const factory = paymasterFactoryActions(factoryAddr);\n const publicClient = this.getStartPublicClient();\n const account = options?.account || this.client.account || this.getAddress();\n const accountAddr = typeof account === 'string' ? account : account.address;\n // 1. Check prerequisites (ROLE_COMMUNITY)\n const ROLE_COMMUNITY = await registry(publicClient).ROLE_COMMUNITY();\n const hasCommunity = await registry(publicClient).hasRole({\n user: accountAddr,\n roleId: ROLE_COMMUNITY\n });\n if (!hasCommunity) {\n throw new Error('Must have ROLE_COMMUNITY before deploying Paymaster V4');\n }\n // 2. Deployment (Idempotent Check)\n const existingPaymaster = await factory(publicClient).getPaymaster({ owner: accountAddr });\n let deployHash = '0x0000000000000000000000000000000000000000000000000000000000000000';\n let paymasterAddress;\n if (existingPaymaster && existingPaymaster !== '0x0000000000000000000000000000000000000000') {\n console.log(` ℹ️ Paymaster already deployed at: ${existingPaymaster}`);\n paymasterAddress = existingPaymaster;\n }\n else {\n console.log(' 🛠️ Deploying Paymaster V4 with args:', {\n entryPoint: this.requireEntryPoint(),\n owner: accountAddr,\n priceFeed: this.ethUsdPriceFeed,\n factory: factoryAddr\n });\n const { encodeFunctionData } = await import('viem');\n const initData = encodeFunctionData({\n abi: PaymasterABI,\n functionName: 'initialize',\n args: [\n this.requireEntryPoint(), // EntryPoint v0.7\n accountAddr,\n accountAddr, // Treasury defaults to owner\n this.ethUsdPriceFeed,\n 200n, // serviceFeeRate (2%)\n parseEther('0.1'), // maxGasCostCap\n 3600n // priceStalenessThreshold (1 hour)\n ]\n });\n deployHash = await factory(this.client).deployPaymaster({\n version: params?.version,\n initData,\n account\n });\n await publicClient.waitForTransactionReceipt({ hash: deployHash });\n paymasterAddress = await factory(publicClient).getPaymaster({ owner: accountAddr });\n }\n if (!paymasterAddress || paymasterAddress === '0x0000000000000000000000000000000000000000') {\n throw new Error('Failed to retrieve Paymaster address from Factory');\n }\n // 3. Register ROLE_PAYMASTER_AOA\n const ROLE_PAYMASTER_AOA = await registry(publicClient).ROLE_PAYMASTER_AOA();\n const hasAOA = await registry(publicClient).hasRole({\n user: accountAddr,\n roleId: ROLE_PAYMASTER_AOA\n });\n if (hasAOA) {\n return { paymasterAddress, deployHash, registerHash: '0x0000000000000000000000000000000000000000000000000000000000000000' };\n }\n const stakeAmount = params?.stakeAmount || parseEther('30');\n const allowance = await gToken(publicClient).allowance({\n token: gTokenAddr,\n owner: accountAddr,\n spender: gTokenStakingAddr\n });\n if (allowance < stakeAmount) {\n const approveHash = await gToken(this.client).approve({\n token: gTokenAddr,\n spender: gTokenStakingAddr,\n amount: stakeAmount * 2n,\n account: account\n });\n await publicClient.waitForTransactionReceipt({ hash: approveHash });\n }\n const { encodeAbiParameters, parseAbiParameters } = await import('viem');\n let roleData = '0x';\n if (stakeAmount > 0) {\n roleData = encodeAbiParameters(parseAbiParameters('uint256'), [stakeAmount]);\n }\n const registerHash = await registry(this.client).registerRoleSelf({\n roleId: ROLE_PAYMASTER_AOA,\n data: roleData,\n account: account\n });\n await publicClient.waitForTransactionReceipt({ hash: registerHash });\n return {\n paymasterAddress,\n deployHash,\n registerHash\n };\n }\n catch (error) {\n throw error;\n }\n }\n /**\n * Deposit collateral (aPNTs/GToken) to SuperPaymaster.\n * This is a helper method used by registerAsSuperPaymasterOperator.\n */\n async depositCollateral(amount, options) {\n try {\n const pm = superPaymasterActions(this.superPaymasterAddress);\n const publicClient = this.getStartPublicClient();\n // V3.7: Dynamically fetch the token expected by SuperPaymaster\n const depositToken = await pm(publicClient).APNTS_TOKEN();\n const token = tokenActions();\n // Approve SuperPaymaster to spend the token (usually aPNTs on Sepolia)\n const allowance = await token(publicClient).allowance({\n token: depositToken,\n owner: this.getAddress(),\n spender: this.superPaymasterAddress\n });\n if (allowance < amount) {\n const approveHash = await token(this.client).approve({\n token: depositToken,\n spender: this.superPaymasterAddress,\n amount,\n account: options?.account\n });\n await publicClient.waitForTransactionReceipt({ hash: approveHash });\n }\n // Deposit to SuperPaymaster\n return pm(this.client).deposit({\n amount,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n /**\n * Configure operator parameters (Token, Treasury).\n * Exchange rate is now read live from xPNTsToken.exchangeRate() at runtime.\n * If parameters are undefined, existing values are preserved.\n */\n async configureOperator(xPNTsToken, treasury, options) {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n const publicClient = this.getStartPublicClient();\n // Fetch current config to preserve missing values\n const currentConfig = await sp(publicClient).operators({ operator: this.getAddress() });\n const currentToken = currentConfig.xPNTsToken;\n const currentTreasury = currentConfig.treasury;\n return await sp(this.client).configureOperator({\n xPNTsToken: xPNTsToken || currentToken,\n opTreasury: treasury || currentTreasury,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n async withdrawCollateral(to, amount, options) {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).withdrawTo({\n to,\n amount,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n async isOperator(operator) {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n const config = await sp(this.getStartPublicClient()).operators({ operator });\n return config.isConfigured;\n }\n catch (error) {\n return false;\n }\n }\n async getOperatorDetails(operator) {\n try {\n const target = operator || this.getAddress();\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.getStartPublicClient()).operators({ operator: target });\n }\n catch (error) {\n throw error;\n }\n }\n async initiateExit(options) {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).unlockStake({\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n async withdrawStake(to, options) {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).withdrawStake({\n to,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n // ========================================\n // 3. 支付代币管理 (基于 PaymasterActions)\n // ========================================\n async addGasToken(token, price, options) {\n try {\n const pm = paymasterActions(this.superPaymasterAddress);\n return await pm(this.client).setTokenPrice({\n token,\n price,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n async getTokenPrice(token) {\n try {\n const pm = paymasterActions(this.superPaymasterAddress);\n return await pm(this.getStartPublicClient()).tokenPrices({ token });\n }\n catch (error) {\n throw error;\n }\n }\n async setupPaymasterDeposit(params, options) {\n try {\n const pm = paymasterActions(params.paymaster);\n return await pm(this.client).depositFor({\n user: params.user,\n token: params.token,\n amount: params.amount,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n}\n","import { BaseClient } from '@aastar/core';\nimport { dvtActions, aggregatorActions, superPaymasterActions } from '@aastar/core';\nexport var ProposalState;\n(function (ProposalState) {\n ProposalState[ProposalState[\"Pending\"] = 0] = \"Pending\";\n ProposalState[ProposalState[\"Active\"] = 1] = \"Active\";\n ProposalState[ProposalState[\"Canceled\"] = 2] = \"Canceled\";\n ProposalState[ProposalState[\"Defeated\"] = 3] = \"Defeated\";\n ProposalState[ProposalState[\"Succeeded\"] = 4] = \"Succeeded\";\n ProposalState[ProposalState[\"Queued\"] = 5] = \"Queued\";\n ProposalState[ProposalState[\"Expired\"] = 6] = \"Expired\";\n ProposalState[ProposalState[\"Executed\"] = 7] = \"Executed\";\n})(ProposalState || (ProposalState = {}));\n/**\n * Client for Protocol Governors and Validators (Infrastructure)\n */\nexport class ProtocolClient extends BaseClient {\n dvtValidatorAddress;\n blsAggregatorAddress;\n superPaymasterAddress;\n constructor(config) {\n super(config);\n this.dvtValidatorAddress = config.dvtValidatorAddress;\n this.blsAggregatorAddress = config.blsAggregatorAddress;\n this.superPaymasterAddress = config.superPaymasterAddress;\n }\n // ========================================\n // 1. 提案管理 (DVT)\n // ========================================\n /**\n * Create a new proposal\n */\n async createProposal(target, calldata, description, options) {\n try {\n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n // Mapping general \"createProposal\" to \"createSlashProposal\" for now\n // Assuming Governance uses Validator logic or this Client is for Slash.\n // Using createSlashProposal as the available action.\n return await dvt.createSlashProposal({\n operator: target,\n level: 1, // Default level\n reason: description,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n async signProposal(proposalId, signature = '0x', options) {\n try {\n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n return await dvt.signSlashProposal({\n proposalId,\n signature,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n /**\n * Execute a proposal with collected signatures\n */\n async executeWithProof(proposalId, signatures, options) {\n try {\n // Mock proof generation logic or placeholder\n const proof = '0x';\n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n return await dvt.executeSlashWithProof({\n proposalId,\n repUsers: [], // Needs real data in production\n newScores: [],\n epoch: 0n,\n proof,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n // ========================================\n // 2. 验证器管理 / BLS\n // ========================================\n async registerBLSKey(publicKey, options) {\n try {\n if (!this.blsAggregatorAddress) {\n throw new Error('BLS Aggregator address required for this client');\n }\n // Aggregator actions now handle the type internally or via mapping\n const agg = aggregatorActions(this.blsAggregatorAddress)(this.client);\n return await agg.registerBLSPublicKey({\n validator: this.getAddress(),\n publicKey,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n // ========================================\n // 3. 全局参数管理 (Admin)\n // ========================================\n async setProtocolFee(bps, options) {\n try {\n if (!this.superPaymasterAddress) {\n throw new Error('SuperPaymaster address required for this client');\n }\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).setProtocolFee({\n newFeeBPS: bps,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n async setTreasury(treasury, options) {\n try {\n if (!this.superPaymasterAddress) {\n throw new Error('SuperPaymaster address required for this client');\n }\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).setTreasury({\n treasury,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n}\n","import { PaymasterOperatorClient } from './PaymasterOperatorClient.js';\nimport { tokenActions, registryActions } from '@aastar/core'; // L2/L1 Actions\n/**\n * OperatorLifecycle - L3 Pattern\n *\n * Responsibilities:\n * 1. Managing the complete lifecycle of a Paymaster Operator\n * 2. Unifying setup (onboard), operation (config), and exit (withdraw)\n */\nexport class OperatorLifecycle extends PaymasterOperatorClient {\n constructor(config) {\n super(config);\n }\n // ===========================================\n // 1. Setup Phase (Onboarding)\n // ===========================================\n /**\n * Check if the account is ready to become an operator\n * (e.g., has GToken, has ROLE_COMMUNITY, etc.)\n */\n async checkReadiness() {\n const isOp = await this.isOperator(this.getAddress());\n // For SuperPaymaster, balance is 'aPNTsBalance' (Collateral)\n const details = await this.getOperatorDetails();\n const balance = details.aPNTsBalance || 0n;\n return {\n isConfigured: isOp,\n isActive: isOp, // Simplification\n balance\n };\n }\n /**\n * One-click Setup: Register + Deposit + Deploy Node\n * Wraps existing registerAsSuperPaymasterOperator or deployAndRegisterPaymasterV4\n */\n async setupNode(params, options) {\n const hashes = [];\n if (params.type === 'SUPER') {\n const h = await this.registerAsSuperPaymasterOperator({\n stakeAmount: params.stakeAmount,\n depositAmount: params.depositAmount\n }, options);\n hashes.push(h);\n // Fetch Token Address and Configure\n const factory = await import('@aastar/core').then(m => m.xPNTsFactoryActions(this.xpntsFactory)(this.getStartPublicClient()));\n const token = await factory.getTokenAddress({ community: this.getAddress() });\n if (token && token !== '0x0000000000000000000000000000000000000000') {\n const hConfig = await this.configureOperator(token, this.getAddress(), // Default treasury to self\n options);\n hashes.push(hConfig);\n }\n }\n else {\n const result = await this.deployAndRegisterPaymasterV4({\n stakeAmount: params.stakeAmount\n }, options);\n hashes.push(result.deployHash);\n hashes.push(result.registerHash);\n }\n return hashes;\n }\n // ===========================================\n // 2. Operational Phase (Config & Funds)\n // ===========================================\n // Inherits: addGasToken, configureOperator, depositCollateral from PaymasterOperatorClient\n async getOperatorStats() {\n return await this.getOperatorDetails();\n }\n // ===========================================\n // 3. Exit Phase (Withdraw & Leave)\n // ===========================================\n /**\n * Start the exit process: Unstake from Registry/SuperPaymaster and Unlock funds\n */\n async initiateExit(options) {\n // 1. Unlock Stake from SuperPaymaster (if applicable)\n return await super.initiateExit(options);\n }\n /**\n * Finalize exit: Withdraw all funds (Collateral + Rewards)\n */\n async withdrawAllFunds(to, options) {\n const recipient = to || this.getAddress();\n const hashes = [];\n // 1. Withdraw Collateral from SuperPaymaster (if any)\n // Note: We need to know the balance to withdraw exact amount.\n // For current L3 pattern, we assume the user tracks it or we fetch it.\n const stats = await this.checkReadiness();\n if (stats.balance > 0n) {\n const hCol = await this.withdrawCollateral(recipient, stats.balance, options);\n hashes.push(hCol);\n }\n // 2. Exit Role in Registry (Unstake GToken)\n // This will fail if lock duration > 0 and not yet cooldown.\n // Or it will initiate cooldown.\n const client = this.getStartPublicClient();\n const registry = registryActions(this.registryAddress); // Use local registry address\n const registryWriter = registryActions(this.registryAddress)(this.client);\n // Check if we have the role\n // For Super Operator\n const ROLE_PAYMASTER_SUPER = await registry(client).ROLE_PAYMASTER_SUPER();\n const hasRole = await registry(client).hasRole({ user: this.getAddress(), roleId: ROLE_PAYMASTER_SUPER });\n if (hasRole) {\n const hExit = await registryWriter.exitRole({ roleId: ROLE_PAYMASTER_SUPER, account: options?.account });\n hashes.push(hExit);\n }\n return hashes;\n }\n // Helper: Get GToken Balance\n async getTokenBalance() {\n if (!this.tokenAddress)\n return 0n;\n const token = tokenActions()(this.getStartPublicClient());\n return await token.balanceOf({ token: this.tokenAddress, account: this.getAddress() });\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../enduser/dist/UserClient.js"],"names":["encodeFunctionData"],"mappings":"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","file":"chunk-LNICTATJ.js","sourcesContent":["import { encodeFunctionData } from 'viem';\nimport { BaseClient } from '@aastar/core';\nimport { accountActions, sbtActions, tokenActions, entryPointActions, stakingActions, registryActions } from '@aastar/core';\nimport { bundlerActions } from 'viem/account-abstraction';\nexport class UserClient extends BaseClient {\n accountAddress;\n sbtAddress;\n entryPointAddress;\n gTokenStakingAddress;\n registryAddress;\n gTokenAddress;\n bundlerClient;\n constructor(config) {\n super(config);\n this.bundlerClient = config.bundlerClient;\n this.accountAddress = config.accountAddress;\n this.sbtAddress = config.sbtAddress;\n this.entryPointAddress = config.entryPointAddress;\n this.gTokenStakingAddress = config.gTokenStakingAddress;\n this.registryAddress = config.registryAddress;\n this.gTokenAddress = config.gTokenAddress;\n }\n /**\n * Deploy a new Smart Account (Supports multiple factory types)\n * Static helper to facilitate onboarding before instantiating the UserClient.\n *\n * @param client - WalletClient to sign the deployment transaction\n * @param params - Deployment parameters\n * @returns Object containing the deployed account address and transaction hash\n */\n static async deployAccount(client, params) {\n const { accountFactoryActions, SimpleAccountFactoryABI } = await import('@aastar/core');\n // 1. Determine Factory ABI (Ensure it's the raw ABI array)\n let abi = params.customAbi || (SimpleAccountFactoryABI?.abi || SimpleAccountFactoryABI);\n // In the future, we can add more built-in ABIs here based on accountType\n // if (params.accountType === 'kernel') abi = KernelFactoryABI;\n const factoryAddr = params.factoryAddress || '0x9406Cc6185a346906296840746125a0E44976454'; // Default v0.7 Factory\n const salt = params.salt || 0n;\n // Use publicClient for reading if provided, otherwise fallback to client (which might be a Full Client)\n const readClient = params.publicClient || client;\n // Use the generic actions with the selected ABI\n const factoryRead = accountFactoryActions(factoryAddr, abi)(readClient);\n const factoryWrite = accountFactoryActions(factoryAddr, abi)(client);\n // 1. Predict Address\n const accountAddress = await factoryRead.getAddress({\n owner: params.owner,\n salt\n });\n // 2. Deploy\n try {\n const hash = await factoryWrite.createAccount({\n owner: params.owner,\n salt,\n account: client.account\n });\n return { accountAddress, hash };\n }\n catch (error) {\n const messageParts = [\n error?.shortMessage,\n error?.message,\n error?.details,\n error?.cause?.shortMessage,\n error?.cause?.message,\n error?.cause?.details,\n error?.cause?.cause?.shortMessage,\n error?.cause?.cause?.message\n ].filter(Boolean);\n const message = messageParts.join(' ');\n if (message.includes('gas required exceeds allowance') || message.includes('intrinsic gas too low')) {\n const data = encodeFunctionData({\n abi,\n functionName: 'createAccount',\n args: [params.owner, salt]\n });\n const hash = await client.sendTransaction({\n to: factoryAddr,\n data,\n gas: 2000000n,\n account: client.account\n });\n return { accountAddress, hash };\n }\n throw error;\n }\n }\n // ========================================\n // 1. 账户基本操作 (基于 L1 simpleAccountActions)\n // ========================================\n /**\n * Get the nonce of the account from EntryPoint (more reliable for 4337)\n */\n async getNonce(key = 0n) {\n try {\n if (!this.entryPointAddress) {\n throw new Error('EntryPoint address required for this client');\n }\n const entryPoint = entryPointActions(this.entryPointAddress);\n return await entryPoint(this.getStartPublicClient()).getNonce({\n sender: this.accountAddress,\n key\n });\n }\n catch (error) {\n throw error;\n }\n }\n /**\n * Get the owner of the AA account\n */\n async getOwner() {\n try {\n const account = accountActions(this.accountAddress);\n return await account(this.getStartPublicClient()).owner();\n }\n catch (error) {\n throw error;\n }\n }\n /**\n * Execute a transaction from the AA account\n */\n async execute(target, value, data, options) {\n try {\n const account = accountActions(this.accountAddress);\n // Use standard AA execute\n return await account(this.client).execute({\n dest: target,\n value,\n func: data,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n /**\n * Execute a batch of transactions\n */\n async executeBatch(targets, values, datas, options) {\n try {\n const account = accountActions(this.accountAddress);\n return await account(this.client).executeBatch({\n dest: targets,\n value: values,\n func: datas,\n account: options?.account\n });\n }\n catch (error) {\n throw error;\n }\n }\n // ========================================\n // identity 与 SBT (基于 L1 sbtActions)\n // ========================================\n /**\n * Get user's SBT balance\n */\n async getSBTBalance() {\n try {\n if (!this.sbtAddress)\n throw new Error('SBT address required for this client');\n const sbt = sbtActions(this.sbtAddress);\n return await sbt(this.getStartPublicClient()).balanceOf({\n owner: this.accountAddress\n });\n }\n catch (error) {\n throw error;\n }\n }\n async mintSBT(roleId, options) {\n try {\n if (!this.sbtAddress)\n throw new Error('SBT address required for this client');\n const { encodeFunctionData } = await import('viem');\n const data = encodeFunctionData({\n abi: [{ name: 'mintForRole', type: 'function', inputs: [{ name: 'user', type: 'address' }, { name: 'roleId', type: 'bytes32' }, { name: 'roleData', type: 'bytes' }], outputs: [{ type: 'uint256' }] }],\n functionName: 'mintForRole',\n args: [this.accountAddress, roleId, '0x']\n });\n return await this.execute(this.sbtAddress, 0n, data, options);\n }\n catch (error) {\n throw error;\n }\n }\n // ========================================\n // 3. 资产管理 (基于 L1 tokenActions)\n // ========================================\n async transferToken(token, to, amount, options) {\n try {\n const { encodeFunctionData } = await import('viem');\n const data = encodeFunctionData({\n abi: [{ name: 'transfer', type: 'function', inputs: [{ name: 'to', type: 'address' }, { name: 'amount', type: 'uint256' }], outputs: [{ type: 'bool' }] }],\n functionName: 'transfer',\n args: [to, amount]\n });\n return await this.execute(token, 0n, data, options);\n }\n catch (error) {\n throw error;\n }\n }\n /**\n * Get Token Balance\n */\n async getTokenBalance(token) {\n try {\n const tokens = tokenActions()(this.getStartPublicClient());\n return await tokens.balanceOf({\n token,\n account: this.accountAddress\n });\n }\n catch (error) {\n throw error;\n }\n }\n // ========================================\n // 4. 委托与质押 (Delegation & Staking)\n // ========================================\n async stakeForRole(roleId, amount, options) {\n try {\n if (!this.gTokenStakingAddress)\n throw new Error('GTokenStaking address required for this client');\n const { encodeFunctionData } = await import('viem');\n const data = encodeFunctionData({\n abi: [{ name: 'lockStake', type: 'function', inputs: [{ name: 'user', type: 'address' }, { name: 'roleId', type: 'bytes32' }, { name: 'stakeAmount', type: 'uint256' }, { name: 'entryBurn', type: 'uint256' }, { name: 'payer', type: 'address' }], outputs: [] }],\n functionName: 'lockStake',\n args: [this.accountAddress, roleId, amount, 0n, this.accountAddress]\n });\n return await this.execute(this.gTokenStakingAddress, 0n, data, options);\n }\n catch (error) {\n throw error;\n }\n }\n async unstakeFromRole(roleId, options) {\n try {\n if (!this.gTokenStakingAddress)\n throw new Error('GTokenStaking address required for this client');\n const { encodeFunctionData } = await import('viem');\n const data = encodeFunctionData({\n abi: [{ name: 'unlockAndTransfer', type: 'function', inputs: [{ name: 'user', type: 'address' }, { name: 'roleId', type: 'bytes32' }], outputs: [{ name: 'netAmount', type: 'uint256' }] }],\n functionName: 'unlockAndTransfer',\n args: [this.accountAddress, roleId]\n });\n return await this.execute(this.gTokenStakingAddress, 0n, data, options);\n }\n catch (error) {\n throw error;\n }\n }\n /**\n * Get staked balance for a specific role\n */\n async getStakedBalance(roleId) {\n try {\n if (!this.gTokenStakingAddress)\n throw new Error('GTokenStaking address required for this client');\n const staking = stakingActions(this.gTokenStakingAddress);\n return await staking(this.getStartPublicClient()).getLockedStake({\n user: this.accountAddress,\n roleId\n });\n }\n catch (error) {\n throw error;\n }\n }\n // ========================================\n // 5. 生命周期管理 (Lifecycle)\n // ========================================\n async exitRole(roleId, options) {\n try {\n if (!this.registryAddress)\n throw new Error('Registry address required for this client');\n const { encodeFunctionData } = await import('viem');\n const data = encodeFunctionData({\n abi: [{ name: 'exitRole', type: 'function', inputs: [{ name: 'roleId', type: 'bytes32' }], outputs: [] }],\n functionName: 'exitRole',\n args: [roleId]\n });\n return await this.execute(this.registryAddress, 0n, data, options);\n }\n catch (error) {\n throw error;\n }\n }\n async leaveCommunity(community, options) {\n try {\n if (!this.sbtAddress)\n throw new Error('SBT address required for this client');\n const { encodeFunctionData } = await import('viem');\n const data = encodeFunctionData({\n abi: [{ name: 'leaveCommunity', type: 'function', inputs: [{ name: 'comm', type: 'address' }], outputs: [] }],\n functionName: 'leaveCommunity',\n args: [community]\n });\n return await this.execute(this.sbtAddress, 0n, data, options);\n }\n catch (error) {\n throw error;\n }\n }\n /**\n * Register as EndUser (One-click: Approve + Register)\n * Handles GToken approval to Staking contract and Role registration.\n */\n async registerAsEndUser(communityAddress, stakeAmount, options) {\n try {\n if (!this.registryAddress)\n throw new Error('Registry address required for this client');\n if (!this.gTokenStakingAddress)\n throw new Error('GTokenStaking address required for this client');\n if (!this.gTokenAddress)\n throw new Error('GToken address required for this client');\n const { encodeAbiParameters, keccak256, toBytes, parseEther } = await import('viem');\n const ROLE_ENDUSER = keccak256(toBytes(\"ENDUSER\"));\n // Correct mapping for Registry Actions\n const registry = registryActions(this.registryAddress);\n const publicClient = this.getStartPublicClient();\n const tokens = tokenActions()(publicClient);\n // 1. Check Allowance\n const allowance = await tokens.allowance({\n token: this.gTokenAddress,\n owner: this.accountAddress,\n spender: this.gTokenStakingAddress\n });\n console.log(` 🔍 Debug Allowance: Account=${this.accountAddress}, Allowance=${allowance}, Needed=${stakeAmount}`);\n const txs = [];\n if (allowance < stakeAmount) {\n const approveData = encodeFunctionData({\n abi: [{ name: 'approve', type: 'function', inputs: [{ type: 'address' }, { type: 'uint256' }], outputs: [{ type: 'bool' }], stateMutability: 'nonpayable' }],\n functionName: 'approve',\n args: [this.gTokenStakingAddress, parseEther('1000')]\n });\n txs.push({ target: this.gTokenAddress, value: 0n, data: approveData });\n }\n // 2. Construct Register Call\n // struct EndUserRoleData { address account; address community; string avatarURI; string ensName; uint256 stakeAmount; }\n const roleData = encodeAbiParameters([\n { type: 'address', name: 'account' },\n { type: 'address', name: 'community' },\n { type: 'string', name: 'avatarURI' },\n { type: 'string', name: 'ensName' },\n { type: 'uint256', name: 'stakeAmount' }\n ], [\n this.accountAddress,\n communityAddress,\n '',\n '',\n stakeAmount\n ]);\n const registerData = encodeFunctionData({\n abi: [{ name: 'registerRoleSelf', type: 'function', inputs: [{ type: 'bytes32' }, { type: 'bytes' }], outputs: [{ type: 'uint256' }], stateMutability: 'nonpayable' }],\n functionName: 'registerRoleSelf',\n args: [ROLE_ENDUSER, roleData]\n });\n txs.push({ target: this.registryAddress, value: 0n, data: registerData });\n console.log(` 🔍 Debug Onboard: Community=${communityAddress}, AA=${this.accountAddress}, Stake=${stakeAmount}`);\n console.log(` 🔍 Debug Batch: Txs=${txs.length}, Targets=${txs.map(t => t.target)}`);\n // 3. Execute separately for stability (Batch execution has issues on current AA deployment)\n const hashes = [];\n for (const tx of txs) {\n const h = await this.execute(tx.target, tx.value, tx.data, options);\n hashes.push(h);\n // Wait for each tx to ensure sequential state updates (approve -> register)\n await this.getStartPublicClient().waitForTransactionReceipt({ hash: h });\n }\n return hashes[hashes.length - 1];\n }\n catch (error) {\n throw error;\n }\n }\n // ========================================\n // 6. Gasless Execution (Advanced)\n // ========================================\n /**\n * Execute a transaction with Gasless Sponsorship\n */\n async executeGasless(params, options) {\n try {\n const client = this.bundlerClient ? this.bundlerClient.extend(bundlerActions) : this.client.extend(bundlerActions);\n const ep = this.requireEntryPoint();\n // 1. Prepare Call Data\n const callData = encodeFunctionData({\n abi: [{ name: 'execute', type: 'function', inputs: [{ name: 'dest', type: 'address' }, { name: 'value', type: 'uint256' }, { name: 'func', type: 'bytes' }], outputs: [] }],\n functionName: 'execute',\n args: [params.target, params.value, params.data]\n });\n // 3. Delegate to PaymasterClient for v0.7 Gasless Submission\n // This ensures we follow the exact same logic as successful demo scripts\n // We dynamic import to avoid circular dependencies if any\n const { PaymasterClient: SDKPaymasterClient } = await import('@aastar/paymaster');\n let verificationGasLimit;\n let paymasterVerificationGasLimit;\n let paymasterPostOpGasLimit;\n let autoEstimate = true;\n if (params.paymasterType === 'Super') {\n // Apply Smart Buffer Strategy via PaymasterUtils (Same as SuperPaymasterClient)\n const { tuneGasLimit } = await import('@aastar/paymaster');\n const est = await SDKPaymasterClient.estimateUserOperationGas(this.client, this.client, this.accountAddress, ep, params.paymaster, params.target, // placeholder\n this.bundlerClient?.transport?.url || this.client.transport.url || '', callData, {\n operator: params.operator,\n factory: undefined,\n factoryData: undefined\n });\n // Matches SuperPaymasterClient Logic exactly:\n const bundlerEstimate = est.paymasterVerificationGasLimit || 100000n;\n // Nominal 60k, Efficiency 0.45\n paymasterVerificationGasLimit = tuneGasLimit(bundlerEstimate, 60000n, 0.45);\n // Safety Pad for VGL (Moderate, not 1M)\n const SAFETY_PAD = 80000n;\n verificationGasLimit = est.verificationGasLimit + SAFETY_PAD;\n // SuperPaymaster postOp calls burnFromWithOpHash (~40k gas) + storage writes.\n // Add 100k buffer; floor at 200k to prevent OOG. Pure BigInt to avoid Number precision loss.\n const _postOpBase = est.paymasterPostOpGasLimit + 100000n;\n paymasterPostOpGasLimit = _postOpBase > 200000n ? _postOpBase : 200000n;\n autoEstimate = false; // logic handled\n }\n const txHash = await SDKPaymasterClient.submitGaslessUserOperation(this.client, this.client, // WalletClient acts as signer\n this.accountAddress, ep, params.paymaster, params.target, // placeholder for token if V4\n this.bundlerClient?.transport?.url || this.client.transport.url || '', callData, {\n operator: params.operator,\n autoEstimate,\n verificationGasLimit,\n paymasterVerificationGasLimit,\n paymasterPostOpGasLimit\n });\n return txHash;\n }\n catch (error) {\n console.error(\" ❌ executeGasless Error:\", error.message);\n throw error;\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../tokens/dist/index.js"],"names":[],"mappings":"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","file":"chunk-M5ORP2PM.js","sourcesContent":["import { parseAbi, formatEther } from 'viem';\nimport { SuperPaymasterABI as SUPERPAYMASTER_ABI } from '@aastar/core';\nconst STAKING_ABI = parseAbi([\n 'function stake(uint256)',\n 'function withdraw(uint256)'\n]);\nconst ERC20_ABI = parseAbi([\n 'function balanceOf(address) view returns (uint256)',\n 'function totalSupply() view returns (uint256)',\n 'function approve(address,uint256) returns (bool)',\n 'function transfer(address,uint256) returns (bool)'\n]);\nexport class FinanceClient {\n publicClient;\n walletClient;\n /**\n * Initialize FinanceClient\n * @param publicClient The public client for queries\n * @param walletClient The wallet client for transactions\n */\n constructor(publicClient, walletClient) {\n this.publicClient = publicClient;\n this.walletClient = walletClient;\n }\n // ========== Existing static methods (preserved for backward compatibility) ==========\n /** @deprecated Use instance methods instead */\n static async depositToPaymaster(wallet, paymaster, amount) {\n return wallet.writeContract({\n address: paymaster,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'deposit',\n args: [amount],\n chain: wallet.chain\n });\n }\n /** @deprecated Use instance methods instead */\n static async depositViaTransferAndCall(wallet, token, paymaster, amount) {\n const ERC1363_ABI = [{\n name: 'transferAndCall',\n type: 'function',\n stateMutability: 'nonpayable',\n inputs: [{ type: 'address', name: 'to' }, { type: 'uint256', name: 'value' }],\n outputs: [{ type: 'bool' }]\n }];\n return wallet.writeContract({\n address: token,\n abi: ERC1363_ABI,\n functionName: 'transferAndCall',\n args: [paymaster, amount],\n chain: wallet.chain\n });\n }\n /** @deprecated Use instance methods instead */\n static async stakeGToken(wallet, stakingAddr, amount) {\n return wallet.writeContract({\n address: stakingAddr,\n abi: STAKING_ABI,\n functionName: 'stake',\n args: [amount],\n chain: wallet.chain\n });\n }\n /** @deprecated Use instance methods instead */\n static async withdrawProtocolRevenue(wallet, paymaster, to, amount) {\n return wallet.writeContract({\n address: paymaster,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'withdrawProtocolRevenue',\n args: [to, amount],\n chain: wallet.chain\n });\n }\n /** @deprecated Use instance methods instead */\n static async depositToEntryPoint(wallet, entryPoint, paymaster, amount) {\n return wallet.writeContract({\n address: entryPoint,\n abi: parseAbi(['function depositTo(address) payable']),\n functionName: 'depositTo',\n args: [paymaster],\n value: amount,\n chain: wallet.chain\n });\n }\n /** @deprecated Use instance methods instead */\n static async getEntryPointBalance(client, entryPoint, account) {\n return client.readContract({\n address: entryPoint,\n abi: parseAbi(['function balanceOf(address) view returns (uint256)']),\n functionName: 'balanceOf',\n args: [account]\n });\n }\n /** @deprecated Use instance methods instead */\n static async operatorDeposit(wallet, paymaster, amount) {\n return wallet.writeContract({\n address: paymaster,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'deposit',\n args: [amount],\n chain: wallet.chain\n });\n }\n /** @deprecated Use instance methods instead */\n static async operatorNotifyDeposit(wallet, paymaster, amount) {\n return wallet.writeContract({\n address: paymaster,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'notifyDeposit',\n args: [amount],\n chain: wallet.chain\n });\n }\n // ========== New instance methods (business primitives) ==========\n /**\n * Get GToken balance\n */\n async getGTokenBalance(address) {\n const { CORE_ADDRESSES } = await import('@aastar/core');\n return this.publicClient.readContract({\n address: CORE_ADDRESSES.gToken,\n abi: ERC20_ABI,\n functionName: 'balanceOf',\n args: [address]\n });\n }\n /**\n * Get aPNTs balance\n */\n async getAPNTsBalance(address) {\n const { CORE_ADDRESSES } = await import('@aastar/core');\n return this.publicClient.readContract({\n address: CORE_ADDRESSES.aPNTs,\n abi: ERC20_ABI,\n functionName: 'balanceOf',\n args: [address]\n });\n }\n /**\n * One-step stake: Approve (if needed) + Stake\n *\n * @param amount Amount of GToken to stake\n * @returns Transaction hash of the stake action\n */\n async approveAndStake(amount) {\n const account = this.walletClient.account;\n if (!account)\n throw new Error(\"Account required\");\n const { CORE_ADDRESSES } = await import('@aastar/core');\n const gTokenAddress = CORE_ADDRESSES.gToken;\n const stakingAddress = CORE_ADDRESSES.gTokenStaking;\n // 1. Check Allowance\n const allowance = await this.publicClient.readContract({\n address: gTokenAddress,\n abi: parseAbi(['function allowance(address owner, address spender) view returns (uint256)']),\n functionName: 'allowance',\n args: [account.address, stakingAddress]\n }); // as bigint\n if (allowance < amount) {\n console.log(`[FinanceClient] Approving ${formatEther(amount)} GToken...`);\n const approveTx = await this.walletClient.writeContract({\n address: gTokenAddress,\n abi: parseAbi(['function approve(address spender, uint256 amount) returns (bool)']),\n functionName: 'approve',\n args: [stakingAddress, amount],\n chain: this.walletClient.chain,\n account\n });\n await this.publicClient.waitForTransactionReceipt({ hash: approveTx });\n console.log(`[FinanceClient] Approved.`);\n }\n // 2. Stake\n console.log(`[FinanceClient] Staking...`);\n return FinanceClient.stakeGToken(this.walletClient, stakingAddress, amount);\n }\n /**\n * Get circulating supply (total - locked)\n */\n async getCirculatingSupply() {\n const { CORE_ADDRESSES } = await import('@aastar/core');\n const gTokenAddress = CORE_ADDRESSES.gToken;\n const total = await this.publicClient.readContract({\n address: gTokenAddress,\n abi: ERC20_ABI,\n functionName: 'totalSupply'\n });\n // In a real scenario, we might query GTokenStaking's totalStaked\n const locked = 0n;\n return {\n total,\n locked,\n circulating: total - locked\n };\n }\n /**\n * Get comprehensive tokenomics data\n */\n async getTokenomicsOverview() {\n const { CORE_ADDRESSES } = await import('@aastar/core');\n const [totalSupply, totalStaked, blackholeBalance] = await Promise.all([\n this.publicClient.readContract({\n address: CORE_ADDRESSES.gToken,\n abi: parseAbi(['function totalSupply() view returns (uint256)']),\n functionName: 'totalSupply'\n }),\n this.publicClient.readContract({\n address: CORE_ADDRESSES.gTokenStaking,\n abi: parseAbi(['function totalStaked() view returns (uint256)']),\n functionName: 'totalStaked'\n }),\n this.publicClient.readContract({\n address: CORE_ADDRESSES.gToken,\n abi: parseAbi(['function balanceOf(address) view returns (uint256)']),\n functionName: 'balanceOf',\n args: ['0x000000000000000000000000000000000000dEaD']\n })\n ]);\n const circulating = totalSupply - totalStaked - blackholeBalance;\n const ratio = Number(formatEther(totalStaked)) / Number(formatEther(totalSupply)) * 100;\n return {\n totalSupply,\n totalStaked,\n totalBurned: blackholeBalance,\n circulatingSupply: circulating,\n stakingRatio: ratio\n };\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../paymaster/dist/SuperPaymaster/index.js","../../paymaster/dist/V4/PaymasterUtils.js","../../paymaster/dist/V4/BundlerCompat.js","../../paymaster/dist/V4/PaymasterClient.js","../../paymaster/dist/V4/PaymasterOperator.js","../../paymaster/dist/V4/SuperPaymasterClient.js","../../paymaster/dist/PaymasterManager.js"],"names":["concat","pad","toHex","BundlerType","encodeAbiParameters","toBytes","chainId","isTestnet","parseAbi","encodeFunctionData"],"mappings":"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","file":"chunk-NAPMVAVJ.js","sourcesContent":["import { concat, pad, toHex } from 'viem';\nimport { SuperPaymasterABI as SUPERPAYMASTER_ABI } from '@aastar/core';\nconst DEFAULT_VERIFICATION_GAS = 160000n;\nconst DEFAULT_POSTOP_GAS = 10000n;\n/**\n * Constructs the middleware for SuperPaymaster.\n * Returns the `paymasterAndData` hex string.\n */\nexport function getSuperPaymasterMiddleware(config) {\n return {\n sponsorUserOperation: async (args) => {\n const verGas = config.verificationGasLimit ?? DEFAULT_VERIFICATION_GAS;\n const postGas = config.postOpGasLimit ?? DEFAULT_POSTOP_GAS;\n const maxRate = config.maxRate ?? 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn;\n // V3.2.1 Layout: [Paymaster(20)] [VerGas(16)] [PostOpGas(16)] [Operator(20)] [MaxRate(32)]\n // Offset 72 starts MaxRate.\n const paymasterAndData = concat([\n config.paymasterAddress,\n pad(toHex(verGas), { size: 16 }),\n pad(toHex(postGas), { size: 16 }),\n config.operator,\n pad(toHex(maxRate), { size: 32 })\n ]);\n return {\n paymasterAndData,\n verificationGasLimit: verGas,\n preVerificationGas: args.userOperation.preVerificationGas,\n };\n }\n };\n}\n/**\n * Enhanced eligibility check for SuperPaymaster V3.\n * Validates that user has sufficient credit with the given operator.\n */\nexport async function checkEligibility(client, paymaster, user, operator) {\n try {\n // 1. Fetch operator's configured token\n const operatorData = await client.readContract({\n address: paymaster,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'operators',\n args: [operator]\n });\n // operatorData structure: [token, treasury, isConfigured, isPaused, exchangeRate, ...]\n const token = operatorData[0];\n const isConfigured = operatorData[2];\n const isPaused = operatorData[3];\n if (!isConfigured || isPaused) {\n return { eligible: false };\n }\n // 2. Check available credit\n const credit = await client.readContract({\n address: paymaster,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'getAvailableCredit',\n args: [user, token]\n });\n return {\n eligible: credit > 0n,\n credit: credit,\n token\n };\n }\n catch (e) {\n console.warn('Eligibility check failed:', e);\n return { eligible: false };\n }\n}\n/**\n * Admin Client for SuperPaymaster V3\n */\nexport class SuperPaymasterAdminClient {\n client;\n paymasterAddress;\n constructor(client, paymasterAddress) {\n this.client = client;\n this.paymasterAddress = paymasterAddress;\n }\n async getOperator(operator) {\n return this.client.readContract({\n address: this.paymasterAddress,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'operators',\n args: [operator]\n });\n }\n static async configureOperator(wallet, paymaster, token, treasury) {\n return wallet.writeContract({\n address: paymaster,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'configureOperator',\n args: [token, treasury],\n chain: wallet.chain\n });\n }\n static async setOperatorPaused(wallet, paymaster, operator, paused) {\n return wallet.writeContract({\n address: paymaster,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'setOperatorPaused',\n args: [operator, paused],\n chain: wallet.chain\n });\n }\n static async updateReputation(wallet, paymaster, operator, score) {\n return wallet.writeContract({\n address: paymaster,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'updateReputation',\n args: [operator, score],\n chain: wallet.chain\n });\n }\n static async setAPNTsToken(wallet, paymaster, token) {\n return wallet.writeContract({\n address: paymaster,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'setAPNTsToken',\n args: [token],\n chain: wallet.chain\n });\n }\n static async setXPNTsFactory(wallet, paymaster, factory) {\n return wallet.writeContract({\n address: paymaster,\n abi: SUPERPAYMASTER_ABI,\n functionName: 'setXPNTsFactory',\n args: [factory],\n chain: wallet.chain\n });\n }\n}\n","import { concat, pad, toHex, keccak256, encodeAbiParameters, toBytes } from 'viem';\nconst DEFAULT_VERIFICATION_GAS_V4 = 1500000n; // ~1.5M for safety\nconst DEFAULT_POSTOP_GAS_V4 = 300000n; // ~300k for postOp logic\n/**\n * Constructs the middleware for Paymaster V4.\n * Returns the `paymasterAndData` hex string.\n */\nexport function getPaymasterV4Middleware(config) {\n return {\n sponsorUserOperation: async (args) => {\n const verGas = config.verificationGasLimit ?? DEFAULT_VERIFICATION_GAS_V4;\n const postGas = config.postOpGasLimit ?? DEFAULT_POSTOP_GAS_V4;\n // Layout: [Paymaster(20)] [VerGas(16)] [PostOpGas(16)] [Token(20)]\n const paymasterAndData = concat([\n config.paymasterAddress,\n pad(toHex(verGas), { size: 16 }),\n pad(toHex(postGas), { size: 16 }),\n config.gasToken\n ]);\n return {\n paymasterAndData,\n verificationGasLimit: verGas,\n preVerificationGas: args.userOperation.preVerificationGas\n };\n }\n };\n}\n/**\n * Build paymasterAndData for gasless UserOperation.\n * Layout: [Paymaster(20)] [VerificationGasLimit(16)] [PostOpGasLimit(16)] [Token(20)] [ValidUntil(6)] [ValidAfter(6)]\n */\nexport function buildPaymasterData(paymasterAddress, token, options) {\n const validityWindow = options?.validityWindow ?? 3600;\n const verGas = options?.verificationGasLimit ?? 200000n; // Increased for estimation\n const postGas = options?.postOpGasLimit ?? 100000n;\n const now = Math.floor(Date.now() / 1000);\n const validUntil = now + validityWindow;\n const validAfter = now - 100; // 100 seconds grace period\n return concat([\n paymasterAddress,\n pad(toHex(verGas), { size: 16 }),\n pad(toHex(postGas), { size: 16 }),\n token,\n pad(toHex(validUntil), { size: 6 }),\n pad(toHex(validAfter), { size: 6 })\n ]);\n}\n/**\n * Build paymasterAndData for SuperPaymaster V3.\n * Layout: [Paymaster(20)] [verGas(16)] [postGas(16)] [operator(20)] [maxRate(32)]\n * Total: 104 bytes\n *\n * IMPORTANT: SuperPaymaster contract generates validUntil internally using:\n * validUntil = cachedPrice.updatedAt + priceStalenessThreshold\n * Do NOT include validUntil/validAfter in paymasterAndData!\n */\nexport function buildSuperPaymasterData(paymasterAddress, operator, options) {\n const verGas = options?.verificationGasLimit ?? 80000n;\n const postGas = options?.postOpGasLimit ?? 100000n;\n const maxRate = options?.maxRate ?? ((1n << 256n) - 1n); // Default: max uint256, no rate limit\n return concat([\n paymasterAddress,\n pad(toHex(verGas), { size: 16 }),\n pad(toHex(postGas), { size: 16 }),\n operator,\n pad(toHex(maxRate), { size: 32 }) // Optional rate commitment (rug pull protection)\n ]);\n}\n/**\n * Helper to format UserOp for Alchemy/Standard Bundlers (v0.7 Decomposed)\n */\nexport function formatUserOpV07(userOp) {\n const result = {\n sender: userOp.sender,\n nonce: toHex(userOp.nonce),\n callData: userOp.callData,\n preVerificationGas: toHex(userOp.preVerificationGas),\n signature: userOp.signature\n };\n // Only include factory/factoryData if account is NOT deployed (initCode not empty)\n if (userOp.initCode && userOp.initCode !== '0x' && userOp.initCode.length > 2) {\n result.initCode = userOp.initCode;\n if (userOp.initCode.length > 42) {\n result.factory = userOp.initCode.slice(0, 42);\n result.factoryData = '0x' + userOp.initCode.slice(42);\n }\n else {\n result.factory = '0x0000000000000000000000000000000000000000';\n result.factoryData = '0x';\n }\n }\n // If account is deployed, don't include any factory fields at all\n // Unpack accountGasLimits: [verificationGasLimit(16)][callGasLimit(16)]\n if (userOp.accountGasLimits && userOp.accountGasLimits !== '0x') {\n const packed = userOp.accountGasLimits.replace('0x', '').padStart(64, '0');\n result.verificationGasLimit = '0x' + BigInt('0x' + packed.slice(0, 32)).toString(16);\n result.callGasLimit = '0x' + BigInt('0x' + packed.slice(32, 64)).toString(16);\n }\n // Unpack gasFees: [maxPriorityFee(16)][maxFee(16)]\n if (userOp.gasFees && userOp.gasFees !== '0x') {\n const packed = userOp.gasFees.replace('0x', '').padStart(64, '0');\n result.maxPriorityFeePerGas = '0x' + BigInt('0x' + packed.slice(0, 32)).toString(16);\n result.maxFeePerGas = '0x' + BigInt('0x' + packed.slice(32, 64)).toString(16);\n }\n // Unpack paymasterAndData: [paymaster(20)][verificationGas(16)][postOpGas(16)][paymasterData]\n if (userOp.paymasterAndData && userOp.paymasterAndData !== '0x') {\n const packed = userOp.paymasterAndData.replace('0x', '');\n if (packed.length >= 104) {\n result.paymaster = '0x' + packed.slice(0, 40);\n result.paymasterVerificationGasLimit = '0x' + BigInt('0x' + packed.slice(40, 72)).toString(16);\n result.paymasterPostOpGasLimit = '0x' + BigInt('0x' + packed.slice(72, 104)).toString(16);\n result.paymasterData = '0x' + packed.slice(104);\n }\n }\n return result;\n}\nexport function getUserOpHashV07(userOp, entryPoint, chainId) {\n const hashedUserOp = keccak256(encodeAbiParameters(['address', 'uint256', 'bytes32', 'bytes32', 'bytes32', 'uint256', 'bytes32', 'bytes32'].map(t => ({ type: t })), [\n userOp.sender,\n userOp.nonce,\n keccak256(toBytes(userOp.initCode)),\n keccak256(toBytes(userOp.callData)),\n userOp.accountGasLimits,\n toHex(userOp.preVerificationGas),\n userOp.gasFees,\n keccak256(toBytes(userOp.paymasterAndData))\n ]));\n return keccak256(encodeAbiParameters(['bytes32', 'address', 'uint256'].map(t => ({ type: t })), [hashedUserOp, entryPoint, chainId]));\n}\n/**\n * Tune gas limit using a dynamic nominal ceiling to satisfy Bundler efficiency (0.4)\n * Target: Actual / Limit >= targetEfficiency\n */\nexport function tuneGasLimit(estimate, nominalActual, targetEfficiency = 0.45) {\n if (estimate === 0n)\n return 0n;\n // targetEfficiency = actual / ceiling => ceiling = actual / targetEfficiency\n const ceiling = (nominalActual * 100n) / BigInt(Math.floor(targetEfficiency * 100));\n // Return the more restrictive limit to ensure efficiency ratio is met\n return estimate < ceiling ? estimate : ceiling;\n}\n","/**\n * Bundler types we support\n */\nexport var BundlerType;\n(function (BundlerType) {\n BundlerType[\"ALCHEMY\"] = \"alchemy\";\n BundlerType[\"PIMLICO\"] = \"pimlico\";\n BundlerType[\"STACKUP\"] = \"stackup\";\n BundlerType[\"CANDIDE\"] = \"candide\";\n BundlerType[\"UNKNOWN\"] = \"unknown\";\n})(BundlerType || (BundlerType = {}));\n/**\n * Detect bundler type from URL\n */\nexport function detectBundlerType(bundlerUrl) {\n const url = bundlerUrl.toLowerCase();\n if (url.includes('alchemy.com'))\n return BundlerType.ALCHEMY;\n if (url.includes('pimlico.io'))\n return BundlerType.PIMLICO;\n if (url.includes('stackup'))\n return BundlerType.STACKUP;\n if (url.includes('candide.dev'))\n return BundlerType.CANDIDE;\n return BundlerType.UNKNOWN;\n}\n/**\n * Create a bundler client config\n */\nexport function createBundlerClient(bundlerUrl, entryPoint) {\n const bundlerType = detectBundlerType(bundlerUrl);\n return {\n type: bundlerType,\n url: bundlerUrl,\n entryPoint\n };\n}\n","import { parseAbi, toBytes, concat, pad, toHex, encodeFunctionData, encodeAbiParameters, parseAbiParameters } from 'viem';\nimport { buildPaymasterData, buildSuperPaymasterData, formatUserOpV07, getUserOpHashV07, tuneGasLimit } from './PaymasterUtils.js';\nimport { detectBundlerType } from './BundlerCompat.js';\n/**\n * PaymasterClient\n * Focus: Integration, Funding, Interaction.\n */\nexport class PaymasterClient {\n /**\n * @private\n * Static utility class, should not be instantiated.\n */\n constructor() { }\n static makePlaceholderSignature(byteLength) {\n const clamped = Math.max(0, Math.min(byteLength, 10_000));\n return (`0x${'11'.repeat(clamped)}`);\n }\n static estimatePreVerificationGasV07(userOp) {\n const encoded = encodeAbiParameters(parseAbiParameters('(address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes)'), [\n [\n userOp.sender,\n userOp.nonce,\n userOp.initCode,\n userOp.callData,\n userOp.accountGasLimits,\n userOp.preVerificationGas,\n userOp.gasFees,\n userOp.paymasterAndData,\n userOp.signature\n ]\n ]);\n const bytes = toBytes(encoded);\n let calldataCost = 0n;\n for (const b of bytes)\n calldataCost += b === 0 ? 4n : 16n;\n return calldataCost + 26000n;\n }\n /**\n * Get user's deposited balance on the Paymaster.\n */\n static async getDepositedBalance(publicClient, address, user, token) {\n return publicClient.readContract({\n address,\n abi: [{\n name: 'balances',\n type: 'function',\n inputs: [\n { name: 'user', type: 'address' },\n { name: 'token', type: 'address' }\n ],\n outputs: [{ name: '', type: 'uint256' }],\n stateMutability: 'view'\n }],\n functionName: 'balances',\n args: [user, token]\n });\n }\n /**\n * Deposit tokens to Paymaster for a user (enables gasless transactions).\n */\n static async depositFor(wallet, address, user, token, amount) {\n return wallet.writeContract({\n address,\n abi: parseAbi(['function depositFor(address user, address token, uint256 amount) external']),\n functionName: 'depositFor',\n args: [user, token, amount],\n chain: wallet.chain\n });\n }\n /**\n * Approve the Paymaster (or any spender) to spend gas tokens.\n */\n static async approveGasToken(wallet, token, spender, amount) {\n return wallet.writeContract({\n address: token,\n abi: parseAbi(['function approve(address spender, uint256 amount) external returns (bool)']),\n functionName: 'approve',\n args: [spender, amount],\n chain: wallet.chain\n });\n }\n /**\n * Estimate Gas for a UserOperation.\n */\n static async estimateUserOperationGas(client, wallet, aaAddress, entryPoint, paymasterAddress, token, bundlerUrl, callData, options) {\n // 0. Check cachedPrice (Critical for Paymaster V4)\n if (!options?.operator) { // Only for Paymaster V4, not SuperPaymaster\n try {\n const cache = await client.readContract({\n address: paymasterAddress,\n abi: parseAbi(['function cachedPrice() view returns (uint208 price, uint48 updatedAt)']),\n functionName: 'cachedPrice'\n });\n const cachedPrice = BigInt(cache?.price ?? cache?.[0] ?? 0);\n const cachedUpdatedAt = BigInt(cache?.updatedAt ?? cache?.[1] ?? 0);\n const now = BigInt(Math.floor(Date.now() / 1000));\n let stalenessThreshold = 0n;\n try {\n stalenessThreshold = await client.readContract({\n address: paymasterAddress,\n abi: parseAbi(['function priceStalenessThreshold() view returns (uint256)']),\n functionName: 'priceStalenessThreshold'\n });\n }\n catch { }\n const isStale = cachedPrice === 0n ||\n cachedUpdatedAt === 0n ||\n (stalenessThreshold > 0n && cachedUpdatedAt + stalenessThreshold < now);\n if (isStale) {\n // Check if we're on testnet (chainId 11155111 = Sepolia, 11155420 = OP Sepolia)\n const chainId = client.chain?.id || await client.getChainId();\n const isTestnet = [11155111, 11155420, 31337].includes(chainId);\n if (isTestnet) {\n const updateHash = await wallet.writeContract({\n address: paymasterAddress,\n abi: parseAbi(['function updatePrice() external']),\n functionName: 'updatePrice'\n });\n await client.waitForTransactionReceipt({ hash: updateHash });\n console.log('[PaymasterClient] ✅ cachedPrice refreshed via updatePrice()');\n }\n else {\n throw new Error(`Paymaster cachedPrice is stale on Mainnet (chainId: ${chainId}). ` +\n `This requires Keeper to call updatePrice(). Please ensure Keeper is running.`);\n }\n }\n }\n catch (e) {\n // If error is our mainnet check, re-throw\n if (e.message?.includes('requires Keeper'))\n throw e;\n // Otherwise log and continue (might be old Paymaster without cachedPrice)\n console.log('[PaymasterClient] ⚠️ Failed to check cachedPrice:', e.message?.slice(0, 50));\n }\n }\n // 1. Construct a dummy UserOp for estimation\n let paymasterAndData;\n if (options?.operator) {\n paymasterAndData = buildSuperPaymasterData(paymasterAddress, options.operator, {\n verificationGasLimit: 300000n,\n postOpGasLimit: 300000n\n });\n }\n else {\n paymasterAndData = buildPaymasterData(paymasterAddress, token, {\n validityWindow: options?.validityWindow,\n verificationGasLimit: 250000n,\n postOpGasLimit: 150000n\n });\n }\n // 1.5. Get gas fees from network\n // Strategy: testnets use aggressive floor (bundlers require higher minimums);\n // mainnet uses dynamic estimation with 1.5x buffer for cost efficiency.\n const chainId = client.chain?.id || await client.getChainId();\n const isTestnet = [11155111, 11155420, 31337].includes(chainId);\n const TESTNET_PRIORITY_FLOOR = 500000000n; // 0.5 Gwei — Alchemy bundler minimum on testnets\n let maxFeePerGas = 0n;\n let maxPriorityFeePerGas = 0n;\n try {\n const feeData = await client.estimateFeesPerGas();\n maxFeePerGas = ((feeData.maxFeePerGas ?? 0n) * 115n) / 100n;\n maxPriorityFeePerGas = ((feeData.maxPriorityFeePerGas ?? 0n) * 115n) / 100n;\n }\n catch { }\n if (!maxFeePerGas) {\n try {\n const gasPrice = await client.getGasPrice();\n maxFeePerGas = (gasPrice * 120n) / 100n;\n }\n catch { }\n }\n // Testnet floor: bundlers like Alchemy require higher priority than network reports\n if (isTestnet) {\n if (maxPriorityFeePerGas < TESTNET_PRIORITY_FLOOR)\n maxPriorityFeePerGas = TESTNET_PRIORITY_FLOOR;\n if (maxFeePerGas < TESTNET_PRIORITY_FLOOR * 2n)\n maxFeePerGas = TESTNET_PRIORITY_FLOOR * 2n;\n }\n if (!maxFeePerGas)\n maxFeePerGas = 1n;\n if (maxFeePerGas < maxPriorityFeePerGas)\n maxFeePerGas = maxPriorityFeePerGas + 1n;\n const partialUserOp = {\n sender: aaAddress,\n nonce: 0n,\n initCode: (options?.factory && options?.factoryData)\n ? concat([options.factory, options.factoryData])\n : '0x',\n callData,\n accountGasLimits: concat([pad(toHex(250000n), { size: 16 }), pad(toHex(500000n), { size: 16 })]),\n preVerificationGas: 0n,\n gasFees: concat([pad(toHex(maxPriorityFeePerGas), { size: 16 }), pad(toHex(maxFeePerGas), { size: 16 })]),\n paymasterAndData,\n signature: PaymasterClient.makePlaceholderSignature(65)\n };\n // Get actual nonce\n try {\n const nonce = await client.readContract({\n address: aaAddress,\n abi: parseAbi(['function getNonce() view returns (uint256)']),\n functionName: 'getNonce'\n });\n partialUserOp.nonce = BigInt(nonce);\n }\n catch (e) { }\n partialUserOp.preVerificationGas = (PaymasterClient.estimatePreVerificationGasV07(partialUserOp) * 120n) / 100n + 5000n;\n const userOpHash = getUserOpHashV07(partialUserOp, entryPoint, BigInt(client.chain.id));\n partialUserOp.signature = (await wallet.account.signMessage({ message: { raw: userOpHash } }));\n const payload = {\n jsonrpc: '2.0',\n id: 1,\n method: 'eth_estimateUserOperationGas',\n params: [formatUserOpV07(partialUserOp), entryPoint]\n };\n const response = await fetch(bundlerUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload, (_, v) => typeof v === 'bigint' ? '0x' + v.toString(16) : v)\n });\n const result = await response.json();\n // Debug logging for Candide\n if (bundlerUrl.includes('candide')) {\n console.log('[PaymasterClient] Candide Request:', JSON.stringify(payload.params[0], null, 2));\n console.log('[PaymasterClient] Candide Response:', JSON.stringify(result, null, 2));\n }\n const data = result.result;\n // Debug logging for estimation\n console.log('[PaymasterClient] Gas Estimation Result:', JSON.stringify(data, null, 2));\n // Anvil Fallback for Estimation\n if (result.error && (result.error.code === -32601 || result.error.message?.includes('Method not found'))) {\n console.log('[PaymasterClient] EstimateUserOp failed (Method not found). Using Anvil defaults.');\n return {\n preVerificationGas: partialUserOp.preVerificationGas,\n verificationGasLimit: 1000000n,\n callGasLimit: 2000000n,\n paymasterVerificationGasLimit: 100000n,\n paymasterPostOpGasLimit: 100000n\n };\n }\n if (result.error)\n throw new Error(`Estimation Error: ${JSON.stringify(result.error)}`);\n // Dynamic tuning: use estimated values directly to maintain efficiency\n // Bundler efficiency check: actual_used / limit >= 0.4\n const estVGL = BigInt(data.verificationGasLimit);\n const estPMVGL = data.paymasterVerificationGasLimit ? BigInt(data.paymasterVerificationGasLimit) : 100000n;\n return {\n preVerificationGas: (BigInt(data.preVerificationGas) * 120n) / 100n + 5000n,\n verificationGasLimit: tuneGasLimit(estVGL, 35000n, 0.45),\n callGasLimit: (BigInt(data.callGasLimit) * 110n) / 100n, // Small 1.1x buffer\n paymasterVerificationGasLimit: tuneGasLimit(estPMVGL, 35000n, 0.45),\n paymasterPostOpGasLimit: data.paymasterPostOpGasLimit ? BigInt(data.paymasterPostOpGasLimit) : 100000n\n };\n }\n /**\n * High-level API to submit a gasless UserOperation.\n * Automatically handles nonce fetching, gas estimation (if not provided), signing, and submission.\n */\n static async submitGaslessUserOperation(client, wallet, aaAddress, entryPoint, paymasterAddress, token, bundlerUrl, callData, options) {\n // 0. Auto-Estimate if requested or if limits missing\n let gasLimits = {\n preVerificationGas: options?.preVerificationGas,\n verificationGasLimit: options?.verificationGasLimit,\n callGasLimit: options?.callGasLimit,\n paymasterVerificationGasLimit: options?.paymasterVerificationGasLimit,\n paymasterPostOpGasLimit: options?.paymasterPostOpGasLimit ?? 200000n\n };\n if (options?.autoEstimate !== false && (!gasLimits.verificationGasLimit || !gasLimits.callGasLimit)) {\n const est = await this.estimateUserOperationGas(client, wallet, aaAddress, entryPoint, paymasterAddress, token, bundlerUrl, callData, {\n validityWindow: options?.validityWindow,\n operator: options?.operator,\n factory: options?.factory,\n factoryData: options?.factoryData\n });\n gasLimits.preVerificationGas = options?.preVerificationGas ?? est.preVerificationGas;\n gasLimits.verificationGasLimit = options?.verificationGasLimit ?? est.verificationGasLimit;\n gasLimits.callGasLimit = options?.callGasLimit ?? est.callGasLimit;\n gasLimits.paymasterVerificationGasLimit = options?.paymasterVerificationGasLimit ?? est.paymasterVerificationGasLimit;\n // SuperPaymaster postOp calls burnFromWithOpHash (~40k) + storage writes.\n // Apply 100k buffer with 200k floor. Pure BigInt to avoid Number precision loss.\n if (!options?.paymasterPostOpGasLimit) {\n const _base = est.paymasterPostOpGasLimit + 100000n;\n gasLimits.paymasterPostOpGasLimit = _base > 200000n ? _base : 200000n;\n }\n }\n // 1. Get Nonce\n const nonce = await client.readContract({\n address: aaAddress,\n abi: parseAbi(['function getNonce() view returns (uint256)']),\n functionName: 'getNonce'\n });\n // 1.5 Get Gas Prices from Network if not provided\n // Strategy: testnets use aggressive floor; mainnet uses dynamic + 1.5x buffer\n const chainId = client.chain?.id || await client.getChainId();\n const isTestnet = [11155111, 11155420, 31337].includes(chainId);\n const TESTNET_PRIORITY_FLOOR = 500000000n; // 0.5 Gwei\n let maxFeePerGas = options?.maxFeePerGas;\n let maxPriorityFeePerGas = options?.maxPriorityFeePerGas;\n if (!maxFeePerGas || !maxPriorityFeePerGas) {\n try {\n const feeData = await client.estimateFeesPerGas();\n maxFeePerGas = maxFeePerGas ?? ((feeData.maxFeePerGas ?? 0n) * 115n) / 100n;\n maxPriorityFeePerGas = maxPriorityFeePerGas ?? ((feeData.maxPriorityFeePerGas ?? 0n) * 115n) / 100n;\n }\n catch (e) {\n maxFeePerGas = maxFeePerGas ?? undefined;\n maxPriorityFeePerGas = maxPriorityFeePerGas ?? undefined;\n }\n }\n if (!maxFeePerGas) {\n try {\n maxFeePerGas = (await client.getGasPrice()) * 150n / 100n;\n }\n catch { }\n }\n // Testnet floor: bundlers like Alchemy require higher priority than network reports\n if (isTestnet) {\n maxPriorityFeePerGas = maxPriorityFeePerGas ?? TESTNET_PRIORITY_FLOOR;\n if (maxPriorityFeePerGas < TESTNET_PRIORITY_FLOOR)\n maxPriorityFeePerGas = TESTNET_PRIORITY_FLOOR;\n if (!maxFeePerGas || maxFeePerGas < TESTNET_PRIORITY_FLOOR * 2n)\n maxFeePerGas = TESTNET_PRIORITY_FLOOR * 2n;\n }\n maxFeePerGas = maxFeePerGas ?? 1n;\n maxPriorityFeePerGas = maxPriorityFeePerGas ?? 0n;\n if (maxFeePerGas < maxPriorityFeePerGas)\n maxFeePerGas = maxPriorityFeePerGas + 1n;\n console.log(`[PaymasterClient] Gas Pricing: ${isTestnet ? 'TESTNET (0.5 Gwei floor)' : 'MAINNET (dynamic)'} | priority=${maxPriorityFeePerGas} maxFee=${maxFeePerGas}`);\n // 2. Build paymasterAndData\n let paymasterAndData;\n if (options?.operator) {\n paymasterAndData = buildSuperPaymasterData(paymasterAddress, options.operator, {\n verificationGasLimit: gasLimits.paymasterVerificationGasLimit ?? gasLimits.verificationGasLimit ?? 150000n,\n postOpGasLimit: gasLimits.paymasterPostOpGasLimit ?? 100000n\n });\n }\n else {\n // MATH: Target Efficiency = PVG / (PVG + VGL + PMVGL) >= 0.4\n // Since PVG is ~100k, (VGL + PMVGL) must be <= 150k.\n // We set each to 75k to safely pass the 0.4 efficiency guard.\n const pmVerGas = gasLimits.paymasterVerificationGasLimit ?? 75000n;\n paymasterAndData = buildPaymasterData(paymasterAddress, token, {\n validityWindow: options?.validityWindow,\n verificationGasLimit: pmVerGas,\n postOpGasLimit: gasLimits.paymasterPostOpGasLimit ?? 100000n\n });\n }\n // 3. Construct UserOp\n const initCode = ((options?.factory && options?.factoryData) ? concat([options.factory, options.factoryData]) : '0x');\n const accountGasLimits = concat([\n pad(toHex(gasLimits.verificationGasLimit ?? 75000n), { size: 16 }),\n pad(toHex(gasLimits.callGasLimit ?? 500000n), { size: 16 })\n ]);\n const gasFees = concat([\n pad(toHex(maxPriorityFeePerGas), { size: 16 }),\n pad(toHex(maxFeePerGas), { size: 16 })\n ]);\n const preVerificationGas = gasLimits.preVerificationGas ??\n (PaymasterClient.estimatePreVerificationGasV07({\n sender: aaAddress,\n nonce: BigInt(nonce),\n initCode,\n callData,\n accountGasLimits,\n preVerificationGas: 0n,\n gasFees,\n paymasterAndData,\n signature: PaymasterClient.makePlaceholderSignature(65)\n }) * 120n) / 100n + 5000n;\n const userOp = {\n sender: aaAddress,\n nonce: BigInt(nonce),\n initCode,\n callData,\n accountGasLimits,\n preVerificationGas,\n gasFees,\n paymasterAndData,\n signature: '0x'\n };\n // Debug logs (Commented out for production)\n /*\n console.log(\"DEBUG: UserOp Gas Limits:\", {\n accountGasLimits: userOp.accountGasLimits,\n preVerificationGas: userOp.preVerificationGas,\n gasFees: userOp.gasFees,\n paymasterAndData: userOp.paymasterAndData\n });\n */\n // 4. Final Hashing and Signing\n const userOpHash = getUserOpHashV07(userOp, entryPoint, BigInt(client.chain.id));\n const signature = (await wallet.account.signMessage({ message: { raw: userOpHash } }));\n userOp.signature = signature;\n // 6. Submit to Bundler (Unified JSON-RPC)\n const bundlerType = detectBundlerType(bundlerUrl);\n console.log(`[PaymasterClient] Using ${bundlerType} Bundler`);\n // Retry Loop: Up to 4 retries for compound errors (PVG + fee bump + replacement)\n for (let attempt = 0; attempt < 5; attempt++) {\n // Use standard JSON-RPC for all bundlers (Pimlico/Alchemy/Stackup/etc)\n const response = await fetch(bundlerUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'eth_sendUserOperation',\n params: [formatUserOpV07(userOp), entryPoint]\n }, (_, v) => typeof v === 'bigint' ? '0x' + v.toString(16) : v)\n });\n const result = await response.json();\n // 7. Error Handling & Retry Logic (Fee Bump)\n if (result.error && attempt < 4) {\n const msg = result.error.message || '';\n const errData = result.error.data || {};\n // Case A: Replacement Underpriced (Nonce collision in mempool)\n // e.g. {\"code\":-32602,\"message\":\"replacement underpriced\",\"data\":{\"currentMaxPriorityFee\":\"0x5f5e100\",\"currentMaxFee\":\"0xf6a44be\"}}\n if (result.error.code === -32602 || msg.includes('replacement underpriced')) {\n console.log(`[PaymasterClient] ⚠️ Replacement Underpriced. Bumping fees to replace pending UserOp...`);\n let newMaxPriority = userOp.gasFees ? BigInt('0x' + userOp.gasFees.slice(2, 34)) : 0n;\n let newMaxFee = userOp.gasFees ? BigInt('0x' + userOp.gasFees.slice(34)) : 0n;\n // Extract from data if available (Alchemy/Pimlico standard)\n if (errData.currentMaxPriorityFee && errData.currentMaxFee) {\n const currentPriority = BigInt(errData.currentMaxPriorityFee);\n const currentMax = BigInt(errData.currentMaxFee);\n // Bump by 10% to ensure replacement (Geth/Alchemy minimum)\n newMaxPriority = (currentPriority * 110n) / 100n;\n newMaxFee = (currentMax * 110n) / 100n;\n }\n else {\n // Fallback: Bump current values by 15% if data missing\n newMaxPriority = (newMaxPriority * 115n) / 100n;\n newMaxFee = (newMaxFee * 115n) / 100n;\n }\n console.log(` -> New Priority: ${newMaxPriority}, New MaxFee: ${newMaxFee}`);\n // Update UserOp\n userOp.gasFees = concat([\n pad(toHex(newMaxPriority), { size: 16 }),\n pad(toHex(newMaxFee), { size: 16 })\n ]);\n // Re-Sign\n const newHash = getUserOpHashV07(userOp, entryPoint, BigInt(client.chain.id));\n userOp.signature = (await wallet.account.signMessage({ message: { raw: newHash } }));\n continue; // Retry\n }\n // Case B: Priority Fee too low\n // e.g. \"maxPriorityFeePerGas ... is 1007884 but must be at least 100000000\"\n const matchPriority = msg.match(/maxPriorityFeePerGas.*(?:at least|expected) (\\d+)/i) || msg.match(/priority fee.*(?:at least|expected) (\\d+)/i);\n // Case C: Max Fee too low (often happens after bumping priority)\n // e.g. \"maxFeePerGas is 339637908 but must be at least 392531063\"\n const matchMaxFee = msg.match(/maxFeePerGas.*(?:at least|expected) (\\d+)/i);\n if (matchPriority || matchMaxFee) {\n console.log(`[PaymasterClient] ⚠️ Fee Error: ${msg}. Retrying with higher fees...`);\n let newMaxPriority = userOp.gasFees ? BigInt('0x' + userOp.gasFees.slice(2, 34)) : 0n;\n let newMaxFee = userOp.gasFees ? BigInt('0x' + userOp.gasFees.slice(34)) : 0n;\n if (matchPriority && matchPriority[1]) {\n const required = BigInt(matchPriority[1]);\n if (required > newMaxPriority) {\n console.log(` -> Bumping Priority Fee to ${required}`);\n // Bump maxFee by at least the delta\n const delta = required - newMaxPriority;\n newMaxPriority = required;\n newMaxFee += delta;\n }\n }\n if (matchMaxFee && matchMaxFee[1]) {\n const required = BigInt(matchMaxFee[1]);\n if (required > newMaxFee) {\n console.log(` -> Bumping Max Fee to ${required}`);\n newMaxFee = required;\n }\n }\n // Double check maxFee >= maxPriority\n if (newMaxFee < newMaxPriority)\n newMaxFee = newMaxPriority + 1n; // Minimal bump\n // Update UserOp\n userOp.gasFees = concat([\n pad(toHex(newMaxPriority), { size: 16 }),\n pad(toHex(newMaxFee), { size: 16 })\n ]);\n // Re-Sign\n const newHash = getUserOpHashV07(userOp, entryPoint, BigInt(client.chain.id));\n userOp.signature = (await wallet.account.signMessage({ message: { raw: newHash } }));\n continue; // Retry\n }\n // Case D: PreVerificationGas too low (common on L2s like Optimism)\n // e.g. \"precheck failed: preVerificationGas is 57368 but must be at least 108901\"\n const matchPVG = msg.match(/preVerificationGas.*(?:at least|expected) (\\d+)/i);\n if (matchPVG && matchPVG[1]) {\n const requiredPVG = BigInt(matchPVG[1]);\n const currentPVG = BigInt(userOp.preVerificationGas);\n if (requiredPVG > currentPVG) {\n console.log(`[PaymasterClient] ⚠️ PVG Error: ${msg}. Updating preVerificationGas...`);\n // Add 5% buffer to avoid \"chasing\" the requirement on L2s\n const bufferedPVG = (requiredPVG * 105n) / 100n;\n console.log(` -> Updating PVG from ${currentPVG} to ${bufferedPVG} (inc. buffer)`);\n // Update PVG and re-sign\n userOp.preVerificationGas = bufferedPVG;\n const newHash = getUserOpHashV07(userOp, entryPoint, BigInt(client.chain.id));\n userOp.signature = (await wallet.account.signMessage({ message: { raw: newHash } }));\n continue; // Retry\n }\n }\n }\n if (result.error && (result.error.code === -32601 || result.error.message?.includes('Method not found'))) {\n console.log('[PaymasterClient] SendUserOp failed (Method not found). Falling back to direct handleOps...');\n const caller = wallet.account?.address ? wallet.account.address : wallet.account;\n return await wallet.writeContract({\n address: entryPoint,\n abi: parseAbi(['function handleOps((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes)[], address) external']),\n functionName: 'handleOps',\n args: [[userOp], caller],\n chain: wallet.chain,\n account: wallet.account\n });\n }\n if (result.error)\n throw new Error(`Bundler Error: ${JSON.stringify(result.error)}`);\n console.log('[PaymasterClient] ✅ Submitted via', bundlerType, 'hash:', result.result);\n return result.result;\n }\n throw new Error(\"Failed to submit UserOp after retries\");\n }\n /**\n * Helper to extract the actual Gas Token fee from a UserOperation receipt.\n * Looks for the 'PostOpProcessed' event emitted by the Paymaster.\n */\n static getFeeFromReceipt(receipt, paymasterAddress) {\n // Event Signature: PostOpProcessed(address indexed user, address indexed token, uint256 actualGasCostWei, uint256 tokenCost, uint256 protocolRevenue)\n // Topic0: 0x62544d7f48b11c32334310ebd306b47224fca220163218d4a7264322c52ae073\n const TOPIC_POST_OP = '0x62544d7f48b11c32334310ebd306b47224fca220163218d4a7264322c52ae073';\n for (const log of receipt.logs) {\n if (log.address.toLowerCase() === paymasterAddress.toLowerCase() && log.topics[0] === TOPIC_POST_OP) {\n // Decode Data: actualGasCostWei, tokenCost, protocolRevenue (3x uint256)\n // We manually decode or use viem's decodeEventLog if available.\n // Here we use a lightweight manual decode for the data part (non-indexed).\n // Data is 3 * 32 bytes.\n const data = log.data.replace('0x', '');\n if (data.length >= 192) { // 3 * 64 hex chars = 192\n const actualGasCostWei = BigInt('0x' + data.slice(0, 64));\n const tokenCost = BigInt('0x' + data.slice(64, 128));\n // const protocolRevenue = BigInt('0x' + data.slice(128, 192));\n return { tokenCost, actualGasCostWei };\n }\n }\n }\n return null;\n }\n /**\n * Get the fee for a specific transaction hash.\n * Fetches the receipt (no scanning required) and decodes the log.\n */\n static async getTransactionFee(publicClient, txHash, paymasterAddress) {\n const receipt = await publicClient.getTransactionReceipt({ hash: txHash });\n return this.getFeeFromReceipt(receipt, paymasterAddress);\n }\n // ===========================================\n // 🛠️ Semantic CallData Builders (For DX)\n // ===========================================\n /**\n * Helper: Encode a standardized ERC-20 Transfer.\n * Returns the raw function data: `transfer(to, amount)`\n */\n static encodeTokenTransfer(recipient, amount) {\n return encodeFunctionData({\n abi: parseAbi(['function transfer(address to, uint256 amount) external returns (bool)']),\n functionName: 'transfer',\n args: [recipient, amount]\n });\n }\n /**\n * Helper: Encode a SimpleAccount execution.\n * Wraps the inner call into: `execute(target, value, data)`\n * This is the payload signed by the user.\n */\n static encodeExecution(target, value, data) {\n return encodeFunctionData({\n abi: parseAbi(['function execute(address dest, uint256 value, bytes func) external']),\n functionName: 'execute',\n args: [target, value, data]\n });\n }\n /**\n * More robust version of waitForUserOperationReceipt.\n * Catches timeouts and returns a cleaner result.\n */\n static async waitForUserOperation(bundlerClient, hash, timeout = 180000) {\n try {\n return await bundlerClient.waitForUserOperationReceipt({ hash, timeout });\n }\n catch (error) {\n const errName = error.name || '';\n const errMsg = error.message || '';\n if (errName === 'TimeoutError' ||\n errName === 'WaitForUserOperationReceiptTimeoutError' ||\n /timed? out/i.test(errMsg)) {\n return { timeout: true, hash };\n }\n throw error;\n }\n }\n}\n","import { parseAbi } from 'viem';\n/**\n * PaymasterOperator\n * Focus: Deployment, Configuration, Maintenance, Keeper Bots.\n */\nexport class PaymasterOperator {\n /**\n * Update the cached ETH/USD price from Chainlink Oracle.\n * Must be called if cachedPrice is 0 (uninitialized).\n */\n static async updatePrice(wallet, address) {\n return wallet.writeContract({\n address,\n abi: parseAbi(['function updatePrice() external']),\n functionName: 'updatePrice',\n chain: wallet.chain\n });\n }\n /**\n * Set the token price (in 8 decimals, e.g., 1e8 = $1 USD).\n */\n static async setTokenPrice(wallet, address, token, priceUSD) {\n return wallet.writeContract({\n address,\n abi: parseAbi(['function setTokenPrice(address token, uint256 price) external']),\n functionName: 'setTokenPrice',\n args: [token, priceUSD],\n chain: wallet.chain\n });\n }\n static async getCachedPrice(publicClient, address) {\n const result = await publicClient.readContract({\n address,\n abi: [{\n name: 'cachedPrice',\n type: 'function',\n inputs: [],\n outputs: [\n { name: 'price', type: 'uint208' },\n { name: 'updatedAt', type: 'uint48' }\n ],\n stateMutability: 'view'\n }],\n functionName: 'cachedPrice'\n });\n return { price: result[0], updatedAt: result[1] };\n }\n static async getTokenPrice(publicClient, address, token) {\n return publicClient.readContract({\n address,\n abi: [{\n name: 'tokenPrices',\n type: 'function',\n inputs: [{ name: 'token', type: 'address' }],\n outputs: [{ name: '', type: 'uint256' }],\n stateMutability: 'view'\n }],\n functionName: 'tokenPrices',\n args: [token]\n });\n }\n static async getDepositedBalance(publicClient, address, user, token) {\n return publicClient.readContract({\n address,\n abi: [{\n name: 'balances',\n type: 'function',\n inputs: [\n { name: 'user', type: 'address' },\n { name: 'token', type: 'address' }\n ],\n outputs: [{ name: '', type: 'uint256' }],\n stateMutability: 'view'\n }],\n functionName: 'balances',\n args: [user, token]\n });\n }\n static async ensurePriceInitialized(wallet, publicClient, address) {\n const { price } = await this.getCachedPrice(publicClient, address);\n if (price === 0n) {\n await this.updatePrice(wallet, address);\n return true;\n }\n return false;\n }\n static async addStake(wallet, address, amount, unstakeDelaySec) {\n return wallet.writeContract({\n address,\n abi: parseAbi(['function addStake(uint32 unstakeDelaySec) external payable']),\n functionName: 'addStake',\n args: [unstakeDelaySec],\n value: amount,\n chain: wallet.chain\n });\n }\n static async addDeposit(wallet, address, amount) {\n return wallet.writeContract({\n address,\n abi: parseAbi(['function addDeposit() external payable']),\n functionName: 'addDeposit',\n value: amount,\n chain: wallet.chain\n });\n }\n static async addGasToken(wallet, address, token) {\n return wallet.writeContract({\n address,\n abi: ['function addGasToken(address token)'],\n functionName: 'addGasToken',\n args: [token],\n chain: wallet.chain\n });\n }\n static async removeGasToken(wallet, address, token) {\n return wallet.writeContract({\n address,\n abi: ['function removeGasToken(address token)'],\n functionName: 'removeGasToken',\n args: [token],\n chain: wallet.chain\n });\n }\n static async setServiceFeeRate(wallet, address, rate) {\n return wallet.writeContract({\n address,\n abi: ['function setServiceFeeRate(uint256 rate)'],\n functionName: 'setServiceFeeRate',\n args: [rate],\n chain: wallet.chain\n });\n }\n static async setMaxGasCostCap(wallet, address, cap) {\n return wallet.writeContract({\n address,\n abi: ['function setMaxGasCostCap(uint256 cap)'],\n functionName: 'setMaxGasCostCap',\n args: [cap],\n chain: wallet.chain\n });\n }\n static async withdrawPNT(wallet, address, to, token, amount) {\n return wallet.writeContract({\n address,\n abi: ['function withdrawPNT(address to, address token, uint256 amount)'],\n functionName: 'withdrawPNT',\n args: [to, token, amount],\n chain: wallet.chain\n });\n }\n // --- Diagnostics & Automation ---\n static async checkGaslessReadiness(publicClient, entryPoint, paymasterAddress, user, token) {\n const issues = [];\n // 1. EntryPoint Stake/Deposit\n const depositInfo = await publicClient.readContract({\n address: entryPoint,\n abi: parseAbi(['function getDepositInfo(address account) external view returns (uint256 deposit, bool staked, uint256 stake, uint32 unstakeDelaySec, uint48 withdrawTime)']),\n functionName: 'getDepositInfo',\n args: [paymasterAddress]\n });\n if (depositInfo[2] < 50000000000000000n)\n issues.push('Paymaster stake in EntryPoint is less than 0.05 ETH');\n if (depositInfo[3] < 86400)\n issues.push('Paymaster unstake delay is less than 1 day');\n if (depositInfo[0] < 100000000000000000n)\n issues.push('Paymaster deposit in EntryPoint is less than 0.1 ETH');\n // 2. Oracle Price\n const ethPrice = await publicClient.readContract({\n address: paymasterAddress,\n abi: parseAbi(['function cachedPrice() external view returns (uint208 price, uint48 updatedAt)']),\n functionName: 'cachedPrice'\n }).catch(() => [0n, 0n]);\n if (ethPrice[0] === 0n)\n issues.push('Paymaster ETH/USD price not initialized');\n // 3. Token Support & Price\n const [tokenPrice, userTokenBal, userPMDeposit] = await Promise.all([\n this.getTokenPrice(publicClient, paymasterAddress, token),\n publicClient.readContract({\n address: token,\n abi: parseAbi(['function balanceOf(address account) external view returns (uint256)']),\n functionName: 'balanceOf',\n args: [user]\n }),\n this.getDepositedBalance(publicClient, paymasterAddress, user, token)\n ]);\n if (tokenPrice === 0n)\n issues.push('Token price not set in Paymaster');\n if (userPMDeposit === 0n)\n issues.push('User has no deposit in Paymaster');\n return {\n isReady: issues.length === 0,\n issues,\n details: {\n paymasterStake: depositInfo[2],\n paymasterDeposit: depositInfo[0],\n ethUsdPrice: ethPrice.price,\n tokenSupported: true,\n tokenPrice: tokenPrice,\n userTokenBalance: userTokenBal,\n userPaymasterDeposit: userPMDeposit\n }\n };\n }\n static async prepareGaslessEnvironment(operatorWallet, publicClient, entryPoint, paymasterAddress, token, options = {}) {\n const report = await this.checkGaslessReadiness(publicClient, entryPoint, paymasterAddress, operatorWallet.account.address, token);\n const results = [];\n // 1. Stake\n if (report.details.paymasterStake < (options.minStake || 50000000000000000n)) {\n const hash = await this.addStake(operatorWallet, paymasterAddress, options.minStake || 50000000000000000n, 86400);\n await publicClient.waitForTransactionReceipt({ hash });\n results.push({ step: 'Stake', hash, status: 'Confirmed' });\n }\n // 2. Deposit (EntryPoint)\n if (report.details.paymasterDeposit < (options.minDeposit || 100000000000000000n)) {\n const hash = await this.addDeposit(operatorWallet, paymasterAddress, options.minDeposit || 300000000000000000n);\n await publicClient.waitForTransactionReceipt({ hash });\n results.push({ step: 'Deposit', hash, status: 'Confirmed' });\n }\n // 3. Oracle Price\n if (report.details.ethUsdPrice === 0n) {\n const hash = await this.updatePrice(operatorWallet, paymasterAddress);\n await publicClient.waitForTransactionReceipt({ hash });\n results.push({ step: 'OraclePrice', hash, status: 'Confirmed' });\n }\n // 4. Token Support & Price\n if (report.details.tokenPrice === 0n) {\n try {\n const hash = await this.addGasToken(operatorWallet, paymasterAddress, token);\n await publicClient.waitForTransactionReceipt({ hash });\n results.push({ step: 'AddGasToken', hash, status: 'Confirmed' });\n }\n catch (e) { }\n if (options.tokenPriceUSD) {\n const hash = await this.setTokenPrice(operatorWallet, paymasterAddress, token, options.tokenPriceUSD);\n await publicClient.waitForTransactionReceipt({ hash });\n results.push({ step: 'TokenPrice', hash, status: 'Confirmed' });\n }\n }\n return results;\n }\n}\n","import { encodeFunctionData, parseAbi } from 'viem';\nimport { PaymasterClient } from './PaymasterClient';\nimport { tuneGasLimit } from './PaymasterUtils';\n/**\n * SuperPaymasterClient\n * High-level API for SuperPaymaster operations, including dynamic gas estimation.\n */\nexport class SuperPaymasterClient {\n /**\n * @private\n * Static utility class, should not be instantiated.\n */\n constructor() { }\n /**\n * Submit a gasless transaction using SuperPaymaster.\n * Automatically handles gas estimation with a smart efficiency buffer.\n */\n static async submitGaslessTransaction(client, wallet, aaAddress, entryPoint, bundlerUrl, config) {\n // 1. Prepare Calldata (Standard ERC20 Transfer)\n const callData = encodeFunctionData({\n abi: parseAbi(['function execute(address dest, uint256 value, bytes func) external']),\n functionName: 'execute',\n args: [\n config.token,\n 0n,\n encodeFunctionData({\n abi: parseAbi(['function transfer(address to, uint256 amount) external returns (bool)']),\n functionName: 'transfer',\n args: [config.recipient, config.amount]\n })\n ]\n });\n // 2. Initial Gas Estimation (Bundler Query)\n console.log(`[SuperPaymasterClient] 🎯 Target Info:`);\n console.log(` - Paymaster: ${config.paymasterAddress}`);\n console.log(` - Token: ${config.token}`);\n console.log(` - Operator: ${config.operator}`);\n console.log('[SuperPaymasterClient] ☁️ Estimating Gas usage...');\n const est = await PaymasterClient.estimateUserOperationGas(client, wallet, aaAddress, entryPoint, config.paymasterAddress, config.token, bundlerUrl, callData, {\n operator: config.operator,\n factory: config.factory,\n factoryData: config.factoryData\n });\n console.log('[SuperPaymasterClient] ☁️ Bundler Estimates:', est);\n // 3. Apply Smart Buffer Strategy\n // We need to ensure:\n // A. verificationGasLimit >= est.verificationGasLimit (Bundler's minimum)\n // B. verificationGasLimit >= SuperPaymaster's Actual Usage (~80k-100k)\n // C. verificationGasLimit / PreVerificationGas > 0.4 (Efficiency Ratio) PRE-CHECK\n // Actually, the Bundler checks: (gas limits) / (actual gas used) > efficiency.\n // So we must NOT set limits WAY higher than actual usage. \n // Best strategy: Use Bundler's Estimate + Small Buffer (e.g. 10-20k).\n // SuperPaymaster Logic Cost: ~80,000 to 120,000 gas depending on cold storage\n // Bundler Estimate usually returns the *actual execution path* gas.\n // CRITICAL FIX: Set paymasterVerificationGasLimit for optimal efficiency\n // Bundler requires efficiency ratio >= 0.4 (actual_gas_used / gas_limit >= 0.4)\n // SuperPaymaster validatePaymasterUserOp uses ~110-120k gas (measured)\n // Analysis (Jan 19 Update-Final-Final):\n // Instead of fixed percentage, use \"Dynamic Nominal Gas Tuning\".\n // SuperPaymaster validation common case is ~58k-66k. Worst case (refresh) 115k.\n // Setting nominal benchmark to 60k gives Ceiling = 60k / 0.45 = 133,333.\n // This satisfies 0.4 efficiency (58/133=0.43) AND execution (115 < 133).\n // 1. Tune Account Verification Gas Limit (VGL)\n // Bundler might return huge VGL (e.g. 250k) which kills efficiency if usage is low.\n // We need to clamp VGL down closer to actual usage.\n // Let's assume standard account validation + execution is ~35k.\n // Target: 35k / 0.45 = 77k Limit.\n const tunedVGL = tuneGasLimit(est.verificationGasLimit, 35000n, 0.45);\n // 2. Tune Paymaster Verification Gas Limit (PMVGL)\n // Ensure bundler estimate is respected as floor for PMVGL\n const bundlerEstimateVGL = est.paymasterVerificationGasLimit || 100000n;\n const tunedPMVerificationGas = tuneGasLimit(bundlerEstimateVGL, 60000n, 0.45);\n // SuperPaymaster postOp calls burnFromWithOpHash (~40k gas) + storage writes.\n // Add 100k buffer; floor at 200k to prevent OOG. Pure BigInt to avoid Number precision loss.\n const _postOpBase = est.paymasterPostOpGasLimit + 100000n;\n const tunedPostOp = _postOpBase > 200000n ? _postOpBase : 200000n;\n console.log(`[SuperPaymasterClient] 🔧 Tuned Limits: VGL=${tunedVGL}, PMVGL=${tunedPMVerificationGas}, PostOp=${tunedPostOp}`);\n // 4. Submit with Tuned Limits\n return PaymasterClient.submitGaslessUserOperation(client, wallet, aaAddress, entryPoint, config.paymasterAddress, config.token, bundlerUrl, callData, {\n operator: config.operator,\n verificationGasLimit: tunedVGL,\n callGasLimit: est.callGasLimit,\n preVerificationGas: est.preVerificationGas,\n paymasterVerificationGasLimit: tunedPMVerificationGas, // EXPLICIT PM LIMIT\n paymasterPostOpGasLimit: tunedPostOp,\n autoEstimate: false, // We did it ourselves\n factory: config.factory,\n factoryData: config.factoryData\n });\n }\n}\n","import { buildPaymasterData as buildPaymasterDataV4, buildSuperPaymasterData } from './V4/PaymasterUtils.js';\n/**\n * PaymasterManager — unifies the per-type `paymasterAndData` packers behind a\n * single `buildPaymasterData` entry point that AUTO-SELECTS the correct byte\n * format by paymaster type.\n *\n * Type resolution order:\n * 1. Explicit `params.type` (preferred — no guessing).\n * 2. Address-based lookup against the registered known-paymaster map.\n *\n * The underlying packers (`buildPaymasterData` / `buildSuperPaymasterData` in\n * PaymasterUtils) remain exported and are reused verbatim here — this class\n * does NOT reimplement byte-packing.\n */\nexport class PaymasterManager {\n knownPaymasters;\n constructor(opts) {\n this.knownPaymasters = new Map();\n if (opts?.knownPaymasters) {\n for (const [address, type] of Object.entries(opts.knownPaymasters)) {\n this.setKnownPaymaster(address, type);\n }\n }\n }\n /**\n * Register a known paymaster address → type mapping so that callers can\n * omit the explicit `type` and have it resolved from the address.\n */\n registerPaymaster(address, type) {\n this.setKnownPaymaster(address, type);\n }\n /**\n * Record an address → type mapping, throwing on a CONFLICTING re-registration.\n * Silently overwriting a v4 address with `super` (or vice-versa) would later\n * pack the wrong-length paymasterData for a `type`-less call, so a conflicting\n * re-registration is treated as a programmer error. Re-registering the SAME\n * type (including a case-variant of the address) is an idempotent no-op.\n */\n setKnownPaymaster(address, type) {\n const normalized = address.toLowerCase();\n const existing = this.knownPaymasters.get(normalized);\n if (existing && existing !== type) {\n throw new Error(`Paymaster ${address} is already registered as '${existing}'; ` +\n `refusing to re-register as '${type}'`);\n }\n this.knownPaymasters.set(normalized, type);\n }\n /**\n * Resolve a paymaster's type from a registered address. Returns undefined\n * if the address is not registered.\n */\n resolveType(address) {\n return this.knownPaymasters.get(address.toLowerCase());\n }\n /**\n * Build `paymasterAndData`, auto-selecting the correct byte layout for the\n * paymaster type. Dispatches to the existing per-type packers.\n */\n buildPaymasterData(params) {\n const type = params.type ?? this.resolveType(params.paymasterAddress);\n if (!type) {\n throw new Error(`PaymasterManager: cannot resolve paymaster type for ${params.paymasterAddress}. ` +\n `Pass an explicit \\`type\\` ('v4' | 'super') or register the address via registerPaymaster().`);\n }\n return PaymasterManager.dispatch(type, params);\n }\n /**\n * Static helper: build `paymasterAndData` for an explicit type without an\n * instance. Useful when the caller already knows the type.\n */\n static buildPaymasterData(type, params) {\n return PaymasterManager.dispatch(type, params);\n }\n static dispatch(type, params) {\n switch (type) {\n case 'v4': {\n if (!params.token) {\n throw new Error(\"PaymasterManager: type 'v4' requires `token`.\");\n }\n return buildPaymasterDataV4(params.paymasterAddress, params.token, {\n validityWindow: params.validityWindow,\n verificationGasLimit: params.verificationGasLimit,\n postOpGasLimit: params.postOpGasLimit\n });\n }\n case 'super': {\n if (!params.operator) {\n throw new Error(\"PaymasterManager: type 'super' requires `operator`.\");\n }\n return buildSuperPaymasterData(params.paymasterAddress, params.operator, {\n verificationGasLimit: params.verificationGasLimit,\n postOpGasLimit: params.postOpGasLimit,\n maxRate: params.maxRate\n });\n }\n default: {\n // Exhaustiveness guard.\n const _never = type;\n throw new Error(`PaymasterManager: unsupported paymaster type '${_never}'.`);\n }\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../identity/dist/mysbt.js","../../identity/dist/index.js"],"names":[],"mappings":"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","file":"chunk-O454V5ML.js","sourcesContent":["import { MySBTABI } from '@aastar/core';\n/**\n * Check if user holds MySBT token (identity verification).\n *\n * Does NOT swallow read errors: `balanceOf` returns 0 for a non-holder, so any\n * thrown error is an RPC/transport/contract failure — masking it as\n * `{ hasSBT: false }` would turn a transient RPC blip into a false \"no SBT\" and\n * wrongly fail eligibility checks. The error propagates so the caller can retry\n * or surface \"couldn't determine\" rather than \"no SBT\".\n */\nexport async function checkMySBT(client, sbtAddress, user) {\n const balance = await client.readContract({\n address: sbtAddress,\n abi: MySBTABI,\n functionName: 'balanceOf',\n args: [user]\n });\n return { hasSBT: balance > 0n, balance };\n}\n/**\n * Fetch MySBT token ID for a specific user.\n * MySBT exposes `getUserSBT(address) -> uint256` (alias of the `userToSBT`\n * mapping), which returns the user's tokenId or 0 when they hold no SBT.\n *\n * Returns the tokenId, or `null` ONLY for the genuine \"no SBT\" sentinel (id == 0).\n * Read errors are NOT swallowed (see {@link checkMySBT}): a transient RPC failure\n * must not be reported as \"no SBT\" (a false negative for eligibility). The error\n * propagates to the caller.\n */\nexport async function getMySBTId(client, sbtAddress, user) {\n const tokenId = await client.readContract({\n address: sbtAddress,\n abi: MySBTABI,\n functionName: 'getUserSBT',\n args: [user]\n });\n // tokenId 0 is the contract's sentinel for \"no SBT\" (ids start at 1).\n return tokenId > 0n ? tokenId : null;\n}\n","export * from './mysbt.js';\nimport { ReputationSystemABI } from '@aastar/core';\nimport { parseAbi } from 'viem';\nexport class ReputationClient {\n client;\n reputationAddress;\n /** @internal */\n walletClient;\n /**\n * Initialize ReputationClient\n * @param client The public client for queries\n * @param reputationAddress The address of the reputation system contract\n * @param walletClient Optional wallet client for write operations\n */\n constructor(client, reputationAddress, walletClient) {\n this.client = client;\n this.reputationAddress = reputationAddress;\n this.walletClient = walletClient;\n }\n /**\n * Compute reputation score for a user\n */\n async computeScore(user, communities, ruleIds, activities) {\n return this.client.readContract({\n address: this.reputationAddress,\n abi: ReputationSystemABI,\n functionName: 'computeScore',\n args: [user, communities, ruleIds, activities]\n });\n }\n /**\n * Get global reputation score for a user\n * @param user User address\n * @returns Reputation score\n */\n async getGlobalReputation(user) {\n // Try to read score, if fails (e.g. invalid contract), return 0\n try {\n const score = await this.computeScore(user, [], [], []);\n return Number(score);\n }\n catch (e) {\n console.warn('Failed to read reputation from contract, defaulting to 0');\n return 0;\n }\n }\n /**\n * Get credit limit based on reputation\n * @param user User address\n * @returns Credit limit in wei (Mock logic closely tied to Reputation)\n */\n async getCreditLimit(user) {\n const reputation = await this.getGlobalReputation(user);\n // Dynamic Credit Limit Logic:\n // Base: 0\n // Score > 50: +0.01 ETH\n // Score > 100: +0.05 ETH\n let limit = 0n;\n if (reputation > 50)\n limit += 10000000000000000n; // 0.01 ETH\n if (reputation > 100)\n limit += 40000000000000000n; // +0.04 -> 0.05 ETH\n return limit;\n }\n /**\n * Get reputation score breakdown\n * @param user User address\n * @returns Detailed reputation breakdown (Mock implementation awaiting contract V4)\n */\n async getReputationBreakdown(user) {\n const total = await this.getGlobalReputation(user);\n // Heuristic breakdown\n return {\n baseScore: Math.floor(total * 0.5),\n stakingBonus: Math.floor(total * 0.3),\n activityBonus: Math.floor(total * 0.2),\n penaltyDeduction: 0,\n total\n };\n }\n /**\n * Submit reputation proof (off-chain data to on-chain)\n * @param params Proof parameters\n * @returns Transaction hash\n */\n async submitReputationProof(params) {\n if (!this.walletClient || !this.walletClient.account) {\n throw new Error(\"Wallet client required to submit proofs\");\n }\n // Using a generic 'submitProof' signature for now\n // In reality this would target the ReputationOracle or similar\n return this.walletClient.writeContract({\n address: this.reputationAddress,\n abi: parseAbi(['function submitProof(string,bytes32)']),\n functionName: 'submitProof',\n args: [params.proofData, params.signature],\n chain: this.walletClient.chain,\n account: this.walletClient.account\n });\n }\n}\n"]}