safehands-pharos 1.5.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 -444
- 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 +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +29 -1
- 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 +0 -0
- package/dist/demo.d.ts.map +1 -1
- package/dist/demo.js +43 -8
- package/dist/demo.js.map +1 -1
- package/dist/index.d.ts +0 -0
- package/dist/index.d.ts.map +0 -0
- package/dist/index.js +212 -135
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +0 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +72 -10
- 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 +246 -97
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +334 -127
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/dodoApi.d.ts +26 -3
- package/dist/lib/dodoApi.d.ts.map +1 -1
- package/dist/lib/dodoApi.js +80 -17
- 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 +0 -0
- package/dist/lib/envLoader.d.ts.map +0 -0
- package/dist/lib/envLoader.js +39 -18
- package/dist/lib/envLoader.js.map +1 -1
- 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 +0 -1
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +297 -32
- 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 +5 -10
- package/dist/lib/pharosClient.d.ts.map +1 -1
- package/dist/lib/pharosClient.js +9 -16
- package/dist/lib/pharosClient.js.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.d.ts +37 -1
- package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.js +213 -52
- 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 +19 -0
- package/dist/lib/riskEngine.d.ts.map +1 -1
- package/dist/lib/riskEngine.js +94 -36
- 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 +3 -3
- package/dist/lib/signer/index.d.ts.map +1 -1
- package/dist/lib/signer/index.js +33 -11
- 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 +6 -1
- package/dist/lib/toolResponse.d.ts.map +1 -1
- package/dist/lib/toolResponse.js +13 -9
- 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 +8 -12
- package/dist/lib/wallet/index.d.ts.map +1 -1
- package/dist/lib/wallet/index.js +48 -35
- 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 +31 -10
- package/dist/tools/approveToken.d.ts.map +1 -1
- package/dist/tools/approveToken.js +91 -24
- package/dist/tools/approveToken.js.map +1 -1
- package/dist/tools/assessRisk.d.ts +13 -26
- package/dist/tools/assessRisk.d.ts.map +1 -1
- package/dist/tools/assessRisk.js +34 -75
- package/dist/tools/assessRisk.js.map +1 -1
- package/dist/tools/checkAllowance.d.ts +9 -3
- package/dist/tools/checkAllowance.d.ts.map +1 -1
- package/dist/tools/checkAllowance.js +27 -5
- package/dist/tools/checkAllowance.js.map +1 -1
- package/dist/tools/checkTokenSecurity.d.ts +62 -5
- package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
- package/dist/tools/checkTokenSecurity.js +166 -21
- package/dist/tools/checkTokenSecurity.js.map +1 -1
- package/dist/tools/createAgentWallet.d.ts +4 -2
- package/dist/tools/createAgentWallet.d.ts.map +1 -1
- package/dist/tools/createAgentWallet.js +36 -31
- package/dist/tools/createAgentWallet.js.map +1 -1
- package/dist/tools/estimateGas.d.ts +7 -2
- package/dist/tools/estimateGas.d.ts.map +1 -1
- package/dist/tools/estimateGas.js +16 -10
- package/dist/tools/estimateGas.js.map +1 -1
- package/dist/tools/executeSwap.d.ts +56 -8
- package/dist/tools/executeSwap.d.ts.map +1 -1
- package/dist/tools/executeSwap.js +194 -46
- package/dist/tools/executeSwap.js.map +1 -1
- package/dist/tools/explainRisk.d.ts +9 -9
- package/dist/tools/explainRisk.d.ts.map +1 -1
- package/dist/tools/explainRisk.js +5 -4
- 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 +1 -1
- package/dist/tools/getAgentWallet.d.ts.map +1 -1
- package/dist/tools/getAgentWallet.js +11 -1
- package/dist/tools/getAgentWallet.js.map +1 -1
- package/dist/tools/getAgentWalletBalance.d.ts +1 -1
- package/dist/tools/getAgentWalletBalance.d.ts.map +1 -1
- package/dist/tools/getAgentWalletBalance.js +58 -26
- package/dist/tools/getAgentWalletBalance.js.map +1 -1
- package/dist/tools/getExecutionHistory.d.ts +1 -1
- package/dist/tools/getExecutionHistory.d.ts.map +1 -1
- package/dist/tools/getExecutionHistory.js +13 -19
- package/dist/tools/getExecutionHistory.js.map +1 -1
- package/dist/tools/getGasPrice.d.ts +3 -3
- package/dist/tools/getGasPrice.d.ts.map +0 -0
- package/dist/tools/getGasPrice.js +7 -7
- package/dist/tools/getGasPrice.js.map +1 -1
- package/dist/tools/getPoolInfo.d.ts +17 -17
- package/dist/tools/getPoolInfo.d.ts.map +1 -1
- package/dist/tools/getPoolInfo.js +14 -9
- 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 +28 -85
- package/dist/tools/getTokenPrice.d.ts.map +1 -1
- package/dist/tools/getTokenPrice.js +87 -94
- package/dist/tools/getTokenPrice.js.map +1 -1
- package/dist/tools/getTransactionStatus.d.ts +2 -2
- package/dist/tools/getTransactionStatus.d.ts.map +0 -0
- package/dist/tools/getTransactionStatus.js +0 -0
- package/dist/tools/getTransactionStatus.js.map +0 -0
- package/dist/tools/getWalletBalance.d.ts +38 -3
- package/dist/tools/getWalletBalance.d.ts.map +1 -1
- package/dist/tools/getWalletBalance.js +92 -52
- package/dist/tools/getWalletBalance.js.map +1 -1
- package/dist/tools/publishRiskScore.d.ts +36 -14
- package/dist/tools/publishRiskScore.d.ts.map +1 -1
- package/dist/tools/publishRiskScore.js +80 -32
- 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 +14 -14
- package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
- package/dist/tools/queryRiskRegistry.js +34 -30
- package/dist/tools/queryRiskRegistry.js.map +1 -1
- package/dist/tools/safehandsPreflightCheck.d.ts +29 -14
- package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -1
- package/dist/tools/safehandsPreflightCheck.js +133 -6
- package/dist/tools/safehandsPreflightCheck.js.map +1 -1
- package/dist/tools/safehandsRiskReport.d.ts +29 -14
- package/dist/tools/safehandsRiskReport.d.ts.map +1 -1
- package/dist/tools/safehandsRiskReport.js +23 -3
- package/dist/tools/safehandsRiskReport.js.map +1 -1
- package/dist/tools/safehandsSafeExecute.d.ts +1 -1
- package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
- package/dist/tools/safehandsSafeExecute.js +100 -17
- package/dist/tools/safehandsSafeExecute.js.map +1 -1
- package/dist/tools/safehandsWalletHealth.d.ts +15 -1
- package/dist/tools/safehandsWalletHealth.d.ts.map +1 -1
- package/dist/tools/safehandsWalletHealth.js +67 -25
- package/dist/tools/safehandsWalletHealth.js.map +1 -1
- package/dist/tools/safehandsX402Preflight.d.ts +3 -3
- package/dist/tools/safehandsX402Preflight.d.ts.map +1 -1
- package/dist/tools/safehandsX402Preflight.js +24 -3
- package/dist/tools/safehandsX402Preflight.js.map +1 -1
- package/dist/tools/sendPayment.d.ts +10 -4
- package/dist/tools/sendPayment.d.ts.map +1 -1
- package/dist/tools/sendPayment.js +63 -36
- 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 +7 -3
- package/dist/tools/simulateTransaction.d.ts.map +1 -1
- package/dist/tools/simulateTransaction.js +42 -9
- package/dist/tools/simulateTransaction.js.map +1 -1
- package/dist/tools/tokenRegistryStatus.d.ts +25 -5
- package/dist/tools/tokenRegistryStatus.d.ts.map +1 -1
- package/dist/tools/tokenRegistryStatus.js +61 -31
- 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 +15 -9
- package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
- package/dist/tools/x402PayAndFetch.js +163 -20
- 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 +144 -35
- 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 -73
- 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 -397
- 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
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# SafeHands Reviewer Demo Script
|
|
2
|
+
|
|
3
|
+
Current as of v2.6.0: Pharos Pacific Mainnet (chain `1672`), Anvita Flow hosted agent, live contracts.
|
|
4
|
+
|
|
5
|
+
## 1. Project one-liner
|
|
6
|
+
|
|
7
|
+
SafeHands is the transaction firewall for AI agent finance on Pharos Pacific Mainnet: a deterministic policy engine that evaluates every agent action (payments, approvals, swaps, x402 calls, tokenized-asset moves) *before* the signature and returns `ALLOW` / `BLOCK` / `REQUIRE_CONFIRMATION` / `PREPARE_ONLY` with a plain-English reason. The hosted deployment is **read-only and zero-custody**: it holds no keys, signs nothing, and broadcasts nothing on its own.
|
|
8
|
+
|
|
9
|
+
For the Real-Fi & RWA angle (how the attestation ledger, risk registry, token verification, and USDC settlement rails serve tokenized real-world assets), see [REALFI_RWA_ALIGNMENT.md](./REALFI_RWA_ALIGNMENT.md).
|
|
10
|
+
|
|
11
|
+
## 2. Fastest paths for a reviewer
|
|
12
|
+
|
|
13
|
+
### No-install path: Anvita Flow hosted agent
|
|
14
|
+
|
|
15
|
+
The fully-hosted, zero-custody agent is live on [Anvita Flow](https://flow.anvita.xyz/home) as `safehands` (Agent Carnival Phase 2). Any Steward Agent on the marketplace can discover and call it: no server, no keys, no custody. To try the engine on your own machine without cloning:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx -y github:SZtch/safehands-pharos --demo
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Self-host the HTTP API (read-only; no keys, no tx)
|
|
22
|
+
|
|
23
|
+
Run the read-only reference backend locally, then hit it over HTTP:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm ci && npm run build
|
|
27
|
+
node dist/api/server.js # read-only API on http://localhost:4022
|
|
28
|
+
|
|
29
|
+
# Service health
|
|
30
|
+
curl -s http://localhost:4022/health
|
|
31
|
+
|
|
32
|
+
# Public network config (chain 1672)
|
|
33
|
+
curl -s http://localhost:4022/public-config
|
|
34
|
+
|
|
35
|
+
# A real preflight decision: unlimited approval → BLOCK
|
|
36
|
+
curl -s -X POST http://localhost:4022/tools/safehands_preflight_check \
|
|
37
|
+
-H "content-type: application/json" \
|
|
38
|
+
-d '{"actionType":"approve_token","chainId":1672,"approvalToken":"USDC","spender":"0x000000000000000000000000000000000000dEaD","approvalAmount":"max"}'
|
|
39
|
+
|
|
40
|
+
# On-chain reputation of the deployer (live attestation contract)
|
|
41
|
+
curl -s -X POST http://localhost:4022/tools/get_agent_reputation \
|
|
42
|
+
-H "content-type: application/json" \
|
|
43
|
+
-d '{"address":"0x6730d3a2A217108AB53CCFe60ffdAd05D3C124e5"}'
|
|
44
|
+
|
|
45
|
+
# x402 paid endpoint. Fail-closed by default: without x402 config this returns 503.
|
|
46
|
+
# With X402_PAY_TO and a reachable external X402_FACILITATOR_URL set, it returns a
|
|
47
|
+
# real HTTP 402 challenge (mainnet USDC, eip155:1672).
|
|
48
|
+
curl -s -i http://localhost:4022/paid/risk-report
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Interactive browser demo (while the local API runs): **http://localhost:4022/demo**.
|
|
52
|
+
|
|
53
|
+
## 3. Why SafeHands matters
|
|
54
|
+
|
|
55
|
+
AI agents making on-chain transactions need guardrails. Without safety checks, an agent could:
|
|
56
|
+
|
|
57
|
+
- Send funds to the wrong address or chain
|
|
58
|
+
- Approve unlimited token spending
|
|
59
|
+
- Sign drainer-crafted calldata it never actually decoded
|
|
60
|
+
- Execute swaps above policy limits
|
|
61
|
+
- Pay x402 invoices to SSRF targets
|
|
62
|
+
- Move a tokenized asset to an unvetted counterparty with no audit trail
|
|
63
|
+
|
|
64
|
+
SafeHands sits between the agent and the blockchain. Every action goes through preflight, risk scoring, policy checks, and authorization gates before execution is allowed; and, on the opt-in relayed-broadcast path (off by default), the broadcasts it relays are attested on-chain.
|
|
65
|
+
|
|
66
|
+
## 4. Execution modes
|
|
67
|
+
|
|
68
|
+
| Mode | Wallet | Where | Use case |
|
|
69
|
+
|------|--------|-------|----------|
|
|
70
|
+
| Read-only preflight *(default)* | none | hosted or local | Safety checks, risk analysis, demos |
|
|
71
|
+
| User-signed | user's own | anywhere | SafeHands validates; user signs externally; verified broadcast + attestation |
|
|
72
|
+
| Managed execution | local encrypted wallet | self-hosted only | Full agent autonomy, opt-in; refused on public hosts by a boot guard |
|
|
73
|
+
| Env wallet (advanced) | `PRIVATE_KEY` in env | local dev | Local mainnet development |
|
|
74
|
+
|
|
75
|
+
## 5. Live contracts: Pharos Pacific Mainnet
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Network: Pharos Pacific Mainnet
|
|
79
|
+
Chain ID: 1672
|
|
80
|
+
Registry: 0x428e02bf85412e7242d991cd6725ec59e8b06c8d
|
|
81
|
+
Attestation: 0x71a7a87b3b1ab6d86204cad691bb32fd75b4588c
|
|
82
|
+
Owner: 0x6730d3a2a217108ab53ccfe60ffdad05d3c124e5
|
|
83
|
+
Explorer: https://www.pharosscan.xyz
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
- **SafeHandsRegistry**: authorized operators, Merkle risk roots, `verifyRiskRecord` on-chain view.
|
|
87
|
+
- **SafeHandsAttestation**: immutable, privacy-preserving verified-safe records plus `reputationOf()` per-address reputation. Only hashed context is published (`preparedTransactionHash`, `policyHash`, `metadataHash`, `txHash`); never raw calldata, amounts, recipients, or keys.
|
|
88
|
+
|
|
89
|
+
Both are verifiable on the explorer; the reputation oracle has live attestations recorded by a dedicated attester key (`0xe9F1d28C7136BbB1a57DA9852F216b8Cb39Eb888`) that never signs user transactions.
|
|
90
|
+
|
|
91
|
+
## 6. Demo commands
|
|
92
|
+
|
|
93
|
+
### Quick demo (no setup required)
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
npm ci && npm run build
|
|
97
|
+
npm run demo # or: npx -y github:SZtch/safehands-pharos --demo
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### The firewall reading raw calldata (v2.4.0, 60-second demonstration)
|
|
101
|
+
|
|
102
|
+
The hosted engine decodes approval/transfer/admin calldata **offline**: no simulation service, no third-party API. Feed it a drainer-style transaction and watch it block from the raw bytes:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Unlimited approve to an unknown spender, hidden inside a "vault deposit": BLOCK
|
|
106
|
+
node anvita/safehands/scripts/safehands-engine.js analyze '{
|
|
107
|
+
"subjectType":"intent","action":"vault_deposit",
|
|
108
|
+
"walletAddress":"0x1111111111111111111111111111111111111111",
|
|
109
|
+
"vault":"0xcA11bde05977b3631167028862bE2a173976CA11",
|
|
110
|
+
"to":"0xc879C018Db60520f4355C26eD1a6D572CDAC1815",
|
|
111
|
+
"data":"0x095ea7b3000000000000000000000000000000000000000000000000000000000000deadffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}'
|
|
112
|
+
# -> recommendation: block, riskScore >= 90
|
|
113
|
+
# -> "UNLIMITED approve to an UNKNOWN spender (0x…dead); the spender could move the entire … balance"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Contrast with a **registry-verified** protocol: trust comes only from first-party evidence (the project's own docs + on-chain checks, cited in the registry):
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Morpho Blue on Pharos, verified 2026-07-11 from Morpho's own addresses page
|
|
120
|
+
node anvita/safehands/scripts/safehands-engine.js analyze '{"subjectType":"contract","address":"0x18573fA18fd17dDfD790B4a5B5b2977aad3b4Efb"}'
|
|
121
|
+
# -> recommendation: allow, riskScore 5
|
|
122
|
+
# -> "Canonical registry contract: Morpho Blue (verified via official-docs citation + on-chain check)"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Ecosystem names the registry recognizes but whose addresses are **not** yet published in their own docs (FaroSwap, Stargate, …) stay fail-closed: an unlimited approval to them blocks. That is policy, not a bug: recognition is never proof.
|
|
126
|
+
|
|
127
|
+
### Test suites
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
npm test # hermetic deterministic suite (no wallet, no RPC, no network needed)
|
|
131
|
+
npm run demo # 12 non-destructive demo scenarios
|
|
132
|
+
npm run test:contracts # 25 Hardhat Solidity tests (offline smoke fallback without a compiler)
|
|
133
|
+
npm run test:all # all combined
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Focused suites also exist: `test/x402-gate.test.ts` (x402 payment gate with a mock facilitator) and `test/risk-inclusion.test.ts` (Merkle inclusion proof path), runnable via `tsx --test <file>`.
|
|
137
|
+
|
|
138
|
+
## 7. Expected outputs
|
|
139
|
+
|
|
140
|
+
### Safe small payment → ALLOW
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
Action: send_payment
|
|
144
|
+
Chain ID: 1672 (Pharos Pacific Mainnet)
|
|
145
|
+
Amount: 0.001 PROS
|
|
146
|
+
-> Decision: ALLOW
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Non-Pharos chain → BLOCK
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
Action: send_payment
|
|
153
|
+
Chain ID: 1 (Ethereum Mainnet)
|
|
154
|
+
-> Decision: BLOCK
|
|
155
|
+
-> Reason: chain 1 is not the configured Pharos target
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Unlimited approval → BLOCK
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
Action: approve_token
|
|
162
|
+
Amount: unlimited / max
|
|
163
|
+
-> Decision: BLOCK
|
|
164
|
+
-> Reason: Unlimited approvals are blocked by default
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Unknown / unregistered token → REQUIRE_CONFIRMATION
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
Action: approve_token (finite amount, token not in the active registry)
|
|
171
|
+
-> Decision: REQUIRE_CONFIRMATION
|
|
172
|
+
-> tokenRegistry.status: unknown; human confirmation required
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### x402 SSRF / invalid amount → BLOCK
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
Action: x402_pay_and_fetch
|
|
179
|
+
URL: http://169.254.169.254/metadata (internal IP)
|
|
180
|
+
-> SSRF_BLOCKED
|
|
181
|
+
|
|
182
|
+
Action: x402_pay_and_fetch
|
|
183
|
+
Amount: -1 USDC
|
|
184
|
+
-> VALIDATION_ERROR
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Policy: advanced allows a large swap, conservative does not
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
Policy: advanced
|
|
191
|
+
Action: swap 1000 PROS
|
|
192
|
+
-> within advanced maxSwapPROS: 1000
|
|
193
|
+
|
|
194
|
+
Policy: conservative
|
|
195
|
+
Action: swap 1000 PROS
|
|
196
|
+
-> exceeds conservative maxSwapPROS: 1
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Hard safety rules override any policy
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
Policy: advanced · Action: payment on chainId 1 -> BLOCK (non-Pharos chain, regardless of policy)
|
|
203
|
+
Policy: advanced · Action: unlimited approval -> BLOCK (regardless of policy)
|
|
204
|
+
Policy: advanced · Action: x402 to internal IP -> BLOCK (SSRF, regardless of policy)
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## 8. The 33 tools (grouped)
|
|
208
|
+
|
|
209
|
+
| Category | Tools |
|
|
210
|
+
|----------|-------|
|
|
211
|
+
| Safety preflight | `safehands_preflight_check`, `safehands_x402_preflight`, `safehands_risk_report`, `safehands_wallet_health`, `explain_risk`, `token_registry_status` |
|
|
212
|
+
| Risk registry (on-chain) | `publish_risk_score`, `query_risk_registry`, `verify_risk_inclusion`, `get_agent_reputation` |
|
|
213
|
+
| Risk + analysis | `assess_risk`, `check_token_security`, `simulate_transaction`, `estimate_gas`, `check_allowance` |
|
|
214
|
+
| Market + chain data | `get_token_price`, `get_wallet_balance`, `get_gas_price`, `get_pool_info`, `get_transaction_status`, `get_execution_history`, `query_goldsky_subgraph`, `get_spv_proof` |
|
|
215
|
+
| Execution (gated) | `safehands_safe_execute`, `execute_swap`, `send_payment`, `approve_token`, `x402_pay_and_fetch` |
|
|
216
|
+
| Agent policy | `get_agent_policy`, `set_agent_policy` |
|
|
217
|
+
| Managed wallet | `create_agent_wallet`, `get_agent_wallet`, `get_agent_wallet_balance` |
|
|
218
|
+
|
|
219
|
+
All 33 are exposed identically across MCP, HTTP, and CLI.
|
|
220
|
+
|
|
221
|
+
## 9. Limitations (honest)
|
|
222
|
+
|
|
223
|
+
- Hosted mode (Anvita Flow) and the self-hosted read-only backend are zero-custody; execution, signing, managed wallets, and on-chain publishing are gated and disabled by default. A boot guard refuses managed/write execution on a public host.
|
|
224
|
+
- Managed-wallet encryption is AES-256-GCM, not KMS/Vault-grade; not intended for custody of large amounts, and not audited for production custody.
|
|
225
|
+
- GoPlus token security does not cover Pharos Atlantic Testnet (`688689`).
|
|
226
|
+
- DODO reverse routes can occasionally lack liquidity for exotic pairs.
|
|
227
|
+
- L1 risk-root committer automation and the DA-serving endpoint are roadmap; the on-chain read/verify path (`verify_risk_inclusion`) is live.
|
|
228
|
+
- The risk-root pipeline (queue, batch flush, `commitRiskRoot`, inclusion verify) is functional end to end and the first production batch is committed on-chain: a registry `query` reports `hasCommittedRoot:true` and returns a risk record sourced from the committed data-availability pointer. The attestation contract also has live on-chain usage.
|
package/package.json
CHANGED
|
@@ -1,73 +1,130 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "safehands-pharos",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Pharos Skill
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/
|
|
7
|
-
"types": "dist/
|
|
8
|
-
"exports": {
|
|
9
|
-
".":
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
},
|
|
14
|
-
"
|
|
15
|
-
"dist",
|
|
16
|
-
"
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"agent-
|
|
45
|
-
"
|
|
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
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "safehands-pharos",
|
|
3
|
+
"version": "2.6.0",
|
|
4
|
+
"description": "Open-source reusable Pharos Skill, the transaction firewall for AI agent finance on Pharos Pacific Mainnet: deterministic safety verdicts before any wallet signs. Read-only by default; write tools optional, gated, off by default.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/sdk.js",
|
|
7
|
+
"types": "dist/sdk.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/sdk.d.ts",
|
|
11
|
+
"import": "./dist/sdk.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"bin": {
|
|
15
|
+
"safehands-pharos": "dist/index.js",
|
|
16
|
+
"safehands": "dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"contracts",
|
|
21
|
+
"README.md",
|
|
22
|
+
"SECURITY.md",
|
|
23
|
+
".env.example",
|
|
24
|
+
"LICENSE",
|
|
25
|
+
"SKILL.md",
|
|
26
|
+
".agents/policies/default.json",
|
|
27
|
+
"docs/REVIEWER_QUICKSTART.md",
|
|
28
|
+
"docs/SAFEHANDS_REVIEWER_DEMO_SCRIPT.md"
|
|
29
|
+
],
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc",
|
|
32
|
+
"prepack": "npm run build",
|
|
33
|
+
"prepublishOnly": "npm run build && npm test",
|
|
34
|
+
"start": "node dist/api/server.js",
|
|
35
|
+
"start:api": "node dist/api/server.js",
|
|
36
|
+
"start:mcp": "node dist/index.js",
|
|
37
|
+
"dev": "tsx src/index.ts",
|
|
38
|
+
"x402-server": "node dist/x402Server.js",
|
|
39
|
+
"guardian-api": "tsx src/api/server.ts",
|
|
40
|
+
"agent:demo": "tsx examples/agent-arena/guardian-agent-demo.ts",
|
|
41
|
+
"agent:x402": "tsx examples/agent-arena/payment-agent-x402.ts",
|
|
42
|
+
"agent:defi": "tsx examples/agent-arena/defi-agent-approval.ts",
|
|
43
|
+
"demo": "tsx src/index.ts --demo",
|
|
44
|
+
"test": "tsx --test test/policy-suite.test.ts test/action-policy.test.ts test/calldata-decoder.test.ts test/risk-inclusion.test.ts test/risk-engine.test.ts test/http-ssrf.test.ts test/x402-gate.test.ts test/x402-daily-cap.test.ts test/write-auth.test.ts test/write-path-gates.test.ts test/write-tools-risk-gate.test.ts test/attestation-publisher.test.ts test/spv-verifier.test.ts test/agent-policy-guard.test.ts test/sdk-exports.test.ts test/wallet-crypto.test.ts test/execution-hardening.test.ts test/input-hardening.test.ts test/token-security-failclosed.test.ts test/token-registry-metadata.test.ts test/price-resolver.test.ts test/price-tools.test.ts test/ecosystem-registry.test.ts test/registry-defaults.test.ts test/truth-model.test.ts test/ecosystem-registry-schema.test.ts test/anvita-asset-sync.test.ts test/registry-failclosed.test.ts test/okx-dex-api.test.ts test/anvita-engine.test.mjs test/anvita-engine-calldata.test.mjs test/anvita-engine-composition.test.mjs test/anvita-engine-alias.test.mjs",
|
|
45
|
+
"test:live": "tsx --test test/live-smoke.test.ts",
|
|
46
|
+
"typecheck:test": "tsc -p tsconfig.test.json",
|
|
47
|
+
"lint": "eslint .",
|
|
48
|
+
"test:contracts": "node scripts/run-contract-tests.mjs",
|
|
49
|
+
"test:live-broadcast": "node scripts/live-broadcast-test.mjs",
|
|
50
|
+
"test:all": "npm run build && npm run typecheck:test && npm run lint && npm test && npm run demo && npm run test:contracts",
|
|
51
|
+
"package:anvita": "node scripts/package-anvita-safehands.mjs",
|
|
52
|
+
"sync:anvita": "tsx scripts/sync-anvita-assets.ts",
|
|
53
|
+
"sync:anvita:check": "tsx scripts/sync-anvita-assets.ts --check",
|
|
54
|
+
"test:contracts:hardhat": "npx hardhat test test/contracts/SafeHandsRegistry.ts test/contracts/SafeHandsAttestation.ts",
|
|
55
|
+
"x402-server:dev": "tsx src/x402Server.ts",
|
|
56
|
+
"start:x402": "node dist/x402Server.js",
|
|
57
|
+
"start:worker": "node dist/worker.js",
|
|
58
|
+
"worker": "tsx src/worker.ts",
|
|
59
|
+
"start:full-local": "node scripts/start-full-local.mjs",
|
|
60
|
+
"prepare": "npm run build"
|
|
61
|
+
},
|
|
62
|
+
"keywords": [
|
|
63
|
+
"pharos",
|
|
64
|
+
"mcp",
|
|
65
|
+
"mcp-skill",
|
|
66
|
+
"defi",
|
|
67
|
+
"risk-engine",
|
|
68
|
+
"ai-agent",
|
|
69
|
+
"faroswap",
|
|
70
|
+
"viem",
|
|
71
|
+
"pharos-pacific",
|
|
72
|
+
"mainnet",
|
|
73
|
+
"web3",
|
|
74
|
+
"pharos-skill-engine",
|
|
75
|
+
"guardrail",
|
|
76
|
+
"transaction-safety",
|
|
77
|
+
"transaction-firewall",
|
|
78
|
+
"x402",
|
|
79
|
+
"agent-safety",
|
|
80
|
+
"safehands",
|
|
81
|
+
"rwa",
|
|
82
|
+
"real-fi",
|
|
83
|
+
"realfi",
|
|
84
|
+
"real-world-assets",
|
|
85
|
+
"attestation"
|
|
86
|
+
],
|
|
87
|
+
"author": "SZtch",
|
|
88
|
+
"license": "MIT",
|
|
89
|
+
"repository": {
|
|
90
|
+
"type": "git",
|
|
91
|
+
"url": "https://github.com/SZtch/safehands-pharos.git"
|
|
92
|
+
},
|
|
93
|
+
"homepage": "https://github.com/SZtch/safehands-pharos#readme",
|
|
94
|
+
"engines": {
|
|
95
|
+
"node": ">=20.0.0"
|
|
96
|
+
},
|
|
97
|
+
"dependencies": {
|
|
98
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
99
|
+
"@x402/core": "^2.15.0",
|
|
100
|
+
"@x402/evm": "^2.15.0",
|
|
101
|
+
"@x402/express": "^2.15.0",
|
|
102
|
+
"@x402/fetch": "^2.15.0",
|
|
103
|
+
"express": "^5.2.1",
|
|
104
|
+
"merkletreejs": "^0.6.0",
|
|
105
|
+
"viem": "^2.31.3",
|
|
106
|
+
"zod": "^3.25.67"
|
|
107
|
+
},
|
|
108
|
+
"devDependencies": {
|
|
109
|
+
"@eslint/js": "^10.0.1",
|
|
110
|
+
"@nomicfoundation/hardhat-toolbox": "^7.0.0",
|
|
111
|
+
"@nomicfoundation/hardhat-toolbox-viem": "^5.0.7",
|
|
112
|
+
"@openzeppelin/contracts": "^5.6.1",
|
|
113
|
+
"@types/chai": "^5.2.3",
|
|
114
|
+
"@types/express": "^5.0.6",
|
|
115
|
+
"@types/mocha": "^10.0.10",
|
|
116
|
+
"@types/node": "^22.15.0",
|
|
117
|
+
"chai": "^6.2.2",
|
|
118
|
+
"dotenv": "^17.4.2",
|
|
119
|
+
"eslint": "^10.7.0",
|
|
120
|
+
"hardhat": "^3.9.0",
|
|
121
|
+
"mocha": "^11.7.6",
|
|
122
|
+
"tsx": "^4.20.3",
|
|
123
|
+
"typescript": "^5.9.3",
|
|
124
|
+
"typescript-eslint": "^8.63.0"
|
|
125
|
+
},
|
|
126
|
+
"overrides": {
|
|
127
|
+
"ws": "^8.21.0",
|
|
128
|
+
"undici": "^6.24.0"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"abi": [
|
|
3
|
-
{
|
|
4
|
-
"inputs": [],
|
|
5
|
-
"stateMutability": "nonpayable",
|
|
6
|
-
"type": "constructor"
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
"anonymous": false,
|
|
10
|
-
"inputs": [
|
|
11
|
-
{
|
|
12
|
-
"indexed": true,
|
|
13
|
-
"internalType": "address",
|
|
14
|
-
"name": "agent",
|
|
15
|
-
"type": "address"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"indexed": false,
|
|
19
|
-
"internalType": "bool",
|
|
20
|
-
"name": "status",
|
|
21
|
-
"type": "bool"
|
|
22
|
-
}
|
|
23
|
-
],
|
|
24
|
-
"name": "AgentAuthorized",
|
|
25
|
-
"type": "event"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"anonymous": false,
|
|
29
|
-
"inputs": [
|
|
30
|
-
{
|
|
31
|
-
"indexed": true,
|
|
32
|
-
"internalType": "address",
|
|
33
|
-
"name": "wallet",
|
|
34
|
-
"type": "address"
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"indexed": false,
|
|
38
|
-
"internalType": "uint256",
|
|
39
|
-
"name": "score",
|
|
40
|
-
"type": "uint256"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"indexed": false,
|
|
44
|
-
"internalType": "string",
|
|
45
|
-
"name": "riskLevel",
|
|
46
|
-
"type": "string"
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"indexed": false,
|
|
50
|
-
"internalType": "address",
|
|
51
|
-
"name": "assessedBy",
|
|
52
|
-
"type": "address"
|
|
53
|
-
}
|
|
54
|
-
],
|
|
55
|
-
"name": "RiskPublished",
|
|
56
|
-
"type": "event"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"inputs": [
|
|
60
|
-
{
|
|
61
|
-
"internalType": "address",
|
|
62
|
-
"name": "",
|
|
63
|
-
"type": "address"
|
|
64
|
-
}
|
|
65
|
-
],
|
|
66
|
-
"name": "authorizedAgents",
|
|
67
|
-
"outputs": [
|
|
68
|
-
{
|
|
69
|
-
"internalType": "bool",
|
|
70
|
-
"name": "",
|
|
71
|
-
"type": "bool"
|
|
72
|
-
}
|
|
73
|
-
],
|
|
74
|
-
"stateMutability": "view",
|
|
75
|
-
"type": "function"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"inputs": [],
|
|
79
|
-
"name": "owner",
|
|
80
|
-
"outputs": [
|
|
81
|
-
{
|
|
82
|
-
"internalType": "address",
|
|
83
|
-
"name": "",
|
|
84
|
-
"type": "address"
|
|
85
|
-
}
|
|
86
|
-
],
|
|
87
|
-
"stateMutability": "view",
|
|
88
|
-
"type": "function"
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
"inputs": [
|
|
92
|
-
{
|
|
93
|
-
"internalType": "address",
|
|
94
|
-
"name": "wallet",
|
|
95
|
-
"type": "address"
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
"internalType": "uint256",
|
|
99
|
-
"name": "score",
|
|
100
|
-
"type": "uint256"
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
"internalType": "string",
|
|
104
|
-
"name": "riskLevel",
|
|
105
|
-
"type": "string"
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"internalType": "string",
|
|
109
|
-
"name": "recommendation",
|
|
110
|
-
"type": "string"
|
|
111
|
-
}
|
|
112
|
-
],
|
|
113
|
-
"name": "publish",
|
|
114
|
-
"outputs": [],
|
|
115
|
-
"stateMutability": "nonpayable",
|
|
116
|
-
"type": "function"
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
"inputs": [
|
|
120
|
-
{
|
|
121
|
-
"internalType": "address",
|
|
122
|
-
"name": "wallet",
|
|
123
|
-
"type": "address"
|
|
124
|
-
}
|
|
125
|
-
],
|
|
126
|
-
"name": "query",
|
|
127
|
-
"outputs": [
|
|
128
|
-
{
|
|
129
|
-
"components": [
|
|
130
|
-
{
|
|
131
|
-
"internalType": "uint256",
|
|
132
|
-
"name": "score",
|
|
133
|
-
"type": "uint256"
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
"internalType": "string",
|
|
137
|
-
"name": "riskLevel",
|
|
138
|
-
"type": "string"
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
"internalType": "string",
|
|
142
|
-
"name": "recommendation",
|
|
143
|
-
"type": "string"
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
"internalType": "uint256",
|
|
147
|
-
"name": "timestamp",
|
|
148
|
-
"type": "uint256"
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
"internalType": "address",
|
|
152
|
-
"name": "assessedBy",
|
|
153
|
-
"type": "address"
|
|
154
|
-
}
|
|
155
|
-
],
|
|
156
|
-
"internalType": "struct RiskRegistry.RiskRecord",
|
|
157
|
-
"name": "",
|
|
158
|
-
"type": "tuple"
|
|
159
|
-
}
|
|
160
|
-
],
|
|
161
|
-
"stateMutability": "view",
|
|
162
|
-
"type": "function"
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
"inputs": [
|
|
166
|
-
{
|
|
167
|
-
"internalType": "address",
|
|
168
|
-
"name": "",
|
|
169
|
-
"type": "address"
|
|
170
|
-
}
|
|
171
|
-
],
|
|
172
|
-
"name": "registry",
|
|
173
|
-
"outputs": [
|
|
174
|
-
{
|
|
175
|
-
"internalType": "uint256",
|
|
176
|
-
"name": "score",
|
|
177
|
-
"type": "uint256"
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
"internalType": "string",
|
|
181
|
-
"name": "riskLevel",
|
|
182
|
-
"type": "string"
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
"internalType": "string",
|
|
186
|
-
"name": "recommendation",
|
|
187
|
-
"type": "string"
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
"internalType": "uint256",
|
|
191
|
-
"name": "timestamp",
|
|
192
|
-
"type": "uint256"
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
"internalType": "address",
|
|
196
|
-
"name": "assessedBy",
|
|
197
|
-
"type": "address"
|
|
198
|
-
}
|
|
199
|
-
],
|
|
200
|
-
"stateMutability": "view",
|
|
201
|
-
"type": "function"
|
|
202
|
-
},
|
|
203
|
-
{
|
|
204
|
-
"inputs": [
|
|
205
|
-
{
|
|
206
|
-
"internalType": "address",
|
|
207
|
-
"name": "agent",
|
|
208
|
-
"type": "address"
|
|
209
|
-
},
|
|
210
|
-
{
|
|
211
|
-
"internalType": "bool",
|
|
212
|
-
"name": "status",
|
|
213
|
-
"type": "bool"
|
|
214
|
-
}
|
|
215
|
-
],
|
|
216
|
-
"name": "setAuthorizedAgent",
|
|
217
|
-
"outputs": [],
|
|
218
|
-
"stateMutability": "nonpayable",
|
|
219
|
-
"type": "function"
|
|
220
|
-
}
|
|
221
|
-
],
|
|
222
|
-
"bytecode": "0x6080604052348015600e575f5ffd5b505f80546001600160a01b0319163390811782558152600160208190526040909120805460ff19169091179055610acd806100485f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c8063038defd7146100645780630e273811146100915780638da5cb5b146100a6578063cf78537f146100d0578063d4fc9fc6146100e3578063efd7606514610103575b5f5ffd5b6100776100723660046106dd565b610135565b60405161008895949392919061072b565b60405180910390f35b6100a461009f366004610778565b610279565b005b5f546100b8906001600160a01b031681565b6040516001600160a01b039091168152602001610088565b6100a46100de3660046107f6565b610343565b6100f66100f13660046106dd565b61051a565b604051610088919061087f565b6101256101113660046106dd565b60016020525f908152604090205460ff1681565b6040519015158152602001610088565b60026020525f908152604090208054600182018054919291610156906108ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610182906108ed565b80156101cd5780601f106101a4576101008083540402835291602001916101cd565b820191905f5260205f20905b8154815290600101906020018083116101b057829003601f168201915b5050505050908060020180546101e2906108ed565b80601f016020809104026020016040519081016040528092919081815260200182805461020e906108ed565b80156102595780601f1061023057610100808354040283529160200191610259565b820191905f5260205f20905b81548152906001019060200180831161023c57829003601f168201915b5050505060038301546004909301549192916001600160a01b0316905085565b5f546001600160a01b031633146102e55760405162461bcd60e51b815260206004820152602560248201527f5269736b52656769737472793a2063616c6c6572206973206e6f74207468652060448201526437bbb732b960d91b60648201526084015b60405180910390fd5b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527f1b06338d0edf2ba8ccee31e466ab37b376418209af6a85c55c51e89a51e33bde910160405180910390a25050565b335f9081526001602052604090205460ff168061036957505f546001600160a01b031633145b6103cd5760405162461bcd60e51b815260206004820152602f60248201527f5269736b52656769737472793a2063616c6c6572206973206e6f7420616e206160448201526e1d5d1a1bdc9a5e9959081859d95b9d608a1b60648201526084016102dc565b6040518060a0016040528086815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8601819004810282018101909252848152918101919085908590819084018382808284375f920182905250938552505042602080850191909152336040948501526001600160a01b038b1683526002815292909120835181559183015160018301915061048b9082610990565b50604082015160028201906104a09082610990565b5060608201516003820155608090910151600490910180546001600160a01b0319166001600160a01b03928316179055604051908716907ff1540e034908b7aedb3f7cc639f04615bf51f301d55b49f7b786fbfc97ba144e9061050a908890889088903390610a4f565b60405180910390a2505050505050565b6105526040518060a001604052805f815260200160608152602001606081526020015f81526020015f6001600160a01b031681525090565b6001600160a01b0382165f90815260026020908152604091829020825160a0810190935280548352600181018054919284019161058e906108ed565b80601f01602080910402602001604051908101604052809291908181526020018280546105ba906108ed565b80156106055780601f106105dc57610100808354040283529160200191610605565b820191905f5260205f20905b8154815290600101906020018083116105e857829003601f168201915b5050505050815260200160028201805461061e906108ed565b80601f016020809104026020016040519081016040528092919081815260200182805461064a906108ed565b80156106955780601f1061066c57610100808354040283529160200191610695565b820191905f5260205f20905b81548152906001019060200180831161067857829003601f168201915b5050509183525050600382015460208201526004909101546001600160a01b031660409091015292915050565b80356001600160a01b03811681146106d8575f5ffd5b919050565b5f602082840312156106ed575f5ffd5b6106f6826106c2565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b85815260a060208201525f61074360a08301876106fd565b828103604084015261075581876106fd565b606084019590955250506001600160a01b03919091166080909101529392505050565b5f5f60408385031215610789575f5ffd5b610792836106c2565b9150602083013580151581146107a6575f5ffd5b809150509250929050565b5f5f83601f8401126107c1575f5ffd5b50813567ffffffffffffffff8111156107d8575f5ffd5b6020830191508360208285010111156107ef575f5ffd5b9250929050565b5f5f5f5f5f5f6080878903121561080b575f5ffd5b610814876106c2565b955060208701359450604087013567ffffffffffffffff811115610836575f5ffd5b61084289828a016107b1565b909550935050606087013567ffffffffffffffff811115610861575f5ffd5b61086d89828a016107b1565b979a9699509497509295939492505050565b60208152815160208201525f602083015160a060408401526108a460c08401826106fd565b90506040840151601f198483030160608501526108c182826106fd565b6060860151608086810191909152909501516001600160a01b031660a090940193909352509192915050565b600181811c9082168061090157607f821691505b60208210810361091f57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b601f82111561098b578282111561098b57805f5260205f20601f840160051c602085101561096457505f5b90810190601f840160051c035f5b81811015610987575f83820155600101610972565b5050505b505050565b815167ffffffffffffffff8111156109aa576109aa610925565b6109be816109b884546108ed565b84610939565b6020601f8211600181146109f0575f83156109d95750848201515b5f19600385901b1c1916600184901b178455610a48565b5f84815260208120601f198516915b82811015610a1f57878501518255602094850194600190920191016109ff565b5084821015610a3c57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b84815260606020820152826060820152828460808301375f8184016080908101919091526001600160a01b03929092166040820152601f909201601f1916909101019291505056fea264697066735822122080db3ef6d92b3c79716ffa2db8ddca83c100456ec5cabfa8261d6c4e5c8dac9464736f6c63430008230033"
|
|
223
|
-
}
|