@etherisc/gif-next 0.0.2-9d3eab3-323 → 0.0.2-9f827bd-593

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 (203) 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 +13 -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 +75 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  44. package/artifacts/contracts/instance/Instance.sol/Instance.json +69 -603
  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 +126 -229
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -126
  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 +11 -0
  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 +1 -1
  73. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +69 -24
  74. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +16 -24
  76. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +2 -2
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +36 -14
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +13 -21
  82. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +23 -0
  84. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +107 -0
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +223 -38
  92. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +48 -20
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +36 -14
  96. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +13 -21
  98. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +36 -14
  100. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +8 -8
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +72 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/Registry.sol/Registry.json +85 -59
  109. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +33 -23
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +14 -14
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +13 -13
  115. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +89 -90
  117. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  119. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  120. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  121. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  122. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  126. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  127. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  128. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  129. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  131. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  133. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  134. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  135. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  136. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  137. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  139. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  140. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  141. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestService.sol/TestService.json +2 -2
  143. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  145. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  146. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  147. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  148. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  149. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  150. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  151. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  152. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  153. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  154. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  155. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  161. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  167. package/contracts/components/BaseComponent.sol +35 -8
  168. package/contracts/components/Distribution.sol +1 -1
  169. package/contracts/components/IBaseComponent.sol +3 -0
  170. package/contracts/components/Pool.sol +1 -1
  171. package/contracts/components/Product.sol +1 -1
  172. package/contracts/instance/IInstance.sol +2 -0
  173. package/contracts/instance/IInstanceService.sol +9 -3
  174. package/contracts/instance/Instance.sol +9 -197
  175. package/contracts/instance/InstanceAccessManager.sol +92 -77
  176. package/contracts/instance/InstanceService.sol +115 -64
  177. package/contracts/instance/InstanceServiceManager.sol +5 -9
  178. package/contracts/instance/base/ComponentServiceBase.sol +21 -11
  179. package/contracts/instance/module/IAccess.sol +27 -17
  180. package/contracts/instance/service/BundleService.sol +15 -0
  181. package/contracts/instance/service/BundleServiceManager.sol +5 -9
  182. package/contracts/instance/service/ComponentOwnerService.sol +2 -2
  183. package/contracts/instance/service/DistributionService.sol +7 -8
  184. package/contracts/instance/service/DistributionServiceManager.sol +6 -10
  185. package/contracts/instance/service/IBundleService.sol +3 -6
  186. package/contracts/instance/service/IPolicyService.sol +7 -0
  187. package/contracts/instance/service/PolicyService.sol +58 -24
  188. package/contracts/instance/service/PoolService.sol +3 -1
  189. package/contracts/instance/service/PoolServiceManager.sol +5 -9
  190. package/contracts/instance/service/ProductService.sol +3 -1
  191. package/contracts/registry/IRegistry.sol +17 -3
  192. package/contracts/registry/IRegistryService.sol +1 -1
  193. package/contracts/registry/Registry.sol +30 -19
  194. package/contracts/registry/RegistryAccessManager.sol +27 -27
  195. package/contracts/registry/RegistryService.sol +8 -15
  196. package/contracts/registry/RegistryServiceManager.sol +4 -2
  197. package/contracts/registry/ReleaseManager.sol +83 -113
  198. package/contracts/registry/TokenRegistry.sol +4 -4
  199. package/contracts/types/RoleId.sol +6 -7
  200. package/package.json +1 -1
  201. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  202. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  203. package/contracts/instance/IAccessManagerSimple.sol +0 -391
@@ -26,12 +26,9 @@ interface IBundleService is IService {
26
26
 
27
27
  function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state) external;
28
28
 
29
- function underwritePolicy(IInstance instanceNftId,
30
- NftId policyNftId,
31
- NftId bundleNftId,
32
- uint256 collateralAmount,
33
- uint256 netPremium
34
- ) external;
29
+ function underwritePolicy(IInstance instanceNftId, NftId policyNftId, NftId bundleNftId, uint256 collateralAmount, uint256 netPremium) external;
30
+
31
+ function increaseBalance(IInstance instance, NftId bundleNftId, uint256 amount) external;
35
32
 
36
33
  // function fundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
37
34
 
@@ -15,6 +15,13 @@ import {Fee} from "../../types/Fee.sol";
15
15
  interface IPolicyService is IService {
16
16
 
17
17
  error ErrorIPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
18
+ error ErrorIPolicyServicePremiumAlreadyPaid(NftId policyNftId, uint256 premiumPaidAmount);
19
+ error ErrorIPolicyServicePolicyNotActivated(NftId policyNftId);
20
+ error ErrorIPolicyServicePolicyAlreadyClosed(NftId policyNftId);
21
+ error ErrorIPolicyServicePolicyNotActive(NftId policyNftId, StateId state);
22
+ error ErrorIPolicyServicePremiumNotFullyPaid(NftId policyNftId, uint256 premiumAmount, uint256 premiumPaidAmount);
23
+ error ErrorIPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
24
+ error ErrorIPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
18
25
 
19
26
  function calculatePremium(
20
27
  RiskId riskId,
@@ -20,11 +20,11 @@ import {TokenHandler} from "../../shared/TokenHandler.sol";
20
20
  import {IVersionable} from "../../shared/IVersionable.sol";
21
21
  import {Versionable} from "../../shared/Versionable.sol";
22
22
 
23
- import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
23
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
24
24
  import {UFixed, UFixedLib} from "../../types/UFixed.sol";
25
25
  import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
26
26
  import {ObjectType, INSTANCE, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
27
- import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
27
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
28
28
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
29
29
  import {Fee, FeeLib} from "../../types/Fee.sol";
30
30
  import {ReferralId} from "../../types/Referral.sol";
@@ -44,6 +44,7 @@ import {IBundleService} from "./IBundleService.sol";
44
44
 
45
45
  contract PolicyService is ComponentServiceBase, IPolicyService {
46
46
  using NftIdLib for NftId;
47
+ using TimestampLib for Timestamp;
47
48
 
48
49
  IPoolService internal _poolService;
49
50
  IBundleService internal _bundleService;
@@ -81,7 +82,7 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
81
82
  (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
82
83
  product = Product(productInfo.objectAddress);
83
84
  }
84
- // TODO no access restrictions
85
+ // TODO: no access restrictions
85
86
  function calculatePremium(
86
87
  RiskId riskId,
87
88
  uint256 sumInsuredAmount,
@@ -179,7 +180,7 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
179
180
  ReferralId referralId
180
181
  ) external override returns (NftId policyNftId) {
181
182
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
182
- // TODO add validations (see create bundle in pool service)
183
+ // TODO: add validations (see create bundle in pool service)
183
184
 
184
185
  policyNftId = getRegistryService().registerPolicy(
185
186
  IRegistry.ObjectInfo(
@@ -224,7 +225,7 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
224
225
  instance.createPolicy(policyNftId, policyInfo);
225
226
  instance.updatePolicyState(policyNftId, APPLIED());
226
227
 
227
- // TODO add logging
228
+ // TODO: add logging
228
229
  }
229
230
 
230
231
  function _getAndVerifyUnderwritingSetup(
@@ -384,7 +385,7 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
384
385
  }
385
386
  }
386
387
 
387
- // TODO add logging
388
+ // TODO: add logging
388
389
  }
389
390
 
390
391
  function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
@@ -397,28 +398,30 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
397
398
  // check caller is registered product
398
399
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
399
400
  InstanceReader instanceReader = instance.getInstanceReader();
401
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
400
402
 
401
- // TODO: check if not paid
402
- // TODO: transfer premium
403
- // TODO: optionally activate
403
+ if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
404
+ revert ErrorIPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
405
+ }
404
406
 
405
- // // perform actual token transfers (this code is probably not complete)
406
- // IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
407
-
408
- // uint256 premiumAmount = policyInfo.premiumAmount;
409
- // _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
407
+ uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
408
+
409
+ uint256 netPremiumAmount = _processPremiumByTreasury(
410
+ instance,
411
+ productInfo.nftId,
412
+ policyNftId,
413
+ unpaidPremiumAmount);
410
414
 
411
- // // policy level book keeping for premium paid
412
- // policyInfo.premiumPaidAmount += premiumAmount;
415
+ policyInfo.premiumPaidAmount += unpaidPremiumAmount;
413
416
 
414
- // instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
417
+ _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
418
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
415
419
 
416
- // // optional activation of policy
417
- // if(activateAt > zeroTimestamp()) {
418
- // activate(policyNftId, activateAt);
419
- // }
420
+ if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
421
+ activate(policyNftId, activateAt);
422
+ }
420
423
 
421
- // TODO add logging
424
+ // TODO: add logging
422
425
  }
423
426
 
424
427
  function activate(NftId policyNftId, Timestamp activateAt) public override {
@@ -437,14 +440,45 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
437
440
 
438
441
  instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
439
442
 
440
- // TODO add logging
443
+ // TODO: add logging
441
444
  }
442
445
 
443
446
  function close(
444
447
  NftId policyNftId
445
448
  ) external override // solhint-disable-next-line no-empty-blocks
446
449
  {
450
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
451
+ InstanceReader instanceReader = instance.getInstanceReader();
452
+
453
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
454
+
455
+ if (policyInfo.activatedAt.eqz()) {
456
+ revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
457
+ }
458
+
459
+ StateId state = instanceReader.getPolicyState(policyNftId);
460
+ if (state != ACTIVE()) {
461
+ revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
462
+ }
463
+
464
+ if (policyInfo.closedAt.gtz()) {
465
+ revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
466
+ }
467
+
468
+ if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
469
+ revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
470
+ }
471
+
472
+ if (policyInfo.openClaimsCount > 0) {
473
+ revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
474
+ }
475
+
476
+ if (policyInfo.expiredAt.lt(TimestampLib.blockTimestamp()) && policyInfo.payoutAmount < policyInfo.sumInsuredAmount) {
477
+ revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
478
+ }
447
479
 
480
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
481
+ instance.updatePolicy(policyNftId, policyInfo, CLOSED());
448
482
  }
449
483
 
450
484
  function _getPoolNftId(
@@ -498,6 +532,6 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
498
532
  }
499
533
  }
500
534
 
501
- // TODO add logging
535
+ // TODO: add logging
502
536
  }
503
537
  }
@@ -74,7 +74,7 @@ contract PoolService is
74
74
  bytes memory data;
75
75
  (info, data) = getRegistryService().registerPool(pool, poolOwner);
76
76
 
77
- IInstance instance = _getInstance(info);
77
+ IInstance instance = _getInstance(info.parentNftId);
78
78
 
79
79
  bool hasRole = getInstanceService().hasRole(
80
80
  poolOwner,
@@ -88,6 +88,8 @@ contract PoolService is
88
88
  poolNftId = info.nftId;
89
89
  ISetup.PoolSetupInfo memory initialSetup = _decodeAndVerifyPoolSetup(data);
90
90
  instance.createPoolSetup(poolNftId, initialSetup);
91
+
92
+ getInstanceService().createTarget(_getInstanceNftId(info), poolAddress, pool.getName());
91
93
  }
92
94
 
93
95
  function _decodeAndVerifyPoolSetup(bytes memory data) internal returns(ISetup.PoolSetupInfo memory setup)
@@ -6,8 +6,7 @@ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
6
  import {PoolService} from "./PoolService.sol";
7
7
  import {Registry} from "../../registry/Registry.sol";
8
8
  import {RegistryService} from "../../registry/RegistryService.sol";
9
- import {VersionLib} from "../../types/Version.sol";
10
- import {SERVICE} from "../../types/ObjectType.sol";
9
+ import {REGISTRY} from "../../types/ObjectType.sol";
11
10
 
12
11
  contract PoolServiceManager is ProxyManager {
13
12
 
@@ -27,10 +26,10 @@ contract PoolServiceManager is ProxyManager {
27
26
 
28
27
  _poolService = PoolService(address(versionable));
29
28
 
30
- Registry registry = Registry(registryAddress);
31
- address registryServiceAddress = registry.getServiceAddress(SERVICE(), VersionLib.toVersion(3, 0, 0).toMajorPart());
32
- RegistryService registryService = RegistryService(registryServiceAddress);
33
- // TODO this must have a role or own nft to register service
29
+ // TODO `this` must have a role or own nft to register service
30
+ //Registry registry = Registry(registryAddress);
31
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _poolService.getMajorVersion());
32
+ //RegistryService registryService = RegistryService(registryServiceAddress);
34
33
  //registryService.registerService(_poolService);
35
34
 
36
35
  // TODO no nft to link yet
@@ -38,9 +37,6 @@ contract PoolServiceManager is ProxyManager {
38
37
  //_linkToNftOwnable(
39
38
  // address(registryAddress),
40
39
  // address(_poolService));
41
-
42
- // implies that after this constructor call only upgrade functionality is available
43
- _isDeployed = true;
44
40
  }
45
41
 
46
42
  //--- view functions ----------------------------------------------------//
@@ -83,7 +83,7 @@ contract ProductService is ComponentServiceBase, IProductService {
83
83
  bytes memory data;
84
84
  (info, data) = getRegistryService().registerProduct(product, productOwner);
85
85
 
86
- IInstance instance = _getInstance(info);
86
+ IInstance instance = _getInstance(info.parentNftId);
87
87
  bool hasRole = getInstanceService().hasRole(
88
88
  productOwner,
89
89
  PRODUCT_OWNER_ROLE(),
@@ -96,6 +96,8 @@ contract ProductService is ComponentServiceBase, IProductService {
96
96
  productNftId = info.nftId;
97
97
  ISetup.ProductSetupInfo memory initialSetup = _decodeAndVerifyProductSetup(data);
98
98
  instance.createProductSetup(productNftId, initialSetup);
99
+
100
+ getInstanceService().createTarget(_getInstanceNftId(info), productAddress, product.getName());
99
101
  }
100
102
 
101
103
  function _decodeAndVerifyProductSetup(bytes memory data) internal returns(ISetup.ProductSetupInfo memory setup)
@@ -7,11 +7,12 @@ import {ChainNft} from "./ChainNft.sol";
7
7
  import {NftId} from "../types/NftId.sol";
8
8
  import {ObjectType} from "../types/ObjectType.sol";
9
9
  import {VersionPart} from "../types/Version.sol";
10
+ import {Timestamp} from "../types/Timestamp.sol";
10
11
 
11
12
  interface IRegistry is IERC165 {
12
13
 
13
14
  event LogRegistration(NftId nftId, NftId parentNftId, ObjectType objectType, bool isInterceptor, address objectAddress, address initialOwner);
14
-
15
+ event LogServiceRegistration(VersionPart majorVersion, ObjectType domain);
15
16
 
16
17
  // register()
17
18
  error CallerNotRegistryService();
@@ -19,6 +20,7 @@ interface IRegistry is IERC165 {
19
20
 
20
21
  // registerService()
21
22
  error CallerNotReleaseManager();
23
+ error ServiceAlreadyRegistered(address service);
22
24
 
23
25
  // _register()
24
26
  error ZeroParentAddress();
@@ -36,7 +38,17 @@ interface IRegistry is IERC165 {
36
38
  }// TODO delete nftId and initialOwner(if not used) from struct
37
39
  // TODO strong disagree, keep nftId there (lets keep get object info return object consistent)
38
40
 
39
- function registerService(ObjectInfo memory serviceInfo) external returns(NftId nftId);
41
+ struct ReleaseInfo {
42
+ ObjectType[] domains;
43
+ Timestamp createdAt;
44
+ //Timestamp updatedAt;
45
+ }
46
+
47
+ function registerService(
48
+ ObjectInfo memory serviceInfo,
49
+ VersionPart serviceVersion,
50
+ ObjectType serviceDomain
51
+ ) external returns(NftId nftId);
40
52
 
41
53
  function register(ObjectInfo memory info) external returns (NftId nftId);
42
54
 
@@ -46,6 +58,8 @@ interface IRegistry is IERC165 {
46
58
 
47
59
  function getMajorVersion() external view returns (VersionPart);
48
60
 
61
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory);
62
+
49
63
  function getObjectCount() external view returns (uint256);
50
64
 
51
65
  function getNftId() external view returns (NftId nftId);
@@ -67,7 +81,7 @@ interface IRegistry is IERC165 {
67
81
  function isRegisteredService(address contractAddress) external view returns (bool);
68
82
 
69
83
  function getServiceAddress(
70
- ObjectType serviceType,
84
+ ObjectType serviceDomain,
71
85
  VersionPart releaseVersion
72
86
  ) external view returns (address serviceAddress);
73
87
 
@@ -35,7 +35,7 @@ interface IRegistryService is
35
35
  struct FunctionConfig
36
36
  {
37
37
  ObjectType serviceDomain;
38
- bytes4[] selector;
38
+ bytes4 selector;
39
39
  }
40
40
 
41
41
  // TODO used by service -> add owner arg
@@ -2,27 +2,23 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
 
5
- import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
6
- import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
5
+ import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
6
+ import {VersionPart} from "../types/Version.sol";
7
7
  import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
8
8
 
9
- import {IRegisterable} from "../shared/IRegisterable.sol";
10
- import {IService} from "../shared/IService.sol";
11
9
  import {ERC165} from "../shared/ERC165.sol";
12
10
 
13
11
  import {ChainNft} from "./ChainNft.sol";
14
12
  import {IRegistry} from "./IRegistry.sol";
15
- import {IRegistryService} from "./IRegistryService.sol";
16
- import {ITransferInterceptor} from "./ITransferInterceptor.sol";
17
13
  import {ReleaseManager} from "./ReleaseManager.sol";
18
14
 
19
- // IMPORTANT (OPTION 1)
15
+ // IMPORTANT
20
16
  // Each NFT minted by registry is accosiated with:
21
17
  // 1) NFT owner
22
18
  // 2) registred contract OR object stored in registered (parent) contract
23
19
  // Four registration flows:
24
- // 1) IService address by release manager (SERVICE of type SERVICE aka registry service)
25
- // 2) IService address by release manager (SERVICE of type !SERVICE aka regular service)
20
+ // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
21
+ // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
26
22
  // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
27
23
  // 4) state object by regular service (POLICY, BUNDLE, STAKE)
28
24
 
@@ -30,15 +26,15 @@ contract Registry is
30
26
  ERC165,
31
27
  IRegistry
32
28
  {
33
- uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
34
29
  address public constant NFT_LOCK_ADDRESS = address(0x1);
35
30
  uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
36
- uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
37
31
  string public constant EMPTY_URI = "";
38
32
 
39
33
  mapping(NftId nftId => ObjectInfo info) internal _info;
40
34
  mapping(address object => NftId nftId) internal _nftIdByAddress;
41
35
 
36
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
37
+
42
38
  mapping(ObjectType objectType => mapping(
43
39
  ObjectType parentType => bool)) internal _isValidContractCombination;
44
40
 
@@ -64,12 +60,9 @@ contract Registry is
64
60
  _;
65
61
  }
66
62
 
67
- constructor(address releaseManager, VersionPart initialVersion)
63
+ constructor()
68
64
  {
69
- require(releaseManager > address(0), "Registry: release manager is 0");
70
- require(initialVersion.toInt() > 0, "Registry: initial version is 0");
71
-
72
- _releaseManager = ReleaseManager(releaseManager);
65
+ _releaseManager = ReleaseManager(msg.sender);
73
66
 
74
67
  // deploy NFT
75
68
  _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
@@ -84,7 +77,11 @@ contract Registry is
84
77
  _registerInterface(type(IRegistry).interfaceId);
85
78
  }
86
79
 
87
- function registerService(ObjectInfo memory info)
80
+ function registerService(
81
+ ObjectInfo memory info,
82
+ VersionPart version,
83
+ ObjectType domain
84
+ )
88
85
  external
89
86
  onlyReleaseManager
90
87
  returns(NftId nftId)
@@ -95,7 +92,16 @@ contract Registry is
95
92
  }
96
93
  info.initialOwner = NFT_LOCK_ADDRESS <- if services are access managed
97
94
  */
95
+
96
+ if(_service[version][domain] > address(0)) {
97
+ revert ServiceAlreadyRegistered(info.objectAddress);
98
+ }
99
+
100
+ _service[version][domain] = info.objectAddress; // nftId;
101
+
98
102
  nftId = _register(info);
103
+
104
+ emit LogServiceRegistration(version, domain);
99
105
  }
100
106
 
101
107
  function register(ObjectInfo memory info)
@@ -132,6 +138,11 @@ contract Registry is
132
138
  return _releaseManager.getLatestVersion();
133
139
  }
134
140
 
141
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory)
142
+ {
143
+ return _releaseManager.getReleaseInfo(version);
144
+ }
145
+
135
146
  function getObjectCount() external view override returns (uint256) {
136
147
  return _chainNft.totalSupply();
137
148
  }
@@ -173,11 +184,11 @@ contract Registry is
173
184
  }
174
185
 
175
186
  function getServiceAddress(
176
- ObjectType serviceType,
187
+ ObjectType serviceDomain,
177
188
  VersionPart releaseVersion
178
189
  ) external view returns (address)
179
190
  {
180
- return _releaseManager.getService(releaseVersion, serviceType);
191
+ return _service[releaseVersion][serviceDomain];
181
192
  }
182
193
 
183
194
  function getChainNft() external view override returns (ChainNft) {
@@ -4,15 +4,11 @@ pragma solidity ^0.8.20;
4
4
  import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
5
5
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
6
6
 
7
- import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
8
7
  import {RoleId, RoleIdLib,
9
8
  REGISTRY_SERVICE_MANAGER_ROLE,
10
9
  REGISTRY_SERVICE_ADMIN_ROLE,
11
10
  RELEASE_MANAGER_ROLE} from "../types/RoleId.sol";
12
11
 
13
- import {Registry} from "./Registry.sol";
14
- import {IVersionable} from "../shared/IVersionable.sol";
15
- import {IRegistryService} from "./IRegistryService.sol";
16
12
  import {TokenRegistry} from "./TokenRegistry.sol";
17
13
  import {ReleaseManager} from "./ReleaseManager.sol";
18
14
 
@@ -37,9 +33,12 @@ import {ReleaseManager} from "./ReleaseManager.sol";
37
33
 
38
34
  contract RegistryAccessManager is AccessManaged
39
35
  {
40
- uint64 public constant CUSTOM_ROLE_ID_MIN = 1000000;
36
+ error NotInitialized();
37
+ error AlreadyInitialized();
38
+
39
+ uint64 public constant UNIQUE_ROLE_ID_MIN = 1000000;
41
40
 
42
- AccessManager private _accessManager;
41
+ AccessManager private immutable _accessManager;
43
42
  address private _releaseManager;
44
43
  address private _tokenRegistry;
45
44
 
@@ -48,15 +47,15 @@ contract RegistryAccessManager is AccessManaged
48
47
 
49
48
  modifier onlyOnce() {
50
49
  if(_isInitialized) {
51
- revert();
52
- }
50
+ revert AlreadyInitialized();
51
+ }
53
52
  _;
54
53
  _isInitialized = true;
55
54
  }
56
55
 
57
56
  modifier onlyInitialized() {
58
57
  if(!_isInitialized) {
59
- revert();
58
+ revert NotInitialized();
60
59
  }
61
60
  _;
62
61
  }
@@ -67,7 +66,7 @@ contract RegistryAccessManager is AccessManaged
67
66
  _accessManager = new AccessManager(address(this));
68
67
  setAuthority(address(_accessManager));
69
68
 
70
- _idNext = CUSTOM_ROLE_ID_MIN;
69
+ _idNext = UNIQUE_ROLE_ID_MIN;
71
70
 
72
71
  _configureAdminRoleInitial();
73
72
 
@@ -76,16 +75,16 @@ contract RegistryAccessManager is AccessManaged
76
75
  _grantRole(REGISTRY_SERVICE_MANAGER_ROLE(), manager, 0);
77
76
  }
78
77
 
79
- // TODO need release manager authorization to configure roles for service functions and to grant those roles
80
78
  function initialize(address releaseManager, address tokenRegistry)
81
79
  external
82
80
  restricted // GIF_ADMIN_ROLE
83
81
  onlyOnce
84
82
  {
85
- if(
86
- _releaseManager > address(0) ||
87
- _tokenRegistry > address(0))
88
- { revert(); }
83
+ require(
84
+ ReleaseManager(releaseManager).authority() == address(_accessManager),
85
+ "RegistryAccessManager: release manager authority is invalid");
86
+ require(tokenRegistry > address(0), "RegistryAccessManager: token registry is 0");
87
+ //require(tokenRegistry.authority() == address(_accessManager));
89
88
 
90
89
  _releaseManager = releaseManager;
91
90
  _tokenRegistry = tokenRegistry;
@@ -108,13 +107,14 @@ contract RegistryAccessManager is AccessManaged
108
107
  onlyInitialized
109
108
  returns(RoleId)
110
109
  {
110
+ // TODO questionable check...
111
111
  // target is not part of `runtime`
112
- if(
113
- target == address(this) ||
114
- target == address(_accessManager) ||
115
- target == _releaseManager ||
116
- target == _tokenRegistry)
117
- { revert(); }
112
+ //if(
113
+ // target == address(this) ||
114
+ // target == address(_accessManager) ||
115
+ // target == _releaseManager ||
116
+ // target == _tokenRegistry)
117
+ //{ return TargetInvalid(); }
118
118
 
119
119
  RoleId roleId = _getNextRoleId();
120
120
 
@@ -154,14 +154,14 @@ contract RegistryAccessManager is AccessManaged
154
154
  {
155
155
  bytes4[] memory functionSelector = new bytes4[](1);
156
156
 
157
- // REGISTRY_SERVICE_ADMIN_ROLE for RegistryServiceProxyManager
157
+ // for RegistryServiceProxyManager
158
158
  // TODO upgrading with releaseManager.upgrade()->proxy.upgrade()???
159
159
  //functionSelector[0] = RegistryServiceManager.upgrade.selector;
160
160
  //_setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
161
161
 
162
- // REGISTRY_SERVICE_ADMIN_ROLE for TokenRegistry
162
+ // for TokenRegistry
163
163
 
164
- // REGISTRY_SERVICE_ADMIN_ROLE for ReleaseManager
164
+ // for ReleaseManager
165
165
  functionSelector[0] = ReleaseManager.createNextRelease.selector;
166
166
  _setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
167
167
  //functionSelector[0] = ReleaseManager.activateNextRelease.selector;
@@ -172,15 +172,15 @@ contract RegistryAccessManager is AccessManaged
172
172
  {
173
173
  bytes4[] memory functionSelector = new bytes4[](1);
174
174
 
175
- // REGISTRY_SERVICE_MANAGER_ROLE for TokenRegistry
175
+ // for TokenRegistry
176
176
  functionSelector[0] = TokenRegistry.setActive.selector;
177
177
  _setTargetFunctionRole(address(_tokenRegistry), functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
178
178
 
179
- // REGISTRY_SERVICE_MANAGER_ROLE for ReleaseManager
179
+ // for ReleaseManager
180
180
  functionSelector[0] = ReleaseManager.registerService.selector;
181
181
  _setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
182
182
 
183
- // set REGISTRY_SERVICE_ADMIN_ROLE as admin for REGISTRY_SERVICE_MANAGER_ROLE
183
+ // set admin
184
184
  _setRoleAdmin(REGISTRY_SERVICE_MANAGER_ROLE(), REGISTRY_SERVICE_ADMIN_ROLE());
185
185
  }
186
186
 
@@ -156,7 +156,7 @@ contract RegistryService is
156
156
 
157
157
  // From IService
158
158
  function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
159
- return SERVICE();
159
+ return REGISTRY();
160
160
  }
161
161
 
162
162
  // from Versionable
@@ -196,32 +196,25 @@ contract RegistryService is
196
196
 
197
197
  // registerInstance() have no restriction
198
198
  config[0].serviceDomain = INSTANCE();
199
- config[0].selector = new bytes4[](1);
200
- config[0].selector[0] = RegistryService.registerInstance.selector;
199
+ config[0].selector = RegistryService.registerInstance.selector;
201
200
 
202
201
  config[1].serviceDomain = POOL();
203
- config[1].selector = new bytes4[](1);
204
- config[1].selector[0] = RegistryService.registerPool.selector;
202
+ config[1].selector = RegistryService.registerPool.selector;
205
203
 
206
204
  config[2].serviceDomain = DISTRIBUTION();
207
- config[2].selector = new bytes4[](1);
208
- config[2].selector[0] = RegistryService.registerDistribution.selector;
205
+ config[2].selector = RegistryService.registerDistribution.selector;
209
206
 
210
207
  config[3].serviceDomain = PRODUCT();
211
- config[3].selector = new bytes4[](1);
212
- config[3].selector[0] = RegistryService.registerProduct.selector;
208
+ config[3].selector = RegistryService.registerProduct.selector;
213
209
 
214
210
  config[4].serviceDomain = POLICY();
215
- config[4].selector = new bytes4[](1);
216
- config[4].selector[0] = RegistryService.registerPolicy.selector;
211
+ config[4].selector = RegistryService.registerPolicy.selector;
217
212
 
218
213
  config[5].serviceDomain = BUNDLE();
219
- config[5].selector = new bytes4[](1);
220
- config[5].selector[0] = RegistryService.registerBundle.selector;
214
+ config[5].selector = RegistryService.registerBundle.selector;
221
215
 
222
216
  /*config[6].serviceDomain = STAKE();
223
- config[6].selector = new bytes4[](1);
224
- config[6].selector[0] = RegistryService.registerStake.selector;*/
217
+ config[6].selector = RegistryService.registerStake.selector;*/
225
218
 
226
219
  data = abi.encode(config);
227
220
  }
@@ -17,7 +17,7 @@ contract RegistryServiceManager is
17
17
  {
18
18
  bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
19
19
 
20
- RegistryService private immutable _registryService;
20
+ RegistryService private immutable _registryService;
21
21
 
22
22
  /// @dev initializes proxy manager with registry service implementation and deploys registry
23
23
  constructor(
@@ -25,6 +25,9 @@ contract RegistryServiceManager is
25
25
  address registry) // used by implementation
26
26
  ProxyManager()
27
27
  {
28
+ require(initialAuthority > address(0), "RegistryServiceManager: initial authority is 0");
29
+ require(registry > address(0), "RegistryServiceManager: registry is 0");
30
+
28
31
  // implementation's initializer func `data` argument
29
32
  bytes memory initializationData = abi.encode(
30
33
  initialAuthority,
@@ -35,7 +38,6 @@ contract RegistryServiceManager is
35
38
  initializationData);
36
39
 
37
40
  _registryService = RegistryService(address(versionable));
38
-
39
41
  }
40
42
 
41
43
  // from IRegisterable