Guide: PCL Policy Types In-Depth
A detailed look at each of Maroo's built-in PCL policy templates, including their purpose, parameter schemas, and example configurations.
Prerequisites
- Understanding of the PCL Policy Structure concept.
DENYLIST_POLICY
Blocks transactions from a list of addresses.
Schema:
Schema:
{"denylist": ["address"]}{
"template_id": "DENYLIST_POLICY",
"parameters": "ewogICJkZW55bGlzdCI6IFsKICAgICJtYXJvbzFzZjlqZ2M3bWVlZnhxZzVzZzR3dGNwZ25oZ21xZ3h0cW55eGgiLAogICAgIm1hcm9vMWw0eGNzY3h5Z3J5a3J1Z2N0Z3JzZ3J1cHpzZzVjZzJ4cW54eCIKICBdCn0="
// Decoded JSON:
// {
// "denylist": [
// "maroo1sf9jgc7meefxqg5sg4wtcpgnhgmqgxtqnyxh",
// "maroo1l4xcscxygrykrugctgrsgruspzg5cg2xqnxq"
// ]
// }
} Note: This policy is checked against the transaction's sender. It's a simple and effective way to block specific accounts.
VOLUME_POLICY
Enforces minimum or maximum transfer amounts for specified denominations.
Schema:
Schema:
{"<denom>": {"min_limit": "int,nullable", "max_limit": "int,nullable"}}{
"template_id": "VOLUME_POLICY",
"parameters": "ewogICJva3J3IjogewogICAgIm1heF9saW1pdCI6ICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIC8vIDEwMDAgT0tSVwogICAgIm1pbl9saW1pdCI6ICIxMDAwMDAwMDAwMDAwMDAwMCIsICAgICAgLy8gMC4xIE9LUlcKICB9LAogICJ1c3Rha2UiOiB7CiAgICAibWF4X2xpbWl0IjogIjUwMDAwMDAwMDAiCiAgfQp9"
// Decoded JSON:
// {
// "okrw": {
// "max_limit": "1000000000000000000000", // 1000 OKRW
// "min_limit": "100000000000000000" // 0.1 OKRW
// },
// "ustake": {
// "max_limit": "5000000000"
// }
// }
} Tip: You can specify limits for multiple denoms in a single policy. `min_limit` and `max_limit` are both optional.
EAS_POLICY
Requires the sender to have a specific EAS attestation.
Schema:
Schema:
{"eas_contract": "string", "index_contract": "string", "schema_uid": "string"}{
"template_id": "EAS_POLICY",
"parameters": "ewogICJlYXNfY29udHJhY3QiOiAiMHg0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxIiwKICAiaW5kZXhfY29udHJhY3QiOiAiMHhBYjU4MDFlN0YyZjljNzliOGQ3NkY4YjgyYTViN0U3OTlkZ0Y5NjYiLAogICJzY2hlbWFfdWlkIjogIjB4Y2E4YjQyZDBjYjI2ZTI4ZTU2Y2QxYjQ2YjE5Y2Y4Y2Y4YjM3Y2Y3YjQxYjI3YjQzYjU3YjU3YjU3YjU3YjU3YjU3IgogfQ=="
// Decoded JSON:
// {
// "eas_contract": "0x4200000000000000000000000000000000000021",
// "index_contract": "0xAb5801e7F2f9c7b8d76f8b82a5b7E799d0f966",
// "schema_uid": "0xca8b42d0cb26e28e56cd1b46b19cf8cf8b37cf7b41b27b43b57b57b57b57b57"
// }
} Warning: Ensure the EAS and Indexer contract addresses are correct for your target network (mainnet, testnet, or local).
OKRW_EAS_TRANSFER_LIMIT_POLICY
Allows non-attested users to transact up to a certain limit.
Schema:
Schema:
{"eas_contract": "string", "index_contract": "string", "schema_uid": "string", "transfer_limit_amount": "string"}{
"template_id": "OKRW_EAS_TRANSFER_LIMIT_POLICY",
"parameters": "ewogICJlYXNfY29udHJhY3QiOiAiMHg0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxIiwKICAiaW5kZXhfY29udHJhY3QiOiAiMHhBYjU4MDFlN0YyZjljNzliOGQ3NkY4YjgyYTViN0U3OTlkZ0Y5NjYiLAogICJzY2hlbWFfdWlkIjogIjB4Y2E4YjQyZDBjYjI2ZTI4ZTU2Y2QxYjQ2YjE5Y2Y4Y2Y4YjM3Y2Y3YjQxYjI3YjQzYjU3YjU3YjU3YjU3YjU3YjU3IiwKICAidHJhbnNmZXJfbGltaXRfYW1vdW50IjogIjEwMDAwMDAwMDAwMDAwMDAwMDAwMCIKfQ=="
// Decoded JSON:
// {
// "eas_contract": "0x4200000000000000000000000000000000000021",
// "index_contract": "0xAb5801e7F2f9c7b8d76f8b82a5b7E799d0f966",
// "schema_uid": "0xca8b42d0cb26e28e56cd1b46b19cf8cf8b37cf7b41b27b43b57b57b57b57b57",
// "transfer_limit_amount": "10000000000000000000"
// }
} Note: This policy only applies to transfers of the native denomination (OKRW). The `transfer_limit_amount` is the maximum value a non-attested user can send.