@chainlink/ace 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/.foundry-version +1 -0
  2. package/.github/CODEOWNERS +1 -0
  3. package/.github/workflows/auto-release-version.yml +107 -0
  4. package/.github/workflows/create-version-pr.yml +95 -0
  5. package/.github/workflows/forge-docs.yml +90 -0
  6. package/.github/workflows/forge-test.yml +59 -0
  7. package/.solhint-test.json +18 -0
  8. package/.solhint.json +16 -0
  9. package/.solhintignore +3 -0
  10. package/.solhintignore-test +2 -0
  11. package/Glossary.md +141 -0
  12. package/LICENSE +59 -0
  13. package/README.md +218 -0
  14. package/assets/chainlink-logo.svg +21 -0
  15. package/chainlink-ace-License-grants +2 -0
  16. package/foundry.toml +33 -0
  17. package/getting_started/GETTING_STARTED.md +477 -0
  18. package/getting_started/MyVault.sol +48 -0
  19. package/getting_started/advanced/.env.example +36 -0
  20. package/getting_started/advanced/GETTING_STARTED_ADVANCED.md +431 -0
  21. package/getting_started/advanced/SanctionsList.sol +25 -0
  22. package/getting_started/advanced/SanctionsPolicy.sol +58 -0
  23. package/package.json +41 -0
  24. package/packages/cross-chain-identity/README.md +148 -0
  25. package/packages/cross-chain-identity/docs/API_GUIDE.md +120 -0
  26. package/packages/cross-chain-identity/docs/API_REFERENCE.md +271 -0
  27. package/packages/cross-chain-identity/docs/CONCEPTS.md +253 -0
  28. package/packages/cross-chain-identity/docs/CREDENTIAL_FLOW.md +195 -0
  29. package/packages/cross-chain-identity/docs/SECURITY.md +70 -0
  30. package/packages/cross-chain-identity/src/CredentialRegistry.sol +245 -0
  31. package/packages/cross-chain-identity/src/CredentialRegistryIdentityValidator.sol +339 -0
  32. package/packages/cross-chain-identity/src/CredentialRegistryIdentityValidatorPolicy.sol +71 -0
  33. package/packages/cross-chain-identity/src/IdentityRegistry.sol +123 -0
  34. package/packages/cross-chain-identity/src/TrustedIssuerRegistry.sol +140 -0
  35. package/packages/cross-chain-identity/src/interfaces/ICredentialDataValidator.sol +30 -0
  36. package/packages/cross-chain-identity/src/interfaces/ICredentialRegistry.sol +170 -0
  37. package/packages/cross-chain-identity/src/interfaces/ICredentialRequirements.sol +192 -0
  38. package/packages/cross-chain-identity/src/interfaces/ICredentialValidator.sol +37 -0
  39. package/packages/cross-chain-identity/src/interfaces/IIdentityRegistry.sol +85 -0
  40. package/packages/cross-chain-identity/src/interfaces/IIdentityValidator.sol +18 -0
  41. package/packages/cross-chain-identity/src/interfaces/ITrustedIssuerRegistry.sol +61 -0
  42. package/packages/cross-chain-identity/test/CredentialRegistry.t.sol +220 -0
  43. package/packages/cross-chain-identity/test/CredentialRegistryIdentityValidator.t.sol +554 -0
  44. package/packages/cross-chain-identity/test/CredentialRegistryIdentityValidatorPolicy.t.sol +114 -0
  45. package/packages/cross-chain-identity/test/IdentityRegistry.t.sol +106 -0
  46. package/packages/cross-chain-identity/test/IdentityValidator.t.sol +969 -0
  47. package/packages/cross-chain-identity/test/TrustedIssuerRegistry.t.sol +123 -0
  48. package/packages/cross-chain-identity/test/helpers/BaseProxyTest.sol +112 -0
  49. package/packages/cross-chain-identity/test/helpers/MockCredentialDataValidator.sol +26 -0
  50. package/packages/cross-chain-identity/test/helpers/MockCredentialRegistryReverting.sol +131 -0
  51. package/packages/policy-management/README.md +197 -0
  52. package/packages/policy-management/docs/API_GUIDE.md +290 -0
  53. package/packages/policy-management/docs/API_REFERENCE.md +173 -0
  54. package/packages/policy-management/docs/CONCEPTS.md +156 -0
  55. package/packages/policy-management/docs/CUSTOM_POLICIES_TUTORIAL.md +195 -0
  56. package/packages/policy-management/docs/POLICY_ORDERING_GUIDE.md +91 -0
  57. package/packages/policy-management/docs/SECURITY.md +57 -0
  58. package/packages/policy-management/src/core/Policy.sol +124 -0
  59. package/packages/policy-management/src/core/PolicyEngine.sol +382 -0
  60. package/packages/policy-management/src/core/PolicyFactory.sol +92 -0
  61. package/packages/policy-management/src/core/PolicyProtected.sol +126 -0
  62. package/packages/policy-management/src/extractors/ComplianceTokenForceTransferExtractor.sol +57 -0
  63. package/packages/policy-management/src/extractors/ComplianceTokenFreezeUnfreezeExtractor.sol +54 -0
  64. package/packages/policy-management/src/extractors/ComplianceTokenMintBurnExtractor.sol +61 -0
  65. package/packages/policy-management/src/extractors/ERC20ApproveExtractor.sol +57 -0
  66. package/packages/policy-management/src/extractors/ERC20TransferExtractor.sol +62 -0
  67. package/packages/policy-management/src/extractors/ERC3643ForcedTransferExtractor.sol +56 -0
  68. package/packages/policy-management/src/extractors/ERC3643FreezeUnfreezeExtractor.sol +55 -0
  69. package/packages/policy-management/src/extractors/ERC3643MintBurnExtractor.sol +51 -0
  70. package/packages/policy-management/src/extractors/ERC3643SetAddressFrozenExtractor.sol +51 -0
  71. package/packages/policy-management/src/interfaces/IExtractor.sol +17 -0
  72. package/packages/policy-management/src/interfaces/IMapper.sol +17 -0
  73. package/packages/policy-management/src/interfaces/IPolicy.sol +61 -0
  74. package/packages/policy-management/src/interfaces/IPolicyEngine.sol +264 -0
  75. package/packages/policy-management/src/interfaces/IPolicyProtected.sol +48 -0
  76. package/packages/policy-management/src/policies/AllowPolicy.sol +104 -0
  77. package/packages/policy-management/src/policies/BypassPolicy.sol +90 -0
  78. package/packages/policy-management/src/policies/IntervalPolicy.sol +223 -0
  79. package/packages/policy-management/src/policies/MaxPolicy.sol +73 -0
  80. package/packages/policy-management/src/policies/OnlyAuthorizedSenderPolicy.sol +84 -0
  81. package/packages/policy-management/src/policies/OnlyOwnerPolicy.sol +35 -0
  82. package/packages/policy-management/src/policies/PausePolicy.sol +82 -0
  83. package/packages/policy-management/src/policies/README.md +632 -0
  84. package/packages/policy-management/src/policies/RejectPolicy.sol +89 -0
  85. package/packages/policy-management/src/policies/RoleBasedAccessControlPolicy.sol +162 -0
  86. package/packages/policy-management/src/policies/SecureMintPolicy.sol +271 -0
  87. package/packages/policy-management/src/policies/VolumePolicy.sol +133 -0
  88. package/packages/policy-management/src/policies/VolumeRatePolicy.sol +192 -0
  89. package/packages/policy-management/test/PolicyEngine.t.sol +368 -0
  90. package/packages/policy-management/test/PolicyFactory.t.sol +114 -0
  91. package/packages/policy-management/test/PolicyProtectedToken.t.sol +75 -0
  92. package/packages/policy-management/test/extractors/ComplianceTokenForceTransferExtractor.t.sol +59 -0
  93. package/packages/policy-management/test/extractors/ComplianceTokenFreezeUnfreezeExtractor.t.sol +74 -0
  94. package/packages/policy-management/test/extractors/ComplianceTokenMintBurnExtractor.t.sol +92 -0
  95. package/packages/policy-management/test/extractors/ERC20ApproveExtractor.t.sol +58 -0
  96. package/packages/policy-management/test/extractors/ERC3643ForcedTransferExtractor.t.sol +59 -0
  97. package/packages/policy-management/test/extractors/ERC3643FreezeUnfreezeExtractor.t.sol +74 -0
  98. package/packages/policy-management/test/extractors/ERC3643MintBurnExtractor.t.sol +73 -0
  99. package/packages/policy-management/test/extractors/ERC3643SetAddressFrozenExtractor.t.sol +56 -0
  100. package/packages/policy-management/test/helpers/BaseProxyTest.sol +75 -0
  101. package/packages/policy-management/test/helpers/CustomMapper.sol +26 -0
  102. package/packages/policy-management/test/helpers/DummyExtractor.sol +11 -0
  103. package/packages/policy-management/test/helpers/ExpectedParameterPolicy.sol +39 -0
  104. package/packages/policy-management/test/helpers/MockAggregatorV3.sol +51 -0
  105. package/packages/policy-management/test/helpers/MockToken.sol +66 -0
  106. package/packages/policy-management/test/helpers/MockTokenExtractor.sol +34 -0
  107. package/packages/policy-management/test/helpers/PolicyAlwaysAllowed.sol +45 -0
  108. package/packages/policy-management/test/helpers/PolicyAlwaysContinue.sol +23 -0
  109. package/packages/policy-management/test/helpers/PolicyAlwaysRejected.sol +23 -0
  110. package/packages/policy-management/test/helpers/PolicyFailingRun.sol +22 -0
  111. package/packages/policy-management/test/policies/AllowPolicy.t.sol +174 -0
  112. package/packages/policy-management/test/policies/BypassPolicy.t.sol +159 -0
  113. package/packages/policy-management/test/policies/IntervalPolicy.t.sol +307 -0
  114. package/packages/policy-management/test/policies/MaxPolicy.t.sol +54 -0
  115. package/packages/policy-management/test/policies/OnlyAuthorizedSenderPolicy.t.sol +95 -0
  116. package/packages/policy-management/test/policies/OnlyOwnerPolicy.t.sol +47 -0
  117. package/packages/policy-management/test/policies/PausePolicy.t.sol +75 -0
  118. package/packages/policy-management/test/policies/RejectPolicy.t.sol +182 -0
  119. package/packages/policy-management/test/policies/RoleBasedAccessControlPolicy.t.sol +223 -0
  120. package/packages/policy-management/test/policies/SecureMintPolicy.t.sol +442 -0
  121. package/packages/policy-management/test/policies/VolumePolicy.t.sol +158 -0
  122. package/packages/policy-management/test/policies/VolumeRatePolicy.t.sol +165 -0
  123. package/packages/tokens/erc-20/src/ComplianceTokenERC20.sol +345 -0
  124. package/packages/tokens/erc-20/src/ComplianceTokenStoreERC20.sol +29 -0
  125. package/packages/tokens/erc-20/test/ComplianceTokenERC20.t.sol +556 -0
  126. package/packages/tokens/erc-20/test/helpers/BaseProxyTest.sol +75 -0
  127. package/packages/tokens/erc-3643/README.md +24 -0
  128. package/packages/tokens/erc-3643/src/ComplianceTokenERC3643.sol +564 -0
  129. package/packages/tokens/erc-3643/src/ComplianceTokenStoreERC3643.sol +30 -0
  130. package/packages/tokens/erc-3643/test/ComplianceTokenERC3643.t.sol +815 -0
  131. package/packages/tokens/erc-3643/test/helpers/BaseProxyTest.sol +76 -0
  132. package/packages/tokens/erc-3643/test/helpers/ExpectedContextPolicy.sol +32 -0
  133. package/packages/vendor/erc-3643/compliance/modular/IModularCompliance.sol +220 -0
  134. package/packages/vendor/erc-3643/registry/interface/IClaimTopicsRegistry.sol +101 -0
  135. package/packages/vendor/erc-3643/registry/interface/IIdentityRegistry.sol +251 -0
  136. package/packages/vendor/erc-3643/registry/interface/IIdentityRegistryStorage.sol +191 -0
  137. package/packages/vendor/erc-3643/registry/interface/ITrustedIssuersRegistry.sol +161 -0
  138. package/packages/vendor/erc-3643/token/IToken.sol +457 -0
  139. package/packages/vendor/onchain-id/interface/IClaimIssuer.sol +53 -0
  140. package/packages/vendor/onchain-id/interface/IERC734.sol +110 -0
  141. package/packages/vendor/onchain-id/interface/IERC735.sol +105 -0
  142. package/packages/vendor/onchain-id/interface/IIdentity.sol +26 -0
  143. package/packages/vendor/onchain-id/interface/IImplementationAuthority.sol +21 -0
  144. package/remappings.txt +6 -0
  145. package/script/DeployComplianceTokenERC20.s.sol +191 -0
  146. package/script/DeployComplianceTokenERC3643.s.sol +208 -0
  147. package/script/DeploySimpleComplianceToken.s.sol +38 -0
  148. package/script/getting_started/DeployGettingStarted.s.sol +74 -0
  149. package/script/getting_started/advanced/DeployAdvancedGettingStarted.s.sol +332 -0
  150. package/script/getting_started/advanced/DeploySanctionsList.s.sol +26 -0
package/README.md ADDED
@@ -0,0 +1,218 @@
1
+ <div align="center">
2
+ <img src="assets/chainlink-logo.svg" alt="Chainlink" width="300" height="130"/>
3
+ </div>
4
+
5
+ # Chainlink ACE Core Contracts
6
+
7
+ **Build the next generation of financial applications with programmable, cross‑chain complianceβ€”powered by the Chainlink Automated Compliance Engine (ACE).**
8
+
9
+ ## What Problems Does This Solve?
10
+
11
+ Building compliant applications on the blockchain requires handling:
12
+
13
+ - **Dynamic policy enforcement** that evolves with regulationsβ€”without redeploying your core application contracts
14
+ - **Identity verification** across chains, without fragmented credentials
15
+ - **Trusted external data** (KYC providers, sanctions lists, price feeds, Proof of Reserves, etc.) delivered onchain
16
+
17
+ ## Your Modular Toolkit
18
+
19
+ | Component | Description | Dependencies |
20
+ | ------------------------ | ---------------------------------------------------------------------------------- | -------------------------- |
21
+ | **Policy Management** | Dynamic engine to create and enforce onchain rules. | Standalone |
22
+ | **Cross-Chain Identity** | Portable identity system for EVM chains; attach credentials once, verify anywhere. | Requires Policy Management |
23
+
24
+ ## Key Features
25
+
26
+ - **Modular & Composable**: Use one component or all three. They're designed to work together seamlessly.
27
+ - **Future-Proof**: Adapt to new regulations by updating policies, not your core application logic.
28
+ - **Cross-Chain Ready**: Manage identity and compliance consistently across multiple EVM networks.
29
+ - **Privacy-Preserving by Design**: Keep sensitive user data offchain while verifying credentials onchain.
30
+ - **Ready-to-Use Policies**: Plug-and-play modules for common compliance scenarios like volume limits and authorization.
31
+ - **EVM Compatible**: Works with existing tooling and supports future innovations like ZK proofs.
32
+
33
+ ## How It Works: A Real-World Example
34
+
35
+ Here's how these three components work together. Imagine **Emma** (an institutional investor) wants to buy **$50,000** of a **Tokenized Bond** on a DEX.
36
+
37
+ ```mermaid
38
+ graph TB
39
+ subgraph "External World"
40
+ KYC["<b>KYC Provider</b><br/>βœ… Emma: Verified"]
41
+ Oracle["<b>Bond Price Feed</b><br/>πŸ“Š Current: $1.02"]
42
+ AML["<b>AML Watchlist</b><br/>πŸ” Emma: Clean"]
43
+ end
44
+
45
+ subgraph "Chainlink ACE Modular Toolkit"
46
+ subgraph "Cross-Chain Identity"
47
+ CCID["<b>Emma's Identity</b><br/>ID: 0x1a2b... (Portable)"]
48
+ CredReg["<b>Credentials</b><br/>βœ… KYC βœ… Accredited"]
49
+ end
50
+
51
+ subgraph "Policy Management βš™οΈ"
52
+ PE["<b>Policy Engine</b><br/>🧠 Decision Maker"]
53
+ P1["<b>Access Policy</b><br/>❓ Verified & not sanctioned?"]
54
+ P2["<b>Volume Rate Policy</b><br/>❓ $50k within daily limit?"]
55
+ end
56
+
57
+ end
58
+
59
+ subgraph "Emma's Transaction"
60
+ Emma["<b>πŸ‘©β€πŸ’Ό Emma</b><br/>Wants: $50k bonds"]
61
+ BondDEX["<b>Bond DEX</b><br/>🏦 Tokenized Bonds"]
62
+ Result["<b>βœ… Trade Approved</b>"]
63
+ end
64
+
65
+ %% Data flows
66
+ KYC -.->|"<b>Issues Credential</b>"| CredReg
67
+ Oracle -.->|"<b>Provides Data</b>"| Registry
68
+ AML -.->|"<b>Provides Data</b>"| Registry
69
+
70
+ %% Transaction flow
71
+ Emma -->|"<b>1. Buy Bonds</b>"| BondDEX
72
+ BondDEX -->|"<b>2. Validate Tx</b>"| PE
73
+
74
+ %% Policy Engine orchestration
75
+ PE --> P1
76
+ PE --> P2
77
+
78
+ %% Policy checks using other components
79
+ P1 -->|"Checks"| CredReg
80
+ P1 -->|"Uses"| Registry
81
+ P2 -->|"Uses"| Registry
82
+
83
+ %% Completion
84
+ PE -->|"<b>3. All checks pass</b>"| BondDEX
85
+ BondDEX -->|"<b>4. Execute Trade</b>"| Result
86
+
87
+ classDef default fill:#2b2f37,stroke:#c0c5ce,stroke-width:1px,color:#c0c5ce
88
+ classDef external fill:#4338ca,stroke:#a5b4fc,stroke-width:1px,color:#e0e7ff
89
+ classDef user fill:#166534,stroke:#4ade80,stroke-width:1px,color:#dcfce7
90
+ classDef result fill:#be123c,stroke:#fda4af,stroke-width:1px,color:#ffe4e6
91
+
92
+ class KYC,Oracle,AML external
93
+ class Emma,Result user
94
+ ```
95
+
96
+ ### The Compliance Journey: Step-by-Step
97
+
98
+ 1. **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.
99
+ 2. **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`).
100
+ _Crucially, this same identity and credential would be valid even if Emma were using a different wallet address on a different EVM chain._
101
+ 3. **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.
102
+ 4. **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.
103
+
104
+ _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._
105
+
106
+ If any policy check had failed, the **Policy Engine would have reverted the transaction directly**, preventing a non-compliant trade.
107
+
108
+ ## πŸš€ Ready to Build?
109
+
110
+ ### New to ACE? Start here
111
+
112
+ **Get hands-on immediately.** Our beginner-friendly Getting Started Guide walks you through the core pattern with a simple, working example.
113
+
114
+ **β†’ [Start the Getting Started Guide](./getting_started/GETTING_STARTED.md)**
115
+
116
+ ---
117
+
118
+ ### Need identity & credential verification?
119
+
120
+ **After completing the basic guide**, level up with our Advanced Getting Started Guide featuring KYC checks, sanctions screening, and identity management.
121
+
122
+ **Best for:** Applications requiring user verification, accredited investor checks, or cross-chain identity.
123
+
124
+ **β†’ [Advanced Getting Started Guide](./getting_started/advanced/GETTING_STARTED_ADVANCED.md)**
125
+
126
+ ---
127
+
128
+ ### Want to study production-ready examples?
129
+
130
+ Build with confidence using our reference implementations as your foundation.
131
+
132
+ **Best for:** Experienced developers who want to study audited code and adapt it to their needs.
133
+
134
+ - **Study the reference implementation for each component:**
135
+ - [Policy Management](./packages/policy-management/src)
136
+ - [Cross-Chain Identity](./packages/cross-chain-identity/src)
137
+ - **See full integrations in the [example tokens](./packages/tokens)**
138
+
139
+ ---
140
+
141
+ ### Want to understand the architecture first?
142
+
143
+ Understand the design before diving into implementation.
144
+
145
+ **β†’ Continue reading about the components below**
146
+
147
+ ## Explore the Components
148
+
149
+ ### πŸ›‘οΈ [Policy Management](./packages/policy-management/)
150
+
151
+ Use this component to enforce onchain rules that can be updated without redeploying your core contracts.
152
+
153
+ - **Policy Engine**: Pluggable, composable policy enforcement.
154
+ - **Zero Downtime Updates**: Add, remove, or modify rules dynamically.
155
+ - **Ready-to-Use Policies**: AllowPolicy, VolumePolicy, OnlyOwnerPolicy, and more.
156
+
157
+ **How it works as a standalone component:**
158
+
159
+ ```mermaid
160
+ graph LR
161
+ App[Your Contract] -->|inherits| PP[PolicyProtected]
162
+ App -->|calls| PE[PolicyEngine]
163
+ PE -->|executes| P1[Policy 1]
164
+ PE -->|executes| P2[Policy 2]
165
+ PE -->|executes| P3[Policy N]
166
+ ```
167
+
168
+ **Use cases:** Access control, volume limits, time restrictions, pauseable functions, role-based permissions.
169
+
170
+ β†’ **[πŸ“‹ 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)**
171
+
172
+ ### πŸ”— [Cross-Chain Identity](./packages/cross-chain-identity/)
173
+
174
+ Use this component to link wallet addresses to a single identity and manage credentials like KYC/AML.
175
+
176
+ - **Cross-Chain ID (CCID)**: Single identifier linking addresses across multiple chains.
177
+ - **Credential Registry**: Manage credentials (e.g., KYC, AML) that are tied directly to a user's CCID.
178
+ - **Privacy-First**: Store sensitive data offchain, only hashes onchain.
179
+
180
+ > **Requires:** Policy Management component (listed above)
181
+
182
+ **How it works integrated with Policy Management:**
183
+
184
+ ```mermaid
185
+ graph TB
186
+ App[Your Contract] -->|inherits| PP[PolicyProtected]
187
+ App -->|calls| PE[PolicyEngine]
188
+ PE -->|executes| IVP[CredentialRegistryIdentityValidatorPolicy]
189
+ PE -->|executes| SP[SanctionsPolicy]
190
+ PE -->|executes| OP[Other Policies]
191
+
192
+ IVP -->|reads from| IR[IdentityRegistry]
193
+ IVP -->|reads from| CR[CredentialRegistry]
194
+ SP -->|reads from| SL[Sanctions List]
195
+ ```
196
+
197
+ **Use cases:** KYC/AML verification, accredited investor checks, cross-chain credential verification, sanctions screening.
198
+
199
+ β†’ **[πŸ“‹ Quick Guide](./packages/cross-chain-identity/README.md)** | **[πŸ—οΈ Reference Implementation](./packages/cross-chain-identity/src/)** | **[πŸ“š Deep Dive Docs](./packages/cross-chain-identity/docs/)**
200
+
201
+ ## [Example Tokens](./packages/tokens/)
202
+
203
+ Explore our example token contracts to see how these components work together in a real application.
204
+
205
+ - **[ERC-20 Compliance Token](./packages/tokens/erc-20)** - A policy-protected ERC-20 implementation with advanced frozen token handling
206
+ - **[ERC-3643 Compliance Token](./packages/tokens/erc-3643)** - A compliant implementation of the ERC-3643 T-REX standard
207
+
208
+ > **πŸ“ Important Note on Frozen Token Behavior:**
209
+ > These two token implementations handle frozen tokens differently during burns and forced transfers:
210
+ >
211
+ > - **ERC-20**: Frozen tokens remain frozen during burns/force transfers. The `_checkFrozenBalance()` function ensures sufficient unfrozen tokens are available before operations proceed.
212
+ > - **ERC-3643**: Automatically unfreezes tokens as needed during burns/force transfers to complete the operation.
213
+ >
214
+ > Both approaches are valid design choices depending on your compliance requirements. Choose the implementation that best fits your use case.
215
+
216
+ ## Contributing & Feedback
217
+
218
+ We 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.
@@ -0,0 +1,21 @@
1
+ <svg width="385" height="317" viewBox="0 115 385 85" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_4140_519)">
3
+ <path d="M96.1722 127L69 142.688V174.065L96.1722 189.753L123.344 174.065V142.688L96.1722 127ZM111.833 167.416L96.1772 176.455L80.5215 167.416V149.338L96.1772 140.299L111.833 149.338V167.416Z" fill="#0847F7"/>
4
+ <path d="M153.157 174.098C150.458 174.098 148.041 173.48 145.912 172.238C143.781 170.998 142.099 169.208 140.867 166.863C139.635 164.519 139.02 161.698 139.02 158.397C139.02 155.096 139.642 152.229 140.88 149.877C142.12 147.528 143.806 145.736 145.945 144.503C148.081 143.271 150.486 142.656 153.159 142.656C154.896 142.656 156.518 142.904 158.009 143.396C159.502 143.888 160.83 144.604 161.995 145.542C163.159 146.481 164.106 147.628 164.841 148.984C165.574 150.339 166.049 151.881 166.27 153.61H160.208C160.07 152.734 159.803 151.951 159.407 151.255C159.008 150.565 158.506 149.975 157.898 149.488C157.288 149.001 156.595 148.632 155.825 148.379C155.049 148.125 154.206 148 153.287 148C151.671 148 150.247 148.404 149.012 149.212C147.78 150.02 146.816 151.198 146.126 152.747C145.433 154.293 145.087 156.18 145.087 158.397C145.087 160.613 145.435 162.539 146.133 164.08C146.834 165.621 147.792 166.783 149.02 167.571C150.247 168.36 151.663 168.754 153.262 168.754C154.153 168.754 154.981 168.633 155.747 168.392C156.513 168.154 157.203 167.802 157.813 167.343C158.42 166.886 158.932 166.324 159.344 165.659C159.756 164.993 160.044 164.23 160.208 163.369H166.27C166.091 164.805 165.665 166.171 164.987 167.458C164.309 168.744 163.405 169.886 162.273 170.877C161.144 171.871 159.813 172.652 158.287 173.232C156.759 173.807 155.049 174.095 153.162 174.095V174.103L153.157 174.098Z" fill="#0847F7"/>
5
+ <path d="M175.392 160.317V173.674H169.516V143.055H175.229V154.704H175.517C176.05 153.377 176.888 152.327 178.025 151.559C179.16 150.794 180.608 150.407 182.36 150.407C183.949 150.407 185.342 150.748 186.529 151.434C187.722 152.119 188.648 153.106 189.303 154.393C189.961 155.678 190.287 157.237 190.287 159.06V173.669H184.388V160.046C184.388 158.565 184.012 157.413 183.259 156.582C182.506 155.754 181.441 155.34 180.073 155.34C179.155 155.34 178.346 155.538 177.648 155.937C176.948 156.336 176.398 156.901 175.994 157.631C175.59 158.367 175.389 159.255 175.389 160.315V160.32L175.392 160.317Z" fill="#0847F7"/>
6
+ <path d="M200.734 174.128C199.268 174.128 197.958 173.867 196.8 173.347C195.643 172.825 194.732 172.054 194.067 171.035C193.402 170.016 193.07 168.751 193.07 167.245C193.07 165.96 193.306 164.888 193.781 164.037C194.255 163.186 194.898 162.501 195.713 161.974C196.529 161.447 197.45 161.047 198.487 160.781C199.521 160.515 200.608 160.327 201.743 160.217C203.086 160.079 204.168 159.953 204.991 159.838C205.814 159.722 206.412 159.536 206.788 159.283C207.165 159.029 207.353 158.655 207.353 158.163V158.06C207.353 157.031 207.037 156.233 206.409 155.666C205.779 155.098 204.88 154.812 203.716 154.812C202.483 154.812 201.504 155.081 200.776 155.626C200.051 156.165 199.567 156.82 199.318 157.586L193.851 156.989C194.192 155.593 194.815 154.403 195.711 153.424C196.607 152.445 197.734 151.697 199.09 151.183C200.445 150.668 201.986 150.41 203.713 150.41C204.906 150.41 206.068 150.55 207.197 150.831C208.327 151.11 209.346 151.557 210.26 152.169C211.168 152.779 211.899 153.585 212.436 154.584C212.976 155.585 213.249 156.803 213.249 158.244V173.673H207.622V170.488H207.458C207.099 171.171 206.625 171.791 206.02 172.341C205.418 172.89 204.677 173.322 203.801 173.646C202.925 173.97 201.903 174.13 200.739 174.13H200.731L200.734 174.128ZM202.333 169.936C203.347 169.936 204.23 169.735 204.983 169.331C205.736 168.927 206.326 168.387 206.751 167.709C207.175 167.032 207.388 166.281 207.388 165.46V162.89C207.197 163.028 206.914 163.151 206.547 163.261C206.176 163.372 205.759 163.472 205.292 163.56C204.828 163.648 204.366 163.726 203.914 163.796C203.462 163.864 203.058 163.919 202.702 163.959C201.921 164.07 201.233 164.248 200.636 164.491C200.038 164.74 199.569 165.074 199.228 165.498C198.886 165.922 198.713 166.457 198.713 167.102C198.713 168.033 199.052 168.739 199.73 169.22C200.407 169.7 201.273 169.938 202.328 169.938H202.33L202.333 169.936Z" fill="#0847F7"/>
7
+ <path d="M217.109 173.676V150.703H222.986V173.676H217.109Z" fill="#0847F7"/>
8
+ <path d="M232.728 160.317V173.674H226.852V150.698H232.625V154.705H232.873C233.393 153.389 234.219 152.345 235.348 151.569C236.478 150.794 237.899 150.41 239.613 150.41C241.202 150.41 242.59 150.751 243.772 151.436C244.957 152.119 245.876 153.111 246.529 154.403C247.179 155.699 247.505 157.25 247.505 159.057V173.666H241.629V160.044C241.629 158.578 241.25 157.425 240.489 156.592C239.731 155.759 238.684 155.337 237.354 155.337C236.45 155.337 235.65 155.535 234.959 155.934C234.267 156.334 233.724 156.898 233.325 157.629C232.926 158.364 232.73 159.253 232.73 160.312V160.317H232.728Z" fill="#0847F7"/>
9
+ <path d="M257.239 141.549V173.676H251.363V141.549H257.239Z" fill="#0847F7"/>
10
+ <path d="M261.102 173.676V150.703H266.978V173.676H261.102Z" fill="#0847F7"/>
11
+ <path d="M276.716 160.317V173.673H270.84V150.698H276.613V154.704H276.862C277.381 153.389 278.207 152.345 279.337 151.569C280.466 150.794 281.887 150.41 283.601 150.41C285.19 150.41 286.578 150.751 287.763 151.436C288.948 152.119 289.867 153.11 290.517 154.403C291.167 155.698 291.493 157.25 291.493 159.057V173.666H285.617V160.043C285.617 158.578 285.238 157.425 284.477 156.592C283.719 155.759 282.673 155.337 281.342 155.337C280.439 155.337 279.638 155.535 278.948 155.934C278.255 156.333 277.713 156.898 277.313 157.629C276.914 158.364 276.716 159.253 276.716 160.312V160.317Z" fill="#0847F7"/>
12
+ <path d="M309.722 173.676H316.69L307.516 160.651L316.216 150.701H309.396L301.605 159.682H301.238V143.055H295.359V173.676H301.238V166.176L303.081 164.133L309.722 173.674V173.676Z" fill="#0847F7"/>
13
+ <path d="M223.032 141.549H217.156V147.425H223.032V141.549Z" fill="#0847F7"/>
14
+ <path d="M267.029 141.549H261.152V147.425H267.029V141.549Z" fill="#0847F7"/>
15
+ </g>
16
+ <defs>
17
+ <clipPath id="clip0_4140_519">
18
+ <rect width="247.69" height="62.7534" fill="white" transform="translate(69 127)"/>
19
+ </clipPath>
20
+ </defs>
21
+ </svg>
@@ -0,0 +1,2 @@
1
+ Additional Use Grant(s):
2
+ 1. You may make use of chainlink-ace, which is available subject to the license here (the β€œLicensed Work”), solely for purposes listed below:
package/foundry.toml ADDED
@@ -0,0 +1,33 @@
1
+ [profile.default]
2
+ src = "packages"
3
+ out = "out"
4
+ solc = "0.8.26"
5
+ optimizer = true
6
+ optimizer_runs = 8000
7
+ via_ir = true
8
+ evm_version = "paris"
9
+
10
+ [fmt]
11
+ bracket_spacing = false
12
+ int_types = "long"
13
+ line_length = 120
14
+ multiline_func_header = "all"
15
+ quote_style = "double"
16
+ tab_width = 2
17
+ wrap_comments = true
18
+
19
+ [profile.compliance-token-erc20]
20
+ src = 'packages/token/erc-20/src'
21
+ test = 'packages/token/erc-20/test'
22
+
23
+ [profile.compliance-token-erc3643]
24
+ src = 'packages/token/erc-3643/src'
25
+ test = 'packages/token/erc-3643/test'
26
+
27
+ [profile.policy-management]
28
+ src = 'packages/policy-management/src'
29
+ test = 'packages/policy-management/test'
30
+
31
+ [profile.cross-chain-identity]
32
+ src = 'packages/cross-chain-identity/src'
33
+ test = 'packages/cross-chain-identity/test'