Legal Oracle
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
- Updated denylists for
DENYLIST_POLICY(sanctions list adds/removes). - New
maxLimit/minLimitvalues forVOLUME_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
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
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.