safehands-pharos 1.4.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/policies/default.json +15 -0
- package/.env.example +81 -64
- package/README.md +301 -333
- package/SECURITY.md +112 -0
- package/SKILL.md +59 -0
- package/contracts/SafeHandsAttestation.sol +182 -0
- package/contracts/SafeHandsRegistry.sol +149 -0
- package/dist/agent/SafeHandsGuardianAgent.d.ts +39 -0
- package/dist/agent/SafeHandsGuardianAgent.d.ts.map +1 -0
- package/dist/agent/SafeHandsGuardianAgent.js +98 -0
- package/dist/agent/SafeHandsGuardianAgent.js.map +1 -0
- package/dist/agent/agentDecisionFormatter.d.ts +43 -0
- package/dist/agent/agentDecisionFormatter.d.ts.map +1 -0
- package/dist/agent/agentDecisionFormatter.js +96 -0
- package/dist/agent/agentDecisionFormatter.js.map +1 -0
- package/dist/agent/agentEnrich.d.ts +28 -0
- package/dist/agent/agentEnrich.d.ts.map +1 -0
- package/dist/agent/agentEnrich.js +99 -0
- package/dist/agent/agentEnrich.js.map +1 -0
- package/dist/agent/agentIntentClassifier.d.ts +44 -0
- package/dist/agent/agentIntentClassifier.d.ts.map +1 -0
- package/dist/agent/agentIntentClassifier.js +77 -0
- package/dist/agent/agentIntentClassifier.js.map +1 -0
- package/dist/agent/agentPolicyResolver.d.ts +44 -0
- package/dist/agent/agentPolicyResolver.d.ts.map +1 -0
- package/dist/agent/agentPolicyResolver.js +94 -0
- package/dist/agent/agentPolicyResolver.js.map +1 -0
- package/dist/agent/agentRuntime.d.ts +12 -0
- package/dist/agent/agentRuntime.d.ts.map +1 -0
- package/dist/agent/agentRuntime.js +31 -0
- package/dist/agent/agentRuntime.js.map +1 -0
- package/dist/agent/agentToolRouter.d.ts +24 -0
- package/dist/agent/agentToolRouter.d.ts.map +1 -0
- package/dist/agent/agentToolRouter.js +89 -0
- package/dist/agent/agentToolRouter.js.map +1 -0
- package/dist/agent/guardianOperator.d.ts +35 -0
- package/dist/agent/guardianOperator.d.ts.map +1 -0
- package/dist/agent/guardianOperator.js +65 -0
- package/dist/agent/guardianOperator.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +14 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/api/activityRoutes.d.ts +70 -0
- package/dist/api/activityRoutes.d.ts.map +1 -0
- package/dist/api/activityRoutes.js +100 -0
- package/dist/api/activityRoutes.js.map +1 -0
- package/dist/api/agentRoutes.d.ts +16 -0
- package/dist/api/agentRoutes.d.ts.map +1 -0
- package/dist/api/agentRoutes.js +37 -0
- package/dist/api/agentRoutes.js.map +1 -0
- package/dist/api/broadcastRoutes.d.ts +34 -0
- package/dist/api/broadcastRoutes.d.ts.map +1 -0
- package/dist/api/broadcastRoutes.js +147 -0
- package/dist/api/broadcastRoutes.js.map +1 -0
- package/dist/api/consolePage.d.ts +2 -0
- package/dist/api/consolePage.d.ts.map +1 -0
- package/dist/api/consolePage.js +206 -0
- package/dist/api/consolePage.js.map +1 -0
- package/dist/api/httpHardening.d.ts +75 -0
- package/dist/api/httpHardening.d.ts.map +1 -0
- package/dist/api/httpHardening.js +122 -0
- package/dist/api/httpHardening.js.map +1 -0
- package/dist/api/indexerRoutes.d.ts +46 -0
- package/dist/api/indexerRoutes.d.ts.map +1 -0
- package/dist/api/indexerRoutes.js +75 -0
- package/dist/api/indexerRoutes.js.map +1 -0
- package/dist/api/paidRoutes.d.ts +8 -0
- package/dist/api/paidRoutes.d.ts.map +1 -0
- package/dist/api/paidRoutes.js +175 -0
- package/dist/api/paidRoutes.js.map +1 -0
- package/dist/api/prepareRoutes.d.ts +58 -0
- package/dist/api/prepareRoutes.d.ts.map +1 -0
- package/dist/api/prepareRoutes.js +90 -0
- package/dist/api/prepareRoutes.js.map +1 -0
- package/dist/api/response.d.ts +39 -0
- package/dist/api/response.d.ts.map +1 -0
- package/dist/api/response.js +53 -0
- package/dist/api/response.js.map +1 -0
- package/dist/api/routes.d.ts +175 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +276 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/api/schemas.d.ts +147 -0
- package/dist/api/schemas.d.ts.map +1 -0
- package/dist/api/schemas.js +81 -0
- package/dist/api/schemas.js.map +1 -0
- package/dist/api/server.d.ts +11 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +505 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/toolRoutes.d.ts +14 -0
- package/dist/api/toolRoutes.d.ts.map +1 -0
- package/dist/api/toolRoutes.js +138 -0
- package/dist/api/toolRoutes.js.map +1 -0
- package/dist/api/walletPrepareRoutes.d.ts +74 -0
- package/dist/api/walletPrepareRoutes.d.ts.map +1 -0
- package/dist/api/walletPrepareRoutes.js +127 -0
- package/dist/api/walletPrepareRoutes.js.map +1 -0
- package/dist/api/x402Gate.d.ts +51 -0
- package/dist/api/x402Gate.d.ts.map +1 -0
- package/dist/api/x402Gate.js +184 -0
- package/dist/api/x402Gate.js.map +1 -0
- package/dist/cli.d.ts +5 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +154 -124
- package/dist/cli.js.map +1 -1
- package/dist/data/ecosystemRegistry.data.d.ts +3 -0
- package/dist/data/ecosystemRegistry.data.d.ts.map +1 -0
- package/dist/data/ecosystemRegistry.data.js +582 -0
- package/dist/data/ecosystemRegistry.data.js.map +1 -0
- package/dist/demo.d.ts +1 -1
- package/dist/demo.d.ts.map +1 -1
- package/dist/demo.js +206 -171
- package/dist/demo.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +249 -164
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +127 -65
- package/dist/init.js.map +1 -1
- package/dist/lib/analysis/approval.d.ts +29 -0
- package/dist/lib/analysis/approval.d.ts.map +1 -0
- package/dist/lib/analysis/approval.js +162 -0
- package/dist/lib/analysis/approval.js.map +1 -0
- package/dist/lib/analysis/calldata.d.ts +60 -0
- package/dist/lib/analysis/calldata.d.ts.map +1 -0
- package/dist/lib/analysis/calldata.js +349 -0
- package/dist/lib/analysis/calldata.js.map +1 -0
- package/dist/lib/analysis/contractIntel.d.ts +65 -0
- package/dist/lib/analysis/contractIntel.d.ts.map +1 -0
- package/dist/lib/analysis/contractIntel.js +320 -0
- package/dist/lib/analysis/contractIntel.js.map +1 -0
- package/dist/lib/analysis/evm.d.ts +42 -0
- package/dist/lib/analysis/evm.d.ts.map +1 -0
- package/dist/lib/analysis/evm.js +185 -0
- package/dist/lib/analysis/evm.js.map +1 -0
- package/dist/lib/analysis/gas.d.ts +4 -0
- package/dist/lib/analysis/gas.d.ts.map +1 -0
- package/dist/lib/analysis/gas.js +13 -0
- package/dist/lib/analysis/gas.js.map +1 -0
- package/dist/lib/analysis/index.d.ts +11 -0
- package/dist/lib/analysis/index.d.ts.map +1 -0
- package/dist/lib/analysis/index.js +16 -0
- package/dist/lib/analysis/index.js.map +1 -0
- package/dist/lib/analysis/pharosTokens.d.ts +31 -0
- package/dist/lib/analysis/pharosTokens.d.ts.map +1 -0
- package/dist/lib/analysis/pharosTokens.js +78 -0
- package/dist/lib/analysis/pharosTokens.js.map +1 -0
- package/dist/lib/analysis/safeTx.d.ts +27 -0
- package/dist/lib/analysis/safeTx.d.ts.map +1 -0
- package/dist/lib/analysis/safeTx.js +118 -0
- package/dist/lib/analysis/safeTx.js.map +1 -0
- package/dist/lib/analysis/token.d.ts +21 -0
- package/dist/lib/analysis/token.d.ts.map +1 -0
- package/dist/lib/analysis/token.js +151 -0
- package/dist/lib/analysis/token.js.map +1 -0
- package/dist/lib/analysis/types.d.ts +49 -0
- package/dist/lib/analysis/types.d.ts.map +1 -0
- package/dist/lib/analysis/types.js +10 -0
- package/dist/lib/analysis/types.js.map +1 -0
- package/dist/lib/analysis/x402.d.ts +24 -0
- package/dist/lib/analysis/x402.d.ts.map +1 -0
- package/dist/lib/analysis/x402.js +60 -0
- package/dist/lib/analysis/x402.js.map +1 -0
- package/dist/lib/auditLog.d.ts +1 -0
- package/dist/lib/auditLog.d.ts.map +1 -1
- package/dist/lib/auditLog.js +0 -0
- package/dist/lib/auditLog.js.map +1 -1
- package/dist/lib/config.d.ts +77 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +120 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +452 -291
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +509 -292
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/dodoApi.d.ts +101 -78
- package/dist/lib/dodoApi.d.ts.map +1 -1
- package/dist/lib/dodoApi.js +259 -196
- package/dist/lib/dodoApi.js.map +1 -1
- package/dist/lib/ecosystemRegistry.d.ts +116 -0
- package/dist/lib/ecosystemRegistry.d.ts.map +1 -0
- package/dist/lib/ecosystemRegistry.js +178 -0
- package/dist/lib/ecosystemRegistry.js.map +1 -0
- package/dist/lib/envLoader.d.ts +2 -0
- package/dist/lib/envLoader.d.ts.map +1 -0
- package/dist/lib/envLoader.js +65 -0
- package/dist/lib/envLoader.js.map +1 -0
- package/dist/lib/goldsky.d.ts +58 -0
- package/dist/lib/goldsky.d.ts.map +1 -0
- package/dist/lib/goldsky.js +275 -0
- package/dist/lib/goldsky.js.map +1 -0
- package/dist/lib/guardian/decision.d.ts +23 -0
- package/dist/lib/guardian/decision.d.ts.map +1 -0
- package/dist/lib/guardian/decision.js +40 -0
- package/dist/lib/guardian/decision.js.map +1 -0
- package/dist/lib/http.d.ts +13 -14
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +383 -118
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/managedExecution.d.ts +19 -0
- package/dist/lib/managedExecution.d.ts.map +1 -0
- package/dist/lib/managedExecution.js +64 -0
- package/dist/lib/managedExecution.js.map +1 -0
- package/dist/lib/merkleBatcher.d.ts +23 -0
- package/dist/lib/merkleBatcher.d.ts.map +1 -0
- package/dist/lib/merkleBatcher.js +62 -0
- package/dist/lib/merkleBatcher.js.map +1 -0
- package/dist/lib/networks.d.ts +48 -0
- package/dist/lib/networks.d.ts.map +1 -0
- package/dist/lib/networks.js +103 -0
- package/dist/lib/networks.js.map +1 -0
- package/dist/lib/observability/accessContext.d.ts +29 -0
- package/dist/lib/observability/accessContext.d.ts.map +1 -0
- package/dist/lib/observability/accessContext.js +50 -0
- package/dist/lib/observability/accessContext.js.map +1 -0
- package/dist/lib/observability/activityStore.d.ts +70 -0
- package/dist/lib/observability/activityStore.d.ts.map +1 -0
- package/dist/lib/observability/activityStore.js +149 -0
- package/dist/lib/observability/activityStore.js.map +1 -0
- package/dist/lib/observability/apiKey.d.ts +55 -0
- package/dist/lib/observability/apiKey.d.ts.map +1 -0
- package/dist/lib/observability/apiKey.js +141 -0
- package/dist/lib/observability/apiKey.js.map +1 -0
- package/dist/lib/observability/logger.d.ts +30 -0
- package/dist/lib/observability/logger.d.ts.map +1 -0
- package/dist/lib/observability/logger.js +30 -0
- package/dist/lib/observability/logger.js.map +1 -0
- package/dist/lib/observability/quota.d.ts +33 -0
- package/dist/lib/observability/quota.d.ts.map +1 -0
- package/dist/lib/observability/quota.js +49 -0
- package/dist/lib/observability/quota.js.map +1 -0
- package/dist/lib/observability/requestId.d.ts +8 -0
- package/dist/lib/observability/requestId.d.ts.map +1 -0
- package/dist/lib/observability/requestId.js +24 -0
- package/dist/lib/observability/requestId.js.map +1 -0
- package/dist/lib/observability/sanitize.d.ts +77 -0
- package/dist/lib/observability/sanitize.d.ts.map +1 -0
- package/dist/lib/observability/sanitize.js +228 -0
- package/dist/lib/observability/sanitize.js.map +1 -0
- package/dist/lib/observability/scopes.d.ts +20 -0
- package/dist/lib/observability/scopes.d.ts.map +1 -0
- package/dist/lib/observability/scopes.js +77 -0
- package/dist/lib/observability/scopes.js.map +1 -0
- package/dist/lib/okxDexApi.d.ts +106 -0
- package/dist/lib/okxDexApi.d.ts.map +1 -0
- package/dist/lib/okxDexApi.js +221 -0
- package/dist/lib/okxDexApi.js.map +1 -0
- package/dist/lib/persistentJsonStore.d.ts +5 -0
- package/dist/lib/persistentJsonStore.d.ts.map +1 -0
- package/dist/lib/persistentJsonStore.js +39 -0
- package/dist/lib/persistentJsonStore.js.map +1 -0
- package/dist/lib/pharos/attestationPublisher.d.ts +50 -0
- package/dist/lib/pharos/attestationPublisher.d.ts.map +1 -0
- package/dist/lib/pharos/attestationPublisher.js +262 -0
- package/dist/lib/pharos/attestationPublisher.js.map +1 -0
- package/dist/lib/pharos/ecosystem.d.ts +52 -0
- package/dist/lib/pharos/ecosystem.d.ts.map +1 -0
- package/dist/lib/pharos/ecosystem.js +431 -0
- package/dist/lib/pharos/ecosystem.js.map +1 -0
- package/dist/lib/pharos/ecosystemEvidence.d.ts +53 -0
- package/dist/lib/pharos/ecosystemEvidence.d.ts.map +1 -0
- package/dist/lib/pharos/ecosystemEvidence.js +133 -0
- package/dist/lib/pharos/ecosystemEvidence.js.map +1 -0
- package/dist/lib/pharos/rpc.d.ts +44 -0
- package/dist/lib/pharos/rpc.d.ts.map +1 -0
- package/dist/lib/pharos/rpc.js +90 -0
- package/dist/lib/pharos/rpc.js.map +1 -0
- package/dist/lib/pharos/rpcEvidence.d.ts +49 -0
- package/dist/lib/pharos/rpcEvidence.d.ts.map +1 -0
- package/dist/lib/pharos/rpcEvidence.js +46 -0
- package/dist/lib/pharos/rpcEvidence.js.map +1 -0
- package/dist/lib/pharos/rpcMethods.d.ts +46 -0
- package/dist/lib/pharos/rpcMethods.d.ts.map +1 -0
- package/dist/lib/pharos/rpcMethods.js +176 -0
- package/dist/lib/pharos/rpcMethods.js.map +1 -0
- package/dist/lib/pharos/spvVerifier.d.ts +47 -0
- package/dist/lib/pharos/spvVerifier.d.ts.map +1 -0
- package/dist/lib/pharos/spvVerifier.js +105 -0
- package/dist/lib/pharos/spvVerifier.js.map +1 -0
- package/dist/lib/pharos/userSignedBroadcaster.d.ts +10 -0
- package/dist/lib/pharos/userSignedBroadcaster.d.ts.map +1 -0
- package/dist/lib/pharos/userSignedBroadcaster.js +50 -0
- package/dist/lib/pharos/userSignedBroadcaster.js.map +1 -0
- package/dist/lib/pharosClient.d.ts +53 -58
- package/dist/lib/pharosClient.d.ts.map +1 -1
- package/dist/lib/pharosClient.js +56 -63
- package/dist/lib/pharosClient.js.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.d.ts +89 -53
- package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.js +373 -212
- package/dist/lib/policy/actionPolicyEngine.js.map +1 -1
- package/dist/lib/policy/agentPolicy.d.ts +29 -0
- package/dist/lib/policy/agentPolicy.d.ts.map +1 -0
- package/dist/lib/policy/agentPolicy.js +154 -0
- package/dist/lib/policy/agentPolicy.js.map +1 -0
- package/dist/lib/policy/policyPresets.d.ts +30 -0
- package/dist/lib/policy/policyPresets.d.ts.map +1 -0
- package/dist/lib/policy/policyPresets.js +124 -0
- package/dist/lib/policy/policyPresets.js.map +1 -0
- package/dist/lib/policy/writeExecutionGate.d.ts +23 -0
- package/dist/lib/policy/writeExecutionGate.d.ts.map +1 -0
- package/dist/lib/policy/writeExecutionGate.js +65 -0
- package/dist/lib/policy/writeExecutionGate.js.map +1 -0
- package/dist/lib/preparedTxStore.d.ts +21 -0
- package/dist/lib/preparedTxStore.d.ts.map +1 -0
- package/dist/lib/preparedTxStore.js +90 -0
- package/dist/lib/preparedTxStore.js.map +1 -0
- package/dist/lib/price/chainlinkPushProvider.d.ts +34 -0
- package/dist/lib/price/chainlinkPushProvider.d.ts.map +1 -0
- package/dist/lib/price/chainlinkPushProvider.js +36 -0
- package/dist/lib/price/chainlinkPushProvider.js.map +1 -0
- package/dist/lib/price/feedRegistry.d.ts +26 -0
- package/dist/lib/price/feedRegistry.d.ts.map +1 -0
- package/dist/lib/price/feedRegistry.js +67 -0
- package/dist/lib/price/feedRegistry.js.map +1 -0
- package/dist/lib/price/priceResolver.d.ts +35 -0
- package/dist/lib/price/priceResolver.d.ts.map +1 -0
- package/dist/lib/price/priceResolver.js +246 -0
- package/dist/lib/price/priceResolver.js.map +1 -0
- package/dist/lib/price/supraProvider.d.ts +9 -0
- package/dist/lib/price/supraProvider.d.ts.map +1 -0
- package/dist/lib/price/supraProvider.js +17 -0
- package/dist/lib/price/supraProvider.js.map +1 -0
- package/dist/lib/price/types.d.ts +67 -0
- package/dist/lib/price/types.d.ts.map +1 -0
- package/dist/lib/price/types.js +7 -0
- package/dist/lib/price/types.js.map +1 -0
- package/dist/lib/productionGuards.d.ts +16 -0
- package/dist/lib/productionGuards.d.ts.map +1 -0
- package/dist/lib/productionGuards.js +93 -0
- package/dist/lib/productionGuards.js.map +1 -0
- package/dist/lib/recipientSafety.d.ts +5 -0
- package/dist/lib/recipientSafety.d.ts.map +1 -0
- package/dist/lib/recipientSafety.js +28 -0
- package/dist/lib/recipientSafety.js.map +1 -0
- package/dist/lib/riskEngine.d.ts +45 -26
- package/dist/lib/riskEngine.d.ts.map +1 -1
- package/dist/lib/riskEngine.js +346 -283
- package/dist/lib/riskEngine.js.map +1 -1
- package/dist/lib/riskInclusion.d.ts +72 -0
- package/dist/lib/riskInclusion.d.ts.map +1 -0
- package/dist/lib/riskInclusion.js +252 -0
- package/dist/lib/riskInclusion.js.map +1 -0
- package/dist/lib/safeHandsRegistry.d.ts +32 -0
- package/dist/lib/safeHandsRegistry.d.ts.map +1 -0
- package/dist/lib/safeHandsRegistry.js +151 -0
- package/dist/lib/safeHandsRegistry.js.map +1 -0
- package/dist/lib/signer/index.d.ts +24 -24
- package/dist/lib/signer/index.d.ts.map +1 -1
- package/dist/lib/signer/index.js +110 -88
- package/dist/lib/signer/index.js.map +1 -1
- package/dist/lib/spendAccumulator.d.ts +24 -1
- package/dist/lib/spendAccumulator.d.ts.map +1 -1
- package/dist/lib/spendAccumulator.js +76 -6
- package/dist/lib/spendAccumulator.js.map +1 -1
- package/dist/lib/toolResponse.d.ts +30 -25
- package/dist/lib/toolResponse.d.ts.map +1 -1
- package/dist/lib/toolResponse.js +57 -53
- package/dist/lib/toolResponse.js.map +1 -1
- package/dist/lib/validation.d.ts +7 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +62 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/wallet/index.d.ts +33 -37
- package/dist/lib/wallet/index.d.ts.map +1 -1
- package/dist/lib/wallet/index.js +141 -128
- package/dist/lib/wallet/index.js.map +1 -1
- package/dist/lib/x402ReplayStore.d.ts +6 -0
- package/dist/lib/x402ReplayStore.d.ts.map +1 -0
- package/dist/lib/x402ReplayStore.js +79 -0
- package/dist/lib/x402ReplayStore.js.map +1 -0
- package/dist/safehands.zip +0 -0
- package/dist/sdk.d.ts +14 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +25 -0
- package/dist/sdk.js.map +1 -0
- package/dist/tools/approveToken.d.ts +66 -45
- package/dist/tools/approveToken.d.ts.map +1 -1
- package/dist/tools/approveToken.js +152 -85
- package/dist/tools/approveToken.js.map +1 -1
- package/dist/tools/assessRisk.d.ts +66 -79
- package/dist/tools/assessRisk.d.ts.map +1 -1
- package/dist/tools/assessRisk.js +63 -104
- package/dist/tools/assessRisk.js.map +1 -1
- package/dist/tools/checkAllowance.d.ts +49 -43
- package/dist/tools/checkAllowance.d.ts.map +1 -1
- package/dist/tools/checkAllowance.js +78 -56
- package/dist/tools/checkAllowance.js.map +1 -1
- package/dist/tools/checkTokenSecurity.d.ts +103 -46
- package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
- package/dist/tools/checkTokenSecurity.js +240 -95
- package/dist/tools/checkTokenSecurity.js.map +1 -1
- package/dist/tools/createAgentWallet.d.ts +30 -26
- package/dist/tools/createAgentWallet.d.ts.map +1 -1
- package/dist/tools/createAgentWallet.js +87 -58
- package/dist/tools/createAgentWallet.js.map +1 -1
- package/dist/tools/estimateGas.d.ts +84 -79
- package/dist/tools/estimateGas.d.ts.map +1 -1
- package/dist/tools/estimateGas.js +130 -124
- package/dist/tools/estimateGas.js.map +1 -1
- package/dist/tools/executeSwap.d.ts +109 -61
- package/dist/tools/executeSwap.d.ts.map +1 -1
- package/dist/tools/executeSwap.js +289 -141
- package/dist/tools/executeSwap.js.map +1 -1
- package/dist/tools/explainRisk.d.ts +29 -29
- package/dist/tools/explainRisk.d.ts.map +1 -1
- package/dist/tools/explainRisk.js +33 -32
- package/dist/tools/explainRisk.js.map +1 -1
- package/dist/tools/getAgentPolicy.d.ts +15 -0
- package/dist/tools/getAgentPolicy.d.ts.map +1 -0
- package/dist/tools/getAgentPolicy.js +16 -0
- package/dist/tools/getAgentPolicy.js.map +1 -0
- package/dist/tools/getAgentReputation.d.ts +31 -0
- package/dist/tools/getAgentReputation.d.ts.map +1 -0
- package/dist/tools/getAgentReputation.js +44 -0
- package/dist/tools/getAgentReputation.js.map +1 -0
- package/dist/tools/getAgentWallet.d.ts +21 -21
- package/dist/tools/getAgentWallet.d.ts.map +1 -1
- package/dist/tools/getAgentWallet.js +37 -27
- package/dist/tools/getAgentWallet.js.map +1 -1
- package/dist/tools/getAgentWalletBalance.d.ts +11 -11
- package/dist/tools/getAgentWalletBalance.d.ts.map +1 -1
- package/dist/tools/getAgentWalletBalance.js +102 -70
- package/dist/tools/getAgentWalletBalance.js.map +1 -1
- package/dist/tools/getExecutionHistory.d.ts +49 -49
- package/dist/tools/getExecutionHistory.d.ts.map +1 -1
- package/dist/tools/getExecutionHistory.js +148 -154
- package/dist/tools/getExecutionHistory.js.map +1 -1
- package/dist/tools/getGasPrice.d.ts +43 -43
- package/dist/tools/getGasPrice.d.ts.map +0 -0
- package/dist/tools/getGasPrice.js +59 -59
- package/dist/tools/getGasPrice.js.map +1 -1
- package/dist/tools/getPoolInfo.d.ts +75 -75
- package/dist/tools/getPoolInfo.d.ts.map +1 -1
- package/dist/tools/getPoolInfo.js +142 -137
- package/dist/tools/getPoolInfo.js.map +1 -1
- package/dist/tools/getSpvProof.d.ts +24 -0
- package/dist/tools/getSpvProof.d.ts.map +1 -0
- package/dist/tools/getSpvProof.js +64 -0
- package/dist/tools/getSpvProof.js.map +1 -0
- package/dist/tools/getTokenPrice.d.ts +56 -113
- package/dist/tools/getTokenPrice.d.ts.map +1 -1
- package/dist/tools/getTokenPrice.js +110 -117
- package/dist/tools/getTokenPrice.js.map +1 -1
- package/dist/tools/getTransactionStatus.d.ts +43 -43
- package/dist/tools/getTransactionStatus.d.ts.map +0 -0
- package/dist/tools/getTransactionStatus.js +59 -59
- package/dist/tools/getTransactionStatus.js.map +0 -0
- package/dist/tools/getWalletBalance.d.ts +103 -68
- package/dist/tools/getWalletBalance.d.ts.map +1 -1
- package/dist/tools/getWalletBalance.js +127 -87
- package/dist/tools/getWalletBalance.js.map +1 -1
- package/dist/tools/publishRiskScore.d.ts +85 -63
- package/dist/tools/publishRiskScore.d.ts.map +1 -1
- package/dist/tools/publishRiskScore.js +136 -88
- package/dist/tools/publishRiskScore.js.map +1 -1
- package/dist/tools/queryGoldsky.d.ts +20 -0
- package/dist/tools/queryGoldsky.d.ts.map +1 -0
- package/dist/tools/queryGoldsky.js +29 -0
- package/dist/tools/queryGoldsky.js.map +1 -0
- package/dist/tools/queryRiskRegistry.d.ts +38 -38
- package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
- package/dist/tools/queryRiskRegistry.js +59 -55
- package/dist/tools/queryRiskRegistry.js.map +1 -1
- package/dist/tools/safehandsPreflightCheck.d.ts +92 -77
- package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -1
- package/dist/tools/safehandsPreflightCheck.js +174 -47
- package/dist/tools/safehandsPreflightCheck.js.map +1 -1
- package/dist/tools/safehandsRiskReport.d.ts +96 -81
- package/dist/tools/safehandsRiskReport.d.ts.map +1 -1
- package/dist/tools/safehandsRiskReport.js +48 -28
- package/dist/tools/safehandsRiskReport.js.map +1 -1
- package/dist/tools/safehandsSafeExecute.d.ts +20 -20
- package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
- package/dist/tools/safehandsSafeExecute.js +164 -81
- package/dist/tools/safehandsSafeExecute.js.map +1 -1
- package/dist/tools/safehandsWalletHealth.d.ts +28 -14
- package/dist/tools/safehandsWalletHealth.d.ts.map +1 -1
- package/dist/tools/safehandsWalletHealth.js +145 -103
- package/dist/tools/safehandsWalletHealth.js.map +1 -1
- package/dist/tools/safehandsX402Preflight.d.ts +26 -26
- package/dist/tools/safehandsX402Preflight.d.ts.map +1 -1
- package/dist/tools/safehandsX402Preflight.js +86 -65
- package/dist/tools/safehandsX402Preflight.js.map +1 -1
- package/dist/tools/sendPayment.d.ts +63 -57
- package/dist/tools/sendPayment.d.ts.map +1 -1
- package/dist/tools/sendPayment.js +144 -117
- package/dist/tools/sendPayment.js.map +1 -1
- package/dist/tools/setAgentPolicy.d.ts +75 -0
- package/dist/tools/setAgentPolicy.d.ts.map +1 -0
- package/dist/tools/setAgentPolicy.js +80 -0
- package/dist/tools/setAgentPolicy.js.map +1 -0
- package/dist/tools/simulateTransaction.d.ts +64 -60
- package/dist/tools/simulateTransaction.d.ts.map +1 -1
- package/dist/tools/simulateTransaction.js +116 -83
- package/dist/tools/simulateTransaction.js.map +1 -1
- package/dist/tools/tokenRegistryStatus.d.ts +46 -26
- package/dist/tools/tokenRegistryStatus.d.ts.map +1 -1
- package/dist/tools/tokenRegistryStatus.js +126 -96
- package/dist/tools/tokenRegistryStatus.js.map +1 -1
- package/dist/tools/verifyRiskInclusion.d.ts +59 -0
- package/dist/tools/verifyRiskInclusion.d.ts.map +1 -0
- package/dist/tools/verifyRiskInclusion.js +40 -0
- package/dist/tools/verifyRiskInclusion.js.map +1 -0
- package/dist/tools/x402PayAndFetch.d.ts +87 -81
- package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
- package/dist/tools/x402PayAndFetch.js +295 -152
- package/dist/tools/x402PayAndFetch.js.map +1 -1
- package/dist/worker.d.ts +3 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +39 -0
- package/dist/worker.js.map +1 -0
- package/dist/x402Server.d.ts +1 -1
- package/dist/x402Server.d.ts.map +1 -1
- package/dist/x402Server.js +409 -252
- package/dist/x402Server.js.map +1 -1
- package/docs/REVIEWER_QUICKSTART.md +113 -0
- package/docs/SAFEHANDS_REVIEWER_DEMO_SCRIPT.md +228 -0
- package/package.json +130 -83
- package/contracts/RiskRegistry.json +0 -223
- package/contracts/RiskRegistry.sol +0 -58
- package/dist/lib/testDodoLive.d.ts +0 -2
- package/dist/lib/testDodoLive.d.ts.map +0 -1
- package/dist/lib/testDodoLive.js +0 -105
- package/dist/lib/testDodoLive.js.map +0 -1
- package/dist/lib/testLiveSafehands.d.ts +0 -2
- package/dist/lib/testLiveSafehands.d.ts.map +0 -1
- package/dist/lib/testLiveSafehands.js +0 -93
- package/dist/lib/testLiveSafehands.js.map +0 -1
- package/dist/lib/testRpc.d.ts +0 -2
- package/dist/lib/testRpc.d.ts.map +0 -1
- package/dist/lib/testRpc.js +0 -30
- package/dist/lib/testRpc.js.map +0 -1
- package/dist/lib/testRpcLive.d.ts +0 -2
- package/dist/lib/testRpcLive.d.ts.map +0 -1
- package/dist/lib/testRpcLive.js +0 -89
- package/dist/lib/testRpcLive.js.map +0 -1
- package/dist/lib/testTools.d.ts +0 -2
- package/dist/lib/testTools.d.ts.map +0 -1
- package/dist/lib/testTools.js +0 -398
- package/dist/lib/testTools.js.map +0 -1
- package/dist/lib/testX402Live.d.ts +0 -2
- package/dist/lib/testX402Live.d.ts.map +0 -1
- package/dist/lib/testX402Live.js +0 -160
- package/dist/lib/testX402Live.js.map +0 -1
- package/dist/scripts/checkDeploy.d.ts +0 -2
- package/dist/scripts/checkDeploy.d.ts.map +0 -1
- package/dist/scripts/checkDeploy.js +0 -25
- package/dist/scripts/checkDeploy.js.map +0 -1
- package/dist/scripts/deployRegistry.d.ts +0 -2
- package/dist/scripts/deployRegistry.d.ts.map +0 -1
- package/dist/scripts/deployRegistry.js +0 -101
- package/dist/scripts/deployRegistry.js.map +0 -1
- package/dist/scripts/testRegistry.d.ts +0 -2
- package/dist/scripts/testRegistry.d.ts.map +0 -1
- package/dist/scripts/testRegistry.js +0 -44
- package/dist/scripts/testRegistry.js.map +0 -1
- package/examples/dashboard/index.html +0 -337
- package/examples/pharos-skill-engine/SKILL.safehands.md +0 -85
- package/examples/pharos-skill-engine/assets/safehands/example-actions.json +0 -49
- package/examples/pharos-skill-engine/assets/safehands/policy-defaults.json +0 -11
- package/examples/pharos-skill-engine/references/safehands.md +0 -345
- package/examples/scenario-hack.ts +0 -38
- package/skill/SKILL.md +0 -133
- package/skill/assets/safehands/example-actions.json +0 -49
- package/skill/assets/safehands/policy-defaults.json +0 -11
- package/skill/references/safehands.md +0 -345
package/dist/lib/constants.js
CHANGED
|
@@ -1,293 +1,510 @@
|
|
|
1
|
-
// ─── SafeHands Constants ───────────────────────────────────────────────
|
|
2
|
-
// Pharos
|
|
3
|
-
// Official references reviewed during QA
|
|
4
|
-
// -
|
|
5
|
-
// -
|
|
6
|
-
// -
|
|
7
|
-
// -
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
export const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
export const
|
|
42
|
-
|
|
43
|
-
export const
|
|
44
|
-
export const
|
|
45
|
-
export const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
]
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
1
|
+
// ─── SafeHands Constants ───────────────────────────────────────────────
|
|
2
|
+
// Pharos Pacific Mainnet-first defaults with Atlantic Testnet compatibility.
|
|
3
|
+
// Official references reviewed during QA (USDC re-verified against Circle's
|
|
4
|
+
// contract-addresses page on 2026-07-10):
|
|
5
|
+
// - Pharos Hardhat guide: Atlantic Testnet chain ID 688689, RPC https://atlantic.dplabs-internal.com
|
|
6
|
+
// - Official Pharos Skill Engine tokens.json: USDC = 0xE0BE08c77f415F577A1B3A9aD7a1Df1479564ec8
|
|
7
|
+
// - Circle USDC contract addresses page (developers.circle.com/stablecoins/usdc-contract-addresses):
|
|
8
|
+
// Pharos (Mainnet) = 0xC879C018dB60520F4355C26eD1a6D572cdAC1815 (= PACIFIC_USDC_ADDRESS)
|
|
9
|
+
// Pharos Testnet = 0xcfC8330f4BCAB529c625D12781b1C19466A9Fc8B (= CIRCLE_USDC_ADDRESS)
|
|
10
|
+
// (An earlier comment here mislabeled 0xcfC8… as mainnet — it is Circle's TESTNET USDC.)
|
|
11
|
+
// - For Pharos Skill Engine testnet compatibility, the Atlantic token list defaults to the
|
|
12
|
+
// Skill Engine list; the mainnet canonical USDC is the Circle/Pharos-docs 0xC879… address.
|
|
13
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
14
|
+
// ─── Network ───────────────────────────────────────────────────────────
|
|
15
|
+
// Mainnet-first: defaults resolve from the active network in networks.ts
|
|
16
|
+
// (default pacific-mainnet). Existing PHAROS_* env vars still override for
|
|
17
|
+
// backward compatibility and Atlantic testnet selection.
|
|
18
|
+
import { createRequire } from "module";
|
|
19
|
+
import { parseAbi } from "viem";
|
|
20
|
+
import { getActiveNetwork, resolveRpcUrl, explorerTxBase } from "./networks.js";
|
|
21
|
+
import { ECOSYSTEM_REGISTRY_ITEMS } from "../data/ecosystemRegistry.data.js";
|
|
22
|
+
/** Package version, read once from package.json so callers never hardcode it. */
|
|
23
|
+
export const SAFEHANDS_VERSION = createRequire(import.meta.url)("../../package.json").version;
|
|
24
|
+
/** User-agent for outbound HTTP calls (GoPlus etc.), version-synced. */
|
|
25
|
+
export const SAFEHANDS_USER_AGENT = `SafeHands/${SAFEHANDS_VERSION}`;
|
|
26
|
+
const ACTIVE_NETWORK = getActiveNetwork();
|
|
27
|
+
export const PHAROS_ENVIRONMENT = process.env.PHAROS_ENVIRONMENT || ACTIVE_NETWORK.name;
|
|
28
|
+
export const CHAIN_ID = Number(process.env.PHAROS_CHAIN_ID || ACTIVE_NETWORK.chainId);
|
|
29
|
+
export const RPC_URL = process.env.PHAROS_RPC_URL || resolveRpcUrl(ACTIVE_NETWORK);
|
|
30
|
+
export const EXPLORER_BASE = process.env.PHAROS_EXPLORER_BASE || explorerTxBase(ACTIVE_NETWORK);
|
|
31
|
+
export const IS_MAINNET = ACTIVE_NETWORK.isMainnet;
|
|
32
|
+
// ─── Token Addresses ───────────────────────────────────────────────────
|
|
33
|
+
// These are the ATLANTIC-TESTNET / Skill-Engine-compat addresses (activeTokenMap
|
|
34
|
+
// switches to the Pacific registry on mainnet). The one evidenced canonical
|
|
35
|
+
// mainnet USDC is PACIFIC_USDC_ADDRESS (0xC879…), confirmed by BOTH the Pharos
|
|
36
|
+
// docs token registry AND Circle's contract-addresses page (re-checked 2026-07-10).
|
|
37
|
+
/** Native PROS — sentinel address used by DODO API for native token */
|
|
38
|
+
export const PROS_ADDRESS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
|
|
39
|
+
export const USDT_ADDRESS = "0xE7E84B8B4f39C507499c40B4ac199B050e2882d5";
|
|
40
|
+
/** Skill-Engine-compat USDC (official pharos-skill-engine tokens.json); testnet compat list only. */
|
|
41
|
+
export const USDC_ADDRESS = "0xE0BE08c77f415F577A1B3A9aD7a1Df1479564ec8";
|
|
42
|
+
/** Circle's Pharos TESTNET USDC (per Circle's contract-addresses page). Used only as the Atlantic alt-USDC route fallback — never a mainnet claim. */
|
|
43
|
+
export const CIRCLE_USDC_ADDRESS = "0xcfC8330f4BCAB529c625D12781b1C19466A9Fc8B";
|
|
44
|
+
export const WBTC_ADDRESS = "0x0c64F03EEa5c30946D5c55B4b532D08ad74638a4";
|
|
45
|
+
export const WETH_ADDRESS = "0x7d211F77525ea39A0592794f793cC1036eEaccD5";
|
|
46
|
+
export const WPROS_ADDRESS = "0x838800b758277CC111B2d48Ab01e5E164f8E9471";
|
|
47
|
+
export const TOKEN_REGISTRY = {
|
|
48
|
+
PROS: {
|
|
49
|
+
symbol: "PROS",
|
|
50
|
+
address: PROS_ADDRESS,
|
|
51
|
+
decimals: 18,
|
|
52
|
+
chainId: 688689,
|
|
53
|
+
environment: "atlantic-testnet",
|
|
54
|
+
isMainnet: false,
|
|
55
|
+
isCanonical: true,
|
|
56
|
+
isTestToken: true,
|
|
57
|
+
purpose: "native PROS sentinel address for DODO route API",
|
|
58
|
+
docsSource: "https://docs.pharos.xyz/",
|
|
59
|
+
},
|
|
60
|
+
USDC: {
|
|
61
|
+
symbol: "USDC",
|
|
62
|
+
address: USDC_ADDRESS,
|
|
63
|
+
decimals: 6,
|
|
64
|
+
chainId: 688689,
|
|
65
|
+
environment: "atlantic-testnet",
|
|
66
|
+
isMainnet: false,
|
|
67
|
+
isCanonical: true,
|
|
68
|
+
isTestToken: true,
|
|
69
|
+
purpose: "Pharos Skill Engine USDC: the USDC listed in the official pharos-skill-engine-0.1.0 assets/tokens.json for pacific-mainnet",
|
|
70
|
+
docsSource: "pharos-skill-engine-0.1.0/assets/tokens.json",
|
|
71
|
+
verificationStatus: "DOCS_VERIFIED_FROM_PHAROS_SKILL_ENGINE",
|
|
72
|
+
},
|
|
73
|
+
CIRCLE_USDC: {
|
|
74
|
+
symbol: "CIRCLE_USDC",
|
|
75
|
+
address: CIRCLE_USDC_ADDRESS,
|
|
76
|
+
decimals: 6,
|
|
77
|
+
chainId: 688689,
|
|
78
|
+
environment: "atlantic-testnet",
|
|
79
|
+
isMainnet: false,
|
|
80
|
+
isCanonical: true,
|
|
81
|
+
isTestToken: true,
|
|
82
|
+
purpose: "Circle's Pharos TESTNET USDC (Circle contract-addresses page, re-checked 2026-07-10); Atlantic alt-USDC route fallback, not the primary Skill-Engine token",
|
|
83
|
+
docsSource: "https://developers.circle.com/stablecoins/usdc-contract-addresses",
|
|
84
|
+
verificationStatus: "CIRCLE_DOCS_VERIFIED_TESTNET",
|
|
85
|
+
},
|
|
86
|
+
USDT: {
|
|
87
|
+
symbol: "USDT",
|
|
88
|
+
address: USDT_ADDRESS,
|
|
89
|
+
decimals: 6,
|
|
90
|
+
chainId: 688689,
|
|
91
|
+
environment: "atlantic-testnet",
|
|
92
|
+
isMainnet: false,
|
|
93
|
+
isCanonical: true,
|
|
94
|
+
isTestToken: true,
|
|
95
|
+
purpose: "canonical Pharos Atlantic Testnet USDT (Tether USD)",
|
|
96
|
+
docsSource: "https://docs.pharos.xyz/getting-started/token-registry",
|
|
97
|
+
verificationStatus: "DOCS_VERIFIED",
|
|
98
|
+
},
|
|
99
|
+
WBTC: {
|
|
100
|
+
symbol: "WBTC",
|
|
101
|
+
address: WBTC_ADDRESS,
|
|
102
|
+
decimals: 18,
|
|
103
|
+
chainId: 688689,
|
|
104
|
+
environment: "atlantic-testnet",
|
|
105
|
+
isMainnet: false,
|
|
106
|
+
isCanonical: true,
|
|
107
|
+
isTestToken: true,
|
|
108
|
+
purpose: "canonical Pharos Atlantic Testnet WBTC (Wrapped BTC)",
|
|
109
|
+
docsSource: "https://docs.pharos.xyz/getting-started/token-registry",
|
|
110
|
+
verificationStatus: "DOCS_VERIFIED",
|
|
111
|
+
},
|
|
112
|
+
WETH: {
|
|
113
|
+
symbol: "WETH",
|
|
114
|
+
address: WETH_ADDRESS,
|
|
115
|
+
decimals: 18,
|
|
116
|
+
chainId: 688689,
|
|
117
|
+
environment: "atlantic-testnet",
|
|
118
|
+
isMainnet: false,
|
|
119
|
+
isCanonical: true,
|
|
120
|
+
isTestToken: true,
|
|
121
|
+
purpose: "canonical Pharos Atlantic Testnet WETH (Wrapped ETH)",
|
|
122
|
+
docsSource: "https://docs.pharos.xyz/getting-started/token-registry",
|
|
123
|
+
verificationStatus: "DOCS_VERIFIED",
|
|
124
|
+
},
|
|
125
|
+
WPROS: {
|
|
126
|
+
symbol: "WPROS",
|
|
127
|
+
address: WPROS_ADDRESS,
|
|
128
|
+
decimals: 18,
|
|
129
|
+
chainId: 688689,
|
|
130
|
+
environment: "atlantic-testnet",
|
|
131
|
+
isMainnet: false,
|
|
132
|
+
isCanonical: true,
|
|
133
|
+
isTestToken: true,
|
|
134
|
+
purpose: "canonical Pharos Atlantic Testnet WPROS (Wrapped PROS)",
|
|
135
|
+
docsSource: "https://docs.pharos.xyz/getting-started/token-registry",
|
|
136
|
+
verificationStatus: "DOCS_VERIFIED",
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
// ─── Pharos Pacific Mainnet token registry (chain 1672) ────────────────
|
|
140
|
+
// Official addresses from docs.pharos.xyz/getting-started/token-registry,
|
|
141
|
+
// recorded from the Phase 5A Pharos docs audit. Read-only metadata only —
|
|
142
|
+
// recognition is by registry address; it is NOT a safety guarantee for an action.
|
|
143
|
+
// Decimals follow the ERC-20 standard for each token type (USDC = 6; wrapped = 18).
|
|
144
|
+
export const PACIFIC_WPROS_ADDRESS = "0x52c48d4213107b20bc583832b0d951fb9ca8f0b0";
|
|
145
|
+
// Circle-deployed — dual-evidenced: Pharos docs token registry AND Circle's own
|
|
146
|
+
// contract-addresses page list this address for Pharos (Mainnet). Re-checked 2026-07-10.
|
|
147
|
+
export const PACIFIC_USDC_ADDRESS = "0xc879c018db60520f4355c26ed1a6d572cdac1815";
|
|
148
|
+
export const PACIFIC_LINK_ADDRESS = "0x51e2A24742Db77604B881d6781Ee16B5b8fcBE29";
|
|
149
|
+
export const PACIFIC_WETH_ADDRESS = "0x1f4b7011Ee3d53969bb67F59428a9ec0477856E9";
|
|
150
|
+
export const PACIFIC_MAINNET_TOKEN_REGISTRY = {
|
|
151
|
+
WPROS: {
|
|
152
|
+
symbol: "WPROS",
|
|
153
|
+
name: "Wrapped PROS",
|
|
154
|
+
address: PACIFIC_WPROS_ADDRESS,
|
|
155
|
+
decimals: 18,
|
|
156
|
+
chainId: 1672,
|
|
157
|
+
environment: "pacific-mainnet",
|
|
158
|
+
isMainnet: true,
|
|
159
|
+
isCanonical: true,
|
|
160
|
+
docsSource: "https://docs.pharos.xyz/getting-started/token-registry",
|
|
161
|
+
verificationStatus: "DOCS_VERIFIED",
|
|
162
|
+
},
|
|
163
|
+
USDC: {
|
|
164
|
+
symbol: "USDC",
|
|
165
|
+
name: "USD Coin (Circle-deployed)",
|
|
166
|
+
address: PACIFIC_USDC_ADDRESS,
|
|
167
|
+
decimals: 6,
|
|
168
|
+
chainId: 1672,
|
|
169
|
+
environment: "pacific-mainnet",
|
|
170
|
+
isMainnet: true,
|
|
171
|
+
isCanonical: true,
|
|
172
|
+
docsSource: "https://docs.pharos.xyz/getting-started/token-registry and https://developers.circle.com/stablecoins/usdc-contract-addresses",
|
|
173
|
+
verificationStatus: "DOCS_VERIFIED",
|
|
174
|
+
},
|
|
175
|
+
LINK: {
|
|
176
|
+
symbol: "LINK",
|
|
177
|
+
name: "ChainLink Token",
|
|
178
|
+
address: PACIFIC_LINK_ADDRESS,
|
|
179
|
+
decimals: 18,
|
|
180
|
+
chainId: 1672,
|
|
181
|
+
environment: "pacific-mainnet",
|
|
182
|
+
isMainnet: true,
|
|
183
|
+
isCanonical: true,
|
|
184
|
+
docsSource: "https://docs.pharos.xyz/getting-started/token-registry",
|
|
185
|
+
verificationStatus: "DOCS_VERIFIED",
|
|
186
|
+
},
|
|
187
|
+
WETH: {
|
|
188
|
+
symbol: "WETH",
|
|
189
|
+
name: "Wrapped Ether",
|
|
190
|
+
address: PACIFIC_WETH_ADDRESS,
|
|
191
|
+
decimals: 18,
|
|
192
|
+
chainId: 1672,
|
|
193
|
+
environment: "pacific-mainnet",
|
|
194
|
+
isMainnet: true,
|
|
195
|
+
isCanonical: true,
|
|
196
|
+
docsSource: "https://docs.pharos.xyz/getting-started/token-registry",
|
|
197
|
+
verificationStatus: "DOCS_VERIFIED",
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
// ─── Token Decimals ────────────────────────────────────────────────────
|
|
201
|
+
export const TOKEN_DECIMALS = {
|
|
202
|
+
PROS: 18,
|
|
203
|
+
USDT: 6,
|
|
204
|
+
USDC: 6,
|
|
205
|
+
CIRCLE_USDC: 6,
|
|
206
|
+
WBTC: 18,
|
|
207
|
+
WETH: 18,
|
|
208
|
+
WPROS: 18,
|
|
209
|
+
[PROS_ADDRESS.toLowerCase()]: 18,
|
|
210
|
+
[USDT_ADDRESS.toLowerCase()]: 6,
|
|
211
|
+
[USDC_ADDRESS.toLowerCase()]: 6,
|
|
212
|
+
[CIRCLE_USDC_ADDRESS.toLowerCase()]: 6,
|
|
213
|
+
[WBTC_ADDRESS.toLowerCase()]: 18,
|
|
214
|
+
[WETH_ADDRESS.toLowerCase()]: 18,
|
|
215
|
+
[WPROS_ADDRESS.toLowerCase()]: 18,
|
|
216
|
+
};
|
|
217
|
+
// ─── Token Symbol → Address Mapping ────────────────────────────────────
|
|
218
|
+
export const TOKEN_MAP = {
|
|
219
|
+
PROS: PROS_ADDRESS,
|
|
220
|
+
USDT: USDT_ADDRESS,
|
|
221
|
+
USDC: USDC_ADDRESS,
|
|
222
|
+
CIRCLE_USDC: CIRCLE_USDC_ADDRESS,
|
|
223
|
+
WBTC: WBTC_ADDRESS,
|
|
224
|
+
WETH: WETH_ADDRESS,
|
|
225
|
+
WPROS: WPROS_ADDRESS,
|
|
226
|
+
};
|
|
227
|
+
// ─── Pacific Mainnet token map (chain 1672) ────────────────────────────
|
|
228
|
+
// Used for swaps / market data on mainnet. PROS/PROS share the native sentinel
|
|
229
|
+
// that DODO expects; canonical ERC-20s come from PACIFIC_MAINNET_TOKEN_REGISTRY.
|
|
230
|
+
export const PACIFIC_TOKEN_MAP = {
|
|
231
|
+
PROS: PROS_ADDRESS,
|
|
232
|
+
WPROS: PACIFIC_WPROS_ADDRESS,
|
|
233
|
+
USDC: PACIFIC_USDC_ADDRESS,
|
|
234
|
+
WETH: PACIFIC_WETH_ADDRESS,
|
|
235
|
+
LINK: PACIFIC_LINK_ADDRESS,
|
|
236
|
+
};
|
|
237
|
+
export const PACIFIC_TOKEN_DECIMALS = {
|
|
238
|
+
PROS: 18,
|
|
239
|
+
WPROS: 18,
|
|
240
|
+
USDC: 6,
|
|
241
|
+
WETH: 18,
|
|
242
|
+
LINK: 18,
|
|
243
|
+
[PROS_ADDRESS.toLowerCase()]: 18,
|
|
244
|
+
[PACIFIC_WPROS_ADDRESS.toLowerCase()]: 18,
|
|
245
|
+
[PACIFIC_USDC_ADDRESS.toLowerCase()]: 6,
|
|
246
|
+
[PACIFIC_WETH_ADDRESS.toLowerCase()]: 18,
|
|
247
|
+
[PACIFIC_LINK_ADDRESS.toLowerCase()]: 18,
|
|
248
|
+
};
|
|
249
|
+
/** Network-aware token symbol→address map (mainnet-first). */
|
|
250
|
+
export function activeTokenMap() {
|
|
251
|
+
return getActiveNetwork().isMainnet ? PACIFIC_TOKEN_MAP : TOKEN_MAP;
|
|
252
|
+
}
|
|
253
|
+
/** Network-aware token decimals (mainnet-first). */
|
|
254
|
+
export function activeTokenDecimals() {
|
|
255
|
+
return getActiveNetwork().isMainnet ? PACIFIC_TOKEN_DECIMALS : TOKEN_DECIMALS;
|
|
256
|
+
}
|
|
257
|
+
/** Active canonical USDC address (mainnet 0xc879…, else Skill-Engine USDC). */
|
|
258
|
+
export function activeUsdcAddress() {
|
|
259
|
+
return getActiveNetwork().isMainnet ? PACIFIC_USDC_ADDRESS : USDC_ADDRESS;
|
|
260
|
+
}
|
|
261
|
+
/** Active network token registry metadata (mainnet-first). */
|
|
262
|
+
export function activeTokenRegistry() {
|
|
263
|
+
return getActiveNetwork().isMainnet
|
|
264
|
+
? PACIFIC_MAINNET_TOKEN_REGISTRY
|
|
265
|
+
: TOKEN_REGISTRY;
|
|
266
|
+
}
|
|
267
|
+
/** x402 payment assets SafeHands recognizes for the active network. */
|
|
268
|
+
export function activeX402AllowedTokenAddresses() {
|
|
269
|
+
return getActiveNetwork().isMainnet
|
|
270
|
+
? [PACIFIC_USDC_ADDRESS, PACIFIC_WPROS_ADDRESS]
|
|
271
|
+
: [USDC_ADDRESS, WPROS_ADDRESS];
|
|
272
|
+
}
|
|
273
|
+
// ─── FaroSwap / DODO Protocol ──────────────────────────────────────────
|
|
274
|
+
// PROVENANCE: these addresses originate from the pre-registry Atlantic-testnet
|
|
275
|
+
// FaroSwap integration and are NOT in the canonical ecosystem registry — the
|
|
276
|
+
// registry's FaroSwap mainnet entry (protocol:pacific-mainnet:faroswap) is
|
|
277
|
+
// UNVERIFIED with no bundled contracts. They are RESTRICTION-ONLY values: the
|
|
278
|
+
// write path uses them as allowlists that constrain which router/spender a DODO
|
|
279
|
+
// quote may execute against (fail-closed containment). They must NEVER be used
|
|
280
|
+
// as trust/"known"/verified signals — spender/counterparty trust comes only from
|
|
281
|
+
// addressTrustEvidence() in lib/ecosystemRegistry.ts.
|
|
282
|
+
export const DODO_APPROVE_ADDRESS = "0x4Cf317b8918FbE8A890c01eDAb7d548555Ac2cE9";
|
|
283
|
+
export const DODO_ROUTE_PROXY_ADDRESS = "0x819829e5CF6e19F9fED92F6b4CC1edF45a2cC4A2";
|
|
284
|
+
function parseAddressCsv(value, fallback) {
|
|
285
|
+
const source = value && value.trim().length > 0 ? value.split(",") : [...fallback];
|
|
286
|
+
return source
|
|
287
|
+
.map((item) => item.trim())
|
|
288
|
+
.filter((item) => /^0x[0-9a-fA-F]{40}$/.test(item));
|
|
289
|
+
}
|
|
290
|
+
export function activeDodoSpenderAllowlist() {
|
|
291
|
+
return parseAddressCsv(process.env.DODO_SPENDER_ALLOWLIST || process.env.SAFEHANDS_DODO_SPENDER_ALLOWLIST, [DODO_APPROVE_ADDRESS]);
|
|
292
|
+
}
|
|
293
|
+
export function activeDodoRouterAllowlist() {
|
|
294
|
+
return parseAddressCsv(process.env.DODO_ROUTER_ALLOWLIST || process.env.SAFEHANDS_DODO_ROUTER_ALLOWLIST, [DODO_ROUTE_PROXY_ADDRESS]);
|
|
295
|
+
}
|
|
296
|
+
export function isAllowedDodoSpender(address) {
|
|
297
|
+
return activeDodoSpenderAllowlist().some((allowed) => allowed.toLowerCase() === address.toLowerCase());
|
|
298
|
+
}
|
|
299
|
+
export function isAllowedDodoRouter(address) {
|
|
300
|
+
return activeDodoRouterAllowlist().some((allowed) => allowed.toLowerCase() === address.toLowerCase());
|
|
301
|
+
}
|
|
302
|
+
// ─── DODO API ──────────────────────────────────────────────────────────
|
|
303
|
+
export const DODO_API_BASE = process.env.DODO_API_BASE || "https://api.dodoex.io";
|
|
304
|
+
export const DODO_API_KEY = process.env.DODO_API_KEY;
|
|
305
|
+
export const DODO_DEFAULT_SLIPPAGE = 3;
|
|
306
|
+
export const DODO_ROUTE_ENDPOINT = "/route-service/v2/widget/getdodoroute";
|
|
307
|
+
// ─── OKX DEX Aggregator ────────────────────────────────────────────────
|
|
308
|
+
// PROVENANCE: unlike the DODO/FaroSwap allowlists above, both OKX addresses
|
|
309
|
+
// ARE registry-verified (protocol:pacific-mainnet:okx-dex — OKX's own dev-docs
|
|
310
|
+
// Pharos row plus on-chain eth_getCode on 1672, 2026-07-13). The allowlist
|
|
311
|
+
// checks below are still containment only: spender/counterparty trust flows
|
|
312
|
+
// exclusively from addressTrustEvidence(), which recognizes these addresses as
|
|
313
|
+
// verified independently of this list.
|
|
314
|
+
export const OKX_DEX_ROUTER_ADDRESS = "0x75f21a97bd89a9a5683a9f46b5d5b4a080708dea";
|
|
315
|
+
export const OKX_DEX_APPROVE_ADDRESS = "0x78466A1488f1883d71cFddd1c621351572dE0a1C";
|
|
316
|
+
export function activeOkxSpenderAllowlist() {
|
|
317
|
+
return parseAddressCsv(process.env.OKX_SPENDER_ALLOWLIST || process.env.SAFEHANDS_OKX_SPENDER_ALLOWLIST, [OKX_DEX_APPROVE_ADDRESS]);
|
|
318
|
+
}
|
|
319
|
+
export function activeOkxRouterAllowlist() {
|
|
320
|
+
return parseAddressCsv(process.env.OKX_ROUTER_ALLOWLIST || process.env.SAFEHANDS_OKX_ROUTER_ALLOWLIST, [OKX_DEX_ROUTER_ADDRESS]);
|
|
321
|
+
}
|
|
322
|
+
export function isAllowedOkxSpender(address) {
|
|
323
|
+
return activeOkxSpenderAllowlist().some((allowed) => allowed.toLowerCase() === address.toLowerCase());
|
|
324
|
+
}
|
|
325
|
+
export function isAllowedOkxRouter(address) {
|
|
326
|
+
return activeOkxRouterAllowlist().some((allowed) => allowed.toLowerCase() === address.toLowerCase());
|
|
327
|
+
}
|
|
328
|
+
// ─── OKX DEX API ───────────────────────────────────────────────────────
|
|
329
|
+
// Credentials are resolved at call time (not module-load constants) so tests
|
|
330
|
+
// can pin them per process and operators can rotate them without a rebuild.
|
|
331
|
+
// They are used only to sign outbound requests to the OKX API and must never
|
|
332
|
+
// be logged, echoed into errors, or included in tool responses.
|
|
333
|
+
export const OKX_API_BASE = process.env.OKX_API_BASE || "https://web3.okx.com";
|
|
334
|
+
export const OKX_SWAP_ENDPOINT = "/api/v6/dex/aggregator/swap";
|
|
335
|
+
export function okxApiCredentials() {
|
|
336
|
+
const apiKey = process.env.OKX_API_KEY?.trim();
|
|
337
|
+
const apiSecret = process.env.OKX_API_SECRET?.trim();
|
|
338
|
+
const passphrase = process.env.OKX_API_PASSPHRASE?.trim();
|
|
339
|
+
const projectId = process.env.OKX_API_PROJECT_ID?.trim();
|
|
340
|
+
const missing = [];
|
|
341
|
+
if (!apiKey)
|
|
342
|
+
missing.push("OKX_API_KEY");
|
|
343
|
+
if (!apiSecret)
|
|
344
|
+
missing.push("OKX_API_SECRET");
|
|
345
|
+
if (!passphrase)
|
|
346
|
+
missing.push("OKX_API_PASSPHRASE");
|
|
347
|
+
if (missing.length > 0)
|
|
348
|
+
return { ok: false, missing };
|
|
349
|
+
return { ok: true, credentials: { apiKey: apiKey, apiSecret: apiSecret, passphrase: passphrase, projectId: projectId || undefined } };
|
|
350
|
+
}
|
|
351
|
+
// ─── Risk Engine Thresholds ────────────────────────────────────────────
|
|
352
|
+
// Weighted risk-engine block boundary (block when score > 80). NOTE: the hosted
|
|
353
|
+
// Anvita engine deliberately blocks earlier (score ≥ 70) — see
|
|
354
|
+
// docs/DECISION_CONTRACT.md §Thresholds for the documented divergence.
|
|
355
|
+
export const RISK_BLOCK_THRESHOLD = 80;
|
|
356
|
+
// A counterparty dimension at/above this is critical (missing/invalid/zero
|
|
357
|
+
// recipient). Shared by the policy engine's `risk_counterparty` check (the
|
|
358
|
+
// decider) and the risk engine's advisory recommendation escalation — the two
|
|
359
|
+
// must never drift apart, so both read this single constant.
|
|
360
|
+
export const COUNTERPARTY_CRITICAL_THRESHOLD = 90;
|
|
361
|
+
export const MAX_SLIPPAGE_PCT = 5;
|
|
362
|
+
export const MAX_BALANCE_USAGE_PCT = 90;
|
|
363
|
+
// ─── Safety Limits ─────────────────────────────────────────────────────
|
|
364
|
+
export const MAX_TX_AMOUNT_PROS = process.env.MAX_TX_AMOUNT_PROS || "0.1";
|
|
365
|
+
export const MAX_APPROVAL_AMOUNT_USDC = process.env.MAX_APPROVAL_AMOUNT_USDC || "10";
|
|
366
|
+
export const MAX_DAILY_SPEND_USD = process.env.MAX_DAILY_SPEND_USD || "10";
|
|
367
|
+
export const MAX_X402_PAYMENT_USDC = process.env.MAX_X402_PAYMENT_USDC || "0.01";
|
|
368
|
+
export const X402_PAYMENT_TOKEN_ADDRESS = (process.env.X402_PAYMENT_TOKEN_ADDRESS || activeUsdcAddress());
|
|
369
|
+
// ─── Risk Weights ──────────────────────────────────────────────────────
|
|
370
|
+
export const RISK_WEIGHTS = {
|
|
371
|
+
liquidityRisk: 0.25,
|
|
372
|
+
slippageRisk: 0.25,
|
|
373
|
+
counterpartyRisk: 0.20,
|
|
374
|
+
balanceRisk: 0.15,
|
|
375
|
+
marketConditionRisk: 0.15,
|
|
376
|
+
};
|
|
377
|
+
// ─── ERC-20 Minimal ABI ────────────────────────────────────────────────
|
|
378
|
+
export const ERC20_ABI = [
|
|
379
|
+
{
|
|
380
|
+
name: "approve",
|
|
381
|
+
type: "function",
|
|
382
|
+
stateMutability: "nonpayable",
|
|
383
|
+
inputs: [
|
|
384
|
+
{ name: "spender", type: "address" },
|
|
385
|
+
{ name: "amount", type: "uint256" },
|
|
386
|
+
],
|
|
387
|
+
outputs: [{ name: "", type: "bool" }],
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
name: "allowance",
|
|
391
|
+
type: "function",
|
|
392
|
+
stateMutability: "view",
|
|
393
|
+
inputs: [
|
|
394
|
+
{ name: "owner", type: "address" },
|
|
395
|
+
{ name: "spender", type: "address" },
|
|
396
|
+
],
|
|
397
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
name: "balanceOf",
|
|
401
|
+
type: "function",
|
|
402
|
+
stateMutability: "view",
|
|
403
|
+
inputs: [{ name: "account", type: "address" }],
|
|
404
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
name: "decimals",
|
|
408
|
+
type: "function",
|
|
409
|
+
stateMutability: "view",
|
|
410
|
+
inputs: [],
|
|
411
|
+
outputs: [{ name: "", type: "uint8" }],
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
name: "symbol",
|
|
415
|
+
type: "function",
|
|
416
|
+
stateMutability: "view",
|
|
417
|
+
inputs: [],
|
|
418
|
+
outputs: [{ name: "", type: "string" }],
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
name: "transfer",
|
|
422
|
+
type: "function",
|
|
423
|
+
stateMutability: "nonpayable",
|
|
424
|
+
inputs: [
|
|
425
|
+
{ name: "to", type: "address" },
|
|
426
|
+
{ name: "amount", type: "uint256" },
|
|
427
|
+
],
|
|
428
|
+
outputs: [{ name: "", type: "bool" }],
|
|
429
|
+
},
|
|
430
|
+
];
|
|
431
|
+
// ─── Managed-execution authorization gates ─────────────────────────
|
|
432
|
+
// NOTE: RiskRegistryV2 was retired in the P12 two-contract refactor. Managed-wallet
|
|
433
|
+
// authorization now reads from SafeHandsRegistry (see lib/safeHandsRegistry.ts);
|
|
434
|
+
// the former RISK_REGISTRY_V2_ADDRESS / RISK_REGISTRY_V2_ABI / DEFAULT_RISK_REGISTRY_VERSION
|
|
435
|
+
// exports were dead (unreferenced) and have been removed.
|
|
436
|
+
export const REQUIRE_AUTHORIZED_AGENT_FOR_WRITE = (process.env.REQUIRE_AUTHORIZED_AGENT_FOR_WRITE ?? "true") === "true";
|
|
437
|
+
// x402 is permissionless-first: self-signed x402 (the agent's own key) never needed
|
|
438
|
+
// registry authorization, and a managed/custodial x402 payment is allowlist-gated
|
|
439
|
+
// ONLY when this is explicitly opted in. Default OFF so x402 stays frictionless;
|
|
440
|
+
// the heavier managed write paths (swap/payment/approve) keep the default-on
|
|
441
|
+
// REQUIRE_AUTHORIZED_AGENT_FOR_WRITE gate above.
|
|
442
|
+
export const REQUIRE_AUTHORIZED_AGENT_FOR_X402 = process.env.REQUIRE_AUTHORIZED_AGENT_FOR_X402 === "true";
|
|
443
|
+
export const AUTO_AUTHORIZE_AGENT_WALLET = process.env.AUTO_AUTHORIZE_AGENT_WALLET === "true";
|
|
444
|
+
// ─── SafeHands on-chain layer (2-contract architecture) ────────────────
|
|
445
|
+
// SafeHandsRegistry — trust + reputation oracle
|
|
446
|
+
// SafeHandsAttestation — immutable proof ledger (see pharos/attestationPublisher.ts)
|
|
447
|
+
// Deployed on Pharos Pacific mainnet (chainId 1672) and baked as READ-path
|
|
448
|
+
// defaults below. Env vars still override; a chainId guard keeps the baked
|
|
449
|
+
// defaults Pacific-only (any other chain resolves to "" → fail-closed). Write
|
|
450
|
+
// availability is gated separately (WRITE_TOOLS_ENABLED + attester key) via
|
|
451
|
+
// process.env reads, so baking these read defaults never enables a write.
|
|
452
|
+
const SAFEHANDS_REGISTRY_ADDRESS_PACIFIC = "0x428e02bf85412e7242d991cd6725ec59e8b06c8d";
|
|
453
|
+
const SAFEHANDS_ATTESTATION_ADDRESS_PACIFIC = "0x71a7a87b3b1ab6d86204cad691bb32fd75b4588c";
|
|
454
|
+
const PACIFIC_MAINNET_CHAIN_ID = 1672;
|
|
455
|
+
/** Read-path resolver: env override → Pacific-mainnet baked default → "" (chainId-guarded, fail-closed). */
|
|
456
|
+
export function resolveSafeHandsRegistryAddress(chainId = CHAIN_ID) {
|
|
457
|
+
const env = process.env.SAFEHANDS_REGISTRY_ADDRESS || process.env.SAFEHANDS_RISK_REGISTRY_ADDRESS || "";
|
|
458
|
+
if (env)
|
|
459
|
+
return env;
|
|
460
|
+
return chainId === PACIFIC_MAINNET_CHAIN_ID ? SAFEHANDS_REGISTRY_ADDRESS_PACIFIC : "";
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Read-path resolver: env override → Pacific-mainnet baked default → "" (chainId-guarded, fail-closed).
|
|
464
|
+
* NOTE: the legacy SAFEHANDS_RISK_REGISTRY_ADDRESS var aliases the REGISTRY contract only and is
|
|
465
|
+
* deliberately NOT accepted here — the attestation ledger is a different contract, and aliasing
|
|
466
|
+
* both to one address produced ABI-mismatch reads.
|
|
467
|
+
*/
|
|
468
|
+
export function resolveSafeHandsAttestationAddress(chainId = CHAIN_ID) {
|
|
469
|
+
const env = process.env.SAFEHANDS_ATTESTATION_ADDRESS || "";
|
|
470
|
+
if (env)
|
|
471
|
+
return env;
|
|
472
|
+
return chainId === PACIFIC_MAINNET_CHAIN_ID ? SAFEHANDS_ATTESTATION_ADDRESS_PACIFIC : "";
|
|
473
|
+
}
|
|
474
|
+
// Back-compat consts — existing reporting consumers keep importing these unchanged.
|
|
475
|
+
export const SAFEHANDS_REGISTRY_ADDRESS = resolveSafeHandsRegistryAddress();
|
|
476
|
+
export const SAFEHANDS_ATTESTATION_ADDRESS = resolveSafeHandsAttestationAddress();
|
|
477
|
+
// NOTE: the former NO_RISK_SCORE = 255 sentinel was removed — the Merkle-batched
|
|
478
|
+
// SafeHandsRegistry has no per-record riskScoreOf read, and no code path consumed
|
|
479
|
+
// the sentinel (its last import in agentEnrich.ts was dead).
|
|
480
|
+
export const SAFEHANDS_REGISTRY_ABI = parseAbi([
|
|
481
|
+
"function owner() view returns (address)",
|
|
482
|
+
"function isAuthorizedOperator(address) view returns (bool)",
|
|
483
|
+
"function isAuthorizedAgent(address) view returns (bool)",
|
|
484
|
+
"function setAuthorizedAgent(address agent, bool authorized)",
|
|
485
|
+
"function setAuthorizedAgents(address[] agents, bool authorized)",
|
|
486
|
+
"function setOperator(address operator, bool authorized)",
|
|
487
|
+
"function currentMerkleRoot() view returns (bytes32)",
|
|
488
|
+
"function currentDataURI() view returns (string)",
|
|
489
|
+
"function commitRiskRoot(bytes32 root, string dataURI)",
|
|
490
|
+
"function verifyRiskRecord(address target, bytes32 actionHash, uint8 score, uint8 level, uint8 recommendation, bytes32 policyVersionHash, bytes32 evidenceHash, uint64 expiresAt, bytes32[] proof) view returns (bool)",
|
|
491
|
+
]);
|
|
492
|
+
// ─── Canonical Infrastructure Contracts ─────────────────────────────────
|
|
493
|
+
// Recognized as safe by the SafeHands Policy Engine to reduce false positives.
|
|
494
|
+
// Derived from the canonical ecosystem registry (src/data/ecosystemRegistry.data.ts)
|
|
495
|
+
// so the policy engine, the read-API analyzer (contractIntel), and the Anvita
|
|
496
|
+
// hosted-skill assets all recognize the same set — the registry is the single
|
|
497
|
+
// source of truth for these addresses.
|
|
498
|
+
function canonicalRegistryAddresses(itemId) {
|
|
499
|
+
const item = ECOSYSTEM_REGISTRY_ITEMS.find((i) => i.id === itemId);
|
|
500
|
+
return (item?.contracts ?? []).map((c) => c.address.toLowerCase());
|
|
501
|
+
}
|
|
502
|
+
export const PACIFIC_CANONICAL_CONTRACTS = canonicalRegistryAddresses("infrastructure:pacific-mainnet:canonical-contracts");
|
|
503
|
+
export const ATLANTIC_CANONICAL_CONTRACTS = canonicalRegistryAddresses("infrastructure:atlantic-testnet:canonical-contracts");
|
|
504
|
+
export function isCanonicalInfrastructure(address, isMainnet) {
|
|
505
|
+
if (!address)
|
|
506
|
+
return false;
|
|
507
|
+
const list = isMainnet ? PACIFIC_CANONICAL_CONTRACTS : ATLANTIC_CANONICAL_CONTRACTS;
|
|
508
|
+
return list.includes(address.toLowerCase());
|
|
509
|
+
}
|
|
293
510
|
//# sourceMappingURL=constants.js.map
|