@etherisc/gif-next 0.0.2-96b5b72-170 → 0.0.2-97aac30-275

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 (401) hide show
  1. package/README.md +2 -1
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  3. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +193 -164
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +114 -321
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +120 -82
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +72 -108
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  11. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +22 -48
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +25 -6
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +56 -22
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +53 -18
  20. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  21. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +708 -0
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +1 -1
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +132 -28
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +458 -331
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +133 -59
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +110 -32
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1103 -308
  32. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  33. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  34. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  36. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  37. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +2 -2
  39. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  40. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +8 -116
  41. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  42. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  43. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  45. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  46. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  47. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  48. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  49. package/artifacts/contracts/{instance/module/ISetup.sol/ISetup.json → oracle/IOracle.sol/IOracle.json} +2 -2
  50. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  51. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +759 -0
  52. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  53. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +662 -0
  54. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  55. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +1146 -0
  56. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  57. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +997 -0
  58. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  59. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +718 -0
  60. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  61. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +69 -252
  62. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +105 -55
  64. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  65. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +8 -53
  66. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  67. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +134 -86
  68. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  69. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +121 -133
  70. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  71. package/artifacts/contracts/pool/Pool.sol/Pool.json +239 -92
  72. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  73. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +170 -368
  74. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +98 -72
  76. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  77. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +69 -153
  78. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  79. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +105 -31
  80. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  81. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +95 -203
  82. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  83. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +118 -56
  84. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  85. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +7 -1
  86. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  87. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +7 -1
  88. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +81 -25
  90. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  91. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +27 -1
  92. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  93. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +230 -107
  94. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  95. package/artifacts/contracts/product/IProductService.sol/IProductService.json +0 -55
  96. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  97. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +164 -299
  98. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +106 -92
  100. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  101. package/artifacts/contracts/product/PricingService.sol/PricingService.json +139 -160
  102. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  103. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +130 -40
  104. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  105. package/artifacts/contracts/product/Product.sol/Product.json +334 -146
  106. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  107. package/artifacts/contracts/product/ProductService.sol/ProductService.json +29 -214
  108. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +88 -34
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +163 -61
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +256 -65
  116. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/Registry.sol/Registry.json +378 -67
  119. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  120. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +407 -0
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +272 -68
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +87 -35
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +799 -127
  127. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.dbg.json +4 -0
  128. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.json +137 -0
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  130. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +314 -138
  131. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +4 -0
  132. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +1193 -0
  133. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +4 -0
  134. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +1715 -0
  135. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +4 -0
  136. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +1728 -0
  137. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +4 -0
  138. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +1806 -0
  139. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +4 -0
  140. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +1824 -0
  141. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Component.sol/Component.json +184 -11
  143. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  144. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +908 -49
  145. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  146. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +792 -0
  147. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  148. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +526 -0
  149. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  151. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +4 -0
  152. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +1562 -0
  153. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +4 -0
  154. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +1600 -0
  155. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  156. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +172 -4
  157. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  158. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +867 -0
  159. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  160. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +80 -22
  161. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  162. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +1 -11
  163. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  164. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +1 -1
  165. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  166. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +7 -1
  167. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  168. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +21 -3
  169. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  170. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +7 -1
  171. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  172. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  173. package/artifacts/contracts/shared/IService.sol/IService.json +7 -1
  174. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  175. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +4 -0
  176. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +39 -0
  177. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  178. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +176 -24
  179. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  180. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +571 -0
  181. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  182. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +194 -0
  183. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +4 -0
  184. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +306 -0
  185. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  186. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +13 -7
  187. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  188. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +31 -13
  189. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  190. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +64 -16
  191. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  192. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +21 -7
  193. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  194. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  195. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  196. package/artifacts/contracts/shared/Service.sol/Service.json +7 -1
  197. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  198. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  199. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  200. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  201. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  202. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  203. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1103 -172
  204. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  205. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +497 -49
  206. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  207. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +444 -0
  208. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  209. package/artifacts/contracts/staking/Staking.sol/Staking.json +1247 -56
  210. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  211. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +167 -30
  212. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  213. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +592 -0
  214. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  215. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +605 -78
  216. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  217. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +122 -28
  218. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  219. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2189 -0
  220. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  221. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +571 -0
  222. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  223. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  224. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  225. package/artifacts/contracts/type/Amount.sol/AmountLib.json +68 -4
  226. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +53 -2
  228. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  230. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  231. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  232. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/Fee.sol/FeeLib.json +34 -34
  234. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  235. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  236. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +47 -4
  238. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  239. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  240. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +15 -2
  242. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  244. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  245. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  246. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  247. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  248. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  250. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  252. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +76 -2
  254. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  256. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +17 -4
  258. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  260. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  262. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +2 -2
  264. package/contracts/distribution/Distribution.sol +27 -51
  265. package/contracts/distribution/DistributionService.sol +55 -106
  266. package/contracts/distribution/DistributionServiceManager.sol +9 -18
  267. package/contracts/distribution/IDistributionComponent.sol +3 -8
  268. package/contracts/distribution/IDistributionService.sol +2 -8
  269. package/contracts/instance/IInstance.sol +12 -7
  270. package/contracts/instance/IInstanceService.sol +13 -5
  271. package/contracts/instance/Instance.sol +30 -23
  272. package/contracts/instance/InstanceAdmin.sol +331 -0
  273. package/contracts/instance/InstanceAuthorizationsLib.sol +210 -141
  274. package/contracts/instance/InstanceReader.sol +64 -42
  275. package/contracts/instance/InstanceService.sol +141 -87
  276. package/contracts/instance/InstanceServiceManager.sol +10 -20
  277. package/contracts/instance/InstanceStore.sol +125 -55
  278. package/contracts/instance/base/BalanceStore.sol +118 -0
  279. package/contracts/instance/base/ObjectCounter.sol +21 -0
  280. package/contracts/instance/module/IAccess.sol +2 -10
  281. package/contracts/instance/module/IBundle.sol +1 -4
  282. package/contracts/instance/module/IComponents.sol +15 -4
  283. package/contracts/instance/module/IPolicy.sol +8 -2
  284. package/contracts/mock/Dip.sol +26 -0
  285. package/contracts/oracle/IOracle.sol +20 -0
  286. package/contracts/oracle/IOracleComponent.sol +32 -0
  287. package/contracts/oracle/IOracleService.sol +65 -0
  288. package/contracts/oracle/Oracle.sol +145 -0
  289. package/contracts/oracle/OracleService.sol +277 -0
  290. package/contracts/oracle/OracleServiceManager.sol +42 -0
  291. package/contracts/pool/BundleService.sol +63 -149
  292. package/contracts/pool/BundleServiceManager.sol +9 -18
  293. package/contracts/pool/IBundleService.sol +4 -16
  294. package/contracts/pool/IPoolComponent.sol +2 -4
  295. package/contracts/pool/IPoolService.sol +45 -9
  296. package/contracts/pool/Pool.sol +37 -40
  297. package/contracts/pool/PoolService.sol +195 -145
  298. package/contracts/pool/PoolServiceManager.sol +9 -18
  299. package/contracts/product/ApplicationService.sol +111 -43
  300. package/contracts/product/ApplicationServiceManager.sol +9 -6
  301. package/contracts/product/ClaimService.sol +21 -21
  302. package/contracts/product/ClaimServiceManager.sol +9 -6
  303. package/contracts/product/IApplicationService.sol +1 -1
  304. package/contracts/product/IClaimService.sol +7 -1
  305. package/contracts/product/IPolicyService.sol +6 -8
  306. package/contracts/product/IPricingService.sol +3 -1
  307. package/contracts/product/IProductComponent.sol +5 -4
  308. package/contracts/product/IProductService.sol +1 -8
  309. package/contracts/product/PolicyService.sol +226 -127
  310. package/contracts/product/PolicyServiceManager.sol +9 -21
  311. package/contracts/product/PricingService.sol +74 -48
  312. package/contracts/product/PricingServiceManager.sol +9 -18
  313. package/contracts/product/Product.sol +45 -47
  314. package/contracts/product/ProductService.sol +26 -112
  315. package/contracts/product/ProductServiceManager.sol +9 -21
  316. package/contracts/registry/ChainNft.sol +1 -0
  317. package/contracts/registry/IRegistry.sol +38 -24
  318. package/contracts/registry/IRegistryService.sol +31 -31
  319. package/contracts/registry/Registry.sol +176 -105
  320. package/contracts/registry/RegistryAdmin.sol +237 -0
  321. package/contracts/registry/RegistryService.sol +44 -82
  322. package/contracts/registry/RegistryServiceManager.sol +21 -23
  323. package/contracts/registry/ReleaseManager.sol +450 -210
  324. package/contracts/registry/ServiceAuthorizationsLib.sol +173 -0
  325. package/contracts/registry/TokenRegistry.sol +261 -62
  326. package/contracts/shared/AccessManagerCustom.sol +736 -0
  327. package/contracts/shared/AccessManagerExtended.sol +470 -0
  328. package/contracts/shared/AccessManagerExtendedInitializeable.sol +13 -0
  329. package/contracts/shared/AccessManagerExtendedWithDisable.sol +137 -0
  330. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +14 -0
  331. package/contracts/shared/Component.sol +153 -49
  332. package/contracts/shared/ComponentService.sol +561 -93
  333. package/contracts/shared/ComponentServiceManager.sol +35 -0
  334. package/contracts/shared/ComponentVerifyingService.sol +117 -0
  335. package/contracts/shared/ERC165.sol +1 -1
  336. package/contracts/shared/IAccessManagerExtended.sol +74 -0
  337. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +18 -0
  338. package/contracts/shared/IComponent.sol +20 -8
  339. package/contracts/shared/IComponentService.sol +102 -0
  340. package/contracts/shared/IInstanceLinkedComponent.sol +5 -11
  341. package/contracts/{instance/base → shared}/IKeyValueStore.sol +6 -6
  342. package/contracts/{instance/base → shared}/ILifecycle.sol +3 -3
  343. package/contracts/shared/INftOwnable.sol +1 -1
  344. package/contracts/shared/IPolicyHolder.sol +6 -1
  345. package/contracts/shared/IService.sol +1 -1
  346. package/contracts/shared/InitializableCustom.sol +177 -0
  347. package/contracts/shared/InstanceLinkedComponent.sol +51 -178
  348. package/contracts/{instance/base → shared}/KeyValueStore.sol +30 -72
  349. package/contracts/{instance/base → shared}/Lifecycle.sol +12 -3
  350. package/contracts/shared/NftIdSetManager.sol +65 -0
  351. package/contracts/shared/NftOwnable.sol +2 -13
  352. package/contracts/shared/PolicyHolder.sol +21 -13
  353. package/contracts/shared/ProxyManager.sol +31 -1
  354. package/contracts/shared/Registerable.sol +2 -2
  355. package/contracts/shared/Service.sol +7 -2
  356. package/contracts/staking/IStaking.sol +146 -8
  357. package/contracts/staking/IStakingService.sol +83 -39
  358. package/contracts/staking/StakeManagerLib.sol +179 -0
  359. package/contracts/staking/Staking.sol +503 -17
  360. package/contracts/staking/StakingManager.sol +22 -14
  361. package/contracts/staking/StakingReader.sol +187 -0
  362. package/contracts/staking/StakingService.sol +246 -44
  363. package/contracts/staking/StakingServiceManager.sol +8 -4
  364. package/contracts/staking/StakingStore.sol +572 -0
  365. package/contracts/staking/TargetManagerLib.sol +207 -0
  366. package/contracts/type/AddressSet.sol +1 -1
  367. package/contracts/type/Amount.sol +20 -1
  368. package/contracts/type/Blocknumber.sol +20 -3
  369. package/contracts/type/Fee.sol +17 -16
  370. package/contracts/type/NftId.sol +14 -16
  371. package/contracts/type/NftIdSet.sol +1 -1
  372. package/contracts/type/ObjectType.sol +12 -10
  373. package/contracts/type/Referral.sol +1 -1
  374. package/contracts/type/RequestId.sol +75 -0
  375. package/contracts/type/RiskId.sol +1 -1
  376. package/contracts/type/RoleId.sol +18 -4
  377. package/contracts/type/Seconds.sol +27 -0
  378. package/contracts/type/StateId.sol +27 -2
  379. package/contracts/type/Timestamp.sol +6 -2
  380. package/contracts/type/Version.sol +1 -1
  381. package/package.json +4 -3
  382. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  383. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -1348
  384. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  385. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  386. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  387. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -581
  388. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  389. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -194
  390. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  391. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  392. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
  393. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  394. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -285
  395. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  396. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  397. package/contracts/instance/InstanceAccessManager.sol +0 -543
  398. package/contracts/instance/module/ISetup.sol +0 -33
  399. package/contracts/instance/module/ITreasury.sol +0 -23
  400. package/contracts/registry/RegistryAccessManager.sol +0 -207
  401. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +0 -13
@@ -1,250 +1,370 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
5
+ import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
6
+ import {IAccessManager} from "@openzeppelin/contracts/access/manager/IAccessManager.sol";
7
+ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
4
8
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
9
+ import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
5
10
 
6
11
  import {NftId} from "../type/NftId.sol";
7
- import {RoleId} from "../type/RoleId.sol";
8
- import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
12
+ import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
13
+ import {ObjectType, ObjectTypeLib, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
14
+ import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
15
+ import {Timestamp, TimestampLib, zeroTimestamp, ltTimestamp} from "../type/Timestamp.sol";
16
+ import {Seconds, SecondsLib} from "../type/Seconds.sol";
17
+ import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE} from "../type/StateId.sol";
9
18
  import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
10
- import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
11
19
 
20
+ import {IService} from "../shared/IService.sol";
21
+ import {AccessManagerExtendedWithDisableInitializeable} from "../shared/AccessManagerExtendedWithDisableInitializeable.sol";
22
+ import {ILifecycle} from "../shared/ILifecycle.sol";
23
+ import {INftOwnable} from "../shared/INftOwnable.sol";
12
24
  import {IRegisterable} from "../shared/IRegisterable.sol";
25
+
13
26
  import {IRegistry} from "./IRegistry.sol";
27
+ import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
14
28
  import {IRegistryService} from "./IRegistryService.sol";
15
- import {IService} from "../shared/IService.sol";
16
- import {IStaking} from "../staking/IStaking.sol";
17
-
29
+ import {RegistryAdmin} from "./RegistryAdmin.sol";
18
30
  import {Registry} from "./Registry.sol";
19
- import {RegistryAccessManager} from "./RegistryAccessManager.sol";
31
+ import {TokenRegistry} from "./TokenRegistry.sol";
32
+ import {ServiceAuthorizationsLib} from "./ServiceAuthorizationsLib.sol";
20
33
 
21
34
 
22
- contract ReleaseManager is AccessManaged
35
+ contract ReleaseManager is
36
+ AccessManaged,
37
+ ILifecycle,
38
+ IRegistryLinked
23
39
  {
24
40
  using ObjectTypeLib for ObjectType;
25
41
 
26
- event LogReleaseCreation(VersionPart version);
42
+ uint256 public constant INITIAL_GIF_VERSION = 3;
43
+
44
+ event LogReleaseCreation(VersionPart version, bytes32 salt, AccessManagerExtendedWithDisableInitializeable accessManager);
27
45
  event LogReleaseActivation(VersionPart version);
28
46
 
47
+ // constructor
48
+ error ErrorReleaseManagerNotRegistry(Registry registry);
49
+
29
50
  // createNextRelease
30
- error NotRegistryService();
31
- error UnexpectedServiceAuthority(address expected, address found);
51
+ error ErrorReleaseManagerReleaseCreationDisallowed(StateId currentStateId);
32
52
 
53
+ // prepareRelease
54
+ error ErrorReleaseManagerReleasePreparationDisallowed(StateId currentStateId);
55
+ error ErrorReleaseManagerReleaseAlreadyPrepared(VersionPart version);
56
+
33
57
  // register staking
34
- error ErrorReleaseManagerStakingAlreadySet(address stakingAddress);
58
+ //error ErrorReleaseManagerStakingAlreadySet(address stakingAddress);
35
59
 
36
60
  // registerService
37
- error NotService();
61
+ error ErrorReleaseManagerNoServiceRegistrationExpected();
62
+ error ErrorReleaseManagerServiceRegistrationDisallowed(StateId currentStateId);
63
+ error ErrorReleaseManagerNotService(IService service);
64
+ error ErrorReleaseManagerServiceAddressInvalid(IService given, address expected);
38
65
 
39
66
  // activateNextRelease
40
- error ReleaseNotCreated();
41
- error ReleaseRegistrationNotFinished();
67
+ error ErrorReleaseManagerReleaseActivationDisallowed(StateId currentStateId);
68
+ error ErrorReleaseManagerReleaseNotCreated(VersionPart releaseVersion);
69
+ error ErrorReleaseManagerReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
70
+ error ErrorReleaseManagerReleaseAlreadyActivated(VersionPart releaseVersion);
42
71
 
43
- // _getAndVerifyContractInfo
44
- error ErrorReleaseManagerUnexpectedRegisterableAddress(address expected, address actual);
45
- error ErrorReleaseManagerIsInterceptorTrue();
46
- error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
47
- error NotRegisterableOwner(address expectedOwner, address actualOwner);
48
- error SelfRegistration();
49
- error RegisterableOwnerIsRegistered();
72
+ // disableRelease
73
+ error ErrorReleaseManagerReleaseNotActivated(VersionPart releaseVersion);
74
+ error ErrorReleaseManagerReleaseAlreadyDisabled(VersionPart releaseVersion);
50
75
 
51
76
  // _verifyService
52
- error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
53
- error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
54
-
55
- // _verifyAndStoreConfig
56
- error ConfigMissing();
57
- error ConfigServiceDomainInvalid(uint configArrayIndex, ObjectType domain);
58
- error ConfigSelectorZero(uint configArrayIndex);
59
- error SelectorAlreadyExists(VersionPart releaseVersion, ObjectType serviceDomain);
60
-
61
- RegistryAccessManager private immutable _accessManager;
62
- IRegistry private immutable _registry;
63
- IStaking private _staking;
64
-
65
- VersionPart immutable _initial;// first active major version
66
- VersionPart _latest;// latest active major version
67
- VersionPart _next;// major version to create and activate
68
-
69
- mapping(VersionPart majorVersion => IRegistry.ReleaseInfo info) _release;
70
-
71
- // registry service function selector assigned to domain
72
- mapping(VersionPart majorVersion => mapping(ObjectType serviceDomain => bytes4[])) _selectors;
73
-
74
- uint _awaitingRegistration; // "services left to register" counter
77
+ error ErrorReleaseManagerServiceReleaseAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
78
+ error ErrorReleaseManagerServiceReleaseVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
79
+
80
+ // _verifyServiceInfo
81
+ error ErrorReleaseManagerServiceInfoAddressInvalid(IService service, address expected);
82
+ error ErrorReleaseManagerServiceInfoInterceptorInvalid(IService service, bool isInterceptor);
83
+ error ErrorReleaseManagerServiceInfoTypeInvalid(IService service, ObjectType expected, ObjectType found);
84
+ error ErrorReleaseManagerServiceInfoOwnerInvalid(IService service, address expected, address found);
85
+ error ErrorReleaseManagerServiceSelfRegistration(IService service);
86
+ error ErrorReleaseManagerServiceOwnerRegistered(IService service, address owner);
87
+
88
+ // _verifyReleaseAuthorizations
89
+ error ErrorReleaseManagerReleaseEmpty();
90
+ error ErrorReleaseManagerReleaseServiceRoleInvalid(uint serviceIdx, address service, RoleId role);
91
+
92
+ Seconds public constant MIN_DISABLE_DELAY = Seconds.wrap(60 * 24 * 365); // 1 year
93
+
94
+ RegistryAdmin public immutable _admin;
95
+ address public immutable _releaseAccessManagerCodeAddress;
96
+ Registry public immutable _registry;
97
+ IRegisterable private _staking;
98
+ address private _stakingOwner;
99
+
100
+ mapping(VersionPart version => AccessManagerExtendedWithDisableInitializeable accessManager) internal _releaseAccessManager;
101
+ mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
102
+ mapping(address registryService => VersionPart version) _releaseVersionByAddress;
103
+
104
+ VersionPart immutable internal _initial;// first active version
105
+ VersionPart internal _latest; // latest active version
106
+ VersionPart internal _next; // version to create and activate
107
+ StateId internal _state; // current state of release manager
108
+
109
+ uint256 internal _awaitingRegistration; // "services left to register" counter
110
+
111
+ // deployer of this contract must be gif admin
112
+ constructor(Registry registry)
113
+ AccessManaged(msg.sender)
114
+ {
115
+ // TODO move this part to RegistryLinked constructor
116
+ if(!_isRegistry(address(registry))) {
117
+ revert ErrorReleaseManagerNotRegistry(registry);
118
+ }
75
119
 
76
- mapping(address registryService => bool isActive) _active;
120
+ _registry = registry;
121
+ setAuthority(_registry.getAuthority());
122
+ _admin = RegistryAdmin(_registry.getRegistryAdminAddress());
77
123
 
78
- mapping(VersionPart majorVersion => bool isValid) _valid; // TODO refactor to use _active only
124
+ _initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
125
+ _next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
126
+ _state = getInitialState(RELEASE());
127
+
128
+ AccessManagerExtendedWithDisableInitializeable masterReleaseAccessManager = new AccessManagerExtendedWithDisableInitializeable();
129
+ masterReleaseAccessManager.initialize(_registry.NFT_LOCK_ADDRESS(), VersionLib.toVersionPart(0));
130
+ //masterReleaseAccessManager.disable();
131
+ _releaseAccessManagerCodeAddress = address(masterReleaseAccessManager);
132
+ }
79
133
 
80
- constructor(
81
- RegistryAccessManager accessManager,
82
- VersionPart initialVersion
83
- )
84
- AccessManaged(accessManager.authority())
134
+ /// @dev skips previous release if was not activated
135
+ /// sets release manager into state SCHEDULED
136
+ function createNextRelease()
137
+ external
138
+ restricted() // GIF_ADMIN_ROLE
139
+ returns(VersionPart)
85
140
  {
86
- require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
141
+ if (!isValidTransition(RELEASE(), _state, SCHEDULED())) {
142
+ revert ErrorReleaseManagerReleaseCreationDisallowed(_state);
143
+ }
87
144
 
88
- _accessManager = accessManager;
145
+ _next = VersionPartLib.toVersionPart(_next.toInt() + 1);
146
+ _awaitingRegistration = 0;
147
+ _state = SCHEDULED();
89
148
 
90
- _initial = initialVersion;
91
- _next = initialVersion;
92
- _registry = new Registry();
149
+ return _next;
93
150
  }
94
151
 
95
- function registerStaking(
96
- address stakingAddress,
97
- address stakingOwner
152
+ // TODO order of events
153
+ function prepareNextRelease(
154
+ address[] memory addresses,
155
+ string[] memory names,
156
+ RoleId[][] memory serviceRoles,
157
+ string[][] memory serviceRoleNames,
158
+ RoleId[][] memory functionRoles,
159
+ string[][] memory functionRoleNames,
160
+ bytes4[][][] memory selectors,
161
+ bytes32 salt
98
162
  )
99
163
  external
100
- restricted // GIF_ADMIN_ROLE
101
- returns(NftId nftId)
164
+ restricted() // GIF_MANAGER_ROLE
165
+ returns(
166
+ address releaseAccessManagerAddress,
167
+ VersionPart version,
168
+ bytes32 releaseSalt
169
+ )
102
170
  {
103
- // verify staking contract
104
- _getAndVerifyContractInfo(stakingAddress, STAKING(), stakingOwner);
105
- _staking = IStaking(stakingAddress);
171
+ version = getNextVersion();
172
+
173
+ // ensures unique salt
174
+ releaseSalt = keccak256(
175
+ bytes.concat(
176
+ bytes32(version.toInt()),
177
+ salt));
106
178
 
107
- nftId = _registry.registerStaking(
108
- stakingAddress,
109
- stakingOwner);
179
+ releaseAccessManagerAddress = Clones.cloneDeterministic(_releaseAccessManagerCodeAddress, releaseSalt);
180
+ AccessManagerExtendedWithDisableInitializeable releaseAccessManager = AccessManagerExtendedWithDisableInitializeable(releaseAccessManagerAddress);
181
+ releaseAccessManager.initialize(address(this), version);
110
182
 
111
- _staking.linkToRegisteredNftId();
183
+ if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
184
+ revert ErrorReleaseManagerReleasePreparationDisallowed(_state);
185
+ }
186
+
187
+ _verifyReleaseAuthorizations(addresses, serviceRoles, functionRoles, selectors);
188
+
189
+ if(_awaitingRegistration > 0) {
190
+ revert ErrorReleaseManagerReleaseAlreadyPrepared(version);
191
+ }
192
+ // TODO instead of copying just set ServiceAuthorizationsLib for release and array of domains???
193
+ _releaseInfo[version].version = version;
194
+ _releaseInfo[version].salt = releaseSalt;
195
+ _releaseInfo[version].addresses = addresses;
196
+ _releaseInfo[version].names = names;
197
+ _releaseInfo[version].serviceRoles = serviceRoles;
198
+ _releaseInfo[version].serviceRoleNames = serviceRoleNames;
199
+ _releaseInfo[version].functionRoles = functionRoles;
200
+ _releaseInfo[version].functionRoleNames = functionRoleNames;
201
+ _releaseInfo[version].selectors = selectors;
202
+ _awaitingRegistration = addresses.length;
203
+ _state = DEPLOYING();
204
+ _releaseAccessManager[version] = releaseAccessManager;
205
+
206
+ emit LogReleaseCreation(version, releaseSalt, releaseAccessManager);
112
207
  }
113
208
 
114
- /// @dev skips previous release if was not activated
115
- function createNextRelease()
209
+
210
+ function registerService(IService service)
116
211
  external
117
- restricted // GIF_ADMIN_ROLE
212
+ restricted // GIF_MANAGER_ROLE
213
+ returns(NftId nftId)
118
214
  {
119
- // allow to register new registry service for next version
120
- // TODO check/test: assignment to _next likely missing ...
121
- VersionPartLib.toVersionPart(_next.toInt() + 1);
215
+ if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
216
+ revert ErrorReleaseManagerServiceRegistrationDisallowed(_state);
217
+ }
122
218
 
123
- // disallow registration of regular services for next version while registry service is not registered
124
- _awaitingRegistration = 0;
219
+ (
220
+ IRegistry.ObjectInfo memory info,
221
+ ObjectType domain,
222
+ VersionPart version
223
+ ) = _verifyService(service);
224
+
225
+ // redundant with state var
226
+ if (_awaitingRegistration == 0) {
227
+ revert ErrorReleaseManagerNoServiceRegistrationExpected();
228
+ }
229
+
230
+ uint serviceIdx = _awaitingRegistration - 1;
231
+ address serviceAddress = _releaseInfo[version].addresses[serviceIdx];
232
+ // TODO temp, while typescript addresses computation is not implemented
233
+ /*if(address(service) != serviceAddress) {
234
+ revert ErrorReleaseManagerServiceAddressInvalid(service, serviceAddress);
235
+ }*/
236
+
237
+ _setServiceAuthorizations(
238
+ _releaseAccessManager[version],
239
+ // TODO temp, while typescript addresses computation is not implemented
240
+ address(service),//serviceAddress,
241
+ _releaseInfo[version].names[serviceIdx],
242
+ _releaseInfo[version].serviceRoles[serviceIdx],
243
+ _releaseInfo[version].serviceRoleNames[serviceIdx],
244
+ _releaseInfo[version].functionRoles[serviceIdx],
245
+ _releaseInfo[version].functionRoleNames[serviceIdx],
246
+ _releaseInfo[version].selectors[serviceIdx]);
247
+
248
+ // TODO decide for one of the approaches
249
+ // // service to service authorization
250
+ // ServiceAuthorizationsLib.ServiceAuthorization memory authz = ServiceAuthorizationsLib.getAuthorizations(domain);
251
+ // for(uint8 idx = 0; idx < authz.authorizedRole.length; idx++) {
252
+ // _accessManager.setTargetFunctionRole(
253
+ // address(service),
254
+ // authz.authorizedSelectors[idx],
255
+ // authz.authorizedRole[idx]);
256
+ // }
257
+
258
+ _awaitingRegistration = serviceIdx;
259
+ // TODO end state depends on (_awaitingRegistration == 0)
260
+ _state = DEPLOYING();
261
+
262
+ // checked in registry
263
+ _releaseInfo[version].domains.push(domain);
264
+
265
+ nftId = _registry.registerService(info, version, domain);
125
266
 
126
- emit LogReleaseCreation(_next);
267
+ service.linkToRegisteredNftId();
127
268
  }
128
269
 
270
+
129
271
  function activateNextRelease()
130
272
  external
131
273
  restricted // GIF_ADMIN_ROLE
132
274
  {
275
+ if (!isValidTransition(RELEASE(), _state, ACTIVE())) {
276
+ revert ErrorReleaseManagerReleaseActivationDisallowed(_state);
277
+ }
278
+
133
279
  VersionPart version = _next;
134
280
  address service = _registry.getServiceAddress(REGISTRY(), version);
135
281
 
136
- // release was created
282
+ // release exists, registry service is a MUST
283
+ //if(_releaseAccessManager[version] == address(0)) {
137
284
  if(service == address(0)) {
138
- revert ReleaseNotCreated();
285
+ revert ErrorReleaseManagerReleaseNotCreated(version);
139
286
  }
140
287
 
141
288
  // release fully deployed
142
289
  if(_awaitingRegistration > 0) {
143
- revert ReleaseRegistrationNotFinished();
290
+ revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _awaitingRegistration);
144
291
  }
145
292
 
146
- //setTargetClosed(service, false);
293
+ // release is not activated
294
+ if(_releaseInfo[version].activatedAt.gtz()) {
295
+ revert ErrorReleaseManagerReleaseAlreadyActivated(version);
296
+ }
147
297
 
148
298
  _latest = version;
299
+ _state = ACTIVE();
149
300
 
150
- _active[service] = true;
151
- _valid[version] = true;
301
+ _releaseVersionByAddress[service] = version;
302
+ _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
152
303
 
153
304
  emit LogReleaseActivation(version);
154
305
  }
155
306
 
156
- // TODO implement reliable way this function can only be called directly after createNextRelease()
157
- // IMPORTANT: MUST never be possible to create with access/release manager, token registry
158
- // callable once per release after release creation
159
- // can not register regular services
160
- function registerRegistryService(IRegistryService service)
307
+ // release becomes disabled after delay expiration (can be reenabled before that)
308
+ function disableRelease(VersionPart version, Seconds disableDelay)
161
309
  external
162
- restricted // GIF_MANAGER_ROLE
163
- returns(NftId nftId)
310
+ restricted // GIF_ADMIN_ROLE
164
311
  {
165
- if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
166
- revert NotRegistryService();
312
+ // release was activated
313
+ if(_releaseInfo[version].activatedAt.eqz()) {
314
+ revert ErrorReleaseManagerReleaseNotActivated(version);
167
315
  }
168
316
 
169
- // TODO unreliable! MUST guarantee the same authority -> how?
170
- address serviceAuthority = service.authority();
171
- if(serviceAuthority != authority()) {
172
- revert UnexpectedServiceAuthority(
173
- authority(),
174
- serviceAuthority);
317
+ // release not disabled already
318
+ if(_releaseInfo[version].disabledAt.gtz()) {
319
+ revert ErrorReleaseManagerReleaseAlreadyDisabled(version);
175
320
  }
176
321
 
177
- IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(address(service), SERVICE(), msg.sender);
322
+ disableDelay = SecondsLib.toSeconds(Math.max(disableDelay.toInt(), MIN_DISABLE_DELAY.toInt()));
178
323
 
179
- VersionPart majorVersion = _next;
180
- ObjectType domain = REGISTRY();
181
- _verifyService(service, majorVersion, domain);
182
- _createRelease(service.getFunctionConfigs());
183
-
184
- nftId = _registry.registerService(info, majorVersion, domain);
324
+ _releaseAccessManager[version].disable(disableDelay);
185
325
 
186
- // external call
187
- service.linkToRegisteredNftId();
326
+ _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp().addSeconds(disableDelay);
188
327
  }
189
-
190
- // TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
191
- // TODO removing service from release? -> set _active to false forever, but keep all other records?
192
- function registerService(IService service)
328
+
329
+ function enableRelease(VersionPart version)
193
330
  external
194
- restricted // GIF_MANAGER_ROLE
195
- returns(NftId nftId)
331
+ restricted // GIF_ADMIN_ROLE
196
332
  {
197
- if(!service.supportsInterface(type(IService).interfaceId)) {
198
- revert NotService();
199
- }
333
+ // release was disabled
334
+ //if(_releaseInfo[version].disabledAt.eqz()) {
335
+ // revert ErrorReleaseManagerReleaseAlreadyEnabled(version);
336
+ //}
200
337
 
201
- IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(address(service), SERVICE(), msg.sender);
202
- VersionPart majorVersion = getNextVersion();
203
- ObjectType domain = _release[majorVersion].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
204
- _verifyService(service, majorVersion, domain);
205
-
206
- // setup and grant unique role if service does registrations
207
- bytes4[] memory selectors = _selectors[majorVersion][domain];
208
- address registryService = _registry.getServiceAddress(REGISTRY(), majorVersion);
209
- if(selectors.length > 0) {
210
- _accessManager.setAndGrantUniqueRole(
211
- address(service),
212
- registryService,
213
- selectors);
214
- }
338
+ // reverts if disable delay expired
339
+ _releaseAccessManager[version].enable();
215
340
 
216
- _awaitingRegistration--;
217
-
218
- nftId = _registry.registerService(info, majorVersion, domain);
219
-
220
- // external call
221
- service.linkToRegisteredNftId();
341
+ _releaseInfo[version].disabledAt = zeroTimestamp();
222
342
  }
223
343
 
224
344
  //--- view functions ----------------------------------------------------//
225
345
 
226
- function isActiveRegistryService(address service) external view returns(bool)
227
- {
228
- return _active[service];
346
+ function predictDeterministicAddress(
347
+ address implementation,
348
+ bytes32 salt,
349
+ address deployer
350
+ ) external pure returns (address predicted) {
351
+ return Clones.predictDeterministicAddress(implementation, salt, deployer);
229
352
  }
230
353
 
231
- function isValidRelease(VersionPart version) external view returns(bool)
232
- {
233
- return _valid[version];
354
+ function isActiveRegistryService(address service) external view returns(bool) {
355
+ VersionPart version = _releaseVersionByAddress[service];
356
+ return isActiveRelease(version);
234
357
  }
235
358
 
236
- function getRegistryAddress() external view returns(address)
237
- {
238
- return address(_registry);
359
+ function isActiveRelease(VersionPart version) public view returns(bool) {
360
+ return _releaseInfo[version].activatedAt.gtz();
239
361
  }
240
362
 
241
- function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
242
- {
243
- return _release[version];
363
+ function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
364
+ return _releaseInfo[version];
244
365
  }
245
366
 
246
- function getNextVersion() public view returns(VersionPart)
247
- {
367
+ function getNextVersion() public view returns(VersionPart) {
248
368
  return _next;
249
369
  }
250
370
 
@@ -256,105 +376,225 @@ contract ReleaseManager is AccessManaged
256
376
  return _initial;
257
377
  }
258
378
 
259
- //--- private functions ----------------------------------------------------//
379
+ function getState() external view returns (StateId stateId) {
380
+ return _state;
381
+ }
260
382
 
261
- function _getAndVerifyContractInfo(
262
- address registerableAddress,
263
- ObjectType expectedType,
264
- address expectedOwner // assume always valid, can not be 0
383
+ function getRemainingServicesToRegister() external view returns (uint256 services) {
384
+ return _awaitingRegistration;
385
+ }
386
+
387
+ function getReleaseAccessManager(VersionPart version) external view returns(AccessManagerExtendedWithDisableInitializeable) {
388
+ return _releaseAccessManager[version];
389
+ }
390
+ // TODO tokenr registry knows nothing about adfmin, only registry
391
+ function getRegistryAdmin() external view returns (address) {
392
+ return address(_admin);
393
+ }
394
+
395
+ //--- IRegistryLinked ------------------------------------------------------//
396
+
397
+ function getRegistry() external view returns (IRegistry) {
398
+ return _registry;
399
+ }
400
+
401
+ //--- ILifecycle -----------------------------------------------------------//
402
+
403
+ function hasLifecycle(ObjectType objectType) external pure returns (bool) { return objectType == RELEASE(); }
404
+
405
+ function getInitialState(ObjectType objectType) public pure returns (StateId stateId) {
406
+ if (objectType == RELEASE()) {
407
+ stateId = INITIAL();
408
+ }
409
+ }
410
+
411
+ function isValidTransition(
412
+ ObjectType objectType,
413
+ StateId fromId,
414
+ StateId toId
265
415
  )
416
+ public
417
+ pure
418
+ returns (bool isValid)
419
+ {
420
+ if (objectType != RELEASE()) { return false; }
421
+
422
+ if (fromId == INITIAL() && toId == SCHEDULED()) { return true; }
423
+ if (fromId == SCHEDULED() && toId == DEPLOYING()) { return true; }
424
+ if (fromId == DEPLOYING() && toId == SCHEDULED()) { return true; }
425
+ if (fromId == DEPLOYING() && toId == DEPLOYING()) { return true; }
426
+ if (fromId == DEPLOYING() && toId == ACTIVE()) { return true; }
427
+ // TODO active -> scheduled missing, add tests to cover this and more scenarios (#358)
428
+
429
+ return false;
430
+ }
431
+
432
+ //--- private functions ----------------------------------------------------//
433
+
434
+ function _verifyService(IService service)
266
435
  internal
267
- // view
436
+ view
268
437
  returns(
269
- IRegistry.ObjectInfo memory info
438
+ IRegistry.ObjectInfo memory serviceInfo,
439
+ ObjectType serviceDomain,
440
+ VersionPart serviceVersion
270
441
  )
271
442
  {
272
- info = IRegisterable(registerableAddress).getInitialInfo();
443
+ if(!service.supportsInterface(type(IService).interfaceId)) {
444
+ revert ErrorReleaseManagerNotService(service);
445
+ }
273
446
 
274
- if(info.objectAddress != registerableAddress) {
275
- revert ErrorReleaseManagerUnexpectedRegisterableAddress(registerableAddress, info.objectAddress);
447
+ address owner = msg.sender;
448
+ address serviceAuthority = service.authority();
449
+ serviceVersion = service.getVersion().toMajorPart();
450
+ serviceDomain = service.getDomain();// checked in registry
451
+ serviceInfo = service.getInitialInfo();
452
+
453
+ _verifyServiceInfo(service, serviceInfo, owner);
454
+
455
+ VersionPart releaseVersion = getNextVersion(); // never 0
456
+ address releaseAuthority = address(_releaseAccessManager[releaseVersion]); // can be zero if registering service when release is not created
457
+
458
+ // IMPORTANT: can not guarantee service access is actually controlled by authority
459
+ if(serviceAuthority != releaseAuthority) {
460
+ revert ErrorReleaseManagerServiceReleaseAuthorityMismatch(
461
+ service,
462
+ serviceAuthority,
463
+ releaseAuthority);
276
464
  }
277
465
 
278
- if(info.isInterceptor) {
279
- revert ErrorReleaseManagerIsInterceptorTrue();
466
+ if(serviceVersion != releaseVersion) {
467
+ revert ErrorReleaseManagerServiceReleaseVersionMismatch(
468
+ service,
469
+ serviceVersion,
470
+ releaseVersion);
280
471
  }
472
+ }
473
+
281
474
 
282
- if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
283
- revert UnexpectedRegisterableType(expectedType, info.objectType);
475
+ function _verifyServiceInfo(
476
+ IService service,
477
+ IRegistry.ObjectInfo memory info,
478
+ address expectedOwner // assume always valid, can not be 0
479
+ )
480
+ internal
481
+ view
482
+ {
483
+ if(info.objectAddress != address(service)) {
484
+ revert ErrorReleaseManagerServiceInfoAddressInvalid(service, address(service));
485
+ }
486
+
487
+ if(info.isInterceptor != false) { // service is never interceptor
488
+ revert ErrorReleaseManagerServiceInfoInterceptorInvalid(service, info.isInterceptor);
489
+ }
490
+
491
+ if(info.objectType != SERVICE()) {// type is checked in registry anyway...but service logic may depend on expected value
492
+ revert ErrorReleaseManagerServiceInfoTypeInvalid(service, SERVICE(), info.objectType);
284
493
  }
285
494
 
286
495
  address owner = info.initialOwner;
287
496
 
288
497
  if(owner != expectedOwner) { // registerable owner protection
289
- revert NotRegisterableOwner(expectedOwner, owner);
498
+ revert ErrorReleaseManagerServiceInfoOwnerInvalid(service, expectedOwner, owner);
290
499
  }
291
500
 
292
- if(owner == address(registerableAddress)) {
293
- revert SelfRegistration();
501
+ if(owner == address(service)) {
502
+ revert ErrorReleaseManagerServiceSelfRegistration(service);
294
503
  }
295
504
 
296
505
  if(_registry.isRegistered(owner)) {
297
- revert RegisterableOwnerIsRegistered();
506
+ revert ErrorReleaseManagerServiceOwnerRegistered(service, owner);
298
507
  }
299
508
  }
300
509
 
301
- function _verifyService(
302
- IService service,
303
- VersionPart expectedVersion,
304
- ObjectType expectedDomain
510
+
511
+ function _verifyReleaseAuthorizations(
512
+ address[] memory serviceAddress,
513
+ RoleId[][] memory serviceRoles,
514
+ RoleId[][] memory functionRoles,
515
+ bytes4[][][] memory selectors
305
516
  )
306
517
  internal
307
- view
308
- returns(ObjectType)
518
+ pure
309
519
  {
310
- Version version = service.getVersion();
311
- VersionPart majorVersion = version.toMajorPart();
312
- if(majorVersion != expectedVersion) {
313
- revert UnexpectedServiceVersion(expectedVersion, majorVersion);
520
+ if(serviceAddress.length == 0) {
521
+ revert ErrorReleaseManagerReleaseEmpty();
314
522
  }
315
523
 
316
- if(service.getDomain() != expectedDomain) {
317
- revert UnexpectedServiceDomain(expectedDomain, service.getDomain());
524
+ for(uint serviceIdx = 0; serviceIdx < serviceAddress.length; serviceIdx++)
525
+ {
526
+ for(uint roleIdx = 0; roleIdx < serviceRoles[serviceIdx].length; roleIdx++)
527
+ {
528
+ RoleId role = serviceRoles[serviceIdx][roleIdx];
529
+ if(role == ADMIN_ROLE() || role == PUBLIC_ROLE()) {
530
+ revert ErrorReleaseManagerReleaseServiceRoleInvalid(serviceIdx, serviceAddress[serviceIdx], role);
531
+ }
532
+ }
318
533
  }
319
534
 
320
- return expectedDomain;
535
+ // TODO no duplicate service "domain" role per release
536
+ // TODO no duplicate service roles per service
537
+ // TODO no duplicate service function roles per service
538
+ // TODO no duplicate service function selectors per service
321
539
  }
322
540
 
323
- // TODO check if registry supports types specified in the config array
324
- function _createRelease(IRegistryService.FunctionConfig[] memory config)
541
+ function _setServiceAuthorizations(
542
+ AccessManagerExtendedWithDisableInitializeable accessManager, // release access manager
543
+ address serviceAddress,
544
+ string memory serviceName,
545
+ RoleId[] memory serviceRoles,
546
+ string[] memory serviceRoleNames,
547
+ RoleId[] memory functionRoles,
548
+ string[] memory functionRoleNames,
549
+ bytes4[][] memory selectors
550
+ )
325
551
  internal
326
552
  {
327
- VersionPart version = getNextVersion();
553
+ accessManager.createTarget(serviceAddress, serviceName);
554
+
555
+ for(uint idx = 0; idx < functionRoles.length; idx++)
556
+ {
557
+ uint64 roleInt = functionRoles[idx].toInt();
558
+
559
+ if(!accessManager.isRoleExists(roleInt)) {
560
+ accessManager.createRole(roleInt, functionRoleNames[idx]);
561
+ }
328
562
 
329
- if(config.length == 0) {
330
- revert ConfigMissing();
563
+ accessManager.setTargetFunctionRole(
564
+ serviceAddress,
565
+ selectors[idx],
566
+ functionRoles[idx].toInt());
331
567
  }
332
- // always in release
333
- _release[version].domains.push(REGISTRY());
334
- for(uint idx = 0; idx < config.length; idx++)
568
+
569
+ for(uint idx = 0; idx < serviceRoles.length; idx++)
335
570
  {
336
- ObjectType domain = config[idx].serviceDomain;
337
- // not "registry service" / zero domain
338
- if(
339
- domain == REGISTRY() ||
340
- domain.eqz()
341
- ) { revert ConfigServiceDomainInvalid(idx, domain); }
342
-
343
- bytes4[] memory selectors = config[idx].selectors;
344
-
345
- // TODO can be zero -> e.g. duplicate domain, first with zero selector, second with non zero selector -> need to check _release[version].domains.contains(domain) instead
346
- // no overwrite
347
- if(_selectors[version][domain].length > 0) {
348
- revert SelectorAlreadyExists(version, domain);
571
+ uint64 roleInt = serviceRoles[idx].toInt();
572
+
573
+ if(!accessManager.isRoleExists(roleInt)) {
574
+ accessManager.createRole(roleInt, serviceRoleNames[idx]);
349
575
  }
350
-
351
- _selectors[version][domain] = selectors;
352
- _release[version].domains.push(domain);
576
+
577
+ accessManager.grantRole(
578
+ serviceRoles[idx].toInt(),
579
+ serviceAddress,
580
+ 0);
581
+ }
582
+ }
583
+
584
+ // returns true iff a the address passes some simple proxy tests.
585
+ function _isRegistry(address registryAddress) internal view returns (bool) {
586
+
587
+ // zero address is certainly not registry
588
+ if (registryAddress == address(0)) {
589
+ return false;
590
+ }
591
+ // TODO try catch and return false in case of revert
592
+ // a just panic
593
+ // check if contract returns a zero nft id for its own address
594
+ if (IRegistry(registryAddress).getNftId(registryAddress).eqz()) {
595
+ return false;
353
596
  }
354
- // TODO set when activated?
355
- _release[version].createdAt = TimestampLib.blockTimestamp();
356
- //_release[version].updatedAt = TimestampLib.blockTimestamp();
357
597
 
358
- _awaitingRegistration = config.length;
598
+ return true;
359
599
  }
360
600
  }