@etherisc/gif-next 0.0.2-e59218b-293 → 0.0.2-e5a2253-213

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 (244) hide show
  1. package/README.md +63 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +166 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +153 -85
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +128 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +28 -2
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +5 -5
  13. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  14. package/artifacts/contracts/components/Pool.sol/Pool.json +185 -114
  15. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  16. package/artifacts/contracts/components/Product.sol/Product.json +160 -98
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  37. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  38. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  40. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  41. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  42. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  44. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +138 -2
  45. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  46. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  47. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  48. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +104 -14
  49. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  50. package/artifacts/contracts/instance/Instance.sol/Instance.json +107 -660
  51. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  52. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +244 -114
  53. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  54. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  55. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  56. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +38 -28
  57. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  58. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +183 -151
  59. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -74
  61. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  62. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  63. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  64. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +114 -32
  65. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -13
  67. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  68. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  73. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1121 -0
  81. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  82. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +436 -0
  83. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +141 -66
  85. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +14 -34
  87. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IBundleService.sol/IBundleService.json} +295 -41
  89. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -13
  91. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +771 -0
  93. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -164
  95. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -241
  97. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1246 -0
  99. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +492 -0
  101. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +140 -241
  103. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +14 -38
  105. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +129 -401
  107. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +14 -78
  109. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  111. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +132 -133
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -65
  115. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  116. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.json +145 -227
  118. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +30 -128
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -104
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +530 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  133. package/artifacts/contracts/shared/IService.sol/IService.json +13 -13
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  137. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  138. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  141. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  143. package/artifacts/contracts/shared/Service.sol/Service.json +13 -13
  144. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  145. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  150. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  152. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
  154. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  157. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  158. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  159. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  164. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  166. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  167. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  173. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  179. package/contracts/components/BaseComponent.sol +91 -14
  180. package/contracts/components/Distribution.sol +2 -11
  181. package/contracts/components/IBaseComponent.sol +11 -1
  182. package/contracts/components/IPoolComponent.sol +5 -1
  183. package/contracts/components/IProductComponent.sol +2 -2
  184. package/contracts/components/Pool.sol +38 -26
  185. package/contracts/components/Product.sol +28 -21
  186. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  187. package/contracts/instance/BundleManager.sol +129 -0
  188. package/contracts/instance/Cloneable.sol +46 -0
  189. package/contracts/instance/IInstance.sol +9 -3
  190. package/contracts/instance/IInstanceBase.sol +25 -0
  191. package/contracts/instance/IInstanceService.sol +13 -3
  192. package/contracts/instance/Instance.sol +43 -224
  193. package/contracts/instance/InstanceAccessManager.sol +93 -78
  194. package/contracts/instance/InstanceBase.sol +39 -0
  195. package/contracts/instance/InstanceService.sol +247 -100
  196. package/contracts/instance/InstanceServiceManager.sol +5 -8
  197. package/contracts/instance/ObjectManager.sol +101 -0
  198. package/contracts/instance/base/ComponentServiceBase.sol +85 -81
  199. package/contracts/instance/base/IInstanceBase.sol +0 -2
  200. package/contracts/instance/module/IAccess.sol +27 -17
  201. package/contracts/instance/module/ISetup.sol +2 -1
  202. package/contracts/instance/service/BundleService.sol +294 -0
  203. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  204. package/contracts/instance/service/DistributionService.sol +48 -21
  205. package/contracts/instance/service/DistributionServiceManager.sol +6 -9
  206. package/contracts/instance/service/IBundleService.sol +44 -0
  207. package/contracts/instance/service/IPolicyService.sol +94 -0
  208. package/contracts/instance/service/IPoolService.sol +4 -25
  209. package/contracts/instance/service/IProductService.sol +2 -72
  210. package/contracts/instance/service/PolicyService.sol +539 -0
  211. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  212. package/contracts/instance/service/PoolService.sol +65 -124
  213. package/contracts/instance/service/PoolServiceManager.sol +5 -8
  214. package/contracts/instance/service/ProductService.sol +96 -454
  215. package/contracts/registry/ChainNft.sol +1 -1
  216. package/contracts/registry/IRegistry.sol +26 -16
  217. package/contracts/registry/IRegistryService.sol +13 -5
  218. package/contracts/registry/Registry.sol +149 -201
  219. package/contracts/registry/RegistryAccessManager.sol +210 -0
  220. package/contracts/registry/RegistryService.sol +50 -88
  221. package/contracts/registry/RegistryServiceManager.sol +18 -36
  222. package/contracts/registry/ReleaseManager.sol +342 -0
  223. package/contracts/registry/TokenRegistry.sol +5 -6
  224. package/contracts/shared/IRegisterable.sol +0 -2
  225. package/contracts/shared/IService.sol +2 -1
  226. package/contracts/shared/ProxyManager.sol +1 -1
  227. package/contracts/shared/Service.sol +10 -7
  228. package/contracts/test/TestService.sol +3 -2
  229. package/contracts/types/NftIdSet.sol +26 -24
  230. package/contracts/types/RoleId.sol +10 -10
  231. package/package.json +1 -1
  232. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  233. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  234. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  235. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  236. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  237. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  238. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  239. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  240. package/contracts/instance/AccessManagedSimple.sol +0 -115
  241. package/contracts/instance/AccessManagerSimple.sol +0 -692
  242. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  243. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  244. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2d379e3be07995e9ef3aeb0cf9a0cc9e.json"
3
+ "buildInfo": "../../../build-info/2d0d5ac9f3af33498ef492a7caeac063.json"
4
4
  }
@@ -1,26 +1,31 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
4
5
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
6
 
6
- import {Registerable} from "../shared/Registerable.sol";
7
-
8
- import {IRegistry} from "../registry/IRegistry.sol";
9
- import {IInstance} from "../instance/IInstance.sol";
10
-
11
- import {IInstance} from "../instance/IInstance.sol";
12
- import {IComponentOwnerService} from "../instance/service/IComponentOwnerService.sol";
13
7
  import {IBaseComponent} from "./IBaseComponent.sol";
8
+ import {IProductService} from "../instance/service/IProductService.sol";
9
+ import {IInstanceService} from "../instance/IInstanceService.sol";
10
+ import {IInstance} from "../instance/IInstance.sol";
11
+ import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
12
+ import {IRegistry} from "../registry/IRegistry.sol";
14
13
  import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
15
- import {ObjectType} from "../types/ObjectType.sol";
14
+ import {ObjectType, INSTANCE, PRODUCT} from "../types/ObjectType.sol";
15
+ import {VersionLib} from "../types/Version.sol";
16
+ import {Registerable} from "../shared/Registerable.sol";
17
+ import {RoleId, RoleIdLib} from "../types/RoleId.sol";
18
+ import {IAccess} from "../instance/module/IAccess.sol";
16
19
 
20
+ // TODO also inherit oz accessmanaged
17
21
  abstract contract BaseComponent is
18
22
  Registerable,
19
23
  IBaseComponent
20
24
  {
21
25
  using NftIdLib for NftId;
22
26
 
23
- IComponentOwnerService internal _componentOwnerService;
27
+ IInstanceService internal _instanceService;
28
+ IProductService internal _productService;
24
29
 
25
30
  address internal _deployer;
26
31
  address internal _wallet;
@@ -28,6 +33,31 @@ abstract contract BaseComponent is
28
33
  IInstance internal _instance;
29
34
  NftId internal _productNftId;
30
35
 
36
+ modifier onlyProductService() {
37
+ if(msg.sender != address(_productService)) {
38
+ revert ErrorBaseComponentNotProductService(msg.sender);
39
+ }
40
+ _;
41
+ }
42
+
43
+ modifier onlyInstanceRole(uint64 roleIdNum) {
44
+ RoleId roleId = RoleIdLib.toRoleId(roleIdNum);
45
+ InstanceAccessManager accessManager = InstanceAccessManager(_instance.authority());
46
+ if( !accessManager.hasRole(roleId, msg.sender)) {
47
+ revert ErrorBaseComponentUnauthorized(msg.sender, roleIdNum);
48
+ }
49
+ _;
50
+ }
51
+
52
+ // TODO move to oz accessmanaged locked (which is included in restricted modifier)
53
+ modifier isNotLocked() {
54
+ InstanceAccessManager accessManager = InstanceAccessManager(_instance.authority());
55
+ if (accessManager.isTargetLocked(address(this))) {
56
+ revert IAccess.ErrorIAccessTargetLocked(address(this));
57
+ }
58
+ _;
59
+ }
60
+
31
61
  constructor(
32
62
  address registry,
33
63
  NftId instanceNftId,
@@ -40,27 +70,32 @@ abstract contract BaseComponent is
40
70
  bytes memory data = "";
41
71
  _initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, data);
42
72
 
43
- IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
73
+ IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(instanceNftId);
44
74
  _instance = IInstance(instanceInfo.objectAddress);
45
75
  require(
46
76
  _instance.supportsInterface(type(IInstance).interfaceId),
47
77
  ""
48
78
  );
49
79
 
50
- _componentOwnerService = _instance.getComponentOwnerService();
80
+ _instanceService = IInstanceService(_registry.getServiceAddress(INSTANCE(), VersionLib.toVersion(3, 0, 0).toMajorPart()));
81
+ _productService = IProductService(_registry.getServiceAddress(PRODUCT(), VersionLib.toVersion(3, 0, 0).toMajorPart()));
51
82
  _wallet = address(this);
52
83
  _token = IERC20Metadata(token);
53
84
 
54
85
  _registerInterface(type(IBaseComponent).interfaceId);
55
86
  }
56
87
 
88
+ function getName() public pure virtual returns (string memory name);
89
+
57
90
  // from component contract
91
+ // TODO only owner and instance owner
58
92
  function lock() external onlyOwner override {
59
- _componentOwnerService.lock(this);
93
+ _instanceService.setTargetLocked(getName(), true);
60
94
  }
61
-
95
+
96
+ // TODO only owner and instance owner
62
97
  function unlock() external onlyOwner override {
63
- _componentOwnerService.unlock(this);
98
+ _instanceService.setTargetLocked(getName(), false);
64
99
  }
65
100
 
66
101
  function getWallet()
@@ -72,6 +107,48 @@ abstract contract BaseComponent is
72
107
  return _wallet;
73
108
  }
74
109
 
110
+ /// @dev Sets the wallet address for the component.
111
+ /// if the current wallet has tokens, these will be transferred.
112
+ /// if the new wallet address is externally owned, an approval from the
113
+ /// owner of the external wallet for the component to move all tokens must exist.
114
+ function setWallet(address newWallet) external override onlyOwner {
115
+ address currentWallet = _wallet;
116
+ uint256 currentBalance = _token.balanceOf(currentWallet);
117
+
118
+ // checks
119
+ if (newWallet == currentWallet) {
120
+ revert ErrorBaseComponentWalletAddressIsSameAsCurrent(newWallet);
121
+ }
122
+
123
+ if (currentBalance > 0) {
124
+ if (currentWallet == address(this)) {
125
+ // move tokens from component smart contract to external wallet
126
+ } else {
127
+ // move tokens from external wallet to component smart contract or another external wallet
128
+ uint256 allowance = _token.allowance(currentWallet, address(this));
129
+ if (allowance < currentBalance) {
130
+ revert ErrorBaseComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
131
+ }
132
+ }
133
+ }
134
+
135
+ // effects
136
+ _wallet = newWallet;
137
+ emit LogBaseComponentWalletAddressChanged(newWallet);
138
+
139
+ // interactions
140
+ if (currentBalance > 0) {
141
+ // transfer tokens from current wallet to new wallet
142
+ if (currentWallet == address(this)) {
143
+ // transferFrom requires self allowance too
144
+ _token.approve(address(this), currentBalance);
145
+ }
146
+
147
+ SafeERC20.safeTransferFrom(_token, currentWallet, newWallet, currentBalance);
148
+ emit LogBaseComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
149
+ }
150
+ }
151
+
75
152
  function getToken() public view override returns (IERC20Metadata token) {
76
153
  return _token;
77
154
  }
@@ -16,7 +16,7 @@ import {Registerable} from "../shared/Registerable.sol";
16
16
  import {TokenHandler} from "../shared/TokenHandler.sol";
17
17
  import {InstanceReader} from "../instance/InstanceReader.sol";
18
18
 
19
- contract Distribution is
19
+ abstract contract Distribution is
20
20
  BaseComponent,
21
21
  IDistributionComponent
22
22
  {
@@ -28,14 +28,6 @@ contract Distribution is
28
28
  TokenHandler internal _tokenHandler;
29
29
 
30
30
  IDistributionService private _distributionService;
31
- IProductService private _productService;
32
-
33
- modifier onlyProductService() {
34
- require(
35
- msg.sender == address(_productService),
36
- "ERROR:POL-002:NOT_PRODUCT_SERVICE");
37
- _;
38
- }
39
31
 
40
32
  constructor(
41
33
  address registry,
@@ -52,9 +44,7 @@ contract Distribution is
52
44
  _initialDistributionFee = distributionFee;
53
45
 
54
46
  _tokenHandler = TokenHandler(token);
55
-
56
47
  _distributionService = _instance.getDistributionService();
57
- _productService = _instance.getProductService();
58
48
 
59
49
  _registerInterface(type(IDistributionComponent).interfaceId);
60
50
  }
@@ -150,6 +140,7 @@ contract Distribution is
150
140
  return (
151
141
  info,
152
142
  abi.encode(
143
+ getName(),
153
144
  ISetup.DistributionSetupInfo(
154
145
  _productNftId,
155
146
  _tokenHandler,
@@ -8,13 +8,23 @@ import {IInstance} from "../instance/IInstance.sol";
8
8
  import {NftId} from "../types/NftId.sol";
9
9
 
10
10
  interface IBaseComponent is IRegisterable {
11
+ error ErrorBaseComponentWalletAddressIsSameAsCurrent(address newWallet);
12
+ error ErrorBaseComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
13
+ error ErrorBaseComponentUnauthorized(address caller, uint64 requiredRoleIdNum);
14
+ error ErrorBaseComponentNotProductService(address caller);
11
15
 
12
- function lock() external;
16
+ event LogBaseComponentWalletAddressChanged(address newWallet);
17
+ event LogBaseComponentWalletTokensTransferred(address from, address to, uint256 amount);
18
+
19
+ function getName() external pure returns (string memory name);
13
20
 
21
+ // TODO remove and replace with accessmanaged target locking mechanism
22
+ function lock() external;
14
23
  function unlock() external;
15
24
 
16
25
  function getToken() external view returns (IERC20Metadata token);
17
26
 
27
+ function setWallet(address walletAddress) external;
18
28
  function getWallet() external view returns (address walletAddress);
19
29
 
20
30
  function getInstance() external view returns (IInstance instance);
@@ -43,6 +43,10 @@ interface IPoolComponent {
43
43
  uint256 collateralizationAmount
44
44
  ) external;
45
45
 
46
+ function lockBundle(NftId bundleNftId) external;
47
+
48
+ function unlockBundle(NftId bundleNftId) external;
49
+
46
50
  /**
47
51
  * @dev returns true iff the policy application data in policyData matches
48
52
  * with the bundle filter criteria encoded in bundleFilter.
@@ -55,7 +59,7 @@ interface IPoolComponent {
55
59
  view
56
60
  returns (bool isMatching);
57
61
 
58
- function isVerifying() external view returns (bool verifying);
62
+ function isConfirmingApplication() external view returns (bool isConfirmingApplication);
59
63
 
60
64
  function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
61
65
 
@@ -18,8 +18,8 @@ interface IProductComponent {
18
18
  RiskId riskId,
19
19
  uint256 lifetime,
20
20
  bytes memory applicationData,
21
- ReferralId referralId,
22
- NftId bundleNftId
21
+ NftId bundleNftId,
22
+ ReferralId referralId
23
23
  ) external view returns (uint256 premiumAmount);
24
24
 
25
25
  function calculateNetPremium(
@@ -1,10 +1,10 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {ObjectType, POOL} from "../types/ObjectType.sol";
5
- import {IProductService} from "../instance/service/IProductService.sol";
4
+ import {POOL} from "../types/ObjectType.sol";
6
5
  import {IPoolService} from "../instance/service/IPoolService.sol";
7
- import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
6
+ import {IBundleService} from "../instance/service/IBundleService.sol";
7
+ import {NftId, NftIdLib} from "../types/NftId.sol";
8
8
  import {Fee} from "../types/Fee.sol";
9
9
  import {UFixed} from "../types/UFixed.sol";
10
10
  import {IPoolComponent} from "./IPoolComponent.sol";
@@ -14,18 +14,16 @@ import {ISetup} from "../instance/module/ISetup.sol";
14
14
 
15
15
  import {IRegistry} from "../registry/IRegistry.sol";
16
16
 
17
- // import {IPool} from "../instance/module/pool/IPoolModule.sol";
18
- import {ITreasury} from "../instance/module/ITreasury.sol";
19
17
  import {ISetup} from "../instance/module/ISetup.sol";
20
18
  import {InstanceReader} from "../instance/InstanceReader.sol";
21
19
 
22
20
  import {IRegisterable} from "../shared/IRegisterable.sol";
23
21
  import {Registerable} from "../shared/Registerable.sol";
24
22
 
25
- contract Pool is BaseComponent, IPoolComponent {
23
+ abstract contract Pool is BaseComponent, IPoolComponent {
26
24
  using NftIdLib for NftId;
27
25
 
28
- bool internal _isVerifying;
26
+ bool internal _isConfirmingApplication;
29
27
  UFixed internal _collateralizationLevel;
30
28
 
31
29
  Fee internal _initialPoolFee;
@@ -36,9 +34,7 @@ contract Pool is BaseComponent, IPoolComponent {
36
34
 
37
35
  // may be used to interact with instance by derived contracts
38
36
  IPoolService internal _poolService;
39
-
40
- // only relevant to protect callback functions for "active" pools
41
- IProductService private _productService;
37
+ IBundleService private _bundleService;
42
38
 
43
39
  modifier onlyPoolService() {
44
40
  require(
@@ -47,20 +43,13 @@ contract Pool is BaseComponent, IPoolComponent {
47
43
  _;
48
44
  }
49
45
 
50
- modifier onlyProductService() {
51
- require(
52
- msg.sender == address(_productService),
53
- "ERROR:POL-002:NOT_PRODUCT_SERVICE");
54
- _;
55
- }
56
-
57
46
  constructor(
58
47
  address registry,
59
48
  NftId instanceNftId,
60
49
  // TODO refactor into tokenNftId
61
50
  address token,
62
51
  bool isInterceptor,
63
- bool verifying,
52
+ bool isConfirmingApplication,
64
53
  UFixed collateralizationLevel,
65
54
  Fee memory poolFee,
66
55
  Fee memory stakingFee,
@@ -69,7 +58,7 @@ contract Pool is BaseComponent, IPoolComponent {
69
58
  )
70
59
  BaseComponent(registry, instanceNftId, token, POOL(), isInterceptor, initialOwner)
71
60
  {
72
- _isVerifying = verifying;
61
+ _isConfirmingApplication = isConfirmingApplication;
73
62
  // TODO add validation
74
63
  _collateralizationLevel = collateralizationLevel;
75
64
  _initialPoolFee = poolFee;
@@ -79,7 +68,8 @@ contract Pool is BaseComponent, IPoolComponent {
79
68
  _tokenHandler = new TokenHandler(token);
80
69
 
81
70
  _poolService = _instance.getPoolService();
82
- _productService = _instance.getProductService();
71
+ // _productService = _instance.getProductService();
72
+ _bundleService = _instance.getBundleService();
83
73
 
84
74
  _registerInterface(type(IPoolComponent).interfaceId);
85
75
  }
@@ -95,7 +85,7 @@ contract Pool is BaseComponent, IPoolComponent {
95
85
  returns(NftId bundleNftId)
96
86
  {
97
87
  address owner = msg.sender;
98
- bundleNftId = _poolService.createBundle(
88
+ bundleNftId = _bundleService.createBundle(
99
89
  owner,
100
90
  fee,
101
91
  initialAmount,
@@ -140,8 +130,8 @@ contract Pool is BaseComponent, IPoolComponent {
140
130
  }
141
131
 
142
132
 
143
- function isVerifying() external view override returns (bool verifying) {
144
- return _isVerifying;
133
+ function isConfirmingApplication() external view override returns (bool isConfirmingApplication) {
134
+ return _isConfirmingApplication;
145
135
  }
146
136
 
147
137
  function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
@@ -168,7 +158,27 @@ contract Pool is BaseComponent, IPoolComponent {
168
158
  override
169
159
  // TODO add onlyBundleOwner
170
160
  {
171
- _poolService.setBundleFee(bundleNftId, fee);
161
+ _bundleService.setBundleFee(bundleNftId, fee);
162
+ }
163
+
164
+ function lockBundle(
165
+ NftId bundleNftId
166
+ )
167
+ external
168
+ override
169
+ // TODO add onlyBundleOwner
170
+ {
171
+ _bundleService.lockBundle(bundleNftId);
172
+ }
173
+
174
+ function unlockBundle(
175
+ NftId bundleNftId
176
+ )
177
+ external
178
+ override
179
+ // TODO add onlyBundleOwner
180
+ {
181
+ _bundleService.unlockBundle(bundleNftId);
172
182
  }
173
183
 
174
184
  function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
@@ -193,6 +203,7 @@ contract Pool is BaseComponent, IPoolComponent {
193
203
  return (
194
204
  info,
195
205
  abi.encode(
206
+ getName(),
196
207
  ISetup.PoolSetupInfo(
197
208
  _productNftId,
198
209
  _tokenHandler,
@@ -200,7 +211,8 @@ contract Pool is BaseComponent, IPoolComponent {
200
211
  _initialPoolFee,
201
212
  _initialStakingFee,
202
213
  _initialPerformanceFee,
203
- _isVerifying,
214
+ false,
215
+ _isConfirmingApplication,
204
216
  _wallet
205
217
  )
206
218
  )
@@ -235,7 +247,7 @@ contract Pool is BaseComponent, IPoolComponent {
235
247
  internal
236
248
  returns(NftId bundleNftId)
237
249
  {
238
- bundleNftId = _poolService.createBundle(
250
+ bundleNftId = _bundleService.createBundle(
239
251
  bundleOwner,
240
252
  fee,
241
253
  amount,
@@ -4,16 +4,15 @@ pragma solidity ^0.8.19;
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
6
  import {IRisk} from "../instance/module/IRisk.sol";
7
- import {ITreasury} from "../instance/module/ITreasury.sol";
8
- import {IProductService} from "../instance/service/IProductService.sol";
7
+ import {IPolicyService} from "../instance/service/IPolicyService.sol";
9
8
  import {IProductComponent} from "./IProductComponent.sol";
10
- import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
- import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
9
+ import {NftId, NftIdLib} from "../types/NftId.sol";
10
+ import {PRODUCT} from "../types/ObjectType.sol";
12
11
  import {ReferralId} from "../types/Referral.sol";
13
12
  import {RiskId, RiskIdLib} from "../types/RiskId.sol";
14
13
  import {StateId} from "../types/StateId.sol";
15
14
  import {Timestamp} from "../types/Timestamp.sol";
16
- import {Fee, FeeLib} from "../types/Fee.sol";
15
+ import {Fee} from "../types/Fee.sol";
17
16
  import {BaseComponent} from "./BaseComponent.sol";
18
17
 
19
18
  import {IRegistry} from "../registry/IRegistry.sol";
@@ -26,12 +25,10 @@ import {ISetup} from "../instance/module/ISetup.sol";
26
25
  import {Pool} from "../components/Pool.sol";
27
26
  import {Distribution} from "../components/Distribution.sol";
28
27
 
29
- import {zeroNftId} from "../types/NftId.sol";
30
-
31
- contract Product is BaseComponent, IProductComponent {
28
+ abstract contract Product is BaseComponent, IProductComponent {
32
29
  using NftIdLib for NftId;
33
30
 
34
- IProductService internal _productService;
31
+ IPolicyService internal _policyService;
35
32
  Pool internal _pool;
36
33
  Distribution internal _distribution;
37
34
  Fee internal _initialProductFee;
@@ -53,7 +50,7 @@ contract Product is BaseComponent, IProductComponent {
53
50
  address initialOwner
54
51
  ) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
55
52
  // TODO add validation
56
- _productService = _instance.getProductService();
53
+ _policyService = _instance.getPolicyService();
57
54
  _pool = Pool(pool);
58
55
  _distribution = Distribution(distribution);
59
56
  _initialProductFee = productFee;
@@ -73,15 +70,15 @@ contract Product is BaseComponent, IProductComponent {
73
70
  RiskId riskId,
74
71
  uint256 lifetime,
75
72
  bytes memory applicationData,
76
- ReferralId referralId,
77
- NftId bundleNftId
73
+ NftId bundleNftId,
74
+ ReferralId referralId
78
75
  )
79
76
  external
80
77
  view
81
78
  override
82
79
  returns (uint256 premiumAmount)
83
80
  {
84
- (premiumAmount,,,,) = _productService.calculatePremium(
81
+ (premiumAmount,,,,) = _policyService.calculatePremium(
85
82
  riskId,
86
83
  sumInsuredAmount,
87
84
  lifetime,
@@ -154,7 +151,7 @@ contract Product is BaseComponent, IProductComponent {
154
151
  NftId bundleNftId,
155
152
  ReferralId referralId
156
153
  ) internal returns (NftId nftId) {
157
- nftId = _productService.createApplication(
154
+ nftId = _policyService.createApplication(
158
155
  applicationOwner,
159
156
  riskId,
160
157
  sumInsuredAmount,
@@ -172,7 +169,7 @@ contract Product is BaseComponent, IProductComponent {
172
169
  )
173
170
  internal
174
171
  {
175
- _productService.underwrite(
172
+ _policyService.underwrite(
176
173
  policyNftId,
177
174
  requirePremiumPayment,
178
175
  activateAt);
@@ -184,7 +181,7 @@ contract Product is BaseComponent, IProductComponent {
184
181
  )
185
182
  internal
186
183
  {
187
- _productService.collectPremium(
184
+ _policyService.collectPremium(
188
185
  policyNftId,
189
186
  activateAt);
190
187
  }
@@ -195,11 +192,19 @@ contract Product is BaseComponent, IProductComponent {
195
192
  )
196
193
  internal
197
194
  {
198
- _productService.activate(
195
+ _policyService.activate(
199
196
  policyNftId,
200
197
  activateAt);
201
198
  }
202
199
 
200
+ function _close(
201
+ NftId policyNftId
202
+ )
203
+ internal
204
+ {
205
+ _policyService.close(policyNftId);
206
+ }
207
+
203
208
  function getPoolNftId() external view override returns (NftId poolNftId) {
204
209
  return getRegistry().getNftId(address(_pool));
205
210
  }
@@ -253,8 +258,8 @@ contract Product is BaseComponent, IProductComponent {
253
258
  ) = _pool.getInitialInfo();
254
259
 
255
260
  (
256
- ISetup.PoolSetupInfo memory poolSetupInfo
257
- ) = abi.decode(poolData, (ISetup.PoolSetupInfo));
261
+ , ISetup.PoolSetupInfo memory poolSetupInfo
262
+ ) = abi.decode(poolData, (string, ISetup.PoolSetupInfo));
258
263
 
259
264
  // from DistributionComponent
260
265
  (
@@ -263,12 +268,13 @@ contract Product is BaseComponent, IProductComponent {
263
268
  ) = _distribution.getInitialInfo();
264
269
 
265
270
  (
266
- ISetup.DistributionSetupInfo memory distributionSetupInfo
267
- ) = abi.decode(distributionData, (ISetup.DistributionSetupInfo));
271
+ , ISetup.DistributionSetupInfo memory distributionSetupInfo
272
+ ) = abi.decode(distributionData, (string, ISetup.DistributionSetupInfo));
268
273
 
269
274
  return (
270
275
  productInfo,
271
276
  abi.encode(
277
+ getName(),
272
278
  ISetup.ProductSetupInfo(
273
279
  _token,
274
280
  _tokenHandler,
@@ -280,6 +286,7 @@ contract Product is BaseComponent, IProductComponent {
280
286
  poolSetupInfo.poolFee,
281
287
  poolSetupInfo.stakingFee,
282
288
  poolSetupInfo.performanceFee,
289
+ false,
283
290
  _wallet
284
291
  )
285
292
  )
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
5
+
6
+
7
+ contract AccessManagerUpgradeableInitializeable is AccessManagerUpgradeable {
8
+
9
+ bool private _initialized;
10
+
11
+ function __AccessManagerUpgradeableInitializeable_init(address initialAdmin) public {
12
+ require(!_initialized, "AccessManager: already initialized");
13
+
14
+ if (initialAdmin == address(0)) {
15
+ revert AccessManagerInvalidInitialAdmin(address(0));
16
+ }
17
+
18
+ // admin is active immediately and without any execution delay.
19
+ _grantRole(ADMIN_ROLE, initialAdmin, 0, 0);
20
+ _initialized = true;
21
+ }
22
+
23
+ }