safehands-pharos 1.5.0 → 2.8.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/handsafe.zip +0 -0
- 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/abiWords.d.ts +17 -0
- package/dist/lib/analysis/abiWords.d.ts.map +1 -0
- package/dist/lib/analysis/abiWords.js +48 -0
- package/dist/lib/analysis/abiWords.js.map +1 -0
- 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 +189 -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 +464 -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 +126 -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 +107 -38
- 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 +131 -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
package/dist/lib/riskEngine.js
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
// ─── Risk Scoring Engine
|
|
1
|
+
// ─── Risk Scoring Engine (ADVISORY) ────────────────────────────────────
|
|
2
2
|
// 5-dimension risk assessment engine for SafeHands.
|
|
3
3
|
// Weights: liquidity 25%, slippage 25%, counterparty 20%,
|
|
4
4
|
// balance 15%, market conditions 15%
|
|
5
|
+
//
|
|
6
|
+
// This engine never gates execution. Its output is advisory: published
|
|
7
|
+
// on-chain as part of the assessment record (publish_risk_score) and fed to
|
|
8
|
+
// the actionPolicyEngine as evidence (riskEvidenceFromAssessment) — the
|
|
9
|
+
// policy engine is the sole ALLOW/BLOCK decider on write paths
|
|
10
|
+
// (docs/DECISION_CONTRACT.md).
|
|
5
11
|
// ────────────────────────────────────────────────────────────────────────
|
|
6
12
|
import { publicClient } from "./pharosClient.js";
|
|
7
|
-
import { getDodoRoute, isNativeToken, resolveTokenAddress, resolveTokenDecimals, toWei, } from "./dodoApi.js";
|
|
8
|
-
import { RISK_WEIGHTS, RISK_BLOCK_THRESHOLD, MAX_SLIPPAGE_PCT, MAX_BALANCE_USAGE_PCT, ERC20_ABI, } from "./constants.js";
|
|
13
|
+
import { getDodoRoute, isNativeToken, resolveTokenAddress, resolveTokenDecimals, toWei, DodoNotConfiguredError, } from "./dodoApi.js";
|
|
14
|
+
import { RISK_WEIGHTS, RISK_BLOCK_THRESHOLD, COUNTERPARTY_CRITICAL_THRESHOLD, MAX_SLIPPAGE_PCT, MAX_BALANCE_USAGE_PCT, ERC20_ABI, CHAIN_ID, } from "./constants.js";
|
|
15
|
+
import { addressTrustEvidence } from "./ecosystemRegistry.js";
|
|
9
16
|
import { formatEther, isAddress, parseEther } from "viem";
|
|
10
17
|
// ─── Helpers ───────────────────────────────────────────────────────────
|
|
11
18
|
function clamp(value, min = 0, max = 100) {
|
|
@@ -39,32 +46,37 @@ function weightedAverage(breakdown) {
|
|
|
39
46
|
/**
|
|
40
47
|
* Pre-fetches the DODO route quote once for swap actions.
|
|
41
48
|
* Both scoreLiquidity and scoreSlippage use this cached result.
|
|
49
|
+
* `notConfigured` distinguishes the structural provider-not-configured state
|
|
50
|
+
* (SWAP_LIQUIDITY_NOT_CONFIGURED) from a transient fetch failure.
|
|
42
51
|
*/
|
|
43
52
|
async function fetchSwapQuote(input) {
|
|
44
53
|
if (input.action !== "swap")
|
|
45
|
-
return null;
|
|
54
|
+
return { quote: null, notConfigured: false };
|
|
46
55
|
try {
|
|
47
|
-
|
|
56
|
+
const quote = await getDodoRoute({
|
|
48
57
|
fromToken: input.tokenIn,
|
|
49
58
|
toToken: input.tokenOut,
|
|
50
59
|
amountHuman: input.amount,
|
|
51
60
|
walletAddress: input.walletAddress,
|
|
52
61
|
});
|
|
62
|
+
return { quote, notConfigured: false };
|
|
53
63
|
}
|
|
54
|
-
catch {
|
|
55
|
-
return null;
|
|
64
|
+
catch (err) {
|
|
65
|
+
return { quote: null, notConfigured: err instanceof DodoNotConfiguredError };
|
|
56
66
|
}
|
|
57
67
|
}
|
|
58
|
-
function scoreLiquidity(input, quote) {
|
|
68
|
+
function scoreLiquidity(input, quote, notConfigured) {
|
|
59
69
|
const reasons = [];
|
|
60
70
|
if (input.action !== "swap")
|
|
61
71
|
return { score: 0, reasons };
|
|
62
72
|
if (!quote) {
|
|
63
|
-
reasons.push(
|
|
73
|
+
reasons.push(notConfigured
|
|
74
|
+
? `Swap liquidity provider is not configured for chainId ${CHAIN_ID} (SWAP_LIQUIDITY_NOT_CONFIGURED); liquidity cannot be verified on this network.`
|
|
75
|
+
: "Failed to fetch liquidity data: route provider unavailable.");
|
|
64
76
|
return { score: 70, reasons };
|
|
65
77
|
}
|
|
66
78
|
if (!quote.routeAvailable) {
|
|
67
|
-
reasons.push("No swap route available
|
|
79
|
+
reasons.push("No swap route available; liquidity may be exhausted");
|
|
68
80
|
return { score: 100, reasons };
|
|
69
81
|
}
|
|
70
82
|
const impact = Math.abs(quote.priceImpact);
|
|
@@ -79,16 +91,18 @@ function scoreLiquidity(input, quote) {
|
|
|
79
91
|
reasons.push(`Price impact acceptable: ${impact.toFixed(2)}%`);
|
|
80
92
|
return { score: clamp(impact * 15), reasons };
|
|
81
93
|
}
|
|
82
|
-
function scoreSlippage(input, quote) {
|
|
94
|
+
function scoreSlippage(input, quote, notConfigured) {
|
|
83
95
|
const reasons = [];
|
|
84
96
|
if (input.action !== "swap")
|
|
85
97
|
return { score: 0, reasons };
|
|
86
98
|
if (!quote) {
|
|
87
|
-
reasons.push(
|
|
99
|
+
reasons.push(notConfigured
|
|
100
|
+
? `Slippage cannot be estimated: swap route provider not configured for chainId ${CHAIN_ID} (SWAP_LIQUIDITY_NOT_CONFIGURED).`
|
|
101
|
+
: "Slippage estimation failed: route provider unavailable.");
|
|
88
102
|
return { score: 60, reasons };
|
|
89
103
|
}
|
|
90
104
|
if (!quote.routeAvailable) {
|
|
91
|
-
reasons.push("Cannot estimate slippage
|
|
105
|
+
reasons.push("Cannot estimate slippage: no route");
|
|
92
106
|
return { score: 90, reasons };
|
|
93
107
|
}
|
|
94
108
|
const impact = Math.abs(quote.priceImpact);
|
|
@@ -99,12 +113,28 @@ function scoreSlippage(input, quote) {
|
|
|
99
113
|
reasons.push(`Estimated slippage: ${impact.toFixed(2)}%`);
|
|
100
114
|
return { score: clamp(impact * 16), reasons };
|
|
101
115
|
}
|
|
102
|
-
async function scoreCounterparty(input) {
|
|
116
|
+
async function scoreCounterparty(input, quote) {
|
|
103
117
|
const reasons = [];
|
|
104
118
|
if (input.action === "swap") {
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
|
|
119
|
+
// Registry-driven counterparty trust ONLY. The former unconditional
|
|
120
|
+
// "DODO protocol (known) → 5" relaxed risk with a testnet-provenance claim
|
|
121
|
+
// that holds on no network per the ecosystem registry.
|
|
122
|
+
const router = quote?.routeAvailable && isAddress(quote.to) ? quote.to : null;
|
|
123
|
+
if (!router) {
|
|
124
|
+
reasons.push("Swap counterparty (router) could not be determined; no route data to evaluate.");
|
|
125
|
+
return { score: 55, reasons };
|
|
126
|
+
}
|
|
127
|
+
const evidence = addressTrustEvidence(router, CHAIN_ID);
|
|
128
|
+
if (evidence.verifiedCanonical) {
|
|
129
|
+
reasons.push(`Swap router ${evidence.contractLabel ?? router} is VERIFIED in the SafeHands ecosystem registry.`);
|
|
130
|
+
return { score: 5, reasons };
|
|
131
|
+
}
|
|
132
|
+
if (evidence.recognized) {
|
|
133
|
+
reasons.push(`Swap router matches ecosystem-registry entry "${evidence.contractLabel}" (${evidence.verificationStatus}); recognition only, not a safety signal.`);
|
|
134
|
+
return { score: 40, reasons };
|
|
135
|
+
}
|
|
136
|
+
reasons.push(`Swap router ${router} is not in the SafeHands ecosystem registry: unverified counterparty (the execution allowlist still constrains which router may execute at write time).`);
|
|
137
|
+
return { score: 55, reasons };
|
|
108
138
|
}
|
|
109
139
|
// For transfers, check the recipient address
|
|
110
140
|
const to = input.toAddress;
|
|
@@ -118,35 +148,43 @@ async function scoreCounterparty(input) {
|
|
|
118
148
|
}
|
|
119
149
|
// Zero address check
|
|
120
150
|
if (to === "0x0000000000000000000000000000000000000000") {
|
|
121
|
-
reasons.push("Sending to zero address
|
|
151
|
+
reasons.push("Sending to zero address; tokens will be burned");
|
|
122
152
|
return { score: 95, reasons };
|
|
123
153
|
}
|
|
124
154
|
// Self-send check
|
|
125
155
|
if (to.toLowerCase() === input.walletAddress.toLowerCase()) {
|
|
126
|
-
reasons.push("Sending to own address
|
|
156
|
+
reasons.push("Sending to own address; likely unintended");
|
|
127
157
|
return { score: 50, reasons };
|
|
128
158
|
}
|
|
159
|
+
// Both probes below are the ONLY evidence behind a clean recipient verdict.
|
|
160
|
+
// If either RPC read fails the recipient is unexamined, not safe, so the
|
|
161
|
+
// failure is surfaced as degraded rather than swallowed into "looks valid".
|
|
162
|
+
let probeFailed = false;
|
|
129
163
|
// Check if address has code (is a contract)
|
|
130
164
|
try {
|
|
131
165
|
const code = await publicClient.getCode({ address: to });
|
|
132
166
|
if (code && code !== "0x") {
|
|
133
|
-
reasons.push("Recipient is a contract address
|
|
167
|
+
reasons.push("Recipient is a contract address; verify intent");
|
|
134
168
|
return { score: 40, reasons };
|
|
135
169
|
}
|
|
136
170
|
}
|
|
137
171
|
catch {
|
|
138
|
-
|
|
172
|
+
probeFailed = true;
|
|
139
173
|
}
|
|
140
174
|
// Check if address has any transaction history (has balance)
|
|
141
175
|
try {
|
|
142
176
|
const balance = await publicClient.getBalance({ address: to });
|
|
143
177
|
if (balance === 0n) {
|
|
144
|
-
reasons.push("Recipient has zero balance
|
|
178
|
+
reasons.push("Recipient has zero balance; new or unused address");
|
|
145
179
|
return { score: 30, reasons };
|
|
146
180
|
}
|
|
147
181
|
}
|
|
148
182
|
catch {
|
|
149
|
-
|
|
183
|
+
probeFailed = true;
|
|
184
|
+
}
|
|
185
|
+
if (probeFailed) {
|
|
186
|
+
reasons.push("Recipient could not be examined: RPC unavailable, so no clean-recipient claim is made.");
|
|
187
|
+
return { score: 50, reasons, degraded: true };
|
|
150
188
|
}
|
|
151
189
|
reasons.push("Recipient address looks valid");
|
|
152
190
|
return { score: 10, reasons };
|
|
@@ -155,19 +193,19 @@ async function scoreBalance(input) {
|
|
|
155
193
|
const reasons = [];
|
|
156
194
|
try {
|
|
157
195
|
const walletAddr = input.walletAddress;
|
|
158
|
-
if (input.action === "transfer" || (input.action === "swap" && isNativeToken(input.tokenIn || "
|
|
159
|
-
// Check native
|
|
196
|
+
if (input.action === "transfer" || (input.action === "swap" && isNativeToken(input.tokenIn || "PROS"))) {
|
|
197
|
+
// Check native PROS balance
|
|
160
198
|
const balance = await publicClient.getBalance({ address: walletAddr });
|
|
161
199
|
const amountWei = parseEther(input.amount);
|
|
162
|
-
const gasBuffer = parseEther("0.01"); // ~0.01
|
|
200
|
+
const gasBuffer = parseEther("0.01"); // ~0.01 PROS for gas
|
|
163
201
|
if (balance < amountWei + gasBuffer) {
|
|
164
202
|
const balanceHuman = formatEther(balance);
|
|
165
|
-
reasons.push(`Insufficient
|
|
203
|
+
reasons.push(`Insufficient PROS balance: have ${balanceHuman}, need ${input.amount} + gas`);
|
|
166
204
|
return { score: 100, reasons };
|
|
167
205
|
}
|
|
168
206
|
const usagePct = Number((amountWei * 100n) / balance);
|
|
169
207
|
if (usagePct > MAX_BALANCE_USAGE_PCT) {
|
|
170
|
-
reasons.push(`Using ${usagePct}% of wallet balance
|
|
208
|
+
reasons.push(`Using ${usagePct}% of wallet balance; high exposure`);
|
|
171
209
|
return { score: clamp(60 + (usagePct - MAX_BALANCE_USAGE_PCT)), reasons };
|
|
172
210
|
}
|
|
173
211
|
reasons.push(`Balance sufficient, using ${usagePct}% of wallet`);
|
|
@@ -191,7 +229,7 @@ async function scoreBalance(input) {
|
|
|
191
229
|
// Also check gas balance
|
|
192
230
|
const ethBalance = await publicClient.getBalance({ address: walletAddr });
|
|
193
231
|
if (ethBalance < parseEther("0.005")) {
|
|
194
|
-
reasons.push("Very low
|
|
232
|
+
reasons.push("Very low PROS balance for gas fees");
|
|
195
233
|
return { score: 80, reasons };
|
|
196
234
|
}
|
|
197
235
|
reasons.push("Token and gas balance sufficient");
|
|
@@ -201,7 +239,7 @@ async function scoreBalance(input) {
|
|
|
201
239
|
}
|
|
202
240
|
catch (err) {
|
|
203
241
|
reasons.push(`Balance check failed: ${err.message}`);
|
|
204
|
-
return { score: 50, reasons };
|
|
242
|
+
return { score: 50, reasons, degraded: true };
|
|
205
243
|
}
|
|
206
244
|
}
|
|
207
245
|
async function scoreMarketCondition(_input) {
|
|
@@ -215,7 +253,7 @@ async function scoreMarketCondition(_input) {
|
|
|
215
253
|
const timeDiff = Number(latestBlock.timestamp - prevBlock.timestamp);
|
|
216
254
|
const avgBlockTime = timeDiff / 10;
|
|
217
255
|
if (avgBlockTime > 30) {
|
|
218
|
-
reasons.push(`Slow block production: ~${avgBlockTime.toFixed(1)}s/block
|
|
256
|
+
reasons.push(`Slow block production: ~${avgBlockTime.toFixed(1)}s/block; chain may be congested`);
|
|
219
257
|
return { score: 60, reasons };
|
|
220
258
|
}
|
|
221
259
|
if (avgBlockTime > 15) {
|
|
@@ -239,15 +277,15 @@ async function scoreMarketCondition(_input) {
|
|
|
239
277
|
}
|
|
240
278
|
// ─── Main Risk Assessment ──────────────────────────────────────────────
|
|
241
279
|
export async function assessRisk(input) {
|
|
242
|
-
// Fetch DODO route once and share between liquidity + slippage scorers
|
|
243
|
-
const swapQuote = await fetchSwapQuote(input);
|
|
280
|
+
// Fetch DODO route once and share between liquidity + slippage + counterparty scorers
|
|
281
|
+
const { quote: swapQuote, notConfigured: swapProviderNotConfigured } = await fetchSwapQuote(input);
|
|
244
282
|
const [counterparty, balance, market] = await Promise.all([
|
|
245
|
-
scoreCounterparty(input),
|
|
283
|
+
scoreCounterparty(input, swapQuote),
|
|
246
284
|
scoreBalance(input),
|
|
247
285
|
scoreMarketCondition(input),
|
|
248
286
|
]);
|
|
249
|
-
const liquidity = scoreLiquidity(input, swapQuote);
|
|
250
|
-
const slippage = scoreSlippage(input, swapQuote);
|
|
287
|
+
const liquidity = scoreLiquidity(input, swapQuote, swapProviderNotConfigured);
|
|
288
|
+
const slippage = scoreSlippage(input, swapQuote, swapProviderNotConfigured);
|
|
251
289
|
const breakdown = {
|
|
252
290
|
liquidityRisk: liquidity.score,
|
|
253
291
|
slippageRisk: slippage.score,
|
|
@@ -257,7 +295,35 @@ export async function assessRisk(input) {
|
|
|
257
295
|
};
|
|
258
296
|
const riskScore = clamp(weightedAverage(breakdown));
|
|
259
297
|
const riskLevel = computeRiskLevel(riskScore);
|
|
260
|
-
|
|
298
|
+
let recommendation = computeRecommendation(riskScore);
|
|
299
|
+
// Fail-closed on missing CRITICAL data. A swap whose route/liquidity could
|
|
300
|
+
// not be fetched, or any action whose balance check threw, must NOT be scored as
|
|
301
|
+
// safe on degraded inputs. Mark degraded and refuse to "proceed" silently.
|
|
302
|
+
const degradedReasons = [];
|
|
303
|
+
if (input.action === "swap" && swapQuote === null) {
|
|
304
|
+
degradedReasons.push(swapProviderNotConfigured
|
|
305
|
+
? `Swap liquidity provider is not configured for chainId ${CHAIN_ID} (SWAP_LIQUIDITY_NOT_CONFIGURED); this is a permanent configuration state on this network, not a transient outage.`
|
|
306
|
+
: "Liquidity/slippage could not be assessed: swap route fetch failed.");
|
|
307
|
+
}
|
|
308
|
+
if (balance.degraded) {
|
|
309
|
+
degradedReasons.push("Wallet balance could not be verified; RPC unavailable.");
|
|
310
|
+
}
|
|
311
|
+
if (counterparty.degraded) {
|
|
312
|
+
degradedReasons.push("Recipient could not be examined; RPC unavailable.");
|
|
313
|
+
}
|
|
314
|
+
const degraded = degradedReasons.length > 0;
|
|
315
|
+
if (degraded && recommendation === "proceed") {
|
|
316
|
+
recommendation = "caution";
|
|
317
|
+
}
|
|
318
|
+
// Advisory escalation mirroring the policy engine's `risk_counterparty`
|
|
319
|
+
// check (the actual block mechanism). Kept so the published recommendation
|
|
320
|
+
// stays honest for critically-risky transfers (missing / invalid / zero
|
|
321
|
+
// recipient): weighted heuristics alone can never cross the block threshold
|
|
322
|
+
// for a transfer, so without this the on-chain record would say "caution"
|
|
323
|
+
// where the policy engine blocks.
|
|
324
|
+
if (input.action === "transfer" && counterparty.score >= COUNTERPARTY_CRITICAL_THRESHOLD) {
|
|
325
|
+
recommendation = "block";
|
|
326
|
+
}
|
|
261
327
|
const reasons = [
|
|
262
328
|
...liquidity.reasons,
|
|
263
329
|
...slippage.reasons,
|
|
@@ -275,7 +341,7 @@ export async function assessRisk(input) {
|
|
|
275
341
|
}
|
|
276
342
|
else {
|
|
277
343
|
suggestion =
|
|
278
|
-
"High risk detected
|
|
344
|
+
"High risk detected: execution blocked for safety. Review the reasons and adjust your transaction parameters significantly before retrying.";
|
|
279
345
|
}
|
|
280
346
|
return {
|
|
281
347
|
riskScore,
|
|
@@ -284,6 +350,9 @@ export async function assessRisk(input) {
|
|
|
284
350
|
breakdown,
|
|
285
351
|
reasons,
|
|
286
352
|
suggestion,
|
|
353
|
+
degraded,
|
|
354
|
+
degradedReasons,
|
|
355
|
+
...(input.action === "swap" ? { swapProviderNotConfigured } : {}),
|
|
287
356
|
};
|
|
288
357
|
}
|
|
289
358
|
//# sourceMappingURL=riskEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"riskEngine.js","sourceRoot":"","sources":["../../src/lib/riskEngine.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,oDAAoD;AACpD,0DAA0D;AAC1D,8CAA8C;AAC9C,2EAA2E;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,GAEN,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,oBAAoB,EAEpB,gBAAgB,EAChB,qBAAqB,EACrB,SAAS,GAEV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAiC1D,0EAA0E;AAE1E,SAAS,KAAK,CAAC,KAAa,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACjC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,KAAK,IAAI,oBAAoB;QAAE,OAAO,SAAS,CAAC;IACpD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,SAAwB;IAC/C,MAAM,CAAC,GAAG,YAAY,CAAC;IACvB,OAAO,IAAI,CAAC,KAAK,CACf,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa;QACvC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY;QACvC,SAAS,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB;QAC/C,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;QACrC,SAAS,CAAC,mBAAmB,GAAG,CAAC,CAAC,mBAAmB,CACxD,CAAC;AACJ,CAAC;AAED,0EAA0E;AAE1E;;;GAGG;AACH,KAAK,UAAU,cAAc,CAAC,KAAgB;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,YAAY,CAAC;YACxB,SAAS,EAAE,KAAK,CAAC,OAAQ;YACzB,OAAO,EAAE,KAAK,CAAC,QAAS;YACxB,WAAW,EAAE,KAAK,CAAC,MAAM;YACzB,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAgB,EAAE,KAAuB;IAC/D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAE1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACrE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IAChD,CAAC;IACD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,KAAgB,EAAE,KAAuB;IAC9D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAE1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACpD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,wBAAwB,gBAAgB,gBAAgB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3F,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;IACzE,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1D,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,KAAgB;IAC/C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5B,yDAAyD;QACzD,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC1D,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,6CAA6C;IAC7C,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,qBAAqB;IACrB,IAAI,EAAE,KAAK,4CAA4C,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAChE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,kBAAkB;IAClB,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC3D,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,4CAA4C;IAC5C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAmB,EAAE,CAAC,CAAC;QAC1E,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAChE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAmB,EAAE,CAAC,CAAC;QAChF,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YACnE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAAgB;IAC1C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,KAAK,CAAC,aAA8B,CAAC;QAExD,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC;YACvG,4BAA4B;YAC5B,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACvE,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB;YAE3D,IAAI,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;gBACpC,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,mCAAmC,YAAY,UAAU,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;gBAC5F,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACjC,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;YACtD,IAAI,QAAQ,GAAG,qBAAqB,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,SAAS,QAAQ,qCAAqC,CAAC,CAAC;gBACrE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,qBAAqB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;YAC5E,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,6BAA6B,QAAQ,aAAa,CAAC,CAAC;YACjE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;QACjD,CAAC;QAED,6BAA6B;QAC7B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;YAExD,MAAM,OAAO,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;gBAC/C,OAAO,EAAE,YAAY;gBACrB,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,UAAU,CAAC;aACnB,CAAC,CAAW,CAAC;YAEd,IAAI,OAAO,GAAG,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;gBACtD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACjC,CAAC;YAED,yBAAyB;YACzB,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1E,IAAI,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;gBACnD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;YAChC,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACjD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;QAC/B,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,yBAA0B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,MAAiB;IACnD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC;YAC5C,WAAW,EAAE,WAAW,CAAC,MAAM,GAAG,GAAG;SACtC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,QAAQ,GAAG,EAAE,CAAC;QAEnC,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,2BAA2B,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;YACnG,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,mCAAmC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAClF,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QAChC,CAAC;QAED,kBAAkB;QAClB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;QAE5C,IAAI,YAAY,GAAG,GAAG,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,mBAAmB,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAChE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,mBAAmB,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACvG,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACnD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED,0EAA0E;AAE1E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAgB;IAC/C,uEAAuE;IACvE,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxD,iBAAiB,CAAC,KAAK,CAAC;QACxB,YAAY,CAAC,KAAK,CAAC;QACnB,oBAAoB,CAAC,KAAK,CAAC;KAC5B,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAEjD,MAAM,SAAS,GAAkB;QAC/B,aAAa,EAAE,SAAS,CAAC,KAAK;QAC9B,YAAY,EAAE,QAAQ,CAAC,KAAK;QAC5B,gBAAgB,EAAE,YAAY,CAAC,KAAK;QACpC,WAAW,EAAE,OAAO,CAAC,KAAK;QAC1B,mBAAmB,EAAE,MAAM,CAAC,KAAK;KAClC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG;QACd,GAAG,SAAS,CAAC,OAAO;QACpB,GAAG,QAAQ,CAAC,OAAO;QACnB,GAAG,YAAY,CAAC,OAAO;QACvB,GAAG,OAAO,CAAC,OAAO;QAClB,GAAG,MAAM,CAAC,OAAO;KAClB,CAAC;IAEF,IAAI,UAAkB,CAAC;IACvB,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,UAAU,GAAG,gEAAgE,CAAC;IAChF,CAAC;SAAM,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACxC,UAAU;YACR,sIAAsI,CAAC;IAC3I,CAAC;SAAM,CAAC;QACN,UAAU;YACR,6IAA6I,CAAC;IAClJ,CAAC;IAED,OAAO;QACL,SAAS;QACT,SAAS;QACT,cAAc;QACd,SAAS;QACT,OAAO;QACP,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"riskEngine.js","sourceRoot":"","sources":["../../src/lib/riskEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type RiskRecordInput } from "./merkleBatcher.js";
|
|
2
|
+
/**
|
|
3
|
+
* Normalize the DA batch JSON into typed RiskRecordInput[]. The writer may
|
|
4
|
+
* serialize expiresAt as a bigint-tagged string or a plain number, so we coerce
|
|
5
|
+
* defensively rather than trusting a single encoding.
|
|
6
|
+
*/
|
|
7
|
+
export declare function normalizeRiskRecords(raw: unknown): RiskRecordInput[];
|
|
8
|
+
export interface InclusionProof {
|
|
9
|
+
record: RiskRecordInput;
|
|
10
|
+
leaf: `0x${string}`;
|
|
11
|
+
proof: `0x${string}`[];
|
|
12
|
+
/** Root recomputed from the full batch — must equal the on-chain root for a valid claim. */
|
|
13
|
+
computedRoot: `0x${string}`;
|
|
14
|
+
/** merkletreejs verification of proof→leaf against the recomputed root. */
|
|
15
|
+
verifiedLocal: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Pure inclusion proof: find the record matching `match` in `records`, rebuild
|
|
19
|
+
* the tree, and produce the Merkle proof for its leaf. No network, no chain —
|
|
20
|
+
* fully unit-testable. Returns null when no record matches.
|
|
21
|
+
*/
|
|
22
|
+
export declare function proveInclusion(records: RiskRecordInput[], match: {
|
|
23
|
+
target: string;
|
|
24
|
+
actionHash?: string;
|
|
25
|
+
}): InclusionProof | null;
|
|
26
|
+
export interface RiskInclusionResult {
|
|
27
|
+
/** SAFEHANDS_REGISTRY_ADDRESS is set to a valid address. */
|
|
28
|
+
configured: boolean;
|
|
29
|
+
/** A non-zero Merkle root has been committed on-chain. */
|
|
30
|
+
committed: boolean;
|
|
31
|
+
onchainMerkleRoot: string | null;
|
|
32
|
+
dataURI: string | null;
|
|
33
|
+
/** A record for the target was located in the batch. */
|
|
34
|
+
found: boolean;
|
|
35
|
+
/** The recomputed batch root equals the committed on-chain root (DA is authentic & current). */
|
|
36
|
+
rootMatches: boolean;
|
|
37
|
+
/** Merkle proof verified locally (merkletreejs) against the recomputed root. */
|
|
38
|
+
verifiedLocal: boolean;
|
|
39
|
+
/** Contract verifyRiskRecord view returned true (trustless, composable). null = not attempted. */
|
|
40
|
+
verifiedOnchain: boolean | null;
|
|
41
|
+
/** Record's expiresAt has passed (on-chain verifyRiskRecord would revert with Expired). */
|
|
42
|
+
expired: boolean;
|
|
43
|
+
proof: string[] | null;
|
|
44
|
+
record: {
|
|
45
|
+
target: string;
|
|
46
|
+
actionHash: string;
|
|
47
|
+
score: number;
|
|
48
|
+
level: number;
|
|
49
|
+
recommendation: number;
|
|
50
|
+
policyVersionHash: string;
|
|
51
|
+
evidenceHash: string;
|
|
52
|
+
expiresAt: string;
|
|
53
|
+
} | null;
|
|
54
|
+
source: "onchain-view" | "local-only" | "unconfigured" | "not-committed" | "not-found" | "root-mismatch" | "error";
|
|
55
|
+
error?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* End-to-end keyless inclusion check for a target's risk record against the
|
|
59
|
+
* currently committed on-chain Merkle root. Fail-closed and neutral on every
|
|
60
|
+
* missing precondition (unconfigured, uncommitted, unreachable DA, not found).
|
|
61
|
+
* When `verifyOnchain` is true (default) it additionally calls the contract's
|
|
62
|
+
* verifyRiskRecord view so the "yes, this verdict is in the on-chain root" claim
|
|
63
|
+
* is proven trustlessly rather than only in-process.
|
|
64
|
+
*/
|
|
65
|
+
export declare function verifyRiskInclusion(match: {
|
|
66
|
+
target: string;
|
|
67
|
+
actionHash?: string;
|
|
68
|
+
}, opts?: {
|
|
69
|
+
verifyOnchain?: boolean;
|
|
70
|
+
registryAddress?: string;
|
|
71
|
+
}): Promise<RiskInclusionResult>;
|
|
72
|
+
//# sourceMappingURL=riskInclusion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"riskInclusion.d.ts","sourceRoot":"","sources":["../../src/lib/riskInclusion.ts"],"names":[],"mappings":"AAaA,OAAO,EAAoC,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAuB5F;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,EAAE,CAcpE;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,KAAK,MAAM,EAAE,EAAE,CAAC;IACvB,4FAA4F;IAC5F,YAAY,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,2EAA2E;IAC3E,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,EAAE,EAC1B,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,cAAc,GAAG,IAAI,CAiBvB;AAED,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,UAAU,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,wDAAwD;IACxD,KAAK,EAAE,OAAO,CAAC;IACf,gGAAgG;IAChG,WAAW,EAAE,OAAO,CAAC;IACrB,gFAAgF;IAChF,aAAa,EAAE,OAAO,CAAC;IACvB,kGAAkG;IAClG,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,2FAA2F;IAC3F,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC;IACT,MAAM,EAAE,cAAc,GAAG,YAAY,GAAG,cAAc,GAAG,eAAe,GAAG,WAAW,GAAG,eAAe,GAAG,OAAO,CAAC;IACnH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAoCD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9C,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/D,OAAO,CAAC,mBAAmB,CAAC,CAgJ9B"}
|