Prepare: claim a policy from the agent wallet (rung 0)
policy_claimAn unsigned transaction for an agent wallet to claim the policy it runs (rung 0: the signature is the evidence; a wallet has at most one claim, and claiming again replaces it). Once claimed, the wallet's credit lines open with the policy's earned default daily limit for its rung when they have a gas station or bill pay, and its record feeds the policy's. The answer's next_steps say how to reach rung 1 (PUT /policies/quote with JSON { wallet (0x address), quote (hex: the raw TDX quote), event_log (the dstack event log, an array or its JSON text), key_chain (an object: the dstack KMS key chain binding the wallet's key to the app), signature (hex: an EIP-191 signature by wallet over the bytes "borro-policy-quote" ++ keccak256(quote)) }, at most 256 KB, no key; Borro's keeper verifies it and attests on chain) and rung 2 (SP1 proofs per action through policy_prove). Rung 0: a signature from the wallet ("I run policy H"), checked by nobody, defaults up to 250 USDG a day. Rung 1: a hardware attestation (a dstack TEE quote) that the wallet's key lives in an enclave running image H, verified off chain by Borro's keeper, which attests on chain; the raw quote is public, so anyone can re-verify; up to 500. Rung 2: a zk proof per action (SP1) that the action is what program H outputs on committed inputs, checked by the SP1 verifier contract at the registry; up to 1,000. Honest limits: rung 0 proves nothing (a lying wallet poisons the policy it claimed, and the policy's owner can disown it); rung 1 trusts the chip maker and the enclave operator, and Borro's keeper is the on-chain attester (the quote itself is published, so the keeper cannot invent one); rung 2 serves policies that are pure functions over Borro's public inputs, which no LLM-driven agent is; nothing proves which weights a closed model used. Simulated from the wallet; nothing is sent.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"wallet": "<wallet>",
"policy": "<policy>"
},
"name": "policy_claim"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | The policy's hash (bytes32: 0x and 64 hex characters), keccak256 of its manifest | |
| wallet | Yes | The wallet's address (0x...); the transactions are built for it to sign |