@etherisc/gif-next 0.0.2-fd4931b-974 → 0.0.2-fd4ee14-428

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 (393) 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 +19 -13
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +115 -80
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +81 -54
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +11 -5
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  11. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +20 -1
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +32 -101
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +83 -71
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +121 -12
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +105 -85
  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 +126 -30
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +195 -64
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +206 -49
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +74 -31
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +248 -118
  32. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  33. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  34. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  36. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  37. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  38. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +2 -71
  40. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  41. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +8 -116
  42. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  43. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  45. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  47. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  48. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  49. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +10 -0
  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 +675 -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 +1034 -0
  58. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  59. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +730 -0
  60. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  61. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +91 -48
  62. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +69 -38
  64. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  65. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +20 -1
  66. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  67. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +11 -5
  68. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  69. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +35 -1
  70. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  71. package/artifacts/contracts/pool/Pool.sol/Pool.json +18 -12
  72. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  73. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +84 -42
  74. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +58 -35
  76. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  77. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +79 -36
  78. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  79. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +63 -32
  80. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  81. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +119 -68
  82. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  83. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +83 -48
  84. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  85. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +20 -1
  86. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  87. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +20 -1
  88. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +20 -1
  90. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  91. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +20 -1
  92. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  93. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +11 -5
  94. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  95. package/artifacts/contracts/product/IProductService.sol/IProductService.json +20 -1
  96. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  97. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +97 -46
  98. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +72 -37
  100. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  101. package/artifacts/contracts/product/PricingService.sol/PricingService.json +105 -62
  102. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  103. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +76 -45
  104. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  105. package/artifacts/contracts/product/Product.sol/Product.json +18 -12
  106. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  107. package/artifacts/contracts/product/ProductService.sol/ProductService.json +61 -26
  108. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +54 -27
  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 +82 -45
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +31 -1
  116. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  117. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.json +129 -0
  118. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  120. package/artifacts/contracts/registry/Registry.sol/Registry.json +254 -97
  121. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  122. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1901 -0
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  124. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +69 -15
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +46 -30
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  128. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +288 -182
  129. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  130. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +171 -0
  131. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  132. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +187 -0
  133. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  134. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +46 -177
  135. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  136. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.json +1559 -0
  137. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +4 -0
  138. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +1193 -0
  139. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +4 -0
  140. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +1747 -0
  141. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +4 -0
  142. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +1760 -0
  143. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +4 -0
  144. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +1838 -0
  145. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +4 -0
  146. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +1856 -0
  147. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  148. package/artifacts/contracts/shared/Component.sol/Component.json +18 -12
  149. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +120 -70
  151. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  152. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +80 -49
  153. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  154. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +20 -1
  155. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  156. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  157. package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  158. package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.json +1189 -0
  159. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +4 -0
  160. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +1562 -0
  161. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +4 -0
  162. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +1600 -0
  163. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  164. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +11 -5
  165. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  166. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +27 -1
  167. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  168. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +11 -5
  169. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  170. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +0 -10
  171. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  172. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  173. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +7 -1
  174. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  175. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  176. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +7 -1
  177. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  178. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  179. package/artifacts/contracts/shared/IService.sol/IService.json +20 -1
  180. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  181. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +4 -0
  182. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +39 -0
  183. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  184. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +18 -12
  185. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  186. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +10 -20
  187. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  188. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +6 -6
  189. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +1 -1
  190. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +27 -35
  191. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  192. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +13 -7
  193. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  194. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  195. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  196. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +35 -16
  197. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  198. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +15 -9
  199. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  200. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  201. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  202. package/artifacts/contracts/shared/Service.sol/Service.json +20 -1
  203. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  204. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  205. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  206. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  207. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  208. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  209. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +247 -579
  210. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  211. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +471 -62
  212. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  213. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +460 -0
  214. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  215. package/artifacts/contracts/staking/Staking.sol/Staking.json +303 -798
  216. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  217. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +81 -164
  218. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  219. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +368 -39
  220. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  221. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +503 -120
  222. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  223. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +67 -43
  224. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  225. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2261 -0
  226. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  227. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +281 -18
  228. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  229. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  230. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  231. package/artifacts/contracts/type/Amount.sol/AmountLib.json +68 -4
  232. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +40 -2
  234. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  236. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  238. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  240. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  241. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  242. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +28 -4
  244. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  245. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  246. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +96 -2
  248. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  250. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  252. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  253. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  254. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  256. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +114 -4
  258. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +52 -2
  260. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  261. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  262. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  263. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  264. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  266. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  267. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  268. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +17 -4
  270. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  272. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  274. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +2 -2
  276. package/contracts/distribution/Distribution.sol +2 -4
  277. package/contracts/distribution/DistributionService.sol +5 -6
  278. package/contracts/distribution/DistributionServiceManager.sol +0 -12
  279. package/contracts/distribution/IDistributionComponent.sol +1 -1
  280. package/contracts/distribution/IDistributionService.sol +1 -1
  281. package/contracts/instance/IInstance.sol +21 -11
  282. package/contracts/instance/IInstanceService.sol +26 -12
  283. package/contracts/instance/Instance.sol +84 -49
  284. package/contracts/instance/InstanceAdmin.sol +331 -0
  285. package/contracts/instance/InstanceAuthorizationsLib.sol +192 -151
  286. package/contracts/instance/InstanceReader.sol +32 -6
  287. package/contracts/instance/InstanceService.sol +119 -47
  288. package/contracts/instance/InstanceStore.sol +29 -20
  289. package/contracts/instance/base/BalanceStore.sol +11 -6
  290. package/contracts/instance/base/Cloneable.sol +2 -25
  291. package/contracts/instance/base/ObjectCounter.sol +21 -0
  292. package/contracts/instance/base/ObjectManager.sol +1 -3
  293. package/contracts/instance/module/IAccess.sol +2 -10
  294. package/contracts/oracle/IOracle.sol +20 -0
  295. package/contracts/oracle/IOracleComponent.sol +32 -0
  296. package/contracts/oracle/IOracleService.sol +65 -0
  297. package/contracts/oracle/Oracle.sol +145 -0
  298. package/contracts/oracle/OracleService.sol +278 -0
  299. package/contracts/oracle/OracleServiceManager.sol +42 -0
  300. package/contracts/pool/BundleService.sol +20 -20
  301. package/contracts/pool/IBundleService.sol +1 -1
  302. package/contracts/pool/IPoolService.sol +4 -1
  303. package/contracts/pool/PoolService.sol +38 -10
  304. package/contracts/product/ApplicationService.sol +6 -6
  305. package/contracts/product/ClaimService.sol +12 -7
  306. package/contracts/product/IApplicationService.sol +1 -1
  307. package/contracts/product/IClaimService.sol +7 -1
  308. package/contracts/product/IPolicyService.sol +1 -1
  309. package/contracts/product/IPricingService.sol +1 -1
  310. package/contracts/product/IProductService.sol +1 -1
  311. package/contracts/product/PolicyService.sol +9 -7
  312. package/contracts/product/PricingService.sol +8 -9
  313. package/contracts/product/Product.sol +1 -1
  314. package/contracts/product/ProductService.sol +6 -6
  315. package/contracts/registry/ChainNft.sol +1 -0
  316. package/contracts/registry/IRegistry.sol +20 -14
  317. package/contracts/registry/IRegistryService.sol +1 -0
  318. package/contracts/registry/IServiceAuthorization.sol +35 -0
  319. package/contracts/registry/Registry.sol +85 -66
  320. package/contracts/registry/RegistryAdmin.sol +333 -0
  321. package/contracts/registry/RegistryService.sol +8 -70
  322. package/contracts/registry/RegistryServiceManager.sol +1 -20
  323. package/contracts/registry/ReleaseManager.sol +218 -221
  324. package/contracts/registry/ServiceAuthorization.sol +86 -0
  325. package/contracts/registry/ServiceAuthorizationV3.sol +200 -0
  326. package/contracts/registry/TokenRegistry.sol +56 -60
  327. package/contracts/shared/AccessAdmin.sol +759 -0
  328. package/contracts/shared/AccessManagerCustom.sol +741 -0
  329. package/contracts/shared/AccessManagerExtended.sol +481 -0
  330. package/contracts/shared/AccessManagerExtendedInitializeable.sol +13 -0
  331. package/contracts/shared/AccessManagerExtendedWithDisable.sol +137 -0
  332. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +14 -0
  333. package/contracts/shared/Component.sol +8 -13
  334. package/contracts/shared/ComponentService.sol +39 -17
  335. package/contracts/shared/ComponentVerifyingService.sol +13 -7
  336. package/contracts/shared/ERC165.sol +1 -1
  337. package/contracts/shared/IAccessAdmin.sol +168 -0
  338. package/contracts/shared/IAccessManagerExtended.sol +74 -0
  339. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +18 -0
  340. package/contracts/shared/IComponent.sol +3 -7
  341. package/contracts/shared/IComponentService.sol +11 -0
  342. package/contracts/shared/IKeyValueStore.sol +1 -1
  343. package/contracts/shared/INftOwnable.sol +1 -1
  344. package/contracts/shared/IService.sol +8 -1
  345. package/contracts/shared/InitializableCustom.sol +177 -0
  346. package/contracts/shared/InstanceLinkedComponent.sol +1 -2
  347. package/contracts/shared/KeyValueStore.sol +1 -4
  348. package/contracts/shared/Lifecycle.sol +11 -2
  349. package/contracts/shared/NftIdSetManager.sol +2 -6
  350. package/contracts/shared/NftOwnable.sol +2 -13
  351. package/contracts/shared/PolicyHolder.sol +2 -1
  352. package/contracts/shared/ProxyManager.sol +6 -2
  353. package/contracts/shared/Service.sol +28 -22
  354. package/contracts/staking/IStaking.sol +93 -38
  355. package/contracts/staking/IStakingService.sol +71 -40
  356. package/contracts/staking/StakeManagerLib.sol +231 -0
  357. package/contracts/staking/Staking.sol +302 -137
  358. package/contracts/staking/StakingManager.sol +22 -20
  359. package/contracts/staking/StakingReader.sol +119 -24
  360. package/contracts/staking/StakingService.sol +193 -76
  361. package/contracts/staking/StakingServiceManager.sol +2 -2
  362. package/contracts/staking/StakingStore.sol +613 -0
  363. package/contracts/staking/TargetManagerLib.sol +76 -10
  364. package/contracts/type/AddressSet.sol +1 -1
  365. package/contracts/type/Amount.sol +15 -1
  366. package/contracts/type/Blocknumber.sol +14 -2
  367. package/contracts/type/Fee.sol +1 -1
  368. package/contracts/type/NftId.sol +9 -9
  369. package/contracts/type/NftIdSet.sol +1 -1
  370. package/contracts/type/ObjectType.sol +139 -67
  371. package/contracts/type/Referral.sol +1 -1
  372. package/contracts/type/RequestId.sol +75 -0
  373. package/contracts/type/RiskId.sol +1 -1
  374. package/contracts/type/RoleId.sol +79 -21
  375. package/contracts/type/Seconds.sol +18 -0
  376. package/contracts/type/Selector.sol +102 -0
  377. package/contracts/type/StateId.sol +12 -0
  378. package/contracts/type/String.sol +53 -0
  379. package/contracts/type/Timestamp.sol +6 -2
  380. package/contracts/type/Version.sol +1 -1
  381. package/package.json +3 -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/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  385. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -298
  386. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.dbg.json +0 -4
  387. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.json +0 -137
  388. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  389. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  390. package/contracts/instance/InstanceAccessManager.sol +0 -543
  391. package/contracts/registry/RegistryAccessManager.sol +0 -167
  392. package/contracts/registry/ServiceAuthorizationsLib.sol +0 -173
  393. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +0 -13
@@ -1,68 +1,82 @@
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";
4
5
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
6
  import {IAccessManager} from "@openzeppelin/contracts/access/manager/IAccessManager.sol";
7
+ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
6
8
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
9
+ import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
7
10
 
8
- import {AccessManagerUpgradeableInitializeable} from "../shared/AccessManagerUpgradeableInitializeable.sol";
11
+ import {NftId} from "../type/NftId.sol";
12
+ import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
13
+ import {ObjectType, ObjectTypeLib, POOL, 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";
18
+ import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
19
+
20
+ import {IService} from "../shared/IService.sol";
21
+ import {AccessManagerExtendedWithDisableInitializeable} from "../shared/AccessManagerExtendedWithDisableInitializeable.sol";
9
22
  import {ILifecycle} from "../shared/ILifecycle.sol";
23
+ import {INftOwnable} from "../shared/INftOwnable.sol";
10
24
  import {IRegisterable} from "../shared/IRegisterable.sol";
25
+
11
26
  import {IRegistry} from "./IRegistry.sol";
27
+ import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
12
28
  import {IRegistryService} from "./IRegistryService.sol";
13
- import {IService} from "../shared/IService.sol";
14
- import {IStaking} from "../staking/IStaking.sol";
15
- import {NftId} from "../type/NftId.sol";
16
- import {ObjectType, ObjectTypeLib, zeroObjectType, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
29
+ import {IServiceAuthorization} from "./IServiceAuthorization.sol";
30
+ import {IAccessAdmin} from "../shared/IAccessAdmin.sol";
31
+ import {RegistryAdmin} from "./RegistryAdmin.sol";
17
32
  import {Registry} from "./Registry.sol";
18
- import {RegistryAccessManager} from "./RegistryAccessManager.sol";
19
- import {RoleId, ADMIN_ROLE} from "../type/RoleId.sol";
20
- import {ServiceAuthorizationsLib} from "./ServiceAuthorizationsLib.sol";
21
- import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE} from "../type/StateId.sol";
22
- import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
23
33
  import {TokenRegistry} from "./TokenRegistry.sol";
24
- import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
25
34
 
26
- // gif admin is not technical, should sent simple txs
27
- // foundation creates
28
- // other guy deployes
29
- // other guy checks (can precompute addresses and compare with what deployed)
30
- // foundation activates
31
- // TODO add function to deactivate releases
32
- // TODO in next pr add getVersion() to releaseAccessManager only, set in initialize()
33
- // TODO in next pr make single base for registry access manager, release access manager and instance access manager
34
-
35
- contract ReleaseManager is
36
- AccessManaged,
37
- ILifecycle
35
+
36
+ contract ReleaseManager is
37
+ AccessManaged,
38
+ ILifecycle,
39
+ IRegistryLinked
38
40
  {
39
41
  using ObjectTypeLib for ObjectType;
40
42
 
41
- event LogReleaseCreation(VersionPart version, bytes32 salt, AccessManagerUpgradeableInitializeable accessManager);
43
+ uint256 public constant INITIAL_GIF_VERSION = 3;
44
+
45
+ event LogReleaseCreation(VersionPart version, bytes32 salt, address authority);
42
46
  event LogReleaseActivation(VersionPart version);
43
47
 
48
+ // constructor
49
+ error ErrorReleaseManagerNotRegistry(Registry registry);
50
+
44
51
  // createNextRelease
45
52
  error ErrorReleaseManagerReleaseCreationDisallowed(StateId currentStateId);
46
53
 
47
54
  // prepareRelease
48
55
  error ErrorReleaseManagerReleasePreparationDisallowed(StateId currentStateId);
49
- error ErrorReleaseManagerReleaseEmpty();
50
- error ErrorReleaseManagerReleaseAlreadyCreated(VersionPart version);
51
-
56
+ error ErrorReleaseManagerReleaseAlreadyPrepared(VersionPart version);
57
+ error ErrorReleaseManagerVersionMismatch(VersionPart expectedVersion, VersionPart providedVersion);
58
+ error ErrorReleaseManagerNoDomains(VersionPart version);
59
+
52
60
  // register staking
53
- error ErrorReleaseManagerStakingAlreadySet(address stakingAddress);
61
+ //error ErrorReleaseManagerStakingAlreadySet(address stakingAddress);
54
62
 
55
63
  // registerService
64
+ error ErrorReleaseManagerNoServiceRegistrationExpected();
56
65
  error ErrorReleaseManagerServiceRegistrationDisallowed(StateId currentStateId);
66
+ error ErrorReleaseManagerServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
57
67
  error ErrorReleaseManagerNotService(IService service);
58
68
  error ErrorReleaseManagerServiceAddressInvalid(IService given, address expected);
59
69
 
60
70
  // activateNextRelease
61
- error ErrorReleaseManagerActivationDisallowed(StateId currentStateId);
71
+ error ErrorReleaseManagerReleaseActivationDisallowed(StateId currentStateId);
62
72
  error ErrorReleaseManagerReleaseNotCreated(VersionPart releaseVersion);
63
73
  error ErrorReleaseManagerReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
64
74
  error ErrorReleaseManagerReleaseAlreadyActivated(VersionPart releaseVersion);
65
75
 
76
+ // disableRelease
77
+ error ErrorReleaseManagerReleaseNotActivated(VersionPart releaseVersion);
78
+ error ErrorReleaseManagerReleaseAlreadyDisabled(VersionPart releaseVersion);
79
+
66
80
  // _verifyService
67
81
  error ErrorReleaseManagerServiceReleaseAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
68
82
  error ErrorReleaseManagerServiceReleaseVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
@@ -75,137 +89,127 @@ contract ReleaseManager is
75
89
  error ErrorReleaseManagerServiceSelfRegistration(IService service);
76
90
  error ErrorReleaseManagerServiceOwnerRegistered(IService service, address owner);
77
91
 
78
- // _verifyServiceAuthorizations
79
- error ErrorReleaseManagerServiceRoleInvalid(address service, RoleId role);
92
+ Seconds public constant MIN_DISABLE_DELAY = Seconds.wrap(60 * 24 * 365); // 1 year
80
93
 
81
- RegistryAccessManager public immutable _accessManager;
94
+ RegistryAdmin public immutable _admin;
95
+ address public immutable _releaseAccessManagerCodeAddress;
82
96
  Registry public immutable _registry;
83
- TokenRegistry private immutable _tokenRegistry;
84
- IStaking private _staking;
97
+ IRegisterable private _staking;
98
+ address private _stakingOwner;
85
99
 
86
- mapping(VersionPart version => AccessManagerUpgradeableInitializeable accessManager) internal _releaseAccessManager;
100
+ // TODO remove once it's clear that release authority will always be registry authority
101
+ mapping(VersionPart version => address authority) internal _releaseAccessManager;
87
102
  mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
88
- mapping(address registryService => bool isActive) internal _active;// have access to registry
103
+ mapping(address registryService => VersionPart version) _releaseVersionByAddress;
104
+
105
+ mapping(VersionPart version => IServiceAuthorization authz) internal _serviceAuthorization;
89
106
 
90
107
  VersionPart immutable internal _initial;// first active version
91
108
  VersionPart internal _latest; // latest active version
92
109
  VersionPart internal _next; // version to create and activate
93
110
  StateId internal _state; // current state of release manager
94
111
 
95
- uint256 internal _awaitingRegistration; // "services left to register" counter
96
-
112
+ uint256 internal _registeredServices;
113
+ uint256 internal _servicesToRegister;
97
114
 
98
- constructor(
99
- RegistryAccessManager accessManager,
100
- VersionPart initialVersion,
101
- address dipTokenAddress
102
- )
103
- AccessManaged(accessManager.authority())
115
+ // deployer of this contract must be gif admin
116
+ constructor(Registry registry)
117
+ AccessManaged(msg.sender)
104
118
  {
105
- _accessManager = accessManager;
106
- _initial = initialVersion;
107
- _next = VersionPartLib.toVersionPart(initialVersion.toInt() - 1);
108
- _state = getInitialState(RELEASE());
119
+ // TODO move this part to RegistryLinked constructor
120
+ if(!_isRegistry(address(registry))) {
121
+ revert ErrorReleaseManagerNotRegistry(registry);
122
+ }
109
123
 
110
- _registry = new Registry();
111
- _tokenRegistry = new TokenRegistry(
112
- address(_registry),
113
- dipTokenAddress);
124
+ _registry = registry;
125
+ setAuthority(_registry.getAuthority());
126
+ _admin = RegistryAdmin(_registry.getRegistryAdminAddress());
114
127
 
115
- _registry.setTokenRegistry(address(_tokenRegistry));
128
+ _initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
129
+ _next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
130
+ _state = getInitialState(RELEASE());
131
+
132
+ AccessManagerExtendedWithDisableInitializeable masterReleaseAccessManager = new AccessManagerExtendedWithDisableInitializeable();
133
+ masterReleaseAccessManager.initialize(_registry.NFT_LOCK_ADDRESS(), VersionLib.toVersionPart(0));
134
+ //masterReleaseAccessManager.disable();
135
+ _releaseAccessManagerCodeAddress = address(masterReleaseAccessManager);
116
136
  }
117
137
 
118
-
119
138
  /// @dev skips previous release if was not activated
120
139
  /// sets release manager into state SCHEDULED
121
140
  function createNextRelease()
122
141
  external
123
- restricted // GIF_ADMIN_ROLE
124
- returns(VersionPart version)
142
+ restricted() // GIF_ADMIN_ROLE
143
+ returns(VersionPart)
125
144
  {
126
145
  if (!isValidTransition(RELEASE(), _state, SCHEDULED())) {
127
146
  revert ErrorReleaseManagerReleaseCreationDisallowed(_state);
128
147
  }
129
148
 
130
149
  _next = VersionPartLib.toVersionPart(_next.toInt() + 1);
131
- _awaitingRegistration = 0;
150
+ _servicesToRegister = 0;
151
+ _registeredServices = 0;
132
152
  _state = SCHEDULED();
133
- }
134
153
 
154
+ return _next;
155
+ }
135
156
 
136
157
  function prepareNextRelease(
137
- address[] memory addresses,
138
- RoleId[][] memory serviceRoles,
139
- RoleId[][] memory functionRoles,
140
- bytes4[][][] memory selectors,
158
+ IServiceAuthorization serviceAuthorization,
141
159
  bytes32 salt
142
160
  )
143
161
  external
144
162
  restricted() // GIF_MANAGER_ROLE
145
163
  returns(
146
- address releaseAccessManagerAddress,
164
+ address authority,
147
165
  VersionPart version,
148
166
  bytes32 releaseSalt
149
167
  )
150
168
  {
151
- if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
152
- revert ErrorReleaseManagerReleasePreparationDisallowed(_state);
153
- }
169
+ // TODO Any call to serviceAuthorization contract must be treated as a call to an external malicious contract
170
+ // How can wrong authorizations tamper the core, releases or instances?
171
+ (
172
+ VersionPart releaseVersion,
173
+ uint serviceDomainsCount
174
+ ) = serviceAuthorization.getRelease();
154
175
 
155
- if(addresses.length == 0) {
156
- revert ErrorReleaseManagerReleaseEmpty();
176
+ // verify authorizaion contract release matches with expected version
177
+ if (releaseVersion != _next) {
178
+ revert ErrorReleaseManagerVersionMismatch(_next, releaseVersion);
157
179
  }
158
180
 
159
- if(_awaitingRegistration > 0) {
160
- revert ErrorReleaseManagerReleaseAlreadyCreated(version);
181
+ // sanity check to ensure service domain list is not empty
182
+ if (serviceDomainsCount == 0) {
183
+ revert ErrorReleaseManagerNoDomains(_next);
161
184
  }
162
185
 
163
- _verifyReleaseAuthorizations(addresses, serviceRoles, functionRoles, selectors);
186
+ // verify release manager is in proper state to start deploying a next release
187
+ if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
188
+ revert ErrorReleaseManagerReleasePreparationDisallowed(_state);
189
+ }
164
190
 
165
- version = getNextVersion();
191
+ // verify prepareNextRelease is only called once per release
192
+ if(_servicesToRegister > 0) {
193
+ revert ErrorReleaseManagerReleaseAlreadyPrepared(version);
194
+ }
166
195
 
167
- _releaseInfo[version].version = version;
168
- _releaseInfo[version].addresses = addresses;
169
- _releaseInfo[version].serviceRoles = serviceRoles;
170
- _releaseInfo[version].functionRoles = functionRoles;
171
- _releaseInfo[version].selectors = selectors;
172
- _awaitingRegistration = addresses.length;
173
- _state = DEPLOYING();
196
+ // store release specific service authorization
197
+ _serviceAuthorization[_next] = serviceAuthorization;
174
198
 
175
- version = getNextVersion();
176
199
  // ensures unique salt
177
200
  releaseSalt = keccak256(
178
201
  bytes.concat(
179
202
  bytes32(version.toInt()),
180
203
  salt));
181
204
 
182
- releaseAccessManagerAddress = Clones.cloneDeterministic(_accessManager.authority(), releaseSalt);
183
- AccessManagerUpgradeableInitializeable releaseAccessManager = AccessManagerUpgradeableInitializeable(releaseAccessManagerAddress);
184
-
185
- _releaseAccessManager[version] = releaseAccessManager;
186
-
187
- releaseAccessManager.initialize(address(this));
188
-
189
- emit LogReleaseCreation(version, releaseSalt, releaseAccessManager);
190
- }
205
+ authority = _admin.authority();
191
206
 
207
+ _releaseAccessManager[_next] = authority;
208
+ _servicesToRegister = serviceDomainsCount;
192
209
 
193
- function registerStaking(
194
- address stakingAddress,
195
- address stakingOwner
196
- )
197
- external
198
- restricted // GIF_ADMIN_ROLE
199
- returns(NftId nftId)
200
- {
201
- // TODO add verify staking contract
202
- _staking = IStaking(stakingAddress);
203
-
204
- nftId = _registry.registerStaking(
205
- stakingAddress,
206
- stakingOwner);
210
+ _state = DEPLOYING();
207
211
 
208
- _staking.linkToRegisteredNftId();
212
+ emit LogReleaseCreation(version, releaseSalt, authority);
209
213
  }
210
214
 
211
215
 
@@ -214,52 +218,52 @@ contract ReleaseManager is
214
218
  restricted // GIF_MANAGER_ROLE
215
219
  returns(NftId nftId)
216
220
  {
221
+ // TODO is it usefull to check transition from A to A?
217
222
  if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
218
223
  revert ErrorReleaseManagerServiceRegistrationDisallowed(_state);
219
224
  }
220
225
 
226
+ if (_servicesToRegister == _registeredServices) {
227
+ revert ErrorReleaseManagerNoServiceRegistrationExpected();
228
+ }
229
+
221
230
  (
222
231
  IRegistry.ObjectInfo memory info,
223
232
  ObjectType domain,
224
233
  VersionPart version
225
234
  ) = _verifyService(service);
226
235
 
227
- require(_awaitingRegistration > 0, "_awaitingRegistration == 0");
228
-
229
- uint serviceIdx = _awaitingRegistration - 1;
230
- address serviceAddress = _releaseInfo[version].addresses[serviceIdx];
231
- // TODO temp, while typescript addresses computation is not implemented
232
- /*if(address(service) != serviceAddress) {
233
- revert ErrorReleaseManagerServiceAddressInvalid(service, serviceAddress);
234
- }*/
235
-
236
- _setServiceAuthorizations(
237
- _releaseAccessManager[version],
238
- // TODO temp, while typescript addresses computation is not implemented
239
- address(service),//serviceAddress,
240
- _releaseInfo[version].serviceRoles[serviceIdx],
241
- _releaseInfo[version].functionRoles[serviceIdx],
242
- _releaseInfo[version].selectors[serviceIdx]);
243
-
244
- // TODO decide for one of the approaches
245
- // // service to service authorization
246
- // ServiceAuthorizationsLib.ServiceAuthorization memory authz = ServiceAuthorizationsLib.getAuthorizations(domain);
247
- // for(uint8 idx = 0; idx < authz.authorizedRole.length; idx++) {
248
- // _accessManager.setTargetFunctionRole(
249
- // address(service),
250
- // authz.authorizedSelectors[idx],
251
- // authz.authorizedRole[idx]);
252
- // }
253
-
254
- _awaitingRegistration = serviceIdx;
255
- _state = DEPLOYING();
236
+ ObjectType expectedDomain = _serviceAuthorization[version].getServiceDomains()[_registeredServices];
237
+ if (service.getDomain() != expectedDomain) {
238
+ revert ErrorReleaseManagerServiceDomainMismatch(expectedDomain, service.getDomain());
239
+ }
256
240
 
257
241
  // checked in registry
258
242
  _releaseInfo[version].domains.push(domain);
259
243
 
244
+ // register service with registry
260
245
  nftId = _registry.registerService(info, version, domain);
246
+ _registeredServices++;
261
247
 
262
248
  service.linkToRegisteredNftId();
249
+
250
+ // setup service authorization
251
+ _admin.authorizeService(
252
+ _serviceAuthorization[version],
253
+ service);
254
+
255
+ // TODO consider to extend this to REGISTRY
256
+ // special roles for registry/staking/pool service
257
+ if (domain == STAKING() || domain == POOL()) {
258
+ // TODO rename to grantServiceDomainRole()
259
+ _admin.grantServiceRoleForAllVersions(service, domain);
260
+ }
261
+
262
+ if (_registeredServices < _servicesToRegister) {
263
+ _state = DEPLOYING();
264
+ } else {
265
+ // TODO end state depends on (_awaitingRegistration == 0)
266
+ }
263
267
  }
264
268
 
265
269
 
@@ -268,23 +272,21 @@ contract ReleaseManager is
268
272
  restricted // GIF_ADMIN_ROLE
269
273
  {
270
274
  if (!isValidTransition(RELEASE(), _state, ACTIVE())) {
271
- revert ErrorReleaseManagerActivationDisallowed(_state);
275
+ revert ErrorReleaseManagerReleaseActivationDisallowed(_state);
272
276
  }
273
277
 
278
+ // release fully deployed
274
279
  VersionPart version = _next;
275
- address service = _registry.getServiceAddress(REGISTRY(), version);
280
+ if(_registeredServices < _servicesToRegister) {
281
+ revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _servicesToRegister - _registeredServices);
282
+ }
276
283
 
277
- // release exists, registry service is a MUST
278
- //if(_releaseAccessManager[version] == address(0)) {
284
+ // release exists, registry service MUST exist
285
+ address service = _registry.getServiceAddress(REGISTRY(), version);
279
286
  if(service == address(0)) {
280
287
  revert ErrorReleaseManagerReleaseNotCreated(version);
281
288
  }
282
289
 
283
- // release fully deployed
284
- if(_awaitingRegistration > 0) {
285
- revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _awaitingRegistration);
286
- }
287
-
288
290
  // release is not activated
289
291
  if(_releaseInfo[version].activatedAt.gtz()) {
290
292
  revert ErrorReleaseManagerReleaseAlreadyActivated(version);
@@ -293,12 +295,51 @@ contract ReleaseManager is
293
295
  _latest = version;
294
296
  _state = ACTIVE();
295
297
 
296
- _active[service] = true;
298
+ _releaseVersionByAddress[service] = version;
297
299
  _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
298
300
 
299
301
  emit LogReleaseActivation(version);
300
302
  }
301
303
 
304
+ // release becomes disabled after delay expiration (can be reenabled before that)
305
+ function disableRelease(VersionPart version, Seconds disableDelay)
306
+ external
307
+ restricted // GIF_ADMIN_ROLE
308
+ {
309
+ // release was activated
310
+ if(_releaseInfo[version].activatedAt.eqz()) {
311
+ revert ErrorReleaseManagerReleaseNotActivated(version);
312
+ }
313
+
314
+ // release not disabled already
315
+ if(_releaseInfo[version].disabledAt.gtz()) {
316
+ revert ErrorReleaseManagerReleaseAlreadyDisabled(version);
317
+ }
318
+
319
+ disableDelay = SecondsLib.toSeconds(Math.max(disableDelay.toInt(), MIN_DISABLE_DELAY.toInt()));
320
+
321
+ // TODO come up with a substitute
322
+ // _releaseAccessManager[version].disable(disableDelay);
323
+
324
+ _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp().addSeconds(disableDelay);
325
+ }
326
+
327
+ function enableRelease(VersionPart version)
328
+ external
329
+ restricted // GIF_ADMIN_ROLE
330
+ {
331
+ // release was disabled
332
+ //if(_releaseInfo[version].disabledAt.eqz()) {
333
+ // revert ErrorReleaseManagerReleaseAlreadyEnabled(version);
334
+ //}
335
+
336
+ // reverts if disable delay expired
337
+ // TODO come up with a substitute
338
+ // _releaseAccessManager[version].enable();
339
+
340
+ _releaseInfo[version].disabledAt = zeroTimestamp();
341
+ }
342
+
302
343
  //--- view functions ----------------------------------------------------//
303
344
 
304
345
  function predictDeterministicAddress(
@@ -310,17 +351,14 @@ contract ReleaseManager is
310
351
  }
311
352
 
312
353
  function isActiveRegistryService(address service) external view returns(bool) {
313
- return _active[service];
354
+ VersionPart version = _releaseVersionByAddress[service];
355
+ return isActiveRelease(version);
314
356
  }
315
357
 
316
- function isValidRelease(VersionPart version) external view returns(bool) {
358
+ function isActiveRelease(VersionPart version) public view returns(bool) {
317
359
  return _releaseInfo[version].activatedAt.gtz();
318
360
  }
319
361
 
320
- function getRegistryAddress() external view returns(address) {
321
- return (address(_registry));
322
- }
323
-
324
362
  function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
325
363
  return _releaseInfo[version];
326
364
  }
@@ -342,18 +380,30 @@ contract ReleaseManager is
342
380
  }
343
381
 
344
382
  function getRemainingServicesToRegister() external view returns (uint256 services) {
345
- return _awaitingRegistration;
383
+ return _servicesToRegister - _registeredServices;
384
+ }
385
+
386
+ // TODO cleanup
387
+ function getReleaseAccessManager(VersionPart version) external view returns(AccessManagerExtendedWithDisableInitializeable) {
388
+ // return _releaseAccessManager[version];
346
389
  }
347
390
 
348
- function getReleaseAccessManager(VersionPart version) external view returns(AccessManagerUpgradeableInitializeable) {
349
- return _releaseAccessManager[version];
391
+ // TODO token registry knows nothing about adfmin, only registry
392
+ function getRegistryAdmin() external view returns (address) {
393
+ return address(_admin);
394
+ }
395
+
396
+ //--- IRegistryLinked ------------------------------------------------------//
397
+
398
+ function getRegistry() external view returns (IRegistry) {
399
+ return _registry;
350
400
  }
351
401
 
352
402
  //--- ILifecycle -----------------------------------------------------------//
353
403
 
354
- function hasLifecycle(ObjectType objectType) external view returns (bool) { return objectType == RELEASE(); }
404
+ function hasLifecycle(ObjectType objectType) external pure returns (bool) { return objectType == RELEASE(); }
355
405
 
356
- function getInitialState(ObjectType objectType) public view returns (StateId stateId) {
406
+ function getInitialState(ObjectType objectType) public pure returns (StateId stateId) {
357
407
  if (objectType == RELEASE()) {
358
408
  stateId = INITIAL();
359
409
  }
@@ -365,7 +415,7 @@ contract ReleaseManager is
365
415
  StateId toId
366
416
  )
367
417
  public
368
- view
418
+ pure
369
419
  returns (bool isValid)
370
420
  {
371
421
  if (objectType != RELEASE()) { return false; }
@@ -375,6 +425,7 @@ contract ReleaseManager is
375
425
  if (fromId == DEPLOYING() && toId == SCHEDULED()) { return true; }
376
426
  if (fromId == DEPLOYING() && toId == DEPLOYING()) { return true; }
377
427
  if (fromId == DEPLOYING() && toId == ACTIVE()) { return true; }
428
+ // TODO active -> scheduled missing, add tests to cover this and more scenarios (#358)
378
429
 
379
430
  return false;
380
431
  }
@@ -383,6 +434,7 @@ contract ReleaseManager is
383
434
 
384
435
  function _verifyService(IService service)
385
436
  internal
437
+ view
386
438
  returns(
387
439
  IRegistry.ObjectInfo memory serviceInfo,
388
440
  ObjectType serviceDomain,
@@ -456,75 +508,20 @@ contract ReleaseManager is
456
508
  }
457
509
  }
458
510
 
511
+ /// @dev returns true iff a the address passes some simple proxy tests.
512
+ function _isRegistry(address registryAddress) internal view returns (bool) {
459
513
 
460
- function _verifyReleaseAuthorizations(
461
- address[] memory serviceAddress,
462
- RoleId[][] memory serviceRoles,
463
- RoleId[][] memory functionRoles,
464
- bytes4[][][] memory selectors
465
- )
466
- internal
467
- view
468
- {
469
- for(uint serviceIdx = 0; serviceIdx < serviceAddress.length; serviceIdx++)
470
- {
471
- for(uint roleIdx = 0; roleIdx < serviceRoles[serviceIdx].length; roleIdx++)
472
- {
473
- RoleId role = serviceRoles[serviceIdx][roleIdx];
474
- if(role == ADMIN_ROLE()) {
475
- revert ErrorReleaseManagerServiceRoleInvalid(serviceAddress[serviceIdx], role);
476
- }
477
- }
514
+ // zero address is certainly not registry
515
+ if (registryAddress == address(0)) {
516
+ return false;
478
517
  }
479
-
480
- // TODO no duplicate service "domain" role per release
481
- // TODO no duplicate service roles per service
482
- // TODO no duplicate service function roles per service
483
- // TODO no duplicate service function selectors per service
484
- }
485
-
486
- function _setServiceAuthorizations(
487
- IAccessManager accessManager,
488
- address serviceAddress,
489
- RoleId[] memory serviceRoles,
490
- RoleId[] memory functionRoles,
491
- bytes4[][] memory selectors
492
- )
493
- internal
494
- {
495
- for(uint idx = 0; idx < functionRoles.length; idx++)
496
- {
497
- accessManager.setTargetFunctionRole(
498
- serviceAddress,
499
- selectors[idx],
500
- functionRoles[idx].toInt());
501
-
502
- // TODO check/figure out which approach to take
503
- // ObjectType domain = config[idx].serviceDomain;
504
- // // not "registry service" / zero domain
505
- // if(
506
- // domain == REGISTRY() ||
507
- // domain.eqz()
508
- // ) { revert ConfigServiceDomainInvalid(idx, domain); }
509
-
510
- // bytes4[] memory selectors = config[idx].authorizedSelectors;
511
-
512
- // // 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
513
- // // no overwrite
514
- // if(_selectors[version][domain].length > 0) {
515
- // revert SelectorAlreadyExists(version, domain);
516
- // }
517
-
518
- // _selectors[version][domain] = selectors;
519
- // _release[version].domains.push(domain);
518
+ // TODO try catch and return false in case of revert
519
+ // a just panic
520
+ // check if contract returns a zero nft id for its own address
521
+ if (IRegistry(registryAddress).getNftId(registryAddress).eqz()) {
522
+ return false;
520
523
  }
521
524
 
522
- for(uint idx = 0; idx < serviceRoles.length; idx++)
523
- {
524
- accessManager.grantRole(
525
- serviceRoles[idx].toInt(),
526
- serviceAddress,
527
- 0);
528
- }
525
+ return true;
529
526
  }
530
527
  }