{"id":52005162,"url":"https://github.com/smartcontractkit/chainlink-ace","last_synced_at":"2026-07-31T14:30:48.995Z","repository":{"id":318968194,"uuid":"1070856339","full_name":"smartcontractkit/chainlink-ace","owner":"smartcontractkit","description":null,"archived":false,"fork":false,"pushed_at":"2026-01-30T14:36:27.000Z","size":304,"stargazers_count":13,"open_issues_count":2,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-31T07:39:09.183Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Solidity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/smartcontractkit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-06T14:25:46.000Z","updated_at":"2026-01-29T19:16:17.000Z","dependencies_parsed_at":"2025-10-17T13:42:05.118Z","dependency_job_id":null,"html_url":"https://github.com/smartcontractkit/chainlink-ace","commit_stats":null,"previous_names":["smartcontractkit/chainlink-ace"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/smartcontractkit/chainlink-ace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartcontractkit%2Fchainlink-ace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartcontractkit%2Fchainlink-ace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartcontractkit%2Fchainlink-ace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartcontractkit%2Fchainlink-ace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/smartcontractkit","download_url":"https://codeload.github.com/smartcontractkit/chainlink-ace/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartcontractkit%2Fchainlink-ace/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36122275,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-31T02:00:06.731Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-31T14:30:47.995Z","updated_at":"2026-07-31T14:30:48.973Z","avatar_url":"https://github.com/smartcontractkit.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/chainlink-logo.svg\" alt=\"Chainlink\" width=\"300\" height=\"130\"/\u003e\n\u003c/div\u003e\n\n# Chainlink ACE Core Contracts \n\n**Build the next generation of financial applications with programmable, cross‑chain compliance—powered by the Chainlink Automated Compliance Engine (ACE).**\n\n## What Problems Does This Solve?\n\nBuilding compliant applications on the blockchain requires handling:\n\n- **Dynamic policy enforcement** that evolves with regulations—without redeploying your core application contracts\n- **Identity verification** across chains, without fragmented credentials\n- **Trusted external data** (KYC providers, sanctions lists, price feeds, Proof of Reserves, etc.) delivered onchain\n\n## Your Modular Toolkit\n\n| Component                | Description                                                                        | Dependencies               |\n| ------------------------ | ---------------------------------------------------------------------------------- | -------------------------- |\n| **Policy Management**    | Dynamic engine to create and enforce onchain rules.                                | Standalone                 |\n| **Cross-Chain Identity** | Portable identity system for EVM chains; attach credentials once, verify anywhere. | Requires Policy Management |\n\n## Key Features\n\n- **Modular \u0026 Composable**: Use one component or all three. They're designed to work together seamlessly.\n- **Future-Proof**: Adapt to new regulations by updating policies, not your core application logic.\n- **Cross-Chain Ready**: Manage identity and compliance consistently across multiple EVM networks.\n- **Privacy-Preserving by Design**: Keep sensitive user data offchain while verifying credentials onchain.\n- **Ready-to-Use Policies**: Plug-and-play modules for common compliance scenarios like volume limits and authorization.\n- **EVM Compatible**: Works with existing tooling and supports future innovations like ZK proofs.\n\n## How It Works: A Real-World Example\n\nHere's how these components work together. Imagine **Emma** (an institutional investor) wants to buy **$50,000** of a **Tokenized Bond** on a DEX.\n\n```mermaid\ngraph TB\n    subgraph \"External World\"\n        KYC[\"\u003cb\u003eKYC Provider\u003c/b\u003e\u003cbr/\u003e✅ Emma: Verified\"]\n        Oracle[\"\u003cb\u003eBond Price Feed\u003c/b\u003e\u003cbr/\u003e📊 Current: $1.02\"]\n        AML[\"\u003cb\u003eAML Watchlist\u003c/b\u003e\u003cbr/\u003e🔍 Emma: Clean\"]\n    end\n\n    subgraph \"Chainlink ACE Modular Toolkit\"\n        subgraph \"Cross-Chain Identity\"\n            CCID[\"\u003cb\u003eEmma's Identity\u003c/b\u003e\u003cbr/\u003eID: 0x1a2b... (Portable)\"]\n            CredReg[\"\u003cb\u003eCredentials\u003c/b\u003e\u003cbr/\u003e✅ KYC ✅ Accredited\"]\n        end\n\n        subgraph \"Policy Management ⚙️\"\n            PE[\"\u003cb\u003ePolicy Engine\u003c/b\u003e\u003cbr/\u003e🧠 Decision Maker\"]\n            P1[\"\u003cb\u003eAccess Policy\u003c/b\u003e\u003cbr/\u003e❓ Verified \u0026 not sanctioned?\"]\n            P2[\"\u003cb\u003eVolume Rate Policy\u003c/b\u003e\u003cbr/\u003e❓ $50k within daily limit?\"]\n        end\n\n    end\n\n    subgraph \"Emma's Transaction\"\n        Emma[\"\u003cb\u003e👩‍💼 Emma\u003c/b\u003e\u003cbr/\u003eWants: $50k bonds\"]\n        BondDEX[\"\u003cb\u003eBond DEX\u003c/b\u003e\u003cbr/\u003e🏦 Tokenized Bonds\"]\n        Result[\"\u003cb\u003e✅ Trade Approved\u003c/b\u003e\"]\n    end\n\n    %% Data flows\n    KYC -.-\u003e|\"\u003cb\u003eIssues Credential\u003c/b\u003e\"| CredReg\n    Oracle -.-\u003e|\"\u003cb\u003eProvides Data\u003c/b\u003e\"| Registry\n    AML -.-\u003e|\"\u003cb\u003eProvides Data\u003c/b\u003e\"| Registry\n\n    %% Transaction flow\n    Emma --\u003e|\"\u003cb\u003e1. Buy Bonds\u003c/b\u003e\"| BondDEX\n    BondDEX --\u003e|\"\u003cb\u003e2. Validate Tx\u003c/b\u003e\"| PE\n\n    %% Policy Engine orchestration\n    PE --\u003e P1\n    PE --\u003e P2\n\n    %% Policy checks using other components\n    P1 --\u003e|\"Checks\"| CredReg\n    P1 --\u003e|\"Uses\"| Registry\n    P2 --\u003e|\"Uses\"| Registry\n\n    %% Completion\n    PE --\u003e|\"\u003cb\u003e3. All checks pass\u003c/b\u003e\"| BondDEX\n    BondDEX --\u003e|\"\u003cb\u003e4. Execute Trade\u003c/b\u003e\"| Result\n\n    classDef default fill:#2b2f37,stroke:#c0c5ce,stroke-width:1px,color:#c0c5ce\n    classDef external fill:#4338ca,stroke:#a5b4fc,stroke-width:1px,color:#e0e7ff\n    classDef user fill:#166534,stroke:#4ade80,stroke-width:1px,color:#dcfce7\n    classDef result fill:#be123c,stroke:#fda4af,stroke-width:1px,color:#ffe4e6\n\n    class KYC,Oracle,AML external\n    class Emma,Result user\n```\n\n### The Compliance Journey: Step-by-Step\n\n1.  **Transaction Initiated**: Emma submits her buy order on the DEX. Before executing, the DEX's smart contract calls the **Policy Engine** to validate the transaction.\n2.  **Access Policy Executes**: The Policy Engine executes the `Access Policy`, which uses the **Cross-Chain Identity** component to verify Emma has the required credentials (`✅ KYC`, `✅ Accredited`).\n    _Crucially, this same identity and credential would be valid even if Emma were using a different wallet address on a different EVM chain._\n3.  **Volume Rate Policy Executes**: Next, the engine runs the `Volume Rate Policy`, which tracks Emma's trading volume over time and confirms the $50,000 trade is within her daily limit.\n4.  **Transaction Approved**: With all policies passing, the Policy Engine allows the transaction to proceed. The DEX executes the trade, and Emma receives her tokenized bonds.\n\n_The power of this model is that if regulations change tomorrow, the DEX's owners could add a new policy (e.g., a 'Time-of-Day Policy') without having to redeploy or alter the main DEX contract._\n\nIf any policy check had failed, the **Policy Engine would have reverted the transaction directly**, preventing a non-compliant trade.\n\n## 🚀 Ready to Build?\n\n### New to ACE? Start here\n\n**Get hands-on immediately.** Our beginner-friendly Getting Started Guide walks you through the core pattern with a simple, working example.\n\n**→ [Start the Getting Started Guide](./getting_started/GETTING_STARTED.md)**\n\n---\n\n### Upgrading an existing contract?\n\n**Already have a deployed contract** that you want to add ACE compliance to? Our upgrade guide walks you through the process step-by-step.\n\n**Best for:** Teams with existing deployed contracts (tokens, vaults, DEXs, etc.) that need to add policy-based compliance.\n\n**→ [Upgrade Guide](./UPGRADE_GUIDE.md)**\n\n### Need identity \u0026 credential verification?\n\n**After completing the basic guide**, level up with our Advanced Getting Started Guide featuring KYC checks, sanctions screening, and identity management.\n\n**Best for:** Applications requiring user verification, accredited investor checks, or cross-chain identity.\n\n**→ [Advanced Getting Started Guide](./getting_started/advanced/GETTING_STARTED_ADVANCED.md)**\n\n---\n\n### Want to study production-ready examples?\n\nBuild with confidence using our reference implementations as your foundation.\n\n**Best for:** Experienced developers who want to study audited code and adapt it to their needs.\n\n- **Study the reference implementation for each component:**\n  - [Policy Management](./packages/policy-management/src)\n  - [Cross-Chain Identity](./packages/cross-chain-identity/src)\n- **See full integrations in the [example tokens](./packages/tokens)**\n\n---\n\n### Want to understand the architecture first?\n\nUnderstand the design before diving into implementation.\n\n**→ Continue reading about the components below**\n\n## Explore the Components\n\n### 🛡️ [Policy Management](./packages/policy-management/)\n\nUse this component to enforce onchain rules that can be updated without redeploying your core contracts.\n\n- **Policy Engine**: Pluggable, composable policy enforcement.\n- **Zero Downtime Updates**: Add, remove, or modify rules dynamically.\n- **Ready-to-Use Policies**: AllowPolicy, VolumePolicy, OnlyOwnerPolicy, and more.\n\n**How it works as a standalone component:**\n\n```mermaid\ngraph LR\n    App[Your Contract] --\u003e|inherits| PP[PolicyProtected]\n    App --\u003e|calls| PE[PolicyEngine]\n    PE --\u003e|executes| P1[Policy 1]\n    PE --\u003e|executes| P2[Policy 2]\n    PE --\u003e|executes| P3[Policy N]\n```\n\n**Use cases:** Access control, volume limits, time restrictions, pauseable functions, role-based permissions.\n\n→ **[📋 Quick Guide](./packages/policy-management/README.md)** | **[🏗️ Reference Implementation](./packages/policy-management/src/)** | **[📚 Deep Dive Docs](./packages/policy-management/docs/)** | **[📋 Ready-to-Use Policies](./packages/policy-management/src/policies/README.md)**\n\n### 🔗 [Cross-Chain Identity](./packages/cross-chain-identity/)\n\nUse this component to link wallet addresses to a single identity and manage credentials like KYC/AML.\n\n- **Cross-Chain ID (CCID)**: Single identifier linking addresses across multiple chains.\n- **Credential Registry**: Manage credentials (e.g., KYC, AML) that are tied directly to a user's CCID.\n- **Privacy-First**: Store sensitive data offchain, only hashes onchain.\n\n\u003e **Requires:** Policy Management component (listed above)\n\n**How it works integrated with Policy Management:**\n\n```mermaid\ngraph TB\n    App[Your Contract] --\u003e|inherits| PP[PolicyProtected]\n    App --\u003e|calls| PE[PolicyEngine]\n    PE --\u003e|executes| IVP[CredentialRegistryIdentityValidatorPolicy\u003cbr/\u003e(single requirement set)]\n    PE --\u003e|executes| GIVP[GroupedIdentityValidatorPolicy\u003cbr/\u003e(segmented requirements)]\n    PE --\u003e|executes| SP[SanctionsPolicy]\n    PE --\u003e|executes| OP[Other Policies]\n\n    IVP --\u003e|reads from| IR[IdentityRegistry]\n    IVP --\u003e|reads from| CR[CredentialRegistry]\n    GIVP --\u003e|routes + reads from| IR\n    GIVP --\u003e|routes + reads from| CR\n    SP --\u003e|reads from| SL[Sanctions List]\n```\n\n**Use cases:** KYC/AML verification, accredited investor checks, cross-chain credential verification, sanctions screening.\n\n→ **[📋 Quick Guide](./packages/cross-chain-identity/README.md)** | **[🏗️ Reference Implementation](./packages/cross-chain-identity/src/)** | **[📚 Deep Dive Docs](./packages/cross-chain-identity/docs/)**\n\n## [Example Tokens](./packages/tokens/)\n\nExplore our example token contracts to see how these components work together in a real application.\n\n- **[ERC-20 Compliance Token](./packages/tokens/erc-20)** - A policy-protected ERC-20 implementation with advanced frozen token handling\n- **[ERC-3643 Compliance Token](./packages/tokens/erc-3643)** - A compliant implementation of the ERC-3643 T-REX standard\n\n\u003e **📝 Important Note on Frozen Token Behavior:**  \n\u003e These two token implementations handle frozen tokens differently during burns and forced transfers:\n\u003e\n\u003e - **ERC-20**: Frozen tokens remain frozen during burns/force transfers. The `_checkFrozenBalance()` function ensures sufficient unfrozen tokens are available before operations proceed.\n\u003e - **ERC-3643**: Automatically unfreezes tokens as needed during burns/force transfers to complete the operation.\n\u003e\n\u003e Both approaches are valid design choices depending on your compliance requirements. Choose the implementation that best fits your use case.\n\n## Contributing \u0026 Feedback\n\nWe welcome community **feedback, audits, and contributions**. If you have additional compliance requirements or ideas for new features, please feel free to propose expansions or new modules.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmartcontractkit%2Fchainlink-ace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsmartcontractkit%2Fchainlink-ace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmartcontractkit%2Fchainlink-ace/lists"}