@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.
- package/.foundry-version +1 -0
- package/.github/CODEOWNERS +1 -0
- package/.github/workflows/auto-release-version.yml +107 -0
- package/.github/workflows/create-version-pr.yml +95 -0
- package/.github/workflows/forge-docs.yml +90 -0
- package/.github/workflows/forge-test.yml +59 -0
- package/.solhint-test.json +18 -0
- package/.solhint.json +16 -0
- package/.solhintignore +3 -0
- package/.solhintignore-test +2 -0
- package/Glossary.md +141 -0
- package/LICENSE +59 -0
- package/README.md +218 -0
- package/assets/chainlink-logo.svg +21 -0
- package/chainlink-ace-License-grants +2 -0
- package/foundry.toml +33 -0
- package/getting_started/GETTING_STARTED.md +477 -0
- package/getting_started/MyVault.sol +48 -0
- package/getting_started/advanced/.env.example +36 -0
- package/getting_started/advanced/GETTING_STARTED_ADVANCED.md +431 -0
- package/getting_started/advanced/SanctionsList.sol +25 -0
- package/getting_started/advanced/SanctionsPolicy.sol +58 -0
- package/package.json +41 -0
- package/packages/cross-chain-identity/README.md +148 -0
- package/packages/cross-chain-identity/docs/API_GUIDE.md +120 -0
- package/packages/cross-chain-identity/docs/API_REFERENCE.md +271 -0
- package/packages/cross-chain-identity/docs/CONCEPTS.md +253 -0
- package/packages/cross-chain-identity/docs/CREDENTIAL_FLOW.md +195 -0
- package/packages/cross-chain-identity/docs/SECURITY.md +70 -0
- package/packages/cross-chain-identity/src/CredentialRegistry.sol +245 -0
- package/packages/cross-chain-identity/src/CredentialRegistryIdentityValidator.sol +339 -0
- package/packages/cross-chain-identity/src/CredentialRegistryIdentityValidatorPolicy.sol +71 -0
- package/packages/cross-chain-identity/src/IdentityRegistry.sol +123 -0
- package/packages/cross-chain-identity/src/TrustedIssuerRegistry.sol +140 -0
- package/packages/cross-chain-identity/src/interfaces/ICredentialDataValidator.sol +30 -0
- package/packages/cross-chain-identity/src/interfaces/ICredentialRegistry.sol +170 -0
- package/packages/cross-chain-identity/src/interfaces/ICredentialRequirements.sol +192 -0
- package/packages/cross-chain-identity/src/interfaces/ICredentialValidator.sol +37 -0
- package/packages/cross-chain-identity/src/interfaces/IIdentityRegistry.sol +85 -0
- package/packages/cross-chain-identity/src/interfaces/IIdentityValidator.sol +18 -0
- package/packages/cross-chain-identity/src/interfaces/ITrustedIssuerRegistry.sol +61 -0
- package/packages/cross-chain-identity/test/CredentialRegistry.t.sol +220 -0
- package/packages/cross-chain-identity/test/CredentialRegistryIdentityValidator.t.sol +554 -0
- package/packages/cross-chain-identity/test/CredentialRegistryIdentityValidatorPolicy.t.sol +114 -0
- package/packages/cross-chain-identity/test/IdentityRegistry.t.sol +106 -0
- package/packages/cross-chain-identity/test/IdentityValidator.t.sol +969 -0
- package/packages/cross-chain-identity/test/TrustedIssuerRegistry.t.sol +123 -0
- package/packages/cross-chain-identity/test/helpers/BaseProxyTest.sol +112 -0
- package/packages/cross-chain-identity/test/helpers/MockCredentialDataValidator.sol +26 -0
- package/packages/cross-chain-identity/test/helpers/MockCredentialRegistryReverting.sol +131 -0
- package/packages/policy-management/README.md +197 -0
- package/packages/policy-management/docs/API_GUIDE.md +290 -0
- package/packages/policy-management/docs/API_REFERENCE.md +173 -0
- package/packages/policy-management/docs/CONCEPTS.md +156 -0
- package/packages/policy-management/docs/CUSTOM_POLICIES_TUTORIAL.md +195 -0
- package/packages/policy-management/docs/POLICY_ORDERING_GUIDE.md +91 -0
- package/packages/policy-management/docs/SECURITY.md +57 -0
- package/packages/policy-management/src/core/Policy.sol +124 -0
- package/packages/policy-management/src/core/PolicyEngine.sol +382 -0
- package/packages/policy-management/src/core/PolicyFactory.sol +92 -0
- package/packages/policy-management/src/core/PolicyProtected.sol +126 -0
- package/packages/policy-management/src/extractors/ComplianceTokenForceTransferExtractor.sol +57 -0
- package/packages/policy-management/src/extractors/ComplianceTokenFreezeUnfreezeExtractor.sol +54 -0
- package/packages/policy-management/src/extractors/ComplianceTokenMintBurnExtractor.sol +61 -0
- package/packages/policy-management/src/extractors/ERC20ApproveExtractor.sol +57 -0
- package/packages/policy-management/src/extractors/ERC20TransferExtractor.sol +62 -0
- package/packages/policy-management/src/extractors/ERC3643ForcedTransferExtractor.sol +56 -0
- package/packages/policy-management/src/extractors/ERC3643FreezeUnfreezeExtractor.sol +55 -0
- package/packages/policy-management/src/extractors/ERC3643MintBurnExtractor.sol +51 -0
- package/packages/policy-management/src/extractors/ERC3643SetAddressFrozenExtractor.sol +51 -0
- package/packages/policy-management/src/interfaces/IExtractor.sol +17 -0
- package/packages/policy-management/src/interfaces/IMapper.sol +17 -0
- package/packages/policy-management/src/interfaces/IPolicy.sol +61 -0
- package/packages/policy-management/src/interfaces/IPolicyEngine.sol +264 -0
- package/packages/policy-management/src/interfaces/IPolicyProtected.sol +48 -0
- package/packages/policy-management/src/policies/AllowPolicy.sol +104 -0
- package/packages/policy-management/src/policies/BypassPolicy.sol +90 -0
- package/packages/policy-management/src/policies/IntervalPolicy.sol +223 -0
- package/packages/policy-management/src/policies/MaxPolicy.sol +73 -0
- package/packages/policy-management/src/policies/OnlyAuthorizedSenderPolicy.sol +84 -0
- package/packages/policy-management/src/policies/OnlyOwnerPolicy.sol +35 -0
- package/packages/policy-management/src/policies/PausePolicy.sol +82 -0
- package/packages/policy-management/src/policies/README.md +632 -0
- package/packages/policy-management/src/policies/RejectPolicy.sol +89 -0
- package/packages/policy-management/src/policies/RoleBasedAccessControlPolicy.sol +162 -0
- package/packages/policy-management/src/policies/SecureMintPolicy.sol +271 -0
- package/packages/policy-management/src/policies/VolumePolicy.sol +133 -0
- package/packages/policy-management/src/policies/VolumeRatePolicy.sol +192 -0
- package/packages/policy-management/test/PolicyEngine.t.sol +368 -0
- package/packages/policy-management/test/PolicyFactory.t.sol +114 -0
- package/packages/policy-management/test/PolicyProtectedToken.t.sol +75 -0
- package/packages/policy-management/test/extractors/ComplianceTokenForceTransferExtractor.t.sol +59 -0
- package/packages/policy-management/test/extractors/ComplianceTokenFreezeUnfreezeExtractor.t.sol +74 -0
- package/packages/policy-management/test/extractors/ComplianceTokenMintBurnExtractor.t.sol +92 -0
- package/packages/policy-management/test/extractors/ERC20ApproveExtractor.t.sol +58 -0
- package/packages/policy-management/test/extractors/ERC3643ForcedTransferExtractor.t.sol +59 -0
- package/packages/policy-management/test/extractors/ERC3643FreezeUnfreezeExtractor.t.sol +74 -0
- package/packages/policy-management/test/extractors/ERC3643MintBurnExtractor.t.sol +73 -0
- package/packages/policy-management/test/extractors/ERC3643SetAddressFrozenExtractor.t.sol +56 -0
- package/packages/policy-management/test/helpers/BaseProxyTest.sol +75 -0
- package/packages/policy-management/test/helpers/CustomMapper.sol +26 -0
- package/packages/policy-management/test/helpers/DummyExtractor.sol +11 -0
- package/packages/policy-management/test/helpers/ExpectedParameterPolicy.sol +39 -0
- package/packages/policy-management/test/helpers/MockAggregatorV3.sol +51 -0
- package/packages/policy-management/test/helpers/MockToken.sol +66 -0
- package/packages/policy-management/test/helpers/MockTokenExtractor.sol +34 -0
- package/packages/policy-management/test/helpers/PolicyAlwaysAllowed.sol +45 -0
- package/packages/policy-management/test/helpers/PolicyAlwaysContinue.sol +23 -0
- package/packages/policy-management/test/helpers/PolicyAlwaysRejected.sol +23 -0
- package/packages/policy-management/test/helpers/PolicyFailingRun.sol +22 -0
- package/packages/policy-management/test/policies/AllowPolicy.t.sol +174 -0
- package/packages/policy-management/test/policies/BypassPolicy.t.sol +159 -0
- package/packages/policy-management/test/policies/IntervalPolicy.t.sol +307 -0
- package/packages/policy-management/test/policies/MaxPolicy.t.sol +54 -0
- package/packages/policy-management/test/policies/OnlyAuthorizedSenderPolicy.t.sol +95 -0
- package/packages/policy-management/test/policies/OnlyOwnerPolicy.t.sol +47 -0
- package/packages/policy-management/test/policies/PausePolicy.t.sol +75 -0
- package/packages/policy-management/test/policies/RejectPolicy.t.sol +182 -0
- package/packages/policy-management/test/policies/RoleBasedAccessControlPolicy.t.sol +223 -0
- package/packages/policy-management/test/policies/SecureMintPolicy.t.sol +442 -0
- package/packages/policy-management/test/policies/VolumePolicy.t.sol +158 -0
- package/packages/policy-management/test/policies/VolumeRatePolicy.t.sol +165 -0
- package/packages/tokens/erc-20/src/ComplianceTokenERC20.sol +345 -0
- package/packages/tokens/erc-20/src/ComplianceTokenStoreERC20.sol +29 -0
- package/packages/tokens/erc-20/test/ComplianceTokenERC20.t.sol +556 -0
- package/packages/tokens/erc-20/test/helpers/BaseProxyTest.sol +75 -0
- package/packages/tokens/erc-3643/README.md +24 -0
- package/packages/tokens/erc-3643/src/ComplianceTokenERC3643.sol +564 -0
- package/packages/tokens/erc-3643/src/ComplianceTokenStoreERC3643.sol +30 -0
- package/packages/tokens/erc-3643/test/ComplianceTokenERC3643.t.sol +815 -0
- package/packages/tokens/erc-3643/test/helpers/BaseProxyTest.sol +76 -0
- package/packages/tokens/erc-3643/test/helpers/ExpectedContextPolicy.sol +32 -0
- package/packages/vendor/erc-3643/compliance/modular/IModularCompliance.sol +220 -0
- package/packages/vendor/erc-3643/registry/interface/IClaimTopicsRegistry.sol +101 -0
- package/packages/vendor/erc-3643/registry/interface/IIdentityRegistry.sol +251 -0
- package/packages/vendor/erc-3643/registry/interface/IIdentityRegistryStorage.sol +191 -0
- package/packages/vendor/erc-3643/registry/interface/ITrustedIssuersRegistry.sol +161 -0
- package/packages/vendor/erc-3643/token/IToken.sol +457 -0
- package/packages/vendor/onchain-id/interface/IClaimIssuer.sol +53 -0
- package/packages/vendor/onchain-id/interface/IERC734.sol +110 -0
- package/packages/vendor/onchain-id/interface/IERC735.sol +105 -0
- package/packages/vendor/onchain-id/interface/IIdentity.sol +26 -0
- package/packages/vendor/onchain-id/interface/IImplementationAuthority.sol +21 -0
- package/remappings.txt +6 -0
- package/script/DeployComplianceTokenERC20.s.sol +191 -0
- package/script/DeployComplianceTokenERC3643.s.sol +208 -0
- package/script/DeploySimpleComplianceToken.s.sol +38 -0
- package/script/getting_started/DeployGettingStarted.s.sol +74 -0
- package/script/getting_started/advanced/DeployAdvancedGettingStarted.s.sol +332 -0
- package/script/getting_started/advanced/DeploySanctionsList.s.sol +26 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
2
|
+
pragma solidity 0.8.26;
|
|
3
|
+
|
|
4
|
+
import {IIdentityRegistry} from "../src/interfaces/IIdentityRegistry.sol";
|
|
5
|
+
import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
|
|
6
|
+
import {IdentityRegistry} from "../src/IdentityRegistry.sol";
|
|
7
|
+
import {PolicyEngine} from "@chainlink/policy-management/core/PolicyEngine.sol";
|
|
8
|
+
import {BaseProxyTest} from "./helpers/BaseProxyTest.sol";
|
|
9
|
+
|
|
10
|
+
contract IdentityRegistryTest is BaseProxyTest {
|
|
11
|
+
PolicyEngine internal s_policyEngine;
|
|
12
|
+
IdentityRegistry internal s_identityRegistry;
|
|
13
|
+
|
|
14
|
+
address internal s_owner;
|
|
15
|
+
|
|
16
|
+
function setUp() public {
|
|
17
|
+
s_owner = makeAddr("owner");
|
|
18
|
+
|
|
19
|
+
vm.startPrank(s_owner);
|
|
20
|
+
|
|
21
|
+
s_policyEngine = _deployPolicyEngine(true, address(this));
|
|
22
|
+
s_identityRegistry = _deployIdentityRegistry(address(s_policyEngine));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function test_registerIdentity_success() public {
|
|
26
|
+
address account1 = makeAddr("account1");
|
|
27
|
+
bytes32 ccid = keccak256("account1");
|
|
28
|
+
|
|
29
|
+
s_identityRegistry.registerIdentity(ccid, account1, "");
|
|
30
|
+
bytes32 retrievedCcid = s_identityRegistry.getIdentity(account1);
|
|
31
|
+
assert(ccid == retrievedCcid);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function test_registerIdentities_success() public {
|
|
35
|
+
bytes32 investorCCID = keccak256("investor_x");
|
|
36
|
+
bytes32[] memory ccids = new bytes32[](2);
|
|
37
|
+
ccids[0] = investorCCID;
|
|
38
|
+
ccids[1] = investorCCID;
|
|
39
|
+
|
|
40
|
+
address[] memory inputAccounts = new address[](2);
|
|
41
|
+
inputAccounts[0] = makeAddr("account1_for_investor_x");
|
|
42
|
+
inputAccounts[1] = makeAddr("account2_for_investor_x");
|
|
43
|
+
s_identityRegistry.registerIdentities(ccids, inputAccounts, "");
|
|
44
|
+
|
|
45
|
+
bytes32 retrievedCcid1 = s_identityRegistry.getIdentity(inputAccounts[0]);
|
|
46
|
+
bytes32 retrievedCcid2 = s_identityRegistry.getIdentity(inputAccounts[1]);
|
|
47
|
+
|
|
48
|
+
assert(ccids[0] == retrievedCcid1);
|
|
49
|
+
assert(ccids[1] == retrievedCcid2);
|
|
50
|
+
|
|
51
|
+
address[] memory outputAccounts = s_identityRegistry.getAccounts(investorCCID);
|
|
52
|
+
assert(outputAccounts.length == 2);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function test_registerIdentities_duplicated_failure() public {
|
|
56
|
+
bytes32[] memory ccids = new bytes32[](2);
|
|
57
|
+
address account1 = makeAddr("account1");
|
|
58
|
+
bytes32 ccid1 = keccak256("account1");
|
|
59
|
+
ccids[0] = ccid1;
|
|
60
|
+
ccids[1] = ccid1;
|
|
61
|
+
|
|
62
|
+
address[] memory inputAccounts = new address[](2);
|
|
63
|
+
inputAccounts[0] = account1;
|
|
64
|
+
inputAccounts[1] = account1;
|
|
65
|
+
|
|
66
|
+
bytes memory expectedRevertError =
|
|
67
|
+
abi.encodeWithSignature("IdentityAlreadyRegistered(bytes32,address)", ccid1, account1);
|
|
68
|
+
|
|
69
|
+
vm.expectRevert(expectedRevertError);
|
|
70
|
+
s_identityRegistry.registerIdentities(ccids, inputAccounts, "");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function test_registerIdentity_ZeroCcid_failure() public {
|
|
74
|
+
address account1 = makeAddr("account1");
|
|
75
|
+
bytes32 ccid = bytes32(0);
|
|
76
|
+
|
|
77
|
+
vm.expectRevert(
|
|
78
|
+
abi.encodeWithSelector(IIdentityRegistry.InvalidIdentityConfiguration.selector, "CCID cannot be empty")
|
|
79
|
+
);
|
|
80
|
+
s_identityRegistry.registerIdentity(ccid, account1, "");
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function test_removeIdentity_success() public {
|
|
84
|
+
address account1 = makeAddr("account1");
|
|
85
|
+
bytes32 ccid = keccak256("account1");
|
|
86
|
+
|
|
87
|
+
s_identityRegistry.registerIdentity(ccid, account1, "");
|
|
88
|
+
bytes32 retrievedCcid = s_identityRegistry.getIdentity(account1);
|
|
89
|
+
assert(ccid == retrievedCcid);
|
|
90
|
+
|
|
91
|
+
s_identityRegistry.removeIdentity(ccid, account1, "");
|
|
92
|
+
bytes32 retrievedCcidAfterRemoval = s_identityRegistry.getIdentity(account1);
|
|
93
|
+
assert(retrievedCcidAfterRemoval == bytes32(0));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function test_removeIdentity_notFound_failure() public {
|
|
97
|
+
address account1 = makeAddr("account1");
|
|
98
|
+
bytes32 ccid = keccak256("account1");
|
|
99
|
+
|
|
100
|
+
bytes32 retrievedCcid = s_identityRegistry.getIdentity(account1);
|
|
101
|
+
assert(bytes32(0) == retrievedCcid);
|
|
102
|
+
|
|
103
|
+
vm.expectRevert();
|
|
104
|
+
s_identityRegistry.removeIdentity(ccid, account1, "");
|
|
105
|
+
}
|
|
106
|
+
}
|