@etherisc/gif-next 0.0.2-a6faeb6-912 → 0.0.2-a7954cc-097

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 (219) hide show
  1. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +29 -0
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +33 -102
  5. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +29 -0
  7. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  8. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +33 -130
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +33 -113
  14. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  34. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  35. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  36. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  37. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +39 -0
  40. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +88 -14
  43. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  44. package/artifacts/contracts/instance/Instance.sol/Instance.json +92 -600
  45. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  46. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +221 -114
  47. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  48. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +2 -2
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +129 -189
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -98
  55. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  56. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  57. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  58. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +24 -32
  59. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  60. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  66. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  72. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +945 -0
  74. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +432 -0
  76. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +39 -52
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +49 -72
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +13 -37
  82. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  84. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +13 -13
  86. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -13
  88. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  90. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +12 -241
  92. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -241
  94. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +993 -0
  96. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  98. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +32 -354
  100. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +13 -57
  102. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +40 -410
  104. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +13 -81
  106. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  108. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +132 -133
  110. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -65
  112. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  113. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/Registry.sol/Registry.json +145 -227
  115. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  116. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  117. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  118. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +30 -128
  119. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  120. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -104
  121. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  122. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +546 -0
  123. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  124. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  125. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  126. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  127. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IService.sol/IService.json +13 -13
  131. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  134. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  135. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  136. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  138. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  140. package/artifacts/contracts/shared/Service.sol/Service.json +13 -13
  141. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  142. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  143. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  145. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  147. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  149. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
  151. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  154. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  155. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  156. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  161. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  163. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  169. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  175. package/contracts/components/BaseComponent.sol +35 -8
  176. package/contracts/components/Distribution.sol +1 -1
  177. package/contracts/components/IBaseComponent.sol +3 -0
  178. package/contracts/components/Pool.sol +10 -6
  179. package/contracts/components/Product.sol +9 -6
  180. package/contracts/instance/IInstance.sol +6 -0
  181. package/contracts/instance/IInstanceService.sol +9 -3
  182. package/contracts/instance/Instance.sol +24 -202
  183. package/contracts/instance/InstanceAccessManager.sol +92 -77
  184. package/contracts/instance/InstanceService.sol +154 -57
  185. package/contracts/instance/InstanceServiceManager.sol +5 -8
  186. package/contracts/instance/base/ComponentServiceBase.sol +32 -84
  187. package/contracts/instance/module/IAccess.sol +27 -17
  188. package/contracts/instance/service/BundleService.sol +260 -0
  189. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  190. package/contracts/instance/service/ComponentOwnerService.sol +4 -6
  191. package/contracts/instance/service/DistributionService.sol +45 -20
  192. package/contracts/instance/service/DistributionServiceManager.sol +6 -9
  193. package/contracts/instance/service/IBundleService.sol +45 -0
  194. package/contracts/instance/service/IPolicyService.sol +87 -0
  195. package/contracts/instance/service/IPoolService.sol +2 -33
  196. package/contracts/instance/service/IProductService.sol +2 -72
  197. package/contracts/instance/service/PolicyService.sol +503 -0
  198. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  199. package/contracts/instance/service/PoolService.sol +43 -206
  200. package/contracts/instance/service/PoolServiceManager.sol +5 -8
  201. package/contracts/instance/service/ProductService.sol +56 -456
  202. package/contracts/registry/ChainNft.sol +1 -1
  203. package/contracts/registry/IRegistry.sol +26 -16
  204. package/contracts/registry/IRegistryService.sol +13 -5
  205. package/contracts/registry/Registry.sol +149 -201
  206. package/contracts/registry/RegistryAccessManager.sol +210 -0
  207. package/contracts/registry/RegistryService.sol +48 -83
  208. package/contracts/registry/RegistryServiceManager.sol +18 -36
  209. package/contracts/registry/ReleaseManager.sol +348 -0
  210. package/contracts/registry/TokenRegistry.sol +5 -6
  211. package/contracts/shared/IService.sol +2 -1
  212. package/contracts/shared/ProxyManager.sol +1 -1
  213. package/contracts/shared/Service.sol +10 -7
  214. package/contracts/test/TestService.sol +3 -2
  215. package/contracts/types/RoleId.sol +10 -10
  216. package/package.json +1 -1
  217. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  218. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  219. package/contracts/instance/IAccessManagerSimple.sol +0 -391
@@ -4,92 +4,52 @@ pragma solidity ^0.8.20;
4
4
  import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
5
5
  import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
6
6
  import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
7
- import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
8
-
9
- import {IBundle} from "./module/IBundle.sol";
10
- import {IPolicy} from "./module/IPolicy.sol";
11
- import {IRisk} from "./module/IRisk.sol";
12
- import {ISetup} from "./module/ISetup.sol";
13
- import {Key32, KeyId, Key32Lib} from "../types/Key32.sol";
14
- import {KeyValueStore} from "./base/KeyValueStore.sol";
15
- import {NftId} from "../types/NftId.sol";
16
- import {NumberId} from "../types/NumberId.sol";
17
- import {ObjectType, BUNDLE, DISTRIBUTION, POLICY, POOL, ROLE, PRODUCT, TARGET} from "../types/ObjectType.sol";
18
- import {RiskId, RiskIdLib} from "../types/RiskId.sol";
19
- import {RoleId, RoleIdLib} from "../types/RoleId.sol";
20
- import {StateId, ACTIVE} from "../types/StateId.sol";
21
- import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
7
+
8
+ import {AccessManagerUpgradeableInitializeable} from "../../contracts/instance/AccessManagerUpgradeableInitializeable.sol";
9
+ import {RoleId, RoleIdLib } from "../types/RoleId.sol";
10
+ import {TimestampLib} from "../types/Timestamp.sol";
11
+ import {IAccess} from "./module/IAccess.sol";
22
12
 
23
13
  contract InstanceAccessManager is
24
14
  AccessManagedUpgradeable
25
15
  {
16
+ using RoleIdLib for RoleId;
17
+
26
18
  string public constant ADMIN_ROLE_NAME = "AdminRole";
27
19
  string public constant PUBLIC_ROLE_NAME = "PublicRole";
28
20
 
29
21
  uint64 public constant CUSTOM_ROLE_ID_MIN = 10000;
30
22
  uint32 public constant EXECUTION_DELAY = 0;
31
23
 
32
- struct RoleInfo {
33
- ShortString name;
34
- bool isCustom;
35
- bool isLocked;
36
- Timestamp createdAt;
37
- Timestamp updatedAt;
38
- }
39
-
40
- struct TargetInfo {
41
- ShortString name;
42
- bool isCustom;
43
- bool isLocked;
44
- Timestamp createdAt;
45
- Timestamp updatedAt;
46
- }
47
-
48
- error ErrorRoleIdInvalid(RoleId roleId);
49
- error ErrorRoleIdTooBig(RoleId roleId);
50
- error ErrorRoleIdTooSmall(RoleId roleId);
51
- error ErrorRoleIdAlreadyExists(RoleId roleId, ShortString name);
52
- error ErrorRoleIdNotActive(RoleId roleId);
53
- error ErrorRoleNameEmpty(RoleId roleId);
54
- error ErrorRoleNameNotUnique(RoleId roleId, ShortString name);
55
- error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
56
- error ErrorRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
57
- error ErrorSetLockedForNonexstentRole(RoleId roleId);
58
- error ErrorGrantNonexstentRole(RoleId roleId);
59
- error ErrorRevokeNonexstentRole(RoleId roleId);
60
- error ErrorRenounceNonexstentRole(RoleId roleId);
61
-
62
- error ErrorTargetAddressZero();
63
- error ErrorTargetAlreadyExists(address target, ShortString name);
64
- error ErrorTargetNameEmpty(address target);
65
- error ErrorTargetNameExists(address target, address existingTarget, ShortString name);
66
- error ErrorSetLockedForNonexstentTarget(address target);
67
-
68
24
  // role specific state
69
- mapping(RoleId roleId => RoleInfo info) internal _role;
25
+ mapping(RoleId roleId => IAccess.RoleInfo info) internal _role;
70
26
  mapping(RoleId roleId => EnumerableSet.AddressSet roleMembers) internal _roleMembers;
71
27
  mapping(ShortString name => RoleId roleId) internal _roleForName;
72
28
  RoleId [] internal _roles;
73
29
 
74
30
  // target specific state
75
- mapping(address target => TargetInfo info) internal _target;
31
+ mapping(address target => IAccess.TargetInfo info) internal _target;
76
32
  mapping(ShortString name => address target) internal _targetForName;
77
33
  address [] internal _targets;
78
34
 
79
- AccessManagerUpgradeable internal _accessManager;
35
+ AccessManagerUpgradeableInitializeable internal _accessManager;
80
36
 
81
- constructor(address accessManager)
37
+ function __InstanceAccessManager_initialize(address initialAdmin) external initializer
82
38
  {
83
- _accessManager = AccessManagerUpgradeable(accessManager);
84
- __AccessManaged_init(accessManager);
39
+ // if size of the contract gets too large, this can be externalized which will reduce the contract size considerably
40
+ _accessManager = new AccessManagerUpgradeableInitializeable();
41
+ // this service required adin rights to access manager to be able to grant/revoke roles
42
+ _accessManager.__AccessManagerUpgradeableInitializeable_init(address(this));
43
+ _accessManager.grantRole(_accessManager.ADMIN_ROLE(), initialAdmin, 0);
44
+
45
+ __AccessManaged_init(address(_accessManager));
85
46
 
86
47
  _createRole(RoleIdLib.toRoleId(_accessManager.ADMIN_ROLE()), ADMIN_ROLE_NAME, false, false);
87
48
  _createRole(RoleIdLib.toRoleId(_accessManager.PUBLIC_ROLE()), PUBLIC_ROLE_NAME, false, false);
88
49
  }
89
50
 
90
51
  //--- Role ------------------------------------------------------//
91
-
92
- function createDefaultRole(RoleId roleId, string memory name) external restricted() {
52
+ function createGifRole(RoleId roleId, string memory name) external restricted() {
93
53
  _createRole(roleId, name, false, true);
94
54
  }
95
55
 
@@ -99,7 +59,7 @@ contract InstanceAccessManager is
99
59
 
100
60
  function setRoleLocked(RoleId roleId, bool locked) external restricted() {
101
61
  if (!roleExists(roleId)) {
102
- revert ErrorSetLockedForNonexstentRole(roleId);
62
+ revert IAccess.ErrorIAccessSetLockedForNonexstentRole(roleId);
103
63
  }
104
64
 
105
65
  _role[roleId].isLocked = locked;
@@ -112,11 +72,11 @@ contract InstanceAccessManager is
112
72
 
113
73
  function grantRole(RoleId roleId, address member) external restricted() returns (bool granted) {
114
74
  if (!roleExists(roleId)) {
115
- revert ErrorGrantNonexstentRole(roleId);
75
+ revert IAccess.ErrorIAccessGrantNonexstentRole(roleId);
116
76
  }
117
77
 
118
78
  if (_role[roleId].isLocked) {
119
- revert ErrorRoleIdNotActive(roleId);
79
+ revert IAccess.ErrorIAccessRoleIdNotActive(roleId);
120
80
  }
121
81
 
122
82
  if (!EnumerableSet.contains(_roleMembers[roleId], member)) {
@@ -130,7 +90,7 @@ contract InstanceAccessManager is
130
90
 
131
91
  function revokeRole(RoleId roleId, address member) external restricted() returns (bool revoked) {
132
92
  if (!roleExists(roleId)) {
133
- revert ErrorRevokeNonexstentRole(roleId);
93
+ revert IAccess.ErrorIAccessRevokeNonexstentRole(roleId);
134
94
  }
135
95
 
136
96
  if (EnumerableSet.contains(_roleMembers[roleId], member)) {
@@ -148,7 +108,7 @@ contract InstanceAccessManager is
148
108
  address member = msg.sender;
149
109
 
150
110
  if (!roleExists(roleId)) {
151
- revert ErrorRenounceNonexstentRole(roleId);
111
+ revert IAccess.ErrorIAccessRenounceNonexstentRole(roleId);
152
112
  }
153
113
 
154
114
  if (EnumerableSet.contains(_roleMembers[roleId], member)) {
@@ -173,7 +133,7 @@ contract InstanceAccessManager is
173
133
  return _roleForName[ShortStrings.toShortString(name)];
174
134
  }
175
135
 
176
- function getRole(RoleId roleId) external view returns (RoleInfo memory role) {
136
+ function getRole(RoleId roleId) external view returns (IAccess.RoleInfo memory role) {
177
137
  return _role[roleId];
178
138
  }
179
139
 
@@ -190,13 +150,19 @@ contract InstanceAccessManager is
190
150
  }
191
151
 
192
152
  //--- Target ------------------------------------------------------//
153
+ function createGifTarget(address target, string memory name) external restricted() {
154
+ _createTarget(target, name, false, true);
155
+ }
156
+
193
157
  function createTarget(address target, string memory name) external restricted() {
194
158
  _createTarget(target, name, true, true);
195
159
  }
196
160
 
197
- function setTargetLocked(address target, bool locked) external restricted() {
198
- if (!targetExists(target)) {
199
- revert ErrorSetLockedForNonexstentTarget(target);
161
+ function setTargetLocked(string memory targetName, bool locked) external restricted() {
162
+ address target = _targetForName[ShortStrings.toShortString(targetName)];
163
+
164
+ if (target == address(0)) {
165
+ revert IAccess.ErrorIAccessSetLockedForNonexstentTarget(target);
200
166
  }
201
167
 
202
168
  _target[target].isLocked = locked;
@@ -214,7 +180,7 @@ contract InstanceAccessManager is
214
180
  _validateRoleParameters(roleId, name, isCustom);
215
181
  }
216
182
 
217
- RoleInfo memory role = RoleInfo(
183
+ IAccess.RoleInfo memory role = IAccess.RoleInfo(
218
184
  ShortStrings.toShortString(name),
219
185
  isCustom,
220
186
  false, // role un-locked,
@@ -233,35 +199,35 @@ contract InstanceAccessManager is
233
199
  )
234
200
  internal
235
201
  view
236
- returns (RoleInfo memory existingRole)
202
+ returns (IAccess.RoleInfo memory existingRole)
237
203
  {
238
204
  // check role id
239
205
  uint64 roleIdInt = RoleId.unwrap(roleId);
240
206
  if(roleIdInt == _accessManager.ADMIN_ROLE() || roleIdInt == _accessManager.PUBLIC_ROLE()) {
241
- revert ErrorRoleIdInvalid(roleId);
207
+ revert IAccess.ErrorIAccessRoleIdInvalid(roleId);
242
208
  }
243
209
 
244
210
  // prevent changing isCustom for existing roles
245
211
  existingRole = _role[roleId];
246
212
 
247
213
  if (existingRole.createdAt.gtz() && isCustom != existingRole.isCustom) {
248
- revert ErrorRoleIsCustomIsImmutable(roleId, isCustom, existingRole.isCustom);
214
+ revert IAccess.ErrorIAccessRoleIsCustomIsImmutable(roleId, isCustom, existingRole.isCustom);
249
215
  }
250
216
 
251
217
  if (isCustom && roleIdInt < CUSTOM_ROLE_ID_MIN) {
252
- revert ErrorRoleIdTooSmall(roleId);
218
+ revert IAccess.ErrorIAccessRoleIdTooSmall(roleId);
253
219
  } else if (!isCustom && roleIdInt >= CUSTOM_ROLE_ID_MIN) {
254
- revert ErrorRoleIdTooBig(roleId);
220
+ revert IAccess.ErrorIAccessRoleIdTooBig(roleId);
255
221
  }
256
222
 
257
223
  // role name checks
258
224
  ShortString nameShort = ShortStrings.toShortString(name);
259
225
  if (ShortStrings.byteLength(nameShort) == 0) {
260
- revert ErrorRoleNameEmpty(roleId);
226
+ revert IAccess.ErrorIAccessRoleNameEmpty(roleId);
261
227
  }
262
228
 
263
229
  if (_roleForName[nameShort] != RoleIdLib.zero() && _roleForName[nameShort] != roleId) {
264
- revert ErrorRoleNameNotUnique(_roleForName[nameShort], nameShort);
230
+ revert IAccess.ErrorIAccessRoleNameNotUnique(_roleForName[nameShort], nameShort);
265
231
  }
266
232
  }
267
233
 
@@ -270,7 +236,14 @@ contract InstanceAccessManager is
270
236
  _validateTargetParameters(target, name, isCustom);
271
237
  }
272
238
 
273
- TargetInfo memory info = TargetInfo(
239
+ if (_target[target].createdAt.gtz()) {
240
+ revert IAccess.ErrorIAccessTargetAlreadyExists(target, _target[target].name);
241
+ }
242
+ if (_targetForName[ShortStrings.toShortString(name)] != address(0)) {
243
+ revert IAccess.ErrorIAccessTargetNameExists(target, _targetForName[ShortStrings.toShortString(name)], ShortStrings.toShortString(name));
244
+ }
245
+
246
+ IAccess.TargetInfo memory info = IAccess.TargetInfo(
274
247
  ShortStrings.toShortString(name),
275
248
  isCustom,
276
249
  _accessManager.isTargetClosed(target), // sync with state in access manager
@@ -283,6 +256,48 @@ contract InstanceAccessManager is
283
256
  }
284
257
 
285
258
  function _validateTargetParameters(address target, string memory name, bool isCustom) internal view {
259
+ // TODO: implement
260
+ }
261
+
262
+ function setTargetFunctionRole(
263
+ address target,
264
+ bytes4[] calldata selectors,
265
+ uint64 roleId
266
+ ) public virtual restricted() {
267
+ _accessManager.setTargetFunctionRole(target, selectors, roleId);
268
+ }
269
+
270
+ function setTargetFunctionRole(
271
+ string memory targetName,
272
+ bytes4[] calldata selectors,
273
+ RoleId roleId
274
+ ) public virtual restricted() {
275
+ address target = _targetForName[ShortStrings.toShortString(targetName)];
276
+ uint64 roleIdInt = RoleId.unwrap(roleId);
277
+ _accessManager.setTargetFunctionRole(target, selectors, roleIdInt);
278
+ }
279
+
280
+ function getAccessManager() public restricted() returns (AccessManagerUpgradeableInitializeable) {
281
+ return _accessManager;
282
+ }
283
+
284
+ function setTargetClosed(string memory targetName, bool closed) public restricted() {
285
+ address target = _targetForName[ShortStrings.toShortString(targetName)];
286
+ if (target == address(0)) {
287
+ revert IAccess.ErrorIAccessTargetAddressZero();
288
+ }
289
+ _accessManager.setTargetClosed(target, closed);
290
+ }
291
+
292
+ function isTargetLocked(address target) public view returns (bool locked) {
293
+ return _accessManager.isTargetClosed(target);
294
+ }
286
295
 
296
+ function canCall(
297
+ address caller,
298
+ address target,
299
+ bytes4 selector
300
+ ) public view virtual returns (bool immediate, uint32 delay) {
301
+ return _accessManager.canCall(caller, target, selector);
287
302
  }
288
303
  }
@@ -2,21 +2,22 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
- import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
6
5
 
7
- import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
8
6
  import {Instance} from "./Instance.sol";
7
+ import {IInstance} from "./IInstance.sol";
8
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
9
9
  import {IInstanceService} from "./IInstanceService.sol";
10
10
  import {InstanceReader} from "./InstanceReader.sol";
11
11
  import {BundleManager} from "./BundleManager.sol";
12
12
  import {IRegistry} from "../registry/IRegistry.sol";
13
13
  import {RegistryService} from "../registry/RegistryService.sol";
14
+ import {ChainNft} from "../registry/ChainNft.sol";
14
15
  import {Service} from "../../contracts/shared/Service.sol";
15
16
  import {IService} from "../shared/IService.sol";
16
17
  import {NftId} from "../../contracts/types/NftId.sol";
17
18
  import {RoleId} from "../types/RoleId.sol";
18
- import {VersionLib} from "../types/Version.sol";
19
- import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../types/RoleId.sol";
19
+ import {ADMIN_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
20
+ import {ObjectType, INSTANCE, BUNDLE, POLICY, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
20
21
 
21
22
  contract InstanceService is Service, IInstanceService {
22
23
 
@@ -29,10 +30,28 @@ contract InstanceService is Service, IInstanceService {
29
30
  bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
30
31
  string public constant NAME = "InstanceService";
31
32
 
33
+ modifier onlyInstanceOwner(NftId instanceNftId) {
34
+ IRegistry registry = getRegistry();
35
+ ChainNft chainNft = registry.getChainNft();
36
+
37
+ if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
38
+ revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
39
+ }
40
+ _;
41
+ }
42
+
43
+ modifier onlyRegisteredService() {
44
+ address caller = msg.sender;
45
+ if (! getRegistry().isRegisteredService(caller)) {
46
+ revert ErrorInstanceServiceRequestUnauhorized(caller);
47
+ }
48
+ _;
49
+ }
50
+
32
51
  function createInstanceClone()
33
52
  external
34
53
  returns (
35
- AccessManagerUpgradeableInitializeable clonedAccessManager,
54
+ InstanceAccessManager clonedAccessManager,
36
55
  Instance clonedInstance,
37
56
  NftId clonedInstanceNftId,
38
57
  InstanceReader clonedInstanceReader,
@@ -43,14 +62,14 @@ contract InstanceService is Service, IInstanceService {
43
62
  IRegistry registry = getRegistry();
44
63
  address registryAddress = address(registry);
45
64
  NftId registryNftId = registry.getNftId(registryAddress);
46
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
65
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
47
66
  RegistryService registryService = RegistryService(registryServiceAddress);
48
67
 
49
68
  // initially set the authority of the access managar to this (being the instance service).
50
69
  // This will allow the instance service to bootstrap the authorizations of the instance
51
70
  // and then transfer the ownership of the access manager to the instance owner once everything is setup
52
- clonedAccessManager = AccessManagerUpgradeableInitializeable(Clones.clone(_masterInstanceAccessManager));
53
- clonedAccessManager.__AccessManagerUpgradeableInitializeable_init(address(this));
71
+ clonedAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
72
+ clonedAccessManager.__InstanceAccessManager_initialize(address(this));
54
73
 
55
74
  clonedInstance = Instance(Clones.clone(_masterInstance));
56
75
  clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
@@ -71,76 +90,133 @@ contract InstanceService is Service, IInstanceService {
71
90
 
72
91
  // to complete setup switch instance ownership to the instance owner
73
92
  // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
74
- clonedAccessManager.grantRole(ADMIN_ROLE().toInt(), instanceOwner, 0);
75
- clonedAccessManager.revokeRole(ADMIN_ROLE().toInt(), address(this));
93
+ clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
94
+ clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
76
95
 
77
96
  emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
78
97
  }
79
98
 
80
- function _grantInitialAuthorizations(AccessManagerUpgradeable clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
99
+ function _grantInitialAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
100
+ _createGifRoles(clonedAccessManager);
101
+ _createGifTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
102
+ _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
103
+ _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
104
+ _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
105
+ _grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstance);
106
+ _grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
107
+ _grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
108
+ }
109
+
110
+ function _createGifRoles(InstanceAccessManager clonedAccessManager) internal {
111
+ clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole");
112
+ clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole");
113
+ clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole");
114
+
115
+ clonedAccessManager.createGifRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
116
+ clonedAccessManager.createGifRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
117
+ clonedAccessManager.createGifRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
118
+ clonedAccessManager.createGifRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
119
+ clonedAccessManager.createGifRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
120
+ clonedAccessManager.createGifRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
121
+ }
122
+
123
+ function _createGifTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
124
+ clonedAccessManager.createGifTarget(address(clonedInstance), "Instance");
125
+ clonedAccessManager.createGifTarget(address(clonedBundleManager), "BundleManager");
126
+ }
127
+
128
+ function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
81
129
  // configure authorization for distribution service on instance
82
130
  IRegistry registry = getRegistry();
83
- address distributionServiceAddress = registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
84
- clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE().toInt(), distributionServiceAddress, 0);
131
+ address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
132
+ clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
85
133
  bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
86
134
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
87
135
  instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
88
136
  clonedAccessManager.setTargetFunctionRole(
89
- address(clonedInstance),
137
+ "Instance",
90
138
  instanceDistributionServiceSelectors,
91
- DISTRIBUTION_SERVICE_ROLE().toInt());
139
+ DISTRIBUTION_SERVICE_ROLE());
140
+ }
92
141
 
142
+ function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
93
143
  // configure authorization for pool service on instance
94
- address poolServiceAddress = registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
95
- clonedAccessManager.grantRole(POOL_SERVICE_ROLE().toInt(), address(poolServiceAddress), 0);
144
+ address poolServiceAddress = _registry.getServiceAddress(POOL(), getMajorVersion());
145
+ clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
96
146
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
97
147
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
98
148
  instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
99
- instancePoolServiceSelectors[2] = clonedInstance.createBundle.selector;
100
- instancePoolServiceSelectors[3] = clonedInstance.updateBundle.selector;
101
149
  clonedAccessManager.setTargetFunctionRole(
102
- address(clonedInstance),
150
+ "Instance",
103
151
  instancePoolServiceSelectors,
104
- POOL_SERVICE_ROLE().toInt());
105
-
106
- // configure authorization for pool service on bundle manager
107
- bytes4[] memory bundleManagerPoolServiceSelectors = new bytes4[](5);
108
- bundleManagerPoolServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
109
- bundleManagerPoolServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
110
- bundleManagerPoolServiceSelectors[2] = clonedBundleManager.add.selector;
111
- bundleManagerPoolServiceSelectors[3] = clonedBundleManager.lock.selector;
112
- bundleManagerPoolServiceSelectors[4] = clonedBundleManager.unlock.selector;
113
- clonedAccessManager.setTargetFunctionRole(
114
- address(clonedBundleManager),
115
- bundleManagerPoolServiceSelectors,
116
- POOL_SERVICE_ROLE().toInt());
152
+ POOL_SERVICE_ROLE());
153
+ }
117
154
 
155
+ function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
118
156
  // configure authorization for product service on instance
119
- address productServiceAddress = registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
120
- clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE().toInt(), address(productServiceAddress), 0);
121
- bytes4[] memory instanceProductServiceSelectors = new bytes4[](9);
157
+ address productServiceAddress = _registry.getServiceAddress(PRODUCT(), getMajorVersion());
158
+ clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
159
+ bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
122
160
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
123
161
  instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
124
162
  instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
125
163
  instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
126
164
  instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
127
- instanceProductServiceSelectors[5] = clonedInstance.createPolicy.selector;
128
- instanceProductServiceSelectors[6] = clonedInstance.updatePolicy.selector;
129
- instanceProductServiceSelectors[7] = clonedInstance.updatePolicyState.selector;
130
165
  clonedAccessManager.setTargetFunctionRole(
131
- address(clonedInstance),
166
+ "Instance",
132
167
  instanceProductServiceSelectors,
133
- PRODUCT_SERVICE_ROLE().toInt());
168
+ PRODUCT_SERVICE_ROLE());
169
+ }
134
170
 
135
- // configure authorization for instance service on instance
136
- address instanceServiceAddress = registry.getServiceAddress("InstanceService", VersionLib.toVersion(3, 0, 0).toMajorPart());
137
- clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE().toInt(), instanceServiceAddress, 0);
171
+ function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
172
+ // configure authorization for policy service on instance
173
+ address policyServiceAddress = _registry.getServiceAddress(POLICY(), getMajorVersion());
174
+ clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), address(policyServiceAddress));
175
+ bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
176
+ instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
177
+ instancePolicyServiceSelectors[1] = clonedInstance.updatePolicy.selector;
178
+ instancePolicyServiceSelectors[2] = clonedInstance.updatePolicyState.selector;
179
+ clonedAccessManager.setTargetFunctionRole(
180
+ "Instance",
181
+ instancePolicyServiceSelectors,
182
+ POLICY_SERVICE_ROLE());
183
+ }
184
+
185
+ function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
186
+ // configure authorization for bundle service on instance
187
+ address bundleServiceAddress = _registry.getServiceAddress(BUNDLE(), getMajorVersion());
188
+ clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
189
+ bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
190
+ instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
191
+ instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
192
+ clonedAccessManager.setTargetFunctionRole(
193
+ "Instance",
194
+ instanceBundleServiceSelectors,
195
+ BUNDLE_SERVICE_ROLE());
196
+
197
+ // configure authorization for bundle service on bundle manager
198
+ bytes4[] memory bundleManagerBundleServiceSelectors = new bytes4[](5);
199
+ bundleManagerBundleServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
200
+ bundleManagerBundleServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
201
+ bundleManagerBundleServiceSelectors[2] = clonedBundleManager.add.selector;
202
+ bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
203
+ bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
204
+ clonedAccessManager.setTargetFunctionRole(
205
+ "BundleManager",
206
+ bundleManagerBundleServiceSelectors,
207
+ BUNDLE_SERVICE_ROLE());
208
+ }
209
+
210
+ function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
211
+ // configure authorization for instance service on instance
212
+ address instanceServiceAddress = _registry.getServiceAddress(INSTANCE(), getMajorVersion());
213
+ clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
138
214
  bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
139
215
  instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
140
216
  clonedAccessManager.setTargetFunctionRole(
141
- address(clonedInstance),
217
+ "Instance",
142
218
  instanceInstanceServiceSelectors,
143
- INSTANCE_SERVICE_ROLE().toInt());
219
+ INSTANCE_SERVICE_ROLE());
144
220
  }
145
221
 
146
222
  function setMasterInstance(address accessManagerAddress, address instanceAddress, address instanceReaderAddress, address bundleManagerAddress) external onlyOwner {
@@ -210,8 +286,8 @@ contract InstanceService is Service, IInstanceService {
210
286
  }
211
287
 
212
288
  // From IService
213
- function getName() public pure override(IService, Service) returns(string memory) {
214
- return NAME;
289
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
290
+ return INSTANCE();
215
291
  }
216
292
 
217
293
  /// @dev top level initializer
@@ -238,16 +314,37 @@ contract InstanceService is Service, IInstanceService {
238
314
  _registerInterface(type(IInstanceService).interfaceId);
239
315
  }
240
316
 
241
- function hasRole(address account, RoleId role, NftId instanceNftId) external view returns (bool) {
242
- IRegistry.ObjectInfo memory instanceObjectInfo = getRegistry().getObjectInfo(instanceNftId);
243
- address instanceAddress = instanceObjectInfo.objectAddress;
317
+ function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
244
318
  Instance instance = Instance(instanceAddress);
245
- AccessManagerUpgradeable accessManager = AccessManagerUpgradeable(instance.authority());
246
- (bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
247
- if (executionDelay > 0) {
248
- return false;
249
- }
250
- return isMember;
319
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
320
+ return accessManager.hasRole(role, account);
321
+ }
322
+
323
+ function createTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
324
+ IRegistry registry = getRegistry();
325
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
326
+ Instance instance = Instance(instanceInfo.objectAddress);
327
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
328
+ accessManager.createTarget(targetAddress, targetName);
251
329
  }
330
+
331
+ function setTargetLocked(string memory targetName, bool locked) external {
332
+ address componentAddress = msg.sender;
333
+ IRegistry registry = getRegistry();
334
+ IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
335
+ if (componentInfo.nftId.eqz()) {
336
+ revert ErrorInstanceServiceComponentNotRegistered(componentAddress);
337
+ }
338
+
339
+ // TODO validate component type
340
+
341
+
342
+ address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
343
+ IInstance instance = IInstance(instanceAddress);
344
+
345
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
346
+ accessManager.setTargetClosed(targetName, locked);
347
+ }
348
+
252
349
  }
253
350
 
@@ -7,7 +7,7 @@ import {ProxyManager} from "../shared/ProxyManager.sol";
7
7
  import {InstanceService} from "./InstanceService.sol";
8
8
  import {Registry} from "../registry/Registry.sol";
9
9
  import {RegistryService} from "../registry/RegistryService.sol";
10
- import {VersionLib} from "../types/Version.sol";
10
+ import {REGISTRY} from "../types/ObjectType.sol";
11
11
 
12
12
  contract InstanceServiceManager is ProxyManager {
13
13
 
@@ -28,10 +28,10 @@ contract InstanceServiceManager is ProxyManager {
28
28
 
29
29
  _instanceService = InstanceService(address(versionable));
30
30
 
31
- Registry registry = Registry(registryAddress);
32
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
33
- RegistryService registryService = RegistryService(registryServiceAddress);
34
- // TODO this must have a role or own nft to register service
31
+ // TODO `this` must have a role or own nft to register service
32
+ //Registry registry = Registry(registryAddress);
33
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _instanceService.getMajorVersion());
34
+ //RegistryService registryService = RegistryService(registryServiceAddress);
35
35
  //registryService.registerService(_instanceService);
36
36
  // RegistryService registryService = _instanceService.getRegistryService();
37
37
 
@@ -40,9 +40,6 @@ contract InstanceServiceManager is ProxyManager {
40
40
  //_linkToNftOwnable(
41
41
  // address(registryAddress),
42
42
  // address(_instanceService));
43
-
44
- // implies that after this constructor call only upgrade functionality is available
45
- _isDeployed = true;
46
43
  }
47
44
 
48
45
  //--- view functions ----------------------------------------------------//