ALLOW
Every required check completed and passed. This state is not available in the current preview.
PUBLIC CONTRACT REVIEW UTILIA.GUARD.V0.1 PRE-SIGN
A deterministic contract for wallets and policy runtimes to inspect one serialized Solana transaction before the final signing step. The guard never asks for a private key, signs, or broadcasts.
BOUNDED INPUT CONTRACT
Unknown keys are rejected. Invalid or conflicting policies return
HTTP 422 and do not produce a guard decision.
{
"contractVersion": "utilia.guard.v0.1",
"transaction": {
"serialized": "<base64 or base58 transaction>",
"encoding": "base64"
},
"policy": {
"policyId": "wallet-policy-v1",
"requireSimulationSuccess": true,
"maxComputeUnits": 300000,
"maxPriorityFeeLamports": "100000",
"maxSolSpendLamports": "100000000",
"tokenSpendLimits": [
{
"mint": "<Solana public key>",
"maxAtomicAmount": "25000000"
}
],
"allowedPrograms": [],
"blockedPrograms": [],
"allowedRecipients": [],
"blockedRecipients": [],
"requireKnownPrograms": true,
"requireKnownRecipients": true,
"denyUnknownTokenExtensions": true
},
"context": {
"source": "wallet_runtime",
"agentId": "optional-pseudonymous-id",
"intent": "swap"
}
}
Base64 by default. Base58 is also accepted.
Integer limit. Null means the check is not configured.
No negatives, decimals, leading plus signs, or floats.
Every address must be a valid Solana public key.
Source and intent are limited to 64 characters.
No duplicate mint or address in both allow and block lists.
DECISION STATES
The full contract defines three outcomes. The local preview
deliberately emits only DENY or REVIEW
until transaction semantics and signed receipts are complete.
Every required check completed and passed. This state is not available in the current preview.
At least one bounded deny rule failed. Denial takes precedence over incomplete evidence elsewhere.
The service could not prove every required check. The caller must not treat this as approval.
A wallet should block, ask for explicit review, or apply its own stricter local policy. It should never silently continue to signing.
AUTHENTICATION AND TRUST BOUNDARY
The preview binds data with canonical SHA-256 digests, but no issuer signature authenticates those digests. The wallet remains the authority for signing and local policy enforcement.
context source, agent ID, and intentFROZEN TEST VECTORS
Each fixture uses a structurally valid legacy System Program transfer with a null signature, deterministic public addresses, and fixed RPC evidence. No live authorization, network call, private key, or payment is required.
Simulation succeeds at 150 compute units, but missing message decoding prevents complete semantic checks.
{
"decision": "REVIEW",
"reasons": ["EVIDENCE_INCOMPLETE"],
"simulation": "succeeded",
"computeUnits": 150,
"receipt": null
}
Simulation succeeds, but 200,001 observed compute units exceed the configured limit of 200,000.
{
"decision": "DENY",
"reasons": [
"EVIDENCE_INCOMPLETE",
"COMPUTE_LIMIT_EXCEEDED"
],
"simulation": "succeeded",
"computeUnits": 200001
}
The frozen simulation returns a deterministic program error while required simulation success is enabled.
{
"decision": "DENY",
"reasons": [
"EVIDENCE_INCOMPLETE",
"SIMULATION_FAILED"
],
"simulation": "failed",
"computeUnits": 150
}
RUNTIME AND WALLET REVIEW
These questions define the pre-sign boundary. Feedback should cite the contract version and fixture ID it applies to.
REVIEW, or
should the caller choose between REVIEW and
DENY?
Complete implementation and pricing remain blocked until one wallet or policy runtime confirms the input boundary, output boundary, unknown-semantics behavior, evidence expiry, and receipt fields.
Partner-specific review paths are used only for page-level outreach attribution. They do not prove demand, authorization, payment, or a policy decision.