InterlockC6 dashboard
static snapshotchain 84532wallet 0xe7f1…0512registry 0x5fc8…5707

Passports / 09-stale-mandate

Gateway still holds mandate v1 after v2 went live

BLOCKED
G04 MANDATE_INVALID · decision Block · decided by gateway

Gateway's explanation (attested, not verifiable): BLOCKED. The mandate the gateway holds is not the one active on-chain, or it failed validation (a different mandate is active on-chain). What the transaction does: pay (unknown) (unknown) from the Interlock wallet to Acme Payouts (0x2000…0001), for invoice (unknown) from (unknown). Its approval tier could not be determined. The payment expires at 2026-11-01 00:36:48 UTC.

Passport hash0x310bf427563839b009d5847219b4126cd5dcdc5f6b93178347b6c4001ca99275
Issued by0xbb50b6623454712be08befecb0b78b9ec7d16086 at 2026-11-01 00:06:48 UTC
C7 registryattested · tx 0x82e01f…ac909e · block 29

Verification run in your browser, offline (static deployment)

VERIFYING…

Decoded transaction

Callexecute(Payment, bytes approverSig)
To (wallet)0xe7f1725e7734ce288f8367e1bb143e90bb3f0512
Value0 wei
Payment.toAcme Payouts (0x2000…0001)
Payment.amount5.00 (5000000 units)
Payment.token0x5fbdb2315678afecb367f032d93f642f64180aa3
Payment.nonce7 (agent range)
Payment.deadline2026-11-01 00:36:48 UTC
Payment.invoiceHash0xf2ccc7cf5c108a6a194f072edd18daba72beeac4408b85889725ca98704517fd
approverSig(empty)
On-chainnot sent
Calldata (260 bytes)
0xbd57de2300000000000000000000000020000000000000000000000000000000000000010000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa300000000000000000000000000000000000000000000000000000000004c4b400000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000006ae689a0f2ccc7cf5c108a6a194f072edd18daba72beeac4408b85889725ca98704517fd00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000

Raw invoice bound to calldata

Agent-supplied and untrusted: shown as inert text. This is the exact canonical byte string whose keccak256 is the invoiceHash.

{"amount":"5000000","invoice_id":"INV-1004","memo":"Monitoring add-on","payee":"0x2000000000000000000000000000000000000001","vendor":"0x1000000000000000000000000000000000000001"}
invoice_idINV-1004
vendor0x1000000000000000000000000000000000000001
payee0x2000000000000000000000000000000000000001
amount5000000 = 5.00
memoMonitoring add-on
keccak2560xf2ccc7cf5c108a6a194f072edd18daba72beeac4408b85889725ca98704517fd

Mandate v1 0x689f1cb4…44df8ee3first mandate: no previous version

This passport was decided under v1; v2 (0x243484…5daae1) has since been activated. The change is listed below the table.

Fields

Fieldv1Enforced by
vendors0x1000…0001, 0x1000…0002, 0x1000…0006C4 only
vendorPayees0x2000…0001, 0x2000…0002, 0x2000…0006C4 + C5
token0x5fbd…0aa3C4 + C5
maxTx20.00C4 + C5
reviewThreshold15.00C4 + C5
taskBudget100.00C4 counter; C5 via M6
bucketCapacity40.00C5
refillRate99 units/s (8.5536/day)C5
maxValidity7 dC4 + C5
expiry2026-11-08 00:00:04 UTCC4 + C5
issuedAt2026-11-01 00:00:04 UTCC4 + C5
chainId84532C5
version1C4 only
nonce1C5 (minNonce)

Then replaced by v2

vendors0x1000…0001, 0x1000…0002, 0x1000…0006 → 0x1000…0001, 0x1000…0002, 0x1000…0006, 0x1000…0003, 0x1000…0004, 0x1000…0005 +0x1000…0003 +0x1000…0004 +0x1000…0005
vendorPayees0x2000…0001, 0x2000…0002, 0x2000…0006 → 0x2000…0001, 0x2000…0002, 0x2000…0006, 0x2000…0003, 0x2000…0004, 0x2000…0005 +0x2000…0003 +0x2000…0004 +0x2000…0005
maxTx20.00 → 25.00
taskBudget100.00 → 80.00
maxValidity7 d → 3 d
expiry2026-11-08 00:00:04 UTC → 2026-11-04 00:05:45 UTC
issuedAt2026-11-01 00:00:04 UTC → 2026-11-01 00:05:45 UTC
version1 → 2
nonce1 → 2

This payment against the mandate

CheckPaymentMandateRule
✓ token0x5fbd…0aa30x5fbd…0aa3G07 / C5
✓ payee ∈ vendorPayees0x2000…00013 allowedG10 / C5
✓ vendor ∈ vendors0x1000…00013 allowedG09 (C4 only)
✓ 0 < amount ≤ maxTx5.0020.00G11 / C5
✓ tierAllowthreshold 15.00G13/G16 / C5
✓ deadline2026-11-01 00:36:48 UTCmandate expiry 2026-11-08 00:00:04 UTCG12 / C5

Display only. The gateway (GW-1) and the wallet decide; this table restates their limits. The task-budget counter and the bucket depend on history and are not recomputed here.

Risk graph graph engine · py/interlock_gateway/graph.py

The same in-memory graph the gateway queries before it signs (rules G22 Block, G23 Review). Directed edges, shortest path to a known bad actor: the address itself or one edge away is Block, two or more is Review, none within 6 is Allow, an unreachable graph is Review. It knows only what its operator file says; Allow means “no known link”, not “safe”.

Vendor / walletContractKnown bad actorsource: passport (recorded at decision)

No graph data for this payment.

At decision time (attested in the passport)

Not consulted: rule G04 stopped the payment before the graph check.

Live query not available: this is a static deployment with no graph service. The result above is the one the gateway recorded at decision time.

Labels come from the operator's graph file; payee and vendor names elsewhere on this page come from the address book.

What the agent read demo context · not attested

mail-1004 · email: billing@acme.example
Invoice INV-1004, 5.00 USDC, monitoring add-on.

Raw passport

Show the JSON exactly as issued (3,238 canonical bytes)
{
  "body": {
    "kind": "interlock.verification-passport",
    "version": "1",
    "chain": {
      "chain_id": "84532",
      "wallet": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512",
      "registry": "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707"
    },
    "issuer": "0xbb50b6623454712be08befecb0b78b9ec7d16086",
    "issued_at": "1793491608",
    "request": {
      "tx": {
        "to": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512",
        "data": "0xbd57de2300000000000000000000000020000000000000000000000000000000000000010000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa300000000000000000000000000000000000000000000000000000000004c4b400000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000006ae689a0f2ccc7cf5c108a6a194f072edd18daba72beeac4408b85889725ca98704517fd00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000",
        "value": "0"
      },
      "claim": {
        "invoice": {
          "invoice_id": "INV-1004",
          "vendor": "0x1000000000000000000000000000000000000001",
          "payee": "0x2000000000000000000000000000000000000001",
          "amount": "5000000",
          "memo": "Monitoring add-on"
        }
      }
    },
    "decoded": {
      "payment": {
        "to": "0x2000000000000000000000000000000000000001",
        "token": "0x5fbdb2315678afecb367f032d93f642f64180aa3",
        "amount": "5000000",
        "nonce": "7",
        "deadline": "1793493408",
        "invoiceHash": "0xf2ccc7cf5c108a6a194f072edd18daba72beeac4408b85889725ca98704517fd"
      },
      "approver_sig": ""
    },
    "mandate": {
      "schema_version": "3",
      "primaryType": "Mandate",
      "domain": {
        "name": "InterlockWallet",
        "version": "1",
        "chainId": "84532",
        "verifyingContract": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512"
      },
      "message": {
        "vendors": [
          "0x1000000000000000000000000000000000000001",
          "0x1000000000000000000000000000000000000002",
          "0x1000000000000000000000000000000000000006"
        ],
        "vendorPayees": [
          "0x2000000000000000000000000000000000000001",
          "0x2000000000000000000000000000000000000002",
          "0x2000000000000000000000000000000000000006"
        ],
        "token": "0x5fbdb2315678afecb367f032d93f642f64180aa3",
        "maxTx": "20000000",
        "reviewThreshold": "15000000",
        "taskBudget": "100000000",
        "bucketCapacity": "40000000",
        "refillRate": "99",
        "maxValidity": "604800",
        "expiry": "1794096004",
        "chainId": "84532",
        "version": "1",
        "nonce": "1",
        "issuedAt": "1793491204"
      },
      "digest": "0x689f1cb4235c93afb83d21dd7a60a20365164d92bc7e5e83766934ed44df8ee3",
      "signature": "0x21252fa3bf181ab519de983206520799e90502c1074d8b7ed30b9b4e906e73050adfd0b477feb7daa7c67dc36b72b279bc4b54dc3515e203a4b293360ea8ef261c"
    },
    "digests": {
      "mandate": "0x689f1cb4235c93afb83d21dd7a60a20365164d92bc7e5e83766934ed44df8ee3",
      "payment": "0xac56a84738636b7539ea12027769d0d75092e802ad19e1ebb9b1000c910a7bc0",
      "invoice": "0xf2ccc7cf5c108a6a194f072edd18daba72beeac4408b85889725ca98704517fd"
    },
    "verdict": {
      "rule_id": "G04",
      "rule": "MANDATE_INVALID",
      "decision": "Block",
      "deciding_layer": "gateway",
      "outcome": "Blocked",
      "explanation": "BLOCKED. The mandate the gateway holds is not the one active on-chain, or it failed validation (a different mandate is active on-chain). What the transaction does: pay (unknown) (unknown) from the Interlock wallet to Acme Payouts (0x2000…0001), for invoice (unknown) from (unknown). Its approval tier could not be determined. The payment expires at 2026-11-01 00:36:48 UTC.",
      "detail": "a different mandate is active on-chain",
      "wallet_error": null
    },
    "execution": null,
    "graph": null
  },
  "passport_hash": "0x310bf427563839b009d5847219b4126cd5dcdc5f6b93178347b6c4001ca99275",
  "anchor": {
    "kind": "attest",
    "registry": "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707",
    "attester": "0xbb50b6623454712be08befecb0b78b9ec7d16086",
    "tx_hash": "0x82e01ffe421cee56fe708f16cf6ced781fbf57553cc45826ded13522beac909e",
    "block_number": "29"
  }
}