@absol-labs/agent 0.10.0 → 0.12.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -30
- package/dist/capability/invocation-capability.d.ts +20 -8
- package/dist/capability/invocation-capability.d.ts.map +1 -1
- package/dist/capability/invocation-capability.js.map +1 -1
- package/dist/capability/probe-capability.d.ts +225 -0
- package/dist/capability/probe-capability.d.ts.map +1 -0
- package/dist/capability/probe-capability.js +248 -0
- package/dist/capability/probe-capability.js.map +1 -0
- package/dist/cli/args.d.ts +11 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +23 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/claim.d.ts.map +1 -1
- package/dist/cli/commands/claim.js +21 -5
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/close.d.ts.map +1 -1
- package/dist/cli/commands/close.js +51 -7
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/invoke.d.ts +2 -0
- package/dist/cli/commands/invoke.d.ts.map +1 -1
- package/dist/cli/commands/invoke.js +3 -2
- package/dist/cli/commands/invoke.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +15 -2
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/open.d.ts.map +1 -1
- package/dist/cli/commands/open.js +121 -15
- package/dist/cli/commands/open.js.map +1 -1
- package/dist/cli/commands/pay.d.ts +19 -0
- package/dist/cli/commands/pay.d.ts.map +1 -0
- package/dist/cli/commands/pay.js +355 -0
- package/dist/cli/commands/pay.js.map +1 -0
- package/dist/cli/commands/reclaim-unverified.d.ts.map +1 -1
- package/dist/cli/commands/reclaim-unverified.js +15 -6
- package/dist/cli/commands/reclaim-unverified.js.map +1 -1
- package/dist/cli/commands/reclaim.d.ts +23 -2
- package/dist/cli/commands/reclaim.d.ts.map +1 -1
- package/dist/cli/commands/reclaim.js +200 -21
- package/dist/cli/commands/reclaim.js.map +1 -1
- package/dist/cli/commands/refund.d.ts +13 -0
- package/dist/cli/commands/refund.d.ts.map +1 -0
- package/dist/cli/commands/refund.js +224 -0
- package/dist/cli/commands/refund.js.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +10 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/streams.js +9 -13
- package/dist/cli/commands/streams.js.map +1 -1
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +2 -1
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/config.d.ts +44 -26
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +88 -38
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/deps.d.ts +86 -7
- package/dist/cli/deps.d.ts.map +1 -1
- package/dist/cli/deps.js +102 -16
- package/dist/cli/deps.js.map +1 -1
- package/dist/cli/errors.d.ts.map +1 -1
- package/dist/cli/errors.js +21 -1
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/escape-hatch.d.ts +6 -4
- package/dist/cli/escape-hatch.d.ts.map +1 -1
- package/dist/cli/escape-hatch.js +6 -2
- package/dist/cli/escape-hatch.js.map +1 -1
- package/dist/cli/listings.d.ts +18 -0
- package/dist/cli/listings.d.ts.map +1 -1
- package/dist/cli/listings.js +22 -12
- package/dist/cli/listings.js.map +1 -1
- package/dist/cli/preflight.d.ts +20 -14
- package/dist/cli/preflight.d.ts.map +1 -1
- package/dist/cli/preflight.js +34 -20
- package/dist/cli/preflight.js.map +1 -1
- package/dist/cli/privy.d.ts +83 -0
- package/dist/cli/privy.d.ts.map +1 -0
- package/dist/cli/privy.js +232 -0
- package/dist/cli/privy.js.map +1 -0
- package/dist/cli/reclaimability.d.ts +82 -0
- package/dist/cli/reclaimability.d.ts.map +1 -0
- package/dist/cli/reclaimability.js +80 -0
- package/dist/cli/reclaimability.js.map +1 -0
- package/dist/cli/run.d.ts +2 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +40 -11
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/scan-range.d.ts +2 -2
- package/dist/cli/scan-range.js +2 -2
- package/dist/cli/spend-policy.d.ts +60 -0
- package/dist/cli/spend-policy.d.ts.map +1 -0
- package/dist/cli/spend-policy.js +65 -0
- package/dist/cli/spend-policy.js.map +1 -0
- package/dist/cli/status.d.ts +3 -1
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +15 -3
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/wallet.d.ts +109 -40
- package/dist/cli/wallet.d.ts.map +1 -1
- package/dist/cli/wallet.js +109 -44
- package/dist/cli/wallet.js.map +1 -1
- package/dist/discovery/rate-band.d.ts +74 -0
- package/dist/discovery/rate-band.d.ts.map +1 -0
- package/dist/discovery/rate-band.js +114 -0
- package/dist/discovery/rate-band.js.map +1 -0
- package/dist/escrow-generation.d.ts +81 -0
- package/dist/escrow-generation.d.ts.map +1 -0
- package/dist/escrow-generation.js +76 -0
- package/dist/escrow-generation.js.map +1 -0
- package/dist/frameworks/agentkit.d.ts +8 -4
- package/dist/frameworks/agentkit.d.ts.map +1 -1
- package/dist/frameworks/agentkit.js +27 -10
- package/dist/frameworks/agentkit.js.map +1 -1
- package/dist/frameworks/eliza.d.ts +3 -3
- package/dist/frameworks/eliza.d.ts.map +1 -1
- package/dist/frameworks/eliza.js +15 -6
- package/dist/frameworks/eliza.js.map +1 -1
- package/dist/frameworks/langchain.d.ts.map +1 -1
- package/dist/frameworks/langchain.js +8 -0
- package/dist/frameworks/langchain.js.map +1 -1
- package/dist/gateway/caller-auth-gateway.d.ts +91 -4
- package/dist/gateway/caller-auth-gateway.d.ts.map +1 -1
- package/dist/gateway/caller-auth-gateway.js +184 -7
- package/dist/gateway/caller-auth-gateway.js.map +1 -1
- package/dist/gateway/http-server.d.ts +121 -1
- package/dist/gateway/http-server.d.ts.map +1 -1
- package/dist/gateway/http-server.js +474 -5
- package/dist/gateway/http-server.js.map +1 -1
- package/dist/gateway/probe-auth.d.ts +112 -0
- package/dist/gateway/probe-auth.d.ts.map +1 -0
- package/dist/gateway/probe-auth.js +127 -0
- package/dist/gateway/probe-auth.js.map +1 -0
- package/dist/gateway/signed-rate-bounds.d.ts +51 -0
- package/dist/gateway/signed-rate-bounds.d.ts.map +1 -0
- package/dist/gateway/signed-rate-bounds.js +94 -0
- package/dist/gateway/signed-rate-bounds.js.map +1 -0
- package/dist/gateway/x402-opener-mode.d.ts +215 -0
- package/dist/gateway/x402-opener-mode.d.ts.map +1 -0
- package/dist/gateway/x402-opener-mode.js +639 -0
- package/dist/gateway/x402-opener-mode.js.map +1 -0
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -5
- package/dist/index.js.map +1 -1
- package/dist/mandates/env.d.ts +3 -2
- package/dist/mandates/env.d.ts.map +1 -1
- package/dist/mandates/env.js +3 -2
- package/dist/mandates/env.js.map +1 -1
- package/dist/mcp/server.d.ts +100 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +719 -39
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/service-invoker.d.ts +97 -0
- package/dist/mcp/service-invoker.d.ts.map +1 -0
- package/dist/mcp/service-invoker.js +167 -0
- package/dist/mcp/service-invoker.js.map +1 -0
- package/dist/mcp/x402-tools.d.ts +104 -0
- package/dist/mcp/x402-tools.d.ts.map +1 -0
- package/dist/mcp/x402-tools.js +434 -0
- package/dist/mcp/x402-tools.js.map +1 -0
- package/dist/network.d.ts +119 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +199 -0
- package/dist/network.js.map +1 -0
- package/dist/sdk/invoke.d.ts +23 -4
- package/dist/sdk/invoke.d.ts.map +1 -1
- package/dist/sdk/invoke.js +71 -10
- package/dist/sdk/invoke.js.map +1 -1
- package/dist/wallet/autonomous-wallet-broker.d.ts +3 -0
- package/dist/wallet/autonomous-wallet-broker.d.ts.map +1 -1
- package/dist/wallet/autonomous-wallet-broker.js +27 -23
- package/dist/wallet/autonomous-wallet-broker.js.map +1 -1
- package/dist/wallet/autonomous-wallet-protocol.d.ts +8 -2
- package/dist/wallet/autonomous-wallet-protocol.d.ts.map +1 -1
- package/dist/wallet/autonomous-wallet-protocol.js +9 -2
- package/dist/wallet/autonomous-wallet-protocol.js.map +1 -1
- package/dist/wallet/autonomous-wallet.d.ts.map +1 -1
- package/dist/wallet/autonomous-wallet.js +3 -2
- package/dist/wallet/autonomous-wallet.js.map +1 -1
- package/dist/wallet/broker-escrows.d.ts +222 -0
- package/dist/wallet/broker-escrows.d.ts.map +1 -0
- package/dist/wallet/broker-escrows.js +36 -0
- package/dist/wallet/broker-escrows.js.map +1 -0
- package/dist/wallet/lifecycle.d.ts +21 -5
- package/dist/wallet/lifecycle.d.ts.map +1 -1
- package/dist/wallet/lifecycle.js +32 -12
- package/dist/wallet/lifecycle.js.map +1 -1
- package/dist/wallet/privy-broker-server.d.ts.map +1 -1
- package/dist/wallet/privy-broker-server.js +31 -26
- package/dist/wallet/privy-broker-server.js.map +1 -1
- package/dist/wallet/privy-session-broker.d.ts +14 -5
- package/dist/wallet/privy-session-broker.d.ts.map +1 -1
- package/dist/wallet/privy-session-broker.js +29 -17
- package/dist/wallet/privy-session-broker.js.map +1 -1
- package/dist/wallet/privy-session-provider.d.ts +3 -1
- package/dist/wallet/privy-session-provider.d.ts.map +1 -1
- package/dist/wallet/privy-session-provider.js +5 -3
- package/dist/wallet/privy-session-provider.js.map +1 -1
- package/dist/wallet/provider.d.ts.map +1 -1
- package/dist/wallet/provider.js +15 -8
- package/dist/wallet/provider.js.map +1 -1
- package/dist/x402/facilitator.d.ts +42 -17
- package/dist/x402/facilitator.d.ts.map +1 -1
- package/dist/x402/facilitator.js +49 -33
- package/dist/x402/facilitator.js.map +1 -1
- package/dist/x402-buyer/guarded-fetch.d.ts +51 -0
- package/dist/x402-buyer/guarded-fetch.d.ts.map +1 -0
- package/dist/x402-buyer/guarded-fetch.js +147 -0
- package/dist/x402-buyer/guarded-fetch.js.map +1 -0
- package/dist/x402-buyer/index.d.ts +10 -0
- package/dist/x402-buyer/index.d.ts.map +1 -0
- package/dist/x402-buyer/index.js +10 -0
- package/dist/x402-buyer/index.js.map +1 -0
- package/dist/x402-buyer/pay.d.ts +135 -0
- package/dist/x402-buyer/pay.d.ts.map +1 -0
- package/dist/x402-buyer/pay.js +336 -0
- package/dist/x402-buyer/pay.js.map +1 -0
- package/dist/x402-opener/abi.d.ts +684 -0
- package/dist/x402-opener/abi.d.ts.map +1 -0
- package/dist/x402-opener/abi.js +880 -0
- package/dist/x402-opener/abi.js.map +1 -0
- package/dist/x402-opener/facilitator-entry.d.ts +3 -0
- package/dist/x402-opener/facilitator-entry.d.ts.map +1 -0
- package/dist/x402-opener/facilitator-entry.js +37 -0
- package/dist/x402-opener/facilitator-entry.js.map +1 -0
- package/dist/x402-opener/facilitator-server.d.ts +180 -0
- package/dist/x402-opener/facilitator-server.d.ts.map +1 -0
- package/dist/x402-opener/facilitator-server.js +696 -0
- package/dist/x402-opener/facilitator-server.js.map +1 -0
- package/dist/x402-opener/index.d.ts +14 -0
- package/dist/x402-opener/index.d.ts.map +1 -0
- package/dist/x402-opener/index.js +14 -0
- package/dist/x402-opener/index.js.map +1 -0
- package/dist/x402-opener/listing-resolver.d.ts +55 -0
- package/dist/x402-opener/listing-resolver.d.ts.map +1 -0
- package/dist/x402-opener/listing-resolver.js +125 -0
- package/dist/x402-opener/listing-resolver.js.map +1 -0
- package/dist/x402-opener/refund-relay.d.ts +240 -0
- package/dist/x402-opener/refund-relay.d.ts.map +1 -0
- package/dist/x402-opener/refund-relay.js +1240 -0
- package/dist/x402-opener/refund-relay.js.map +1 -0
- package/dist/x402-opener/relayer-queue.d.ts +14 -0
- package/dist/x402-opener/relayer-queue.d.ts.map +1 -0
- package/dist/x402-opener/relayer-queue.js +18 -0
- package/dist/x402-opener/relayer-queue.js.map +1 -0
- package/dist/x402-opener/scheme.d.ts +217 -0
- package/dist/x402-opener/scheme.d.ts.map +1 -0
- package/dist/x402-opener/scheme.js +749 -0
- package/dist/x402-opener/scheme.js.map +1 -0
- package/dist/x402-opener/terms.d.ts +105 -0
- package/dist/x402-opener/terms.d.ts.map +1 -0
- package/dist/x402-opener/terms.js +212 -0
- package/dist/x402-opener/terms.js.map +1 -0
- package/dist/zktls/reclaim.d.ts +2 -2
- package/docs/agent-layer.md +13 -8
- package/docs/autonomous-privy-wallet.md +188 -0
- package/docs/cli.md +342 -53
- package/docs/langchain.md +5 -0
- package/docs/mcp-hosted.md +4 -3
- package/docs/mcp-reference.md +245 -0
- package/docs/probe-capability.md +191 -0
- package/docs/quickstart.md +54 -5
- package/docs/threat-model.md +24 -3
- package/docs/x402.md +681 -0
- package/package.json +19 -6
- package/src/capability/invocation-capability.ts +17 -1
- package/src/capability/probe-capability.ts +355 -0
- package/src/cli/args.ts +29 -0
- package/src/cli/commands/claim.ts +31 -5
- package/src/cli/commands/close.ts +56 -7
- package/src/cli/commands/invoke.ts +6 -2
- package/src/cli/commands/mcp.ts +18 -2
- package/src/cli/commands/open.ts +151 -14
- package/src/cli/commands/pay.ts +442 -0
- package/src/cli/commands/reclaim-unverified.ts +24 -6
- package/src/cli/commands/reclaim.ts +274 -19
- package/src/cli/commands/refund.ts +277 -0
- package/src/cli/commands/status.ts +17 -1
- package/src/cli/commands/streams.ts +11 -15
- package/src/cli/commands/watch.ts +7 -1
- package/src/cli/config.ts +139 -52
- package/src/cli/deps.ts +189 -25
- package/src/cli/errors.ts +24 -1
- package/src/cli/escape-hatch.ts +19 -5
- package/src/cli/listings.ts +43 -10
- package/src/cli/preflight.ts +36 -21
- package/src/cli/privy.ts +398 -0
- package/src/cli/reclaimability.ts +154 -0
- package/src/cli/run.ts +54 -11
- package/src/cli/scan-range.ts +2 -2
- package/src/cli/spend-policy.ts +139 -0
- package/src/cli/status.ts +14 -1
- package/src/cli/wallet.ts +189 -58
- package/src/discovery/rate-band.ts +172 -0
- package/src/escrow-generation.ts +135 -0
- package/src/frameworks/agentkit.ts +45 -11
- package/src/frameworks/eliza.ts +27 -5
- package/src/frameworks/langchain.ts +14 -0
- package/src/gateway/caller-auth-gateway.ts +336 -13
- package/src/gateway/http-server.ts +690 -7
- package/src/gateway/probe-auth.ts +191 -0
- package/src/gateway/signed-rate-bounds.ts +164 -0
- package/src/gateway/x402-opener-mode.ts +974 -0
- package/src/index.ts +112 -14
- package/src/mandates/env.ts +3 -2
- package/src/mcp/server.ts +973 -44
- package/src/mcp/service-invoker.ts +285 -0
- package/src/mcp/x402-tools.ts +621 -0
- package/src/network.ts +302 -0
- package/src/sdk/invoke.ts +96 -17
- package/src/wallet/autonomous-wallet-broker.ts +46 -20
- package/src/wallet/autonomous-wallet-protocol.ts +11 -2
- package/src/wallet/autonomous-wallet.ts +4 -2
- package/src/wallet/broker-escrows.ts +66 -0
- package/src/wallet/lifecycle.ts +53 -18
- package/src/wallet/privy-broker-server.ts +35 -25
- package/src/wallet/privy-session-broker.ts +58 -25
- package/src/wallet/privy-session-provider.ts +7 -3
- package/src/wallet/provider.ts +20 -15
- package/src/x402/facilitator.ts +85 -46
- package/src/x402-buyer/guarded-fetch.ts +213 -0
- package/src/x402-buyer/index.ts +9 -0
- package/src/x402-buyer/pay.ts +517 -0
- package/src/x402-opener/abi.ts +881 -0
- package/src/x402-opener/facilitator-entry.ts +45 -0
- package/src/x402-opener/facilitator-server.ts +1014 -0
- package/src/x402-opener/index.ts +13 -0
- package/src/x402-opener/listing-resolver.ts +202 -0
- package/src/x402-opener/refund-relay.ts +1743 -0
- package/src/x402-opener/relayer-queue.ts +18 -0
- package/src/x402-opener/scheme.ts +1133 -0
- package/src/x402-opener/terms.ts +300 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheme.js","sourceRoot":"","sources":["../../src/x402-opener/scheme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { type Address, type Hex } from "viem";
|
|
2
|
+
/**
|
|
3
|
+
* Shared vocabulary of the x402 v2 escrow-opener path (metrik-agent#116).
|
|
4
|
+
*
|
|
5
|
+
* A standard x402 v2 `exact` payment (an EIP-3009 `transferWithAuthorization`)
|
|
6
|
+
* is settled through the ownerless `X402StreamOpenerFactory`
|
|
7
|
+
* (metrik-contracts#48): the x402 `payTo` is the CREATE2 address of the opener
|
|
8
|
+
* for one immutable set of stream {@link OpenerTerms}, so the payer's signature
|
|
9
|
+
* (which binds `to`) commits to those terms, and the opener turns the payment
|
|
10
|
+
* into an ordinary `StreamEscrowV2` stream with `deposit = amount`.
|
|
11
|
+
*
|
|
12
|
+
* This module has no network or package side effects: it is the pure,
|
|
13
|
+
* dependency-free part shared by the facilitator and the gateway.
|
|
14
|
+
*/
|
|
15
|
+
/** Scheme name. The standard x402 `exact` scheme, nothing Metrik-specific. */
|
|
16
|
+
export declare const OPENER_SCHEME: "exact";
|
|
17
|
+
/** Public docs for the x402 opener path, linked from the 402. */
|
|
18
|
+
export declare const DEFAULT_OPENER_DOCS_URL = "https://github.com/Absol-Labs/metrik-agent/blob/main/docs/x402.md";
|
|
19
|
+
/**
|
|
20
|
+
* Key under `PaymentRequirements.extra` that carries the opener terms. The
|
|
21
|
+
* facilitator reads the terms ONLY from here, recomputes the opener address
|
|
22
|
+
* on-chain and requires it to equal `payTo`, so a tampered value can never
|
|
23
|
+
* redirect funds: it just fails verification.
|
|
24
|
+
*/
|
|
25
|
+
export declare const OPENER_EXTRA_KEY: "metrikStreamOpener";
|
|
26
|
+
/** Immutable per-listing stream terms, mirroring the Solidity `Terms` struct. */
|
|
27
|
+
export interface OpenerTerms {
|
|
28
|
+
readonly operator: Address;
|
|
29
|
+
readonly serviceRef: Hex;
|
|
30
|
+
/** USDC base units per second. */
|
|
31
|
+
readonly ratePerSecond: bigint;
|
|
32
|
+
/** Seconds. */
|
|
33
|
+
readonly maxDuration: bigint;
|
|
34
|
+
}
|
|
35
|
+
/** JSON-safe projection of {@link OpenerTerms} plus the factory that prices them. */
|
|
36
|
+
export interface OpenerTermsExtra {
|
|
37
|
+
readonly factory: Address;
|
|
38
|
+
readonly operator: Address;
|
|
39
|
+
readonly serviceRef: Hex;
|
|
40
|
+
readonly ratePerSecond: string;
|
|
41
|
+
readonly maxDuration: string;
|
|
42
|
+
/**
|
|
43
|
+
* Informational only (metrik-agent#119): where the payer gets unearned money
|
|
44
|
+
* back without ETH, as a template containing `{streamId}`. Never used for
|
|
45
|
+
* settlement; the facilitator validates it is an http(s) link and ignores it.
|
|
46
|
+
*/
|
|
47
|
+
readonly refundUrl?: string;
|
|
48
|
+
/** Informational only: docs for this payment path. */
|
|
49
|
+
readonly docsUrl?: string;
|
|
50
|
+
}
|
|
51
|
+
/** True for an absolute http(s) URL of sane length. */
|
|
52
|
+
export declare function isHttpLink(value: unknown): value is string;
|
|
53
|
+
export declare class InvalidOpenerTermsError extends Error {
|
|
54
|
+
constructor(message: string);
|
|
55
|
+
}
|
|
56
|
+
/** Parses a non-negative base-10 integer string. Throws on anything else. */
|
|
57
|
+
export declare function parseUintString(value: unknown, field: string): bigint;
|
|
58
|
+
/**
|
|
59
|
+
* Validates terms the way the factory's `deploy` does (non-zero operator, rate
|
|
60
|
+
* and duration, `maxDuration` within `uint64`) plus the shape checks the
|
|
61
|
+
* contract cannot do for us (32-byte serviceRef).
|
|
62
|
+
*/
|
|
63
|
+
export declare function assertValidTerms(terms: OpenerTerms): void;
|
|
64
|
+
/** The largest deposit a stream on these terms can ever earn out: `rate * maxDuration`. */
|
|
65
|
+
export declare function maxEarnable(terms: OpenerTerms): bigint;
|
|
66
|
+
/**
|
|
67
|
+
* The price (= stream deposit) must be positive and must not exceed what the
|
|
68
|
+
* stream can ever accrue. A deposit above `rate * maxDuration` would lock money
|
|
69
|
+
* the seller can never earn, reclaimable only by a second buyer action.
|
|
70
|
+
*/
|
|
71
|
+
export declare function assertValidPrice(price: bigint, terms: OpenerTerms): void;
|
|
72
|
+
export declare function termsToExtra(factory: Address, terms: OpenerTerms): OpenerTermsExtra;
|
|
73
|
+
/**
|
|
74
|
+
* Reads opener terms from an untrusted `PaymentRequirements.extra`. Every field
|
|
75
|
+
* is re-validated; unknown keys under the opener object are rejected so the
|
|
76
|
+
* wire shape cannot drift silently.
|
|
77
|
+
*/
|
|
78
|
+
export declare function termsFromExtra(extra: unknown): {
|
|
79
|
+
readonly factory: Address;
|
|
80
|
+
readonly terms: OpenerTerms;
|
|
81
|
+
};
|
|
82
|
+
/** Chain id encoded in an `eip155:<id>` CAIP-2 identifier. Throws otherwise. */
|
|
83
|
+
export declare function chainIdFromNetwork(network: string): number;
|
|
84
|
+
/** Solidity-tuple view of terms for viem contract calls. */
|
|
85
|
+
export declare function termsTuple(terms: OpenerTerms): {
|
|
86
|
+
readonly operator: Address;
|
|
87
|
+
readonly serviceRef: Hex;
|
|
88
|
+
readonly ratePerSecond: bigint;
|
|
89
|
+
readonly maxDuration: bigint;
|
|
90
|
+
};
|
|
91
|
+
/** A bazaar-shaped `{info: {input, output?}, schema?}` declaration. */
|
|
92
|
+
export interface X402SchemaDeclaration {
|
|
93
|
+
readonly info: {
|
|
94
|
+
readonly input: {
|
|
95
|
+
readonly type: "http";
|
|
96
|
+
} & Record<string, unknown>;
|
|
97
|
+
readonly output?: Record<string, unknown>;
|
|
98
|
+
};
|
|
99
|
+
readonly schema?: Record<string, unknown>;
|
|
100
|
+
}
|
|
101
|
+
/** Largest accepted schema declaration, serialized bytes. */
|
|
102
|
+
export declare const MAX_SCHEMA_DECLARATION_BYTES: number;
|
|
103
|
+
/** Validates a bazaar-shaped schema declaration. Throws on anything else. */
|
|
104
|
+
export declare function assertSchemaDeclaration(value: unknown): asserts value is X402SchemaDeclaration;
|
|
105
|
+
//# sourceMappingURL=terms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terms.d.ts","sourceRoot":"","sources":["../../src/x402-opener/terms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { getAddress, isAddress, isHex } from "viem";
|
|
2
|
+
/**
|
|
3
|
+
* Shared vocabulary of the x402 v2 escrow-opener path (metrik-agent#116).
|
|
4
|
+
*
|
|
5
|
+
* A standard x402 v2 `exact` payment (an EIP-3009 `transferWithAuthorization`)
|
|
6
|
+
* is settled through the ownerless `X402StreamOpenerFactory`
|
|
7
|
+
* (metrik-contracts#48): the x402 `payTo` is the CREATE2 address of the opener
|
|
8
|
+
* for one immutable set of stream {@link OpenerTerms}, so the payer's signature
|
|
9
|
+
* (which binds `to`) commits to those terms, and the opener turns the payment
|
|
10
|
+
* into an ordinary `StreamEscrowV2` stream with `deposit = amount`.
|
|
11
|
+
*
|
|
12
|
+
* This module has no network or package side effects: it is the pure,
|
|
13
|
+
* dependency-free part shared by the facilitator and the gateway.
|
|
14
|
+
*/
|
|
15
|
+
/** Scheme name. The standard x402 `exact` scheme, nothing Metrik-specific. */
|
|
16
|
+
export const OPENER_SCHEME = "exact";
|
|
17
|
+
/*
|
|
18
|
+
* Network, USDC, escrow, factory and oracle defaults are NOT constants here:
|
|
19
|
+
* they come from the `@absol-labs/sdk` network registry (see `../network.ts`),
|
|
20
|
+
* so a new deployment is a registry change, never an edit to this module.
|
|
21
|
+
*/
|
|
22
|
+
/** Public docs for the x402 opener path, linked from the 402. */
|
|
23
|
+
export const DEFAULT_OPENER_DOCS_URL = "https://github.com/Absol-Labs/metrik-agent/blob/main/docs/x402.md";
|
|
24
|
+
/** Longest informational link accepted in `extra.metrikStreamOpener`. */
|
|
25
|
+
const MAX_LINK_LENGTH = 2048;
|
|
26
|
+
/**
|
|
27
|
+
* Key under `PaymentRequirements.extra` that carries the opener terms. The
|
|
28
|
+
* facilitator reads the terms ONLY from here, recomputes the opener address
|
|
29
|
+
* on-chain and requires it to equal `payTo`, so a tampered value can never
|
|
30
|
+
* redirect funds: it just fails verification.
|
|
31
|
+
*/
|
|
32
|
+
export const OPENER_EXTRA_KEY = "metrikStreamOpener";
|
|
33
|
+
/** `uint64` ceiling for `maxDuration`. */
|
|
34
|
+
const MAX_UINT64 = (1n << 64n) - 1n;
|
|
35
|
+
/** True for an absolute http(s) URL of sane length. */
|
|
36
|
+
export function isHttpLink(value) {
|
|
37
|
+
if (typeof value !== "string" || value.length > MAX_LINK_LENGTH)
|
|
38
|
+
return false;
|
|
39
|
+
try {
|
|
40
|
+
const url = new URL(value);
|
|
41
|
+
return url.protocol === "https:" || url.protocol === "http:";
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export class InvalidOpenerTermsError extends Error {
|
|
48
|
+
constructor(message) {
|
|
49
|
+
super(message);
|
|
50
|
+
this.name = "InvalidOpenerTermsError";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Parses a non-negative base-10 integer string. Throws on anything else. */
|
|
54
|
+
export function parseUintString(value, field) {
|
|
55
|
+
if (typeof value !== "string" || !/^(0|[1-9]\d*)$/.test(value)) {
|
|
56
|
+
throw new InvalidOpenerTermsError(`${field} must be a base-10 integer string without sign or leading zeros`);
|
|
57
|
+
}
|
|
58
|
+
return BigInt(value);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Validates terms the way the factory's `deploy` does (non-zero operator, rate
|
|
62
|
+
* and duration, `maxDuration` within `uint64`) plus the shape checks the
|
|
63
|
+
* contract cannot do for us (32-byte serviceRef).
|
|
64
|
+
*/
|
|
65
|
+
export function assertValidTerms(terms) {
|
|
66
|
+
if (!isAddress(terms.operator, { strict: false })) {
|
|
67
|
+
throw new InvalidOpenerTermsError("operator must be an EVM address");
|
|
68
|
+
}
|
|
69
|
+
if (/^0x0{40}$/i.test(terms.operator)) {
|
|
70
|
+
throw new InvalidOpenerTermsError("operator must not be the zero address");
|
|
71
|
+
}
|
|
72
|
+
if (!isHex(terms.serviceRef, { strict: true }) ||
|
|
73
|
+
terms.serviceRef.length !== 66) {
|
|
74
|
+
throw new InvalidOpenerTermsError("serviceRef must be a 32-byte hex value");
|
|
75
|
+
}
|
|
76
|
+
if (terms.ratePerSecond <= 0n) {
|
|
77
|
+
throw new InvalidOpenerTermsError("ratePerSecond must be > 0");
|
|
78
|
+
}
|
|
79
|
+
if (terms.maxDuration <= 0n || terms.maxDuration > MAX_UINT64) {
|
|
80
|
+
throw new InvalidOpenerTermsError("maxDuration must be > 0 and fit in uint64");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** The largest deposit a stream on these terms can ever earn out: `rate * maxDuration`. */
|
|
84
|
+
export function maxEarnable(terms) {
|
|
85
|
+
return terms.ratePerSecond * terms.maxDuration;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The price (= stream deposit) must be positive and must not exceed what the
|
|
89
|
+
* stream can ever accrue. A deposit above `rate * maxDuration` would lock money
|
|
90
|
+
* the seller can never earn, reclaimable only by a second buyer action.
|
|
91
|
+
*/
|
|
92
|
+
export function assertValidPrice(price, terms) {
|
|
93
|
+
if (price <= 0n) {
|
|
94
|
+
throw new InvalidOpenerTermsError("price must be > 0");
|
|
95
|
+
}
|
|
96
|
+
if (price > maxEarnable(terms)) {
|
|
97
|
+
throw new InvalidOpenerTermsError(`price ${price} exceeds ratePerSecond * maxDuration (${maxEarnable(terms)})`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export function termsToExtra(factory, terms) {
|
|
101
|
+
return {
|
|
102
|
+
factory: getAddress(factory),
|
|
103
|
+
operator: getAddress(terms.operator),
|
|
104
|
+
serviceRef: terms.serviceRef.toLowerCase(),
|
|
105
|
+
ratePerSecond: terms.ratePerSecond.toString(),
|
|
106
|
+
maxDuration: terms.maxDuration.toString(),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Reads opener terms from an untrusted `PaymentRequirements.extra`. Every field
|
|
111
|
+
* is re-validated; unknown keys under the opener object are rejected so the
|
|
112
|
+
* wire shape cannot drift silently.
|
|
113
|
+
*/
|
|
114
|
+
export function termsFromExtra(extra) {
|
|
115
|
+
if (typeof extra !== "object" || extra === null) {
|
|
116
|
+
throw new InvalidOpenerTermsError("requirements.extra is missing");
|
|
117
|
+
}
|
|
118
|
+
const raw = extra[OPENER_EXTRA_KEY];
|
|
119
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
120
|
+
throw new InvalidOpenerTermsError(`requirements.extra.${OPENER_EXTRA_KEY} is missing`);
|
|
121
|
+
}
|
|
122
|
+
const record = raw;
|
|
123
|
+
const allowed = new Set([
|
|
124
|
+
"factory",
|
|
125
|
+
"operator",
|
|
126
|
+
"serviceRef",
|
|
127
|
+
"ratePerSecond",
|
|
128
|
+
"maxDuration",
|
|
129
|
+
"refundUrl",
|
|
130
|
+
"docsUrl",
|
|
131
|
+
]);
|
|
132
|
+
for (const key of Object.keys(record)) {
|
|
133
|
+
if (!allowed.has(key)) {
|
|
134
|
+
throw new InvalidOpenerTermsError(`unknown key ${key} in requirements.extra.${OPENER_EXTRA_KEY}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
for (const link of ["refundUrl", "docsUrl"]) {
|
|
138
|
+
if (record[link] !== undefined && !isHttpLink(record[link])) {
|
|
139
|
+
throw new InvalidOpenerTermsError(`${link} in requirements.extra.${OPENER_EXTRA_KEY} must be an http(s) URL`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const { factory, operator, serviceRef } = record;
|
|
143
|
+
if (typeof factory !== "string" || !isAddress(factory, { strict: false })) {
|
|
144
|
+
throw new InvalidOpenerTermsError("factory must be an EVM address");
|
|
145
|
+
}
|
|
146
|
+
if (typeof operator !== "string" || !isAddress(operator, { strict: false })) {
|
|
147
|
+
throw new InvalidOpenerTermsError("operator must be an EVM address");
|
|
148
|
+
}
|
|
149
|
+
if (typeof serviceRef !== "string") {
|
|
150
|
+
throw new InvalidOpenerTermsError("serviceRef must be a string");
|
|
151
|
+
}
|
|
152
|
+
const terms = {
|
|
153
|
+
operator: getAddress(operator),
|
|
154
|
+
serviceRef: serviceRef,
|
|
155
|
+
ratePerSecond: parseUintString(record.ratePerSecond, "ratePerSecond"),
|
|
156
|
+
maxDuration: parseUintString(record.maxDuration, "maxDuration"),
|
|
157
|
+
};
|
|
158
|
+
assertValidTerms(terms);
|
|
159
|
+
return { factory: getAddress(factory), terms };
|
|
160
|
+
}
|
|
161
|
+
/** Chain id encoded in an `eip155:<id>` CAIP-2 identifier. Throws otherwise. */
|
|
162
|
+
export function chainIdFromNetwork(network) {
|
|
163
|
+
const match = /^eip155:([1-9]\d*)$/.exec(network);
|
|
164
|
+
if (match === null) {
|
|
165
|
+
throw new InvalidOpenerTermsError(`network must be an eip155 CAIP-2 identifier, got ${network}`);
|
|
166
|
+
}
|
|
167
|
+
const chainId = Number(match[1]);
|
|
168
|
+
if (!Number.isSafeInteger(chainId)) {
|
|
169
|
+
throw new InvalidOpenerTermsError(`unsupported chain id in ${network}`);
|
|
170
|
+
}
|
|
171
|
+
return chainId;
|
|
172
|
+
}
|
|
173
|
+
/** Solidity-tuple view of terms for viem contract calls. */
|
|
174
|
+
export function termsTuple(terms) {
|
|
175
|
+
return {
|
|
176
|
+
operator: getAddress(terms.operator),
|
|
177
|
+
serviceRef: terms.serviceRef,
|
|
178
|
+
ratePerSecond: terms.ratePerSecond,
|
|
179
|
+
maxDuration: terms.maxDuration,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/** Largest accepted schema declaration, serialized bytes. */
|
|
183
|
+
export const MAX_SCHEMA_DECLARATION_BYTES = 16 * 1024;
|
|
184
|
+
/** Validates a bazaar-shaped schema declaration. Throws on anything else. */
|
|
185
|
+
export function assertSchemaDeclaration(value) {
|
|
186
|
+
if (JSON.stringify(value ?? null).length > MAX_SCHEMA_DECLARATION_BYTES) {
|
|
187
|
+
throw new Error(`the schema declaration exceeds ${MAX_SCHEMA_DECLARATION_BYTES} bytes`);
|
|
188
|
+
}
|
|
189
|
+
const record = value;
|
|
190
|
+
const info = record?.info;
|
|
191
|
+
const input = info?.input;
|
|
192
|
+
if (typeof record !== "object" ||
|
|
193
|
+
record === null ||
|
|
194
|
+
Array.isArray(record) ||
|
|
195
|
+
typeof info !== "object" ||
|
|
196
|
+
info === null ||
|
|
197
|
+
typeof input !== "object" ||
|
|
198
|
+
input === null ||
|
|
199
|
+
input.type !== "http" ||
|
|
200
|
+
(info.output !== undefined &&
|
|
201
|
+
(typeof info.output !== "object" || info.output === null)) ||
|
|
202
|
+
(record.schema !== undefined &&
|
|
203
|
+
(typeof record.schema !== "object" || record.schema === null))) {
|
|
204
|
+
throw new Error('the schema declaration must be {info: {input: {type: "http", ...}, output?}, schema?}');
|
|
205
|
+
}
|
|
206
|
+
for (const key of Object.keys(record)) {
|
|
207
|
+
if (key !== "info" && key !== "schema") {
|
|
208
|
+
throw new Error(`unknown key ${key} in the schema declaration`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=terms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terms.js","sourceRoot":"","sources":["../../src/x402-opener/terms.ts"],"names":[],"mappings":"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"}
|
package/dist/zktls/reclaim.d.ts
CHANGED
|
@@ -178,8 +178,8 @@ export declare const deliveryContextEnvelopeV2Schema: z.ZodObject<{
|
|
|
178
178
|
intervalIndex: z.ZodNumber;
|
|
179
179
|
issuedAt: z.ZodNumber;
|
|
180
180
|
}, "strict", z.ZodTypeAny, {
|
|
181
|
-
issuedAt: number;
|
|
182
181
|
streamId: string;
|
|
182
|
+
issuedAt: number;
|
|
183
183
|
operator: string;
|
|
184
184
|
serviceRef: string;
|
|
185
185
|
kind: "metrik-l2-http-response/v2";
|
|
@@ -187,8 +187,8 @@ export declare const deliveryContextEnvelopeV2Schema: z.ZodObject<{
|
|
|
187
187
|
intervalIndex: number;
|
|
188
188
|
mandateId?: string | undefined;
|
|
189
189
|
}, {
|
|
190
|
-
issuedAt: number;
|
|
191
190
|
streamId: string;
|
|
191
|
+
issuedAt: number;
|
|
192
192
|
operator: string;
|
|
193
193
|
serviceRef: string;
|
|
194
194
|
kind: "metrik-l2-http-response/v2";
|
package/docs/agent-layer.md
CHANGED
|
@@ -15,14 +15,19 @@ fills exactly that gap, and the agent layer is where an agent experiences it.
|
|
|
15
15
|
|
|
16
16
|
## The four components
|
|
17
17
|
|
|
18
|
-
### 1.
|
|
18
|
+
### 1. Metrik verified-streaming `402` flow
|
|
19
19
|
|
|
20
|
-
A
|
|
21
|
-
|
|
20
|
+
A Metrik-native HTTP `402` challenge flow: an agent hits a `402`, receives a
|
|
21
|
+
_verified-streaming_ requirement (operator, serviceRef, rate, budget, settlement
|
|
22
22
|
chain/escrow), responds with a signed-mandate payload, and a stream opens through the
|
|
23
|
-
SDK — paying only for oracle-verified delivery
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
SDK — paying only for oracle-verified delivery. It borrows the _shape_ of an x402
|
|
24
|
+
challenge/response and reuses the protocol's existing settlement path. (`src/x402/`)
|
|
25
|
+
|
|
26
|
+
It is **not the x402 protocol**: its scheme string, challenge body, payload and
|
|
27
|
+
`X-METRIK-PAYMENT` header are all Metrik's own, and it does not interoperate with
|
|
28
|
+
`x402-fetch`, `x402-axios`, or `x402-express`. Standard x402 v2 `exact` payments are
|
|
29
|
+
handled by a separate, opt-in path — the opener facilitator and the gateway's x402 v2
|
|
30
|
+
mode — described in [docs/x402.md](./x402.md).
|
|
26
31
|
|
|
27
32
|
### 2. MCP server
|
|
28
33
|
|
|
@@ -125,7 +130,7 @@ proven live. Tracked separately if/when a paymaster is provisioned.
|
|
|
125
130
|
|
|
126
131
|
```mermaid
|
|
127
132
|
flowchart LR
|
|
128
|
-
AGENT[AI agent] -->|MCP tool /
|
|
133
|
+
AGENT[AI agent] -->|MCP tool / Metrik 402| AL[Agent layer]
|
|
129
134
|
AL -->|checkMandate| MND[Spend mandate]
|
|
130
135
|
MND -->|allowed| SDK[@absol-labs/sdk]
|
|
131
136
|
SDK --> ESC[Escrow on settlement chain]
|
|
@@ -147,5 +152,5 @@ flowchart LR
|
|
|
147
152
|
|
|
148
153
|
## Roadmap (see issues)
|
|
149
154
|
|
|
150
|
-
|
|
155
|
+
Metrik `402` flow → MCP server → framework adapters → example agents
|
|
151
156
|
(hire + monitor + close on verification gaps) → wallet/provider integration.
|
|
@@ -131,3 +131,191 @@ capability typed-data requests only. It does not claim ERC-4337, EIP-1271,
|
|
|
131
131
|
smart-account, or gas-sponsorship support. The broker deployment and its real
|
|
132
132
|
Privy policy remain integration dependencies and must be health-checked before
|
|
133
133
|
use.
|
|
134
|
+
|
|
135
|
+
## Escrow cutover (V2 → V3): what the broker allows, and the Privy policy change it needs
|
|
136
|
+
|
|
137
|
+
The broker (both the agent-owned and the session paths) sends transactions to
|
|
138
|
+
exactly two kinds of escrow, read from the registries rather than hardcoded
|
|
139
|
+
(`src/wallet/broker-escrows.ts`):
|
|
140
|
+
|
|
141
|
+
| Target | Allowed calls |
|
|
142
|
+
| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
|
143
|
+
| **Current escrow** (the SDK network registry's escrow for the broker's network) | `openStream`, `close`, `reclaim`, `reclaimUnverified` |
|
|
144
|
+
| **Legacy escrow(s)** (`@absol-labs/shared` deployments with `status: "legacy"`, other than the current one) | `close`, `reclaim`, `reclaimUnverified` **only** — no `openStream` |
|
|
145
|
+
| **USDC** | `approve(spender, amount)` with `spender` = the **current** escrow only (never a legacy escrow), `amount` within the existing cap |
|
|
146
|
+
|
|
147
|
+
Everything else is unchanged: chain id, zero `value`, `from` = the wallet, the
|
|
148
|
+
mandate/spend-cap checks on `openStream`, `stream.buyer == wallet` on every exit
|
|
149
|
+
(read from the escrow the exit targets), and invocation-capability typed data
|
|
150
|
+
bound to the current escrow. V2 and V3 share the selectors of every allowed
|
|
151
|
+
method, so one decoder (the union of the V2/V3 ABIs) serves both.
|
|
152
|
+
|
|
153
|
+
While the SDK default is still `StreamEscrowV2` (`@absol-labs/sdk@0.10.0-rc.1`),
|
|
154
|
+
V2 is current and nothing is legacy: behaviour is identical to before. With
|
|
155
|
+
`0.10.0-rc.2` the default becomes `StreamEscrowV3` and V2 becomes exit-only, so
|
|
156
|
+
agents holding open V2 streams can still close and reclaim them.
|
|
157
|
+
|
|
158
|
+
### Privy policy rules to apply at cutover
|
|
159
|
+
|
|
160
|
+
The broker's checks are a second line; the Privy policy is what Privy itself
|
|
161
|
+
enforces. At the V3 cutover, the policy (`PRIVY_POLICY_ID`) must change as
|
|
162
|
+
follows. Base Sepolia addresses (from `@absol-labs/shared` `escrowDeployments`
|
|
163
|
+
and the SDK registry):
|
|
164
|
+
|
|
165
|
+
- current escrow (V3): `0x0643ba482C6A7aF31a1f8225e7e7e79Cfc467b13`
|
|
166
|
+
- legacy escrow (V2): `0x0f09f36Ccc05A7c9882F438721C08De314dFd46C`
|
|
167
|
+
- USDC: `0x036CbD53842c5426634e7929541eC2318f3dCF7e`
|
|
168
|
+
|
|
169
|
+
Keep every existing numeric bound exactly as it is (`openStream`
|
|
170
|
+
`deposit <= 1000000`, `ratePerSecond <= 1000`, `maxDuration <= 3600`; USDC
|
|
171
|
+
`approve` `amount <= 1000000`; chain `eip155:84532`; `value == 0`).
|
|
172
|
+
|
|
173
|
+
1. **Contract allowlist, escrow — `openStream`**: change the target from the V2
|
|
174
|
+
escrow to the **V3** escrow only. The legacy V2 escrow must NOT be allowed
|
|
175
|
+
`openStream`.
|
|
176
|
+
2. **Contract allowlist, escrow — exits** (`close(bytes32)` `0x39c79e0c`,
|
|
177
|
+
`reclaim(bytes32,uint256,bytes32[])` `0x2c307c9c`,
|
|
178
|
+
`reclaimUnverified(bytes32)` `0x5fcdce22`): allow them on **both** the V3
|
|
179
|
+
escrow and the V2 escrow (`to` IN [V3, V2]).
|
|
180
|
+
3. **USDC `approve`** (`0x095ea7b3`): change the allowed `spender` from the V2
|
|
181
|
+
escrow to the **V3** escrow only. No approval to V2.
|
|
182
|
+
4. Remove any rule that allows the V2 escrow for a method other than the three
|
|
183
|
+
exits above.
|
|
184
|
+
|
|
185
|
+
The same, as Privy policy rules (ALLOW rules, `eth_sendTransaction`,
|
|
186
|
+
`chain_type: "ethereum"`; DENY is the default):
|
|
187
|
+
|
|
188
|
+
```json
|
|
189
|
+
[
|
|
190
|
+
{
|
|
191
|
+
"name": "metrik-open-stream-current-escrow",
|
|
192
|
+
"method": "eth_sendTransaction",
|
|
193
|
+
"action": "ALLOW",
|
|
194
|
+
"conditions": [
|
|
195
|
+
{
|
|
196
|
+
"field_source": "ethereum_transaction",
|
|
197
|
+
"field": "chain_id",
|
|
198
|
+
"operator": "eq",
|
|
199
|
+
"value": "84532"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"field_source": "ethereum_transaction",
|
|
203
|
+
"field": "to",
|
|
204
|
+
"operator": "eq",
|
|
205
|
+
"value": "0x0643ba482C6A7aF31a1f8225e7e7e79Cfc467b13"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"field_source": "ethereum_transaction",
|
|
209
|
+
"field": "value",
|
|
210
|
+
"operator": "eq",
|
|
211
|
+
"value": "0"
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"field_source": "ethereum_calldata",
|
|
215
|
+
"field": "openStream.deposit",
|
|
216
|
+
"operator": "lte",
|
|
217
|
+
"value": "1000000",
|
|
218
|
+
"abi": "<StreamEscrowV3 openStream ABI>"
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"field_source": "ethereum_calldata",
|
|
222
|
+
"field": "openStream.ratePerSecond",
|
|
223
|
+
"operator": "lte",
|
|
224
|
+
"value": "1000",
|
|
225
|
+
"abi": "<StreamEscrowV3 openStream ABI>"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"field_source": "ethereum_calldata",
|
|
229
|
+
"field": "openStream.maxDuration",
|
|
230
|
+
"operator": "lte",
|
|
231
|
+
"value": "3600",
|
|
232
|
+
"abi": "<StreamEscrowV3 openStream ABI>"
|
|
233
|
+
}
|
|
234
|
+
]
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"name": "metrik-exits-current-and-legacy-escrow",
|
|
238
|
+
"method": "eth_sendTransaction",
|
|
239
|
+
"action": "ALLOW",
|
|
240
|
+
"conditions": [
|
|
241
|
+
{
|
|
242
|
+
"field_source": "ethereum_transaction",
|
|
243
|
+
"field": "chain_id",
|
|
244
|
+
"operator": "eq",
|
|
245
|
+
"value": "84532"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"field_source": "ethereum_transaction",
|
|
249
|
+
"field": "to",
|
|
250
|
+
"operator": "in",
|
|
251
|
+
"value": [
|
|
252
|
+
"0x0643ba482C6A7aF31a1f8225e7e7e79Cfc467b13",
|
|
253
|
+
"0x0f09f36Ccc05A7c9882F438721C08De314dFd46C"
|
|
254
|
+
]
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"field_source": "ethereum_transaction",
|
|
258
|
+
"field": "value",
|
|
259
|
+
"operator": "eq",
|
|
260
|
+
"value": "0"
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"field_source": "ethereum_calldata",
|
|
264
|
+
"field": "function_selector",
|
|
265
|
+
"operator": "in",
|
|
266
|
+
"value": ["0x39c79e0c", "0x2c307c9c", "0x5fcdce22"]
|
|
267
|
+
}
|
|
268
|
+
]
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"name": "metrik-usdc-approve-current-escrow",
|
|
272
|
+
"method": "eth_sendTransaction",
|
|
273
|
+
"action": "ALLOW",
|
|
274
|
+
"conditions": [
|
|
275
|
+
{
|
|
276
|
+
"field_source": "ethereum_transaction",
|
|
277
|
+
"field": "chain_id",
|
|
278
|
+
"operator": "eq",
|
|
279
|
+
"value": "84532"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"field_source": "ethereum_transaction",
|
|
283
|
+
"field": "to",
|
|
284
|
+
"operator": "eq",
|
|
285
|
+
"value": "0x036CbD53842c5426634e7929541eC2318f3dCF7e"
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"field_source": "ethereum_transaction",
|
|
289
|
+
"field": "value",
|
|
290
|
+
"operator": "eq",
|
|
291
|
+
"value": "0"
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"field_source": "ethereum_calldata",
|
|
295
|
+
"field": "approve.spender",
|
|
296
|
+
"operator": "eq",
|
|
297
|
+
"value": "0x0643ba482C6A7aF31a1f8225e7e7e79Cfc467b13",
|
|
298
|
+
"abi": "<ERC-20 approve ABI>"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"field_source": "ethereum_calldata",
|
|
302
|
+
"field": "approve.amount",
|
|
303
|
+
"operator": "lte",
|
|
304
|
+
"value": "1000000",
|
|
305
|
+
"abi": "<ERC-20 approve ABI>"
|
|
306
|
+
}
|
|
307
|
+
]
|
|
308
|
+
}
|
|
309
|
+
]
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
Express the selector restriction in whatever form the live policy already uses
|
|
313
|
+
(a `function_selector` condition, or one calldata-field rule per exit method
|
|
314
|
+
with its ABI). What matters is the set: `openStream` → V3 only; the three exits
|
|
315
|
+
→ V3 and V2; `approve.spender` → V3 only. The existing invocation-capability
|
|
316
|
+
typed-data rule must change its `verifyingContract` to the V3 escrow at the
|
|
317
|
+
same time (the broker already binds it to the current escrow).
|
|
318
|
+
|
|
319
|
+
Apply the policy change and the `@absol-labs/sdk@0.10.0-rc.2` bump together: the
|
|
320
|
+
broker refuses a V2 `openStream` as soon as the registry default is V3, and the
|
|
321
|
+
policy should too.
|