Legal Oracle

mechanism compliance

The parameter supply that keeps PCL's rules current with regulation — without touching the policy engine itself.

Regulations change. Travel-Rule thresholds shift, sanctions lists update, jurisdictional rules evolve. Maroo separates the policy engine (PCL — stable, rarely changes) from the parameter supply (Legal Oracle — updated as laws and regulations evolve). New regulatory requirements are absorbed by adding a parameter — or, at most, registering a new PolicyTemplate — without touching chain core code. On maroo-testnet-1 these parameters — the global policy config — are set by the PCL policy admin, a single account; governance controls the module parameters, including which account is the policy admin. Every change is an on-chain transaction, visible and auditable.

What flows through the Legal Oracle

Legal Oracle inputs are parameters, not code. Concretely:

  • Updated denylists for DENYLIST_POLICY (sanctions list adds/removes).
  • New maxLimit / minLimit values for VOLUME_POLICY.
  • New period definitions and limits for PERIODIC_VOLUME_POLICY.
  • New schema UIDs for EAS_POLICY (e.g. when a new KYC tier is rolled out).
  • New parameters for newly-registered policy templates.


It does NOT supply: new policy logic (that requires a network upgrade), private user data, or anything that bypasses the standard PCL evaluation pipeline.

Authority and key management

On maroo-testnet-1 the chain-wide parameters PCL enforces — the global policy config and the registered templates — are set by the PCL policy admin (IPcl.policyAdmin()), a single account, through the PCL precompile. A contract's own policies are set by that contract's policy admin; this account can change them only where it is also that admin, as it is on maroo-testnet-1 for the Privacy precompile. Governance controls the x/pcl module parameters, including which account is the policy admin, so it can rotate that key. From a dApp builder's perspective the important property is that every change is an on-chain transaction (with a timestamp), so you can watch for it. The exact key-management flow lives outside the dApp surface area.

Why this separation matters for developers

If you're building on Maroo, the Legal Oracle is mostly invisible — your transactions are evaluated by PCL using whatever parameters are currently active. The reason it matters:

1. Policies are not static. A VOLUME_POLICY your dapp depends on may have its maxLimit changed when the PCL policy admin publishes a new global policy config (setGlobalPolicies). Don't hard-code parameter values into your UI; query them from the chain (or test a concrete amount by simulating the transaction with eth_estimateGas, which reverts with a PCL ReasonCode when a policy rejects it; m-aws policy.preflight does not evaluate PCL policies — it checks an agent's own spending limit and allowed targets off-chain).
2. Compliance is a moving target. Regulations that don't apply today may apply tomorrow. Building on PCL means you inherit the chain's compliance posture as it evolves — you don't have to track every regulatory change yourself.
3. Audit and predictability. Because parameter changes are on-chain transactions, they're public and dated. You can reason about "the rules in effect at block N" with the same auditability as any other on-chain state.
ESC
Type to search