@zentity/fhevm-contracts 0.2.1 → 0.4.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 (118) hide show
  1. package/abi/ComplianceRules.json +25 -16
  2. package/abi/CompliantERC20.json +30 -16
  3. package/abi/IdentityRegistry.json +496 -119
  4. package/contracts/compliance/ComplianceRules.sol +40 -189
  5. package/contracts/core/IdentityRegistry.sol +280 -232
  6. package/contracts/interfaces/IComplianceRules.sol +30 -0
  7. package/contracts/interfaces/IIdentityRegistry.sol +133 -159
  8. package/contracts/proxy/ERC1967Proxy.sol +6 -0
  9. package/contracts/test/MockFacilitator.sol +40 -0
  10. package/contracts/tokens/CompliantERC20.sol +28 -242
  11. package/deployments/hardhat/addresses.json +3 -8
  12. package/deployments/sepolia/addresses.json +18 -0
  13. package/dist/index.d.ts +178 -14
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +71 -16
  16. package/package.json +3 -2
  17. package/typechain-types/@openzeppelin/contracts/access/Ownable.ts +153 -0
  18. package/typechain-types/@openzeppelin/contracts/access/Ownable2Step.ts +217 -0
  19. package/typechain-types/@openzeppelin/contracts/access/index.ts +5 -0
  20. package/typechain-types/@openzeppelin/contracts/index.ts +11 -0
  21. package/typechain-types/@openzeppelin/contracts/interfaces/IERC1967.ts +168 -0
  22. package/typechain-types/@openzeppelin/contracts/interfaces/IERC5267.ts +151 -0
  23. package/typechain-types/{contracts/tokens/CompliantERC20.sol/IComplianceChecker.ts → @openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts} +12 -17
  24. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts +4 -0
  25. package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +7 -0
  26. package/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts +105 -0
  27. package/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.ts +69 -0
  28. package/typechain-types/@openzeppelin/contracts/proxy/ERC1967/index.ts +5 -0
  29. package/typechain-types/@openzeppelin/contracts/proxy/Proxy.ts +69 -0
  30. package/typechain-types/@openzeppelin/contracts/proxy/beacon/IBeacon.ts +90 -0
  31. package/typechain-types/@openzeppelin/contracts/proxy/beacon/index.ts +4 -0
  32. package/typechain-types/@openzeppelin/contracts/proxy/index.ts +8 -0
  33. package/typechain-types/@openzeppelin/contracts/utils/Address.ts +69 -0
  34. package/typechain-types/@openzeppelin/contracts/utils/Errors.ts +69 -0
  35. package/typechain-types/@openzeppelin/contracts/utils/Strings.ts +69 -0
  36. package/typechain-types/@openzeppelin/contracts/utils/cryptography/ECDSA.ts +69 -0
  37. package/typechain-types/@openzeppelin/contracts/utils/cryptography/index.ts +4 -0
  38. package/typechain-types/@openzeppelin/contracts/utils/index.ts +10 -0
  39. package/typechain-types/@openzeppelin/contracts/utils/math/SafeCast.ts +69 -0
  40. package/typechain-types/@openzeppelin/contracts/utils/math/index.ts +4 -0
  41. package/typechain-types/@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.ts +251 -0
  42. package/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.ts +186 -0
  43. package/typechain-types/@openzeppelin/contracts-upgradeable/access/index.ts +5 -0
  44. package/typechain-types/@openzeppelin/contracts-upgradeable/index.ts +9 -0
  45. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.ts +5 -0
  46. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.ts +105 -0
  47. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.ts +196 -0
  48. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.ts +5 -0
  49. package/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.ts +105 -0
  50. package/typechain-types/@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.ts +184 -0
  51. package/typechain-types/@openzeppelin/contracts-upgradeable/utils/cryptography/index.ts +4 -0
  52. package/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.ts +6 -0
  53. package/typechain-types/@openzeppelin/index.ts +7 -0
  54. package/typechain-types/contracts/compliance/ComplianceRules.ts +18 -7
  55. package/typechain-types/contracts/core/IdentityRegistry.ts +493 -233
  56. package/typechain-types/contracts/index.ts +2 -0
  57. package/typechain-types/contracts/interfaces/IComplianceRules.ts +290 -0
  58. package/typechain-types/contracts/interfaces/IIdentityRegistry.ts +269 -341
  59. package/typechain-types/contracts/interfaces/index.ts +1 -0
  60. package/typechain-types/contracts/test/MockFacilitator.ts +187 -0
  61. package/typechain-types/contracts/test/index.ts +4 -0
  62. package/typechain-types/contracts/tokens/{CompliantERC20.sol/CompliantERC20.ts → CompliantERC20.ts} +19 -8
  63. package/typechain-types/contracts/tokens/index.ts +1 -2
  64. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable2Step__factory.ts +138 -0
  65. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +96 -0
  66. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +5 -0
  67. package/typechain-types/factories/@openzeppelin/contracts/index.ts +7 -0
  68. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.ts +67 -0
  69. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC5267__factory.ts +71 -0
  70. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts +38 -0
  71. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts +4 -0
  72. package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +6 -0
  73. package/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts +144 -0
  74. package/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.ts +105 -0
  75. package/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts +5 -0
  76. package/typechain-types/factories/@openzeppelin/contracts/proxy/Proxy__factory.ts +26 -0
  77. package/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts +35 -0
  78. package/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/index.ts +4 -0
  79. package/typechain-types/factories/@openzeppelin/contracts/proxy/index.ts +6 -0
  80. package/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.ts +75 -0
  81. package/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.ts +101 -0
  82. package/typechain-types/factories/@openzeppelin/contracts/utils/Strings__factory.ts +90 -0
  83. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.ts +91 -0
  84. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/index.ts +4 -0
  85. package/typechain-types/factories/@openzeppelin/contracts/utils/index.ts +8 -0
  86. package/typechain-types/factories/@openzeppelin/contracts/utils/math/SafeCast__factory.ts +118 -0
  87. package/typechain-types/factories/@openzeppelin/contracts/utils/math/index.ts +4 -0
  88. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable__factory.ts +165 -0
  89. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.ts +122 -0
  90. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.ts +5 -0
  91. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.ts +6 -0
  92. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.ts +4 -0
  93. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.ts +48 -0
  94. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.ts +153 -0
  95. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.ts +5 -0
  96. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.ts +48 -0
  97. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable__factory.ts +97 -0
  98. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/cryptography/index.ts +4 -0
  99. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.ts +5 -0
  100. package/typechain-types/factories/@openzeppelin/index.ts +5 -0
  101. package/typechain-types/factories/contracts/compliance/ComplianceRules__factory.ts +26 -17
  102. package/typechain-types/factories/contracts/core/IdentityRegistry__factory.ts +493 -116
  103. package/typechain-types/factories/contracts/index.ts +1 -0
  104. package/typechain-types/factories/contracts/interfaces/IComplianceRules__factory.ts +193 -0
  105. package/typechain-types/factories/contracts/interfaces/IIdentityRegistry__factory.ts +236 -186
  106. package/typechain-types/factories/contracts/interfaces/index.ts +1 -0
  107. package/typechain-types/factories/contracts/test/MockFacilitator__factory.ts +194 -0
  108. package/typechain-types/factories/contracts/test/index.ts +4 -0
  109. package/typechain-types/factories/contracts/tokens/CompliantERC20__factory.ts +595 -0
  110. package/typechain-types/factories/contracts/tokens/index.ts +1 -1
  111. package/typechain-types/factories/index.ts +1 -0
  112. package/typechain-types/hardhat.d.ts +394 -16
  113. package/typechain-types/index.ts +48 -4
  114. package/deployments/hardhat/.chainId +0 -1
  115. package/typechain-types/contracts/tokens/CompliantERC20.sol/index.ts +0 -5
  116. package/typechain-types/factories/contracts/tokens/CompliantERC20.sol/CompliantERC20__factory.ts +0 -581
  117. package/typechain-types/factories/contracts/tokens/CompliantERC20.sol/IComplianceChecker__factory.ts +0 -44
  118. package/typechain-types/factories/contracts/tokens/CompliantERC20.sol/index.ts +0 -5
package/dist/index.d.ts CHANGED
@@ -29,11 +29,9 @@ export type NetworkName = keyof typeof CHAIN_ID_BY_NETWORK;
29
29
  export type ChainId = (typeof CHAIN_ID_BY_NETWORK)[NetworkName];
30
30
  export declare const DEPLOYMENTS: Partial<Record<NetworkName, DeploymentManifest>>;
31
31
  export declare const ADDRESSES: {
32
- readonly hardhat: {
33
- readonly IdentityRegistry: string;
34
- readonly ComplianceRules: string;
35
- readonly CompliantERC20: string;
36
- };
32
+ readonly hardhat: ContractAddresses;
33
+ readonly localhost: ContractAddresses;
34
+ readonly sepolia: ContractAddresses;
37
35
  };
38
36
  export declare const ABIS: {
39
37
  readonly IdentityRegistry: ({
@@ -44,7 +42,11 @@ export declare const ABIS: {
44
42
  anonymous?: undefined;
45
43
  outputs?: undefined;
46
44
  } | {
47
- inputs: never[];
45
+ inputs: {
46
+ internalType: string;
47
+ name: string;
48
+ type: string;
49
+ }[];
48
50
  name: string;
49
51
  type: string;
50
52
  stateMutability?: undefined;
@@ -62,6 +64,27 @@ export declare const ABIS: {
62
64
  type: string;
63
65
  stateMutability?: undefined;
64
66
  outputs?: undefined;
67
+ } | {
68
+ inputs: ({
69
+ components: {
70
+ internalType: string;
71
+ name: string;
72
+ type: string;
73
+ }[];
74
+ internalType: string;
75
+ name: string;
76
+ type: string;
77
+ } | {
78
+ internalType: string;
79
+ name: string;
80
+ type: string;
81
+ components?: undefined;
82
+ })[];
83
+ name: string;
84
+ outputs: never[];
85
+ stateMutability: string;
86
+ type: string;
87
+ anonymous?: undefined;
65
88
  } | {
66
89
  inputs: {
67
90
  internalType: string;
@@ -90,7 +113,11 @@ export declare const ABIS: {
90
113
  anonymous?: undefined;
91
114
  outputs?: undefined;
92
115
  } | {
93
- inputs: never[];
116
+ inputs: {
117
+ internalType: string;
118
+ name: string;
119
+ type: string;
120
+ }[];
94
121
  name: string;
95
122
  type: string;
96
123
  stateMutability?: undefined;
@@ -136,7 +163,11 @@ export declare const ABIS: {
136
163
  anonymous?: undefined;
137
164
  outputs?: undefined;
138
165
  } | {
139
- inputs: never[];
166
+ inputs: {
167
+ internalType: string;
168
+ name: string;
169
+ type: string;
170
+ }[];
140
171
  name: string;
141
172
  type: string;
142
173
  stateMutability?: undefined;
@@ -184,7 +215,11 @@ export declare function getAbi(name: ContractName): ({
184
215
  anonymous?: undefined;
185
216
  outputs?: undefined;
186
217
  } | {
187
- inputs: never[];
218
+ inputs: {
219
+ internalType: string;
220
+ name: string;
221
+ type: string;
222
+ }[];
188
223
  name: string;
189
224
  type: string;
190
225
  stateMutability?: undefined;
@@ -229,7 +264,11 @@ export declare function getAbi(name: ContractName): ({
229
264
  anonymous?: undefined;
230
265
  outputs?: undefined;
231
266
  } | {
232
- inputs: never[];
267
+ inputs: {
268
+ internalType: string;
269
+ name: string;
270
+ type: string;
271
+ }[];
233
272
  name: string;
234
273
  type: string;
235
274
  stateMutability?: undefined;
@@ -270,7 +309,11 @@ export declare function getAbi(name: ContractName): ({
270
309
  anonymous?: undefined;
271
310
  outputs?: undefined;
272
311
  } | {
273
- inputs: never[];
312
+ inputs: {
313
+ internalType: string;
314
+ name: string;
315
+ type: string;
316
+ }[];
274
317
  name: string;
275
318
  type: string;
276
319
  stateMutability?: undefined;
@@ -288,6 +331,27 @@ export declare function getAbi(name: ContractName): ({
288
331
  type: string;
289
332
  stateMutability?: undefined;
290
333
  outputs?: undefined;
334
+ } | {
335
+ inputs: ({
336
+ components: {
337
+ internalType: string;
338
+ name: string;
339
+ type: string;
340
+ }[];
341
+ internalType: string;
342
+ name: string;
343
+ type: string;
344
+ } | {
345
+ internalType: string;
346
+ name: string;
347
+ type: string;
348
+ components?: undefined;
349
+ })[];
350
+ name: string;
351
+ outputs: never[];
352
+ stateMutability: string;
353
+ type: string;
354
+ anonymous?: undefined;
291
355
  } | {
292
356
  inputs: {
293
357
  internalType: string;
@@ -312,7 +376,11 @@ export declare const IdentityRegistryABI: ({
312
376
  anonymous?: undefined;
313
377
  outputs?: undefined;
314
378
  } | {
315
- inputs: never[];
379
+ inputs: {
380
+ internalType: string;
381
+ name: string;
382
+ type: string;
383
+ }[];
316
384
  name: string;
317
385
  type: string;
318
386
  stateMutability?: undefined;
@@ -330,6 +398,27 @@ export declare const IdentityRegistryABI: ({
330
398
  type: string;
331
399
  stateMutability?: undefined;
332
400
  outputs?: undefined;
401
+ } | {
402
+ inputs: ({
403
+ components: {
404
+ internalType: string;
405
+ name: string;
406
+ type: string;
407
+ }[];
408
+ internalType: string;
409
+ name: string;
410
+ type: string;
411
+ } | {
412
+ internalType: string;
413
+ name: string;
414
+ type: string;
415
+ components?: undefined;
416
+ })[];
417
+ name: string;
418
+ outputs: never[];
419
+ stateMutability: string;
420
+ type: string;
421
+ anonymous?: undefined;
333
422
  } | {
334
423
  inputs: {
335
424
  internalType: string;
@@ -358,7 +447,11 @@ export declare const ComplianceRulesABI: ({
358
447
  anonymous?: undefined;
359
448
  outputs?: undefined;
360
449
  } | {
361
- inputs: never[];
450
+ inputs: {
451
+ internalType: string;
452
+ name: string;
453
+ type: string;
454
+ }[];
362
455
  name: string;
363
456
  type: string;
364
457
  stateMutability?: undefined;
@@ -404,7 +497,11 @@ export declare const CompliantERC20ABI: ({
404
497
  anonymous?: undefined;
405
498
  outputs?: undefined;
406
499
  } | {
407
- inputs: never[];
500
+ inputs: {
501
+ internalType: string;
502
+ name: string;
503
+ type: string;
504
+ }[];
408
505
  name: string;
409
506
  type: string;
410
507
  stateMutability?: undefined;
@@ -447,6 +544,73 @@ export declare function getContractAddresses(networkOrChainId: NetworkName | num
447
544
  prefer?: NetworkName;
448
545
  overrides?: Partial<ContractAddresses>;
449
546
  }): ContractAddresses;
547
+ /** Attribute bitmask constants for grantAttributeAccess */
548
+ export declare const ATTR: {
549
+ readonly BIRTH_YEAR: 1;
550
+ readonly COUNTRY: 2;
551
+ readonly COMPLIANCE: 4;
552
+ readonly BLACKLIST: 8;
553
+ readonly ALL: 15;
554
+ };
555
+ /** Purpose enum matching the Solidity `IIdentityRegistry.Purpose` */
556
+ export declare enum Purpose {
557
+ COMPLIANCE_CHECK = 0,
558
+ AGE_VERIFICATION = 1,
559
+ NATIONALITY_CHECK = 2,
560
+ TRANSFER_GATING = 3,
561
+ AUDIT = 4
562
+ }
563
+ /** EIP-712 type definition for the attestation permit (compatible with ethers/viem signTypedData) */
564
+ export declare const ATTEST_PERMIT_TYPES: {
565
+ readonly AttestPermit: readonly [{
566
+ readonly name: "user";
567
+ readonly type: "address";
568
+ }, {
569
+ readonly name: "birthYearOffset";
570
+ readonly type: "uint8";
571
+ }, {
572
+ readonly name: "countryCode";
573
+ readonly type: "uint16";
574
+ }, {
575
+ readonly name: "complianceLevel";
576
+ readonly type: "uint8";
577
+ }, {
578
+ readonly name: "isBlacklisted";
579
+ readonly type: "bool";
580
+ }, {
581
+ readonly name: "proofSetHash";
582
+ readonly type: "bytes32";
583
+ }, {
584
+ readonly name: "policyVersion";
585
+ readonly type: "uint32";
586
+ }, {
587
+ readonly name: "nonce";
588
+ readonly type: "uint256";
589
+ }, {
590
+ readonly name: "deadline";
591
+ readonly type: "uint256";
592
+ }];
593
+ };
594
+ /** Build the EIP-712 domain for attestation permit signing */
595
+ export declare function getAttestPermitDomain(chainId: number, registryAddress: string): {
596
+ name: string;
597
+ version: string;
598
+ chainId: number;
599
+ verifyingContract: string;
600
+ };
601
+ /** TypeScript type for the permit struct (matches Solidity AttestPermitData) */
602
+ export interface AttestPermitData {
603
+ birthYearOffset: number;
604
+ countryCode: number;
605
+ complianceLevel: number;
606
+ isBlacklisted: boolean;
607
+ proofSetHash: string;
608
+ policyVersion: number;
609
+ deadline: number;
610
+ v: number;
611
+ r: string;
612
+ s: string;
613
+ }
450
614
  export declare function resolveContractAddresses(networkOrChainId: NetworkName | number, options?: {
451
615
  prefer?: NetworkName;
452
616
  overrides?: Partial<ContractAddresses>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
8
8
  return (mod && mod.__esModule) ? mod : { "default": mod };
9
9
  };
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.CompliantERC20ABI = exports.ComplianceRulesABI = exports.IdentityRegistryABI = exports.ABIS = exports.ADDRESSES = exports.DEPLOYMENTS = exports.CHAIN_ID_BY_NETWORK = exports.CONTRACT_NAMES = void 0;
11
+ exports.ATTEST_PERMIT_TYPES = exports.Purpose = exports.ATTR = exports.CompliantERC20ABI = exports.ComplianceRulesABI = exports.IdentityRegistryABI = exports.ABIS = exports.ADDRESSES = exports.DEPLOYMENTS = exports.CHAIN_ID_BY_NETWORK = exports.CONTRACT_NAMES = void 0;
12
12
  exports.getAbi = getAbi;
13
13
  exports.getDeployment = getDeployment;
14
14
  exports.hasDeployment = hasDeployment;
@@ -16,37 +16,50 @@ exports.isNetworkName = isNetworkName;
16
16
  exports.getNetworkNames = getNetworkNames;
17
17
  exports.getNetworkName = getNetworkName;
18
18
  exports.getContractAddresses = getContractAddresses;
19
+ exports.getAttestPermitDomain = getAttestPermitDomain;
19
20
  exports.resolveContractAddresses = resolveContractAddresses;
20
21
  const ComplianceRules_json_1 = __importDefault(require("../abi/ComplianceRules.json"));
21
22
  const CompliantERC20_json_1 = __importDefault(require("../abi/CompliantERC20.json"));
22
23
  const IdentityRegistry_json_1 = __importDefault(require("../abi/IdentityRegistry.json"));
23
24
  const addresses_json_1 = __importDefault(require("../deployments/hardhat/addresses.json"));
25
+ const addresses_json_2 = __importDefault(require("../deployments/sepolia/addresses.json"));
24
26
  exports.CONTRACT_NAMES = ["IdentityRegistry", "ComplianceRules", "CompliantERC20"];
25
27
  const hardhatAddresses = addresses_json_1.default;
28
+ const sepoliaAddresses = addresses_json_2.default;
26
29
  exports.CHAIN_ID_BY_NETWORK = {
27
30
  hardhat: 31337,
28
31
  localhost: 31337,
29
32
  sepolia: 11155111,
30
33
  };
31
- exports.DEPLOYMENTS = {
32
- hardhat: {
33
- network: hardhatAddresses.network ?? "hardhat",
34
- chainId: hardhatAddresses.chainId ?? exports.CHAIN_ID_BY_NETWORK.hardhat,
35
- deployedAt: hardhatAddresses.deployedAt,
36
- deployer: hardhatAddresses.deployer,
34
+ function toManifest(source, fallbackNetwork, fallbackChainId) {
35
+ return {
36
+ network: source.network ?? fallbackNetwork,
37
+ chainId: source.chainId ?? fallbackChainId,
38
+ deployedAt: source.deployedAt,
39
+ deployer: source.deployer,
37
40
  contracts: {
38
- IdentityRegistry: hardhatAddresses.contracts.IdentityRegistry,
39
- ComplianceRules: hardhatAddresses.contracts.ComplianceRules,
40
- CompliantERC20: hardhatAddresses.contracts.CompliantERC20,
41
+ IdentityRegistry: source.contracts.IdentityRegistry,
42
+ ComplianceRules: source.contracts.ComplianceRules,
43
+ CompliantERC20: source.contracts.CompliantERC20,
41
44
  },
42
- },
45
+ };
46
+ }
47
+ exports.DEPLOYMENTS = {
48
+ hardhat: toManifest(hardhatAddresses, "hardhat", exports.CHAIN_ID_BY_NETWORK.hardhat),
49
+ localhost: toManifest(hardhatAddresses, "localhost", exports.CHAIN_ID_BY_NETWORK.localhost),
50
+ sepolia: toManifest(sepoliaAddresses, "sepolia", exports.CHAIN_ID_BY_NETWORK.sepolia),
43
51
  };
52
+ function toAddresses(source) {
53
+ return {
54
+ IdentityRegistry: source.contracts.IdentityRegistry.address,
55
+ ComplianceRules: source.contracts.ComplianceRules.address,
56
+ CompliantERC20: source.contracts.CompliantERC20.address,
57
+ };
58
+ }
44
59
  exports.ADDRESSES = {
45
- hardhat: {
46
- IdentityRegistry: hardhatAddresses.contracts.IdentityRegistry.address,
47
- ComplianceRules: hardhatAddresses.contracts.ComplianceRules.address,
48
- CompliantERC20: hardhatAddresses.contracts.CompliantERC20.address,
49
- },
60
+ hardhat: toAddresses(hardhatAddresses),
61
+ localhost: toAddresses(hardhatAddresses),
62
+ sepolia: toAddresses(sepoliaAddresses),
50
63
  };
51
64
  exports.ABIS = {
52
65
  IdentityRegistry: IdentityRegistry_json_1.default,
@@ -96,6 +109,48 @@ function getContractAddresses(networkOrChainId, options) {
96
109
  };
97
110
  return { ...base, ...(options?.overrides ?? {}) };
98
111
  }
112
+ // ============ v2: EIP-712 Permit Types ============
113
+ /** Attribute bitmask constants for grantAttributeAccess */
114
+ exports.ATTR = {
115
+ BIRTH_YEAR: 0x01,
116
+ COUNTRY: 0x02,
117
+ COMPLIANCE: 0x04,
118
+ BLACKLIST: 0x08,
119
+ ALL: 0x0f,
120
+ };
121
+ /** Purpose enum matching the Solidity `IIdentityRegistry.Purpose` */
122
+ var Purpose;
123
+ (function (Purpose) {
124
+ Purpose[Purpose["COMPLIANCE_CHECK"] = 0] = "COMPLIANCE_CHECK";
125
+ Purpose[Purpose["AGE_VERIFICATION"] = 1] = "AGE_VERIFICATION";
126
+ Purpose[Purpose["NATIONALITY_CHECK"] = 2] = "NATIONALITY_CHECK";
127
+ Purpose[Purpose["TRANSFER_GATING"] = 3] = "TRANSFER_GATING";
128
+ Purpose[Purpose["AUDIT"] = 4] = "AUDIT";
129
+ })(Purpose || (exports.Purpose = Purpose = {}));
130
+ /** EIP-712 type definition for the attestation permit (compatible with ethers/viem signTypedData) */
131
+ exports.ATTEST_PERMIT_TYPES = {
132
+ AttestPermit: [
133
+ { name: "user", type: "address" },
134
+ { name: "birthYearOffset", type: "uint8" },
135
+ { name: "countryCode", type: "uint16" },
136
+ { name: "complianceLevel", type: "uint8" },
137
+ { name: "isBlacklisted", type: "bool" },
138
+ { name: "proofSetHash", type: "bytes32" },
139
+ { name: "policyVersion", type: "uint32" },
140
+ { name: "nonce", type: "uint256" },
141
+ { name: "deadline", type: "uint256" },
142
+ ],
143
+ };
144
+ /** Build the EIP-712 domain for attestation permit signing */
145
+ function getAttestPermitDomain(chainId, registryAddress) {
146
+ return {
147
+ name: "ZentityIdentityRegistry",
148
+ version: "2",
149
+ chainId,
150
+ verifyingContract: registryAddress,
151
+ };
152
+ }
153
+ // ============ Address Resolution ============
99
154
  function resolveContractAddresses(networkOrChainId, options) {
100
155
  const network = typeof networkOrChainId === "number"
101
156
  ? getNetworkName(networkOrChainId, options?.prefer)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zentity/fhevm-contracts",
3
- "version": "0.2.1",
3
+ "version": "0.4.0",
4
4
  "description": "fhEVM smart contracts for Zentity privacy-preserving identity attestations",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -51,7 +51,8 @@
51
51
  "typechain": "hardhat typechain",
52
52
  "export-abi": "bun scripts/export-abi.ts",
53
53
  "print:deployments": "bun scripts/print-deployments.ts",
54
- "build": "bun run compile && bun run typechain && bun run export-abi && tsc -p tsconfig.build.json",
54
+ "consolidate": "bun scripts/consolidate-deployments.ts",
55
+ "build": "bun run compile && bun run typechain && bun run export-abi && bun run consolidate && tsc -p tsconfig.build.json",
55
56
  "prepublishOnly": "bun run build",
56
57
  "ci:version": "changeset version",
57
58
  "ci:publish": "changeset publish",
@@ -0,0 +1,153 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import type {
5
+ BaseContract,
6
+ BytesLike,
7
+ FunctionFragment,
8
+ Result,
9
+ Interface,
10
+ EventFragment,
11
+ AddressLike,
12
+ ContractRunner,
13
+ ContractMethod,
14
+ Listener,
15
+ } from "ethers";
16
+ import type {
17
+ TypedContractEvent,
18
+ TypedDeferredTopicFilter,
19
+ TypedEventLog,
20
+ TypedLogDescription,
21
+ TypedListener,
22
+ TypedContractMethod,
23
+ } from "../../../common";
24
+
25
+ export interface OwnableInterface extends Interface {
26
+ getFunction(
27
+ nameOrSignature: "owner" | "renounceOwnership" | "transferOwnership"
28
+ ): FunctionFragment;
29
+
30
+ getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment;
31
+
32
+ encodeFunctionData(functionFragment: "owner", values?: undefined): string;
33
+ encodeFunctionData(
34
+ functionFragment: "renounceOwnership",
35
+ values?: undefined
36
+ ): string;
37
+ encodeFunctionData(
38
+ functionFragment: "transferOwnership",
39
+ values: [AddressLike]
40
+ ): string;
41
+
42
+ decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
43
+ decodeFunctionResult(
44
+ functionFragment: "renounceOwnership",
45
+ data: BytesLike
46
+ ): Result;
47
+ decodeFunctionResult(
48
+ functionFragment: "transferOwnership",
49
+ data: BytesLike
50
+ ): Result;
51
+ }
52
+
53
+ export namespace OwnershipTransferredEvent {
54
+ export type InputTuple = [previousOwner: AddressLike, newOwner: AddressLike];
55
+ export type OutputTuple = [previousOwner: string, newOwner: string];
56
+ export interface OutputObject {
57
+ previousOwner: string;
58
+ newOwner: string;
59
+ }
60
+ export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
61
+ export type Filter = TypedDeferredTopicFilter<Event>;
62
+ export type Log = TypedEventLog<Event>;
63
+ export type LogDescription = TypedLogDescription<Event>;
64
+ }
65
+
66
+ export interface Ownable extends BaseContract {
67
+ connect(runner?: ContractRunner | null): Ownable;
68
+ waitForDeployment(): Promise<this>;
69
+
70
+ interface: OwnableInterface;
71
+
72
+ queryFilter<TCEvent extends TypedContractEvent>(
73
+ event: TCEvent,
74
+ fromBlockOrBlockhash?: string | number | undefined,
75
+ toBlock?: string | number | undefined
76
+ ): Promise<Array<TypedEventLog<TCEvent>>>;
77
+ queryFilter<TCEvent extends TypedContractEvent>(
78
+ filter: TypedDeferredTopicFilter<TCEvent>,
79
+ fromBlockOrBlockhash?: string | number | undefined,
80
+ toBlock?: string | number | undefined
81
+ ): Promise<Array<TypedEventLog<TCEvent>>>;
82
+
83
+ on<TCEvent extends TypedContractEvent>(
84
+ event: TCEvent,
85
+ listener: TypedListener<TCEvent>
86
+ ): Promise<this>;
87
+ on<TCEvent extends TypedContractEvent>(
88
+ filter: TypedDeferredTopicFilter<TCEvent>,
89
+ listener: TypedListener<TCEvent>
90
+ ): Promise<this>;
91
+
92
+ once<TCEvent extends TypedContractEvent>(
93
+ event: TCEvent,
94
+ listener: TypedListener<TCEvent>
95
+ ): Promise<this>;
96
+ once<TCEvent extends TypedContractEvent>(
97
+ filter: TypedDeferredTopicFilter<TCEvent>,
98
+ listener: TypedListener<TCEvent>
99
+ ): Promise<this>;
100
+
101
+ listeners<TCEvent extends TypedContractEvent>(
102
+ event: TCEvent
103
+ ): Promise<Array<TypedListener<TCEvent>>>;
104
+ listeners(eventName?: string): Promise<Array<Listener>>;
105
+ removeAllListeners<TCEvent extends TypedContractEvent>(
106
+ event?: TCEvent
107
+ ): Promise<this>;
108
+
109
+ owner: TypedContractMethod<[], [string], "view">;
110
+
111
+ renounceOwnership: TypedContractMethod<[], [void], "nonpayable">;
112
+
113
+ transferOwnership: TypedContractMethod<
114
+ [newOwner: AddressLike],
115
+ [void],
116
+ "nonpayable"
117
+ >;
118
+
119
+ getFunction<T extends ContractMethod = ContractMethod>(
120
+ key: string | FunctionFragment
121
+ ): T;
122
+
123
+ getFunction(
124
+ nameOrSignature: "owner"
125
+ ): TypedContractMethod<[], [string], "view">;
126
+ getFunction(
127
+ nameOrSignature: "renounceOwnership"
128
+ ): TypedContractMethod<[], [void], "nonpayable">;
129
+ getFunction(
130
+ nameOrSignature: "transferOwnership"
131
+ ): TypedContractMethod<[newOwner: AddressLike], [void], "nonpayable">;
132
+
133
+ getEvent(
134
+ key: "OwnershipTransferred"
135
+ ): TypedContractEvent<
136
+ OwnershipTransferredEvent.InputTuple,
137
+ OwnershipTransferredEvent.OutputTuple,
138
+ OwnershipTransferredEvent.OutputObject
139
+ >;
140
+
141
+ filters: {
142
+ "OwnershipTransferred(address,address)": TypedContractEvent<
143
+ OwnershipTransferredEvent.InputTuple,
144
+ OwnershipTransferredEvent.OutputTuple,
145
+ OwnershipTransferredEvent.OutputObject
146
+ >;
147
+ OwnershipTransferred: TypedContractEvent<
148
+ OwnershipTransferredEvent.InputTuple,
149
+ OwnershipTransferredEvent.OutputTuple,
150
+ OwnershipTransferredEvent.OutputObject
151
+ >;
152
+ };
153
+ }