@etherisc/gif-next 0.0.2-c00cf5d-513 → 0.0.2-c0457ac-280

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 (396) hide show
  1. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +198 -177
  3. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +130 -335
  5. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +67 -96
  7. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +83 -108
  9. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +35 -48
  11. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +32 -101
  13. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +65 -66
  15. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +163 -10
  17. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  18. package/artifacts/contracts/instance/Instance.sol/Instance.json +81 -93
  19. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  20. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +56 -40
  21. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +1 -1
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +84 -44
  23. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +458 -331
  25. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +268 -46
  27. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +74 -43
  29. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1095 -344
  31. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  32. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  33. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  34. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  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 -71
  39. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  40. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  41. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  42. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  43. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  45. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  46. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  47. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  48. package/artifacts/contracts/{instance/module/ISetup.sol/ISetup.json → oracle/IOracle.sol/IOracle.json} +2 -2
  49. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  50. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +759 -0
  51. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  52. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +675 -0
  53. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  54. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +1146 -0
  55. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  56. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +1034 -0
  57. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  58. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +730 -0
  59. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  60. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +91 -264
  61. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  62. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +56 -69
  63. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  64. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +19 -51
  65. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  66. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +145 -86
  67. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  68. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +134 -133
  69. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  70. package/artifacts/contracts/pool/Pool.sol/Pool.json +242 -103
  71. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  72. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +180 -376
  73. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  74. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +42 -83
  75. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  76. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +93 -167
  77. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  78. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +56 -45
  79. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  80. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +121 -211
  81. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  82. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +64 -61
  83. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  84. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +20 -1
  85. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  86. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +20 -1
  87. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  88. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +94 -25
  89. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  90. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +40 -1
  91. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  92. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +241 -107
  93. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  94. package/artifacts/contracts/product/IProductService.sol/IProductService.json +13 -55
  95. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  96. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +180 -297
  97. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  98. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +54 -99
  99. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  100. package/artifacts/contracts/product/PricingService.sol/PricingService.json +163 -174
  101. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  102. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +81 -54
  103. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  104. package/artifacts/contracts/product/Product.sol/Product.json +337 -157
  105. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  106. package/artifacts/contracts/product/ProductService.sol/ProductService.json +47 -230
  107. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  108. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +34 -47
  109. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  111. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +65 -0
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +153 -1
  115. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  116. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.json +129 -0
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +294 -15
  120. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1712 -103
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +198 -28
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +45 -42
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +321 -161
  128. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  129. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +171 -0
  130. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  131. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +187 -0
  132. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  133. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +314 -136
  134. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  135. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.json +1559 -0
  136. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +1 -1
  137. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +1 -1
  138. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +42 -10
  139. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +42 -10
  141. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +52 -20
  143. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +52 -20
  145. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Component.sol/Component.json +100 -96
  147. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  148. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +916 -55
  149. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  150. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +796 -0
  151. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  152. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +539 -0
  153. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  154. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  155. package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  156. package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.json +1189 -0
  157. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +1 -1
  158. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +1 -1
  159. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  160. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +76 -81
  161. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  162. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +880 -0
  163. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  164. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +705 -0
  165. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  166. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +1 -11
  167. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  168. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +1 -1
  169. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  170. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +7 -1
  171. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  172. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +21 -3
  173. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  174. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +7 -1
  175. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  176. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  177. package/artifacts/contracts/shared/IService.sol/IService.json +20 -1
  178. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  179. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +4 -0
  180. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +39 -0
  181. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  182. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +1036 -0
  183. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  184. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +571 -0
  185. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  186. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +194 -0
  187. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +4 -0
  188. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +306 -0
  189. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  190. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +33 -20
  191. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  192. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +31 -13
  193. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  194. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +19 -32
  195. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  196. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +17 -22
  197. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  198. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  199. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  200. package/artifacts/contracts/shared/Service.sol/Service.json +16 -16
  201. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  202. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +40 -4
  203. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  204. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  205. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  206. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  207. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1438 -0
  208. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  209. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +566 -54
  210. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  211. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +460 -0
  212. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  213. package/artifacts/contracts/staking/Staking.sol/Staking.json +2005 -0
  214. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  215. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +761 -0
  216. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  217. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +592 -0
  218. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  219. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +657 -100
  220. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  221. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +65 -46
  222. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  223. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2261 -0
  224. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  225. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +571 -0
  226. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  227. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  228. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/Amount.sol/AmountLib.json +68 -4
  230. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  231. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +53 -2
  232. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  234. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  236. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/Fee.sol/FeeLib.json +34 -34
  238. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  239. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  240. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +47 -4
  242. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  243. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  244. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  245. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +96 -2
  246. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  248. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  250. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  251. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  252. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  254. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +114 -4
  256. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +76 -2
  258. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  259. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  260. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  261. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  262. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  264. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  265. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  266. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +17 -4
  268. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  272. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +2 -2
  274. package/contracts/distribution/Distribution.sol +29 -53
  275. package/contracts/distribution/DistributionService.sol +61 -115
  276. package/contracts/distribution/IDistributionComponent.sol +5 -10
  277. package/contracts/distribution/IDistributionService.sol +2 -8
  278. package/contracts/instance/IInstance.sol +15 -7
  279. package/contracts/instance/IInstanceService.sol +35 -10
  280. package/contracts/instance/Instance.sol +63 -34
  281. package/contracts/instance/InstanceAdmin.sol +3 -2
  282. package/contracts/instance/InstanceAuthorizationsLib.sol +84 -27
  283. package/contracts/instance/InstanceReader.sol +64 -40
  284. package/contracts/instance/InstanceService.sol +185 -45
  285. package/contracts/instance/InstanceStore.sol +122 -64
  286. package/contracts/instance/base/BalanceStore.sol +123 -0
  287. package/contracts/instance/base/Cloneable.sol +2 -25
  288. package/contracts/instance/base/ObjectCounter.sol +21 -0
  289. package/contracts/instance/base/ObjectManager.sol +1 -3
  290. package/contracts/instance/module/IBundle.sol +1 -4
  291. package/contracts/instance/module/IComponents.sol +15 -4
  292. package/contracts/instance/module/IPolicy.sol +8 -2
  293. package/contracts/mock/Dip.sol +26 -0
  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 +79 -167
  301. package/contracts/pool/IBundleService.sol +4 -16
  302. package/contracts/pool/IPoolComponent.sol +4 -6
  303. package/contracts/pool/IPoolService.sol +45 -9
  304. package/contracts/pool/Pool.sol +39 -42
  305. package/contracts/pool/PoolService.sol +190 -142
  306. package/contracts/product/ApplicationService.sol +109 -42
  307. package/contracts/product/ClaimService.sol +18 -19
  308. package/contracts/product/IApplicationService.sol +1 -1
  309. package/contracts/product/IClaimService.sol +7 -1
  310. package/contracts/product/IPolicyService.sol +6 -8
  311. package/contracts/product/IPricingService.sol +3 -1
  312. package/contracts/product/IProductComponent.sol +7 -6
  313. package/contracts/product/IProductService.sol +1 -8
  314. package/contracts/product/PolicyService.sol +225 -128
  315. package/contracts/product/PricingService.sol +72 -48
  316. package/contracts/product/Product.sol +47 -49
  317. package/contracts/product/ProductService.sol +26 -114
  318. package/contracts/registry/ChainNft.sol +8 -1
  319. package/contracts/registry/IRegistry.sol +15 -4
  320. package/contracts/registry/IRegistryService.sol +10 -0
  321. package/contracts/registry/IServiceAuthorization.sol +35 -0
  322. package/contracts/registry/Registry.sol +164 -47
  323. package/contracts/registry/RegistryAdmin.sol +264 -72
  324. package/contracts/registry/RegistryService.sol +48 -14
  325. package/contracts/registry/RegistryServiceManager.sol +2 -9
  326. package/contracts/registry/ReleaseManager.sol +242 -177
  327. package/contracts/registry/ServiceAuthorization.sol +86 -0
  328. package/contracts/registry/ServiceAuthorizationV3.sol +200 -0
  329. package/contracts/registry/TokenRegistry.sol +261 -64
  330. package/contracts/shared/AccessAdmin.sol +759 -0
  331. package/contracts/shared/AccessManagerCustom.sol +6 -1
  332. package/contracts/shared/AccessManagerExtended.sol +19 -7
  333. package/contracts/shared/Component.sol +139 -129
  334. package/contracts/shared/ComponentService.sol +563 -88
  335. package/contracts/shared/ComponentServiceManager.sol +35 -0
  336. package/contracts/shared/ComponentVerifyingService.sol +117 -0
  337. package/contracts/shared/ERC165.sol +1 -1
  338. package/contracts/shared/IAccessAdmin.sol +168 -0
  339. package/contracts/shared/IComponent.sol +17 -37
  340. package/contracts/shared/IComponentService.sol +102 -0
  341. package/contracts/shared/IInstanceLinkedComponent.sol +46 -0
  342. package/contracts/{instance/base → shared}/IKeyValueStore.sol +6 -6
  343. package/contracts/{instance/base → shared}/ILifecycle.sol +3 -3
  344. package/contracts/shared/INftOwnable.sol +1 -1
  345. package/contracts/shared/IPolicyHolder.sol +6 -1
  346. package/contracts/shared/IService.sol +8 -1
  347. package/contracts/shared/InitializableCustom.sol +177 -0
  348. package/contracts/shared/InstanceLinkedComponent.sol +144 -0
  349. package/contracts/{instance/base → shared}/KeyValueStore.sol +30 -72
  350. package/contracts/{instance/base → shared}/Lifecycle.sol +12 -3
  351. package/contracts/shared/NftIdSetManager.sol +65 -0
  352. package/contracts/shared/NftOwnable.sol +3 -13
  353. package/contracts/shared/PolicyHolder.sol +21 -13
  354. package/contracts/shared/ProxyManager.sol +2 -3
  355. package/contracts/shared/Registerable.sol +2 -2
  356. package/contracts/shared/Service.sol +32 -21
  357. package/contracts/shared/TokenHandler.sol +24 -1
  358. package/contracts/staking/IStaking.sol +168 -0
  359. package/contracts/staking/IStakingService.sol +98 -47
  360. package/contracts/staking/StakeManagerLib.sol +231 -0
  361. package/contracts/staking/Staking.sol +513 -0
  362. package/contracts/staking/StakingManager.sol +54 -0
  363. package/contracts/staking/StakingReader.sol +187 -0
  364. package/contracts/staking/StakingService.sol +286 -44
  365. package/contracts/staking/StakingServiceManager.sol +7 -3
  366. package/contracts/staking/StakingStore.sol +613 -0
  367. package/contracts/staking/TargetManagerLib.sol +207 -0
  368. package/contracts/type/AddressSet.sol +1 -1
  369. package/contracts/type/Amount.sol +20 -1
  370. package/contracts/type/Blocknumber.sol +20 -3
  371. package/contracts/type/Fee.sol +17 -16
  372. package/contracts/type/NftId.sol +14 -16
  373. package/contracts/type/NftIdSet.sol +1 -1
  374. package/contracts/type/ObjectType.sol +142 -63
  375. package/contracts/type/Referral.sol +1 -1
  376. package/contracts/type/RequestId.sol +75 -0
  377. package/contracts/type/RiskId.sol +1 -1
  378. package/contracts/type/RoleId.sol +82 -20
  379. package/contracts/type/Seconds.sol +27 -0
  380. package/contracts/type/Selector.sol +102 -0
  381. package/contracts/type/StateId.sol +27 -2
  382. package/contracts/type/String.sol +53 -0
  383. package/contracts/type/Timestamp.sol +6 -2
  384. package/contracts/type/Version.sol +1 -1
  385. package/package.json +3 -3
  386. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  387. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  388. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  389. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -581
  390. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  391. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -194
  392. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  393. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  394. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
  395. package/contracts/instance/module/ISetup.sol +0 -33
  396. package/contracts/instance/module/ITreasury.sol +0 -23
@@ -1,47 +1,74 @@
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";
6
+ import {IAccessManager} from "@openzeppelin/contracts/access/manager/IAccessManager.sol";
7
+ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
5
8
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
6
9
  import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
7
10
 
8
11
  import {NftId} from "../type/NftId.sol";
9
12
  import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
10
- import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../type/ObjectType.sol";
13
+ import {ObjectType, ObjectTypeLib, POOL, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
11
14
  import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
12
15
  import {Timestamp, TimestampLib, zeroTimestamp, ltTimestamp} from "../type/Timestamp.sol";
13
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";
14
19
 
15
20
  import {IService} from "../shared/IService.sol";
16
21
  import {AccessManagerExtendedWithDisableInitializeable} from "../shared/AccessManagerExtendedWithDisableInitializeable.sol";
22
+ import {ILifecycle} from "../shared/ILifecycle.sol";
23
+ import {INftOwnable} from "../shared/INftOwnable.sol";
24
+ import {IRegisterable} from "../shared/IRegisterable.sol";
17
25
 
18
26
  import {IRegistry} from "./IRegistry.sol";
19
- import {Registry} from "./Registry.sol";
27
+ import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
20
28
  import {IRegistryService} from "./IRegistryService.sol";
29
+ import {IServiceAuthorization} from "./IServiceAuthorization.sol";
30
+ import {IAccessAdmin} from "../shared/IAccessAdmin.sol";
21
31
  import {RegistryAdmin} from "./RegistryAdmin.sol";
32
+ import {Registry} from "./Registry.sol";
33
+ import {TokenRegistry} from "./TokenRegistry.sol";
22
34
 
23
35
 
24
- contract ReleaseManager is AccessManaged
36
+ contract ReleaseManager is
37
+ AccessManaged,
38
+ ILifecycle,
39
+ IRegistryLinked
25
40
  {
26
41
  using ObjectTypeLib for ObjectType;
27
- using TimestampLib for Timestamp;
28
42
 
29
- event LogReleaseCreation(
30
- VersionPart version,
31
- bytes32 salt,
32
- address releaseAccessManager
33
- );
43
+ uint256 public constant INITIAL_GIF_VERSION = 3;
44
+
45
+ event LogReleaseCreation(VersionPart version, bytes32 salt, address authority);
34
46
  event LogReleaseActivation(VersionPart version);
35
47
 
48
+ // constructor
49
+ error ErrorReleaseManagerNotRegistry(Registry registry);
50
+
51
+ // createNextRelease
52
+ error ErrorReleaseManagerReleaseCreationDisallowed(StateId currentStateId);
36
53
 
37
54
  // prepareRelease
38
- error ErrorReleaseManagerReleaseAlreadyCreated(VersionPart version);
39
-
55
+ error ErrorReleaseManagerReleasePreparationDisallowed(StateId currentStateId);
56
+ error ErrorReleaseManagerReleaseAlreadyPrepared(VersionPart version);
57
+ error ErrorReleaseManagerVersionMismatch(VersionPart expectedVersion, VersionPart providedVersion);
58
+ error ErrorReleaseManagerNoDomains(VersionPart version);
59
+
60
+ // register staking
61
+ //error ErrorReleaseManagerStakingAlreadySet(address stakingAddress);
62
+
40
63
  // registerService
64
+ error ErrorReleaseManagerNoServiceRegistrationExpected();
65
+ error ErrorReleaseManagerServiceRegistrationDisallowed(StateId currentStateId);
66
+ error ErrorReleaseManagerServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
41
67
  error ErrorReleaseManagerNotService(IService service);
42
68
  error ErrorReleaseManagerServiceAddressInvalid(IService given, address expected);
43
69
 
44
70
  // activateNextRelease
71
+ error ErrorReleaseManagerReleaseActivationDisallowed(StateId currentStateId);
45
72
  error ErrorReleaseManagerReleaseNotCreated(VersionPart releaseVersion);
46
73
  error ErrorReleaseManagerReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
47
74
  error ErrorReleaseManagerReleaseAlreadyActivated(VersionPart releaseVersion);
@@ -62,66 +89,112 @@ contract ReleaseManager is AccessManaged
62
89
  error ErrorReleaseManagerServiceSelfRegistration(IService service);
63
90
  error ErrorReleaseManagerServiceOwnerRegistered(IService service, address owner);
64
91
 
65
- // _verifyServiceAuthorizations
66
- error ErrorReleaseManagerReleaseEmpty();
67
- error ErrorReleaseManagerServiceRoleInvalid(address service, RoleId role);
68
-
69
92
  Seconds public constant MIN_DISABLE_DELAY = Seconds.wrap(60 * 24 * 365); // 1 year
70
93
 
71
94
  RegistryAdmin public immutable _admin;
72
95
  address public immutable _releaseAccessManagerCodeAddress;
73
- IRegistry public immutable _registry;
96
+ Registry public immutable _registry;
97
+ IRegisterable private _staking;
98
+ address private _stakingOwner;
74
99
 
75
- mapping(VersionPart version => AccessManagerExtendedWithDisableInitializeable 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;
76
102
  mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
77
103
  mapping(address registryService => VersionPart version) _releaseVersionByAddress;
78
104
 
105
+ mapping(VersionPart version => IServiceAuthorization authz) internal _serviceAuthorization;
106
+
79
107
  VersionPart immutable internal _initial;// first active version
80
- VersionPart internal _latest;// latest active version
81
- VersionPart internal _next;// version to create and activate
108
+ VersionPart internal _latest; // latest active version
109
+ VersionPart internal _next; // version to create and activate
110
+ StateId internal _state; // current state of release manager
82
111
 
83
- uint internal _awaitingRegistration; // "services left to register" counter
112
+ uint256 internal _registeredServices;
113
+ uint256 internal _servicesToRegister;
84
114
 
85
- constructor(
86
- RegistryAdmin admin,
87
- VersionPart initialVersion,
88
- AccessManagerExtendedWithDisableInitializeable masterReleaseAccessManager)
89
- AccessManaged(admin.authority())
115
+ // deployer of this contract must be gif admin
116
+ constructor(Registry registry)
117
+ AccessManaged(msg.sender)
90
118
  {
91
- _admin = admin;
92
- _initial = initialVersion;
93
- _next = VersionPartLib.toVersionPart(initialVersion.toInt() - 1);
94
- _registry = new Registry();
119
+ // TODO move this part to RegistryLinked constructor
120
+ if(!_isRegistry(address(registry))) {
121
+ revert ErrorReleaseManagerNotRegistry(registry);
122
+ }
123
+
124
+ _registry = registry;
125
+ setAuthority(_registry.getAuthority());
126
+ _admin = RegistryAdmin(_registry.getRegistryAdminAddress());
127
+
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();
95
135
  _releaseAccessManagerCodeAddress = address(masterReleaseAccessManager);
96
136
  }
97
137
 
98
- /// @dev skips previous release if it was not activated
99
- function createNextRelease()
138
+ /// @dev skips previous release if was not activated
139
+ /// sets release manager into state SCHEDULED
140
+ function createNextRelease()
100
141
  external
101
- restricted // GIF_ADMIN_ROLE
102
- returns(VersionPart version)
142
+ restricted() // GIF_ADMIN_ROLE
143
+ returns(VersionPart)
103
144
  {
145
+ if (!isValidTransition(RELEASE(), _state, SCHEDULED())) {
146
+ revert ErrorReleaseManagerReleaseCreationDisallowed(_state);
147
+ }
148
+
104
149
  _next = VersionPartLib.toVersionPart(_next.toInt() + 1);
105
- _awaitingRegistration = 0;
150
+ _servicesToRegister = 0;
151
+ _registeredServices = 0;
152
+ _state = SCHEDULED();
153
+
154
+ return _next;
106
155
  }
107
156
 
108
157
  function prepareNextRelease(
109
- address[] memory addresses,
110
- string[] memory names,
111
- RoleId[][] memory serviceRoles,
112
- string[][] memory serviceRoleNames,
113
- RoleId[][] memory functionRoles,
114
- string[][] memory functionRoleNames,
115
- bytes4[][][] memory selectors,
158
+ IServiceAuthorization serviceAuthorization,
116
159
  bytes32 salt
117
160
  )
118
161
  external
119
- restricted // GIF_MANAGER_ROLE
120
- returns(address releaseAccessManagerAddress, VersionPart version, bytes32 releaseSalt)
162
+ restricted() // GIF_MANAGER_ROLE
163
+ returns(
164
+ address authority,
165
+ VersionPart version,
166
+ bytes32 releaseSalt
167
+ )
121
168
  {
122
- _verifyReleaseAuthorizations(addresses, serviceRoles, functionRoles, selectors);
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();
175
+
176
+ // verify authorizaion contract release matches with expected version
177
+ if (releaseVersion != _next) {
178
+ revert ErrorReleaseManagerVersionMismatch(_next, releaseVersion);
179
+ }
180
+
181
+ // sanity check to ensure service domain list is not empty
182
+ if (serviceDomainsCount == 0) {
183
+ revert ErrorReleaseManagerNoDomains(_next);
184
+ }
185
+
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
+ }
190
+
191
+ // verify prepareNextRelease is only called once per release
192
+ if(_servicesToRegister > 0) {
193
+ revert ErrorReleaseManagerReleaseAlreadyPrepared(version);
194
+ }
123
195
 
124
- version = getNextVersion();
196
+ // store release specific service authorization
197
+ _serviceAuthorization[_next] = serviceAuthorization;
125
198
 
126
199
  // ensures unique salt
127
200
  releaseSalt = keccak256(
@@ -129,97 +202,98 @@ contract ReleaseManager is AccessManaged
129
202
  bytes32(version.toInt()),
130
203
  salt));
131
204
 
132
- releaseAccessManagerAddress = Clones.cloneDeterministic(_releaseAccessManagerCodeAddress, releaseSalt);
133
- AccessManagerExtendedWithDisableInitializeable releaseAccessManager = AccessManagerExtendedWithDisableInitializeable(releaseAccessManagerAddress);
134
- releaseAccessManager.initialize(address(this), version);
135
-
136
- if(_awaitingRegistration > 0) {
137
- revert ErrorReleaseManagerReleaseAlreadyCreated(version);
138
- }
205
+ authority = _admin.authority();
139
206
 
140
- _releaseInfo[version].version = version;
141
- _releaseInfo[version].salt = releaseSalt;
142
- _releaseInfo[version].addresses = addresses;
143
- _releaseInfo[version].names = names;
144
- _releaseInfo[version].serviceRoles = serviceRoles;
145
- _releaseInfo[version].serviceRoleNames = serviceRoleNames;
146
- _releaseInfo[version].functionRoles = functionRoles;
147
- _releaseInfo[version].functionRoleNames = functionRoleNames;
148
- _releaseInfo[version].selectors = selectors;
149
- _awaitingRegistration = addresses.length;
207
+ _releaseAccessManager[_next] = authority;
208
+ _servicesToRegister = serviceDomainsCount;
150
209
 
151
- _releaseAccessManager[version] = releaseAccessManager;
210
+ _state = DEPLOYING();
152
211
 
153
- emit LogReleaseCreation(version, releaseSalt, releaseAccessManagerAddress);
212
+ emit LogReleaseCreation(version, releaseSalt, authority);
154
213
  }
155
214
 
215
+
156
216
  function registerService(IService service)
157
217
  external
158
218
  restricted // GIF_MANAGER_ROLE
159
219
  returns(NftId nftId)
160
220
  {
221
+ // TODO is it usefull to check transition from A to A?
222
+ if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
223
+ revert ErrorReleaseManagerServiceRegistrationDisallowed(_state);
224
+ }
225
+
226
+ if (_servicesToRegister == _registeredServices) {
227
+ revert ErrorReleaseManagerNoServiceRegistrationExpected();
228
+ }
229
+
161
230
  (
162
231
  IRegistry.ObjectInfo memory info,
163
232
  ObjectType domain,
164
233
  VersionPart version
165
234
  ) = _verifyService(service);
166
235
 
167
- if(_awaitingRegistration == 0) {
168
- // TODO either release is not created or registration is finished
169
- // or just let it panic on underflow?
170
- revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _awaitingRegistration);
236
+ ObjectType expectedDomain = _serviceAuthorization[version].getServiceDomains()[_registeredServices];
237
+ if (service.getDomain() != expectedDomain) {
238
+ revert ErrorReleaseManagerServiceDomainMismatch(expectedDomain, service.getDomain());
171
239
  }
172
240
 
173
- uint serviceIdx = _awaitingRegistration - 1;
174
- address serviceAddress = _releaseInfo[version].addresses[serviceIdx];
175
- // TODO temp, while typescript addresses computation is not implemented
176
- /*if(address(service) != serviceAddress) {
177
- revert ErrorReleaseManagerServiceAddressInvalid(service, serviceAddress);
178
- }*/
179
-
180
- _setServiceAuthorizations(
181
- _releaseAccessManager[version],
182
- // TODO temp, while typescript addresses computation is not implemented
183
- address(service),//serviceAddress,
184
- _releaseInfo[version].names[serviceIdx],
185
- _releaseInfo[version].serviceRoles[serviceIdx],
186
- _releaseInfo[version].serviceRoleNames[serviceIdx],
187
- _releaseInfo[version].functionRoles[serviceIdx],
188
- _releaseInfo[version].functionRoleNames[serviceIdx],
189
- _releaseInfo[version].selectors[serviceIdx]);
190
-
191
- _awaitingRegistration = serviceIdx;
192
- _releaseInfo[version].domains.push(domain);// checked in registry
241
+ // checked in registry
242
+ _releaseInfo[version].domains.push(domain);
193
243
 
244
+ // register service with registry
194
245
  nftId = _registry.registerService(info, version, domain);
246
+ _registeredServices++;
195
247
 
196
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
+ }
197
267
  }
198
268
 
269
+
199
270
  function activateNextRelease()
200
271
  external
201
272
  restricted // GIF_ADMIN_ROLE
202
273
  {
274
+ if (!isValidTransition(RELEASE(), _state, ACTIVE())) {
275
+ revert ErrorReleaseManagerReleaseActivationDisallowed(_state);
276
+ }
277
+
278
+ // release fully deployed
203
279
  VersionPart version = _next;
204
- address service = _registry.getServiceAddress(REGISTRY(), version);
280
+ if(_registeredServices < _servicesToRegister) {
281
+ revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _servicesToRegister - _registeredServices);
282
+ }
205
283
 
206
- // release exists, registry service is a MUST
207
- //if(_releaseAccessManager[version] == address(0)) {
284
+ // release exists, registry service MUST exist
285
+ address service = _registry.getServiceAddress(REGISTRY(), version);
208
286
  if(service == address(0)) {
209
287
  revert ErrorReleaseManagerReleaseNotCreated(version);
210
288
  }
211
289
 
212
- // release fully deployed
213
- if(_awaitingRegistration > 0) {
214
- revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _awaitingRegistration);
215
- }
216
-
217
290
  // release is not activated
218
291
  if(_releaseInfo[version].activatedAt.gtz()) {
219
292
  revert ErrorReleaseManagerReleaseAlreadyActivated(version);
220
293
  }
221
294
 
222
295
  _latest = version;
296
+ _state = ACTIVE();
223
297
 
224
298
  _releaseVersionByAddress[service] = version;
225
299
  _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
@@ -244,7 +318,8 @@ contract ReleaseManager is AccessManaged
244
318
 
245
319
  disableDelay = SecondsLib.toSeconds(Math.max(disableDelay.toInt(), MIN_DISABLE_DELAY.toInt()));
246
320
 
247
- _releaseAccessManager[version].disable(disableDelay);
321
+ // TODO come up with a substitute
322
+ // _releaseAccessManager[version].disable(disableDelay);
248
323
 
249
324
  _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp().addSeconds(disableDelay);
250
325
  }
@@ -259,7 +334,8 @@ contract ReleaseManager is AccessManaged
259
334
  //}
260
335
 
261
336
  // reverts if disable delay expired
262
- _releaseAccessManager[version].enable();
337
+ // TODO come up with a substitute
338
+ // _releaseAccessManager[version].enable();
263
339
 
264
340
  _releaseInfo[version].disabledAt = zeroTimestamp();
265
341
  }
@@ -280,15 +356,7 @@ contract ReleaseManager is AccessManaged
280
356
  }
281
357
 
282
358
  function isActiveRelease(VersionPart version) public view returns(bool) {
283
- if(_releaseInfo[version].activatedAt.eqz()) { return false; }
284
- if(_releaseInfo[version].disabledAt.eqz()) { return true; }
285
- return ltTimestamp(TimestampLib.blockTimestamp(), _releaseInfo[version].disabledAt);
286
- }
287
-
288
-
289
- function getRegistry() external view returns(address)
290
- {
291
- return (address(_registry));
359
+ return _releaseInfo[version].activatedAt.gtz();
292
360
  }
293
361
 
294
362
  function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
@@ -307,14 +375,66 @@ contract ReleaseManager is AccessManaged
307
375
  return _initial;
308
376
  }
309
377
 
378
+ function getState() external view returns (StateId stateId) {
379
+ return _state;
380
+ }
381
+
382
+ function getRemainingServicesToRegister() external view returns (uint256 services) {
383
+ return _servicesToRegister - _registeredServices;
384
+ }
385
+
386
+ // TODO cleanup
310
387
  function getReleaseAccessManager(VersionPart version) external view returns(AccessManagerExtendedWithDisableInitializeable) {
311
- return _releaseAccessManager[version];
388
+ // return _releaseAccessManager[version];
389
+ }
390
+
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;
400
+ }
401
+
402
+ //--- ILifecycle -----------------------------------------------------------//
403
+
404
+ function hasLifecycle(ObjectType objectType) external pure returns (bool) { return objectType == RELEASE(); }
405
+
406
+ function getInitialState(ObjectType objectType) public pure returns (StateId stateId) {
407
+ if (objectType == RELEASE()) {
408
+ stateId = INITIAL();
409
+ }
410
+ }
411
+
412
+ function isValidTransition(
413
+ ObjectType objectType,
414
+ StateId fromId,
415
+ StateId toId
416
+ )
417
+ public
418
+ pure
419
+ returns (bool isValid)
420
+ {
421
+ if (objectType != RELEASE()) { return false; }
422
+
423
+ if (fromId == INITIAL() && toId == SCHEDULED()) { return true; }
424
+ if (fromId == SCHEDULED() && toId == DEPLOYING()) { return true; }
425
+ if (fromId == DEPLOYING() && toId == SCHEDULED()) { return true; }
426
+ if (fromId == DEPLOYING() && toId == DEPLOYING()) { return true; }
427
+ if (fromId == DEPLOYING() && toId == ACTIVE()) { return true; }
428
+ // TODO active -> scheduled missing, add tests to cover this and more scenarios (#358)
429
+
430
+ return false;
312
431
  }
313
432
 
314
433
  //--- private functions ----------------------------------------------------//
315
434
 
316
435
  function _verifyService(IService service)
317
436
  internal
437
+ view
318
438
  returns(
319
439
  IRegistry.ObjectInfo memory serviceInfo,
320
440
  ObjectType serviceDomain,
@@ -352,6 +472,7 @@ contract ReleaseManager is AccessManaged
352
472
  }
353
473
  }
354
474
 
475
+
355
476
  function _verifyServiceInfo(
356
477
  IService service,
357
478
  IRegistry.ObjectInfo memory info,
@@ -387,76 +508,20 @@ contract ReleaseManager is AccessManaged
387
508
  }
388
509
  }
389
510
 
390
- function _verifyReleaseAuthorizations(
391
- address[] memory serviceAddress,
392
- RoleId[][] memory serviceRoles,
393
- RoleId[][] memory functionRoles,
394
- bytes4[][][] memory selectors
395
- )
396
- internal
397
- view
398
- {
399
- if(serviceAddress.length == 0) {
400
- revert ErrorReleaseManagerReleaseEmpty();
401
- }
402
-
403
- for(uint serviceIdx = 0; serviceIdx < serviceAddress.length; serviceIdx++)
404
- {
405
- for(uint roleIdx = 0; roleIdx < serviceRoles[serviceIdx].length; roleIdx++)
406
- {
407
- RoleId role = serviceRoles[serviceIdx][roleIdx];
408
- if(role == ADMIN_ROLE() || role == PUBLIC_ROLE()) {
409
- revert ErrorReleaseManagerServiceRoleInvalid(serviceAddress[serviceIdx], role);
410
- }
411
- }
412
- }
413
- // TODO no duplicate service "domain" role per release
414
- // TODO no duplicate service roles per service
415
- // TODO no duplicate service function roles per service
416
- // TODO no duplicate service function selectors per service
417
- }
418
-
419
- function _setServiceAuthorizations(
420
- AccessManagerExtendedWithDisableInitializeable accessManager, // release access manager
421
- address serviceAddress,
422
- string memory serviceName,
423
- RoleId[] memory serviceRoles,
424
- string[] memory serviceRoleNames,
425
- RoleId[] memory functionRoles,
426
- string[] memory functionRoleNames,
427
- bytes4[][] memory selectors
428
- )
429
- internal
430
- {
431
- accessManager.createTarget(serviceAddress, serviceName);
432
-
433
- for(uint idx = 0; idx < functionRoles.length; idx++)
434
- {
435
- uint64 roleInt = functionRoles[idx].toInt();
436
-
437
- if(!accessManager.isRoleExists(roleInt)) {
438
- accessManager.createRole(roleInt, functionRoleNames[idx]);
439
- }
511
+ /// @dev returns true iff a the address passes some simple proxy tests.
512
+ function _isRegistry(address registryAddress) internal view returns (bool) {
440
513
 
441
- accessManager.setTargetFunctionRole(
442
- serviceAddress,
443
- selectors[idx],
444
- roleInt);
514
+ // zero address is certainly not registry
515
+ if (registryAddress == address(0)) {
516
+ return false;
445
517
  }
446
-
447
- for(uint idx = 0; idx < serviceRoles.length; idx++)
448
- {
449
- uint64 roleInt = serviceRoles[idx].toInt();
450
-
451
- if(!accessManager.isRoleExists(roleInt)) {
452
- accessManager.createRole(roleInt, serviceRoleNames[idx]);
453
- }
454
-
455
- accessManager.grantRole(
456
- serviceRoles[idx].toInt(),
457
- serviceAddress,
458
- 0);
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;
459
523
  }
460
-
524
+
525
+ return true;
461
526
  }
462
- }
527
+ }
@@ -0,0 +1,86 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IAccessAdmin} from "../shared/IAccessAdmin.sol";
5
+ import {ObjectType} from "../../contracts/type/ObjectType.sol";
6
+ import {IServiceAuthorization} from "./IServiceAuthorization.sol";
7
+ import {SelectorLib} from "../../contracts/type/Selector.sol";
8
+ import {StrLib} from "../../contracts/type/String.sol";
9
+ import {VersionPart, VersionPartLib} from "../../contracts/type/Version.sol";
10
+
11
+ /// @dev Base contract for release specific service authorization contracts.
12
+ contract ServiceAuthorization
13
+ is IServiceAuthorization
14
+ {
15
+ uint256 public constant GIF_VERSION = 3;
16
+
17
+ string private _commitHash;
18
+
19
+ ObjectType[] internal _serviceDomains;
20
+ mapping(ObjectType domain => address service) internal _serviceAddress;
21
+ mapping(ObjectType domain => ObjectType[] authorizedDomains) internal _authorizedDomains;
22
+ mapping(ObjectType domain => mapping(ObjectType authorizedDomain => IAccessAdmin.Function[] functions)) internal _authorizedFunctions;
23
+
24
+ constructor(string memory commitHash) {
25
+ _commitHash = commitHash;
26
+ _setupDomains();
27
+ _setupDomainAuthorizations();
28
+ }
29
+
30
+ function getCommitHash() external view returns(string memory commitHash) {
31
+ return _commitHash;
32
+ }
33
+
34
+ function getRelease() external view returns(VersionPart release, uint domainsCount) {
35
+ return (
36
+ VersionPartLib.toVersionPart(GIF_VERSION),
37
+ _serviceDomains.length
38
+ );
39
+ }
40
+
41
+ function getServiceDomains() external view returns(ObjectType[] memory serviceDomains) {
42
+ return _serviceDomains;
43
+ }
44
+
45
+ function getServiceAddress(ObjectType serviceDomain) external view returns(address service) {
46
+ return _serviceAddress[serviceDomain];
47
+ }
48
+
49
+ function getAuthorizedDomains(ObjectType serviceDomain) external view returns(ObjectType[] memory authorizatedDomains) {
50
+ return _authorizedDomains[serviceDomain];
51
+ }
52
+
53
+ function getAuthorizedFunctions(ObjectType serviceDomain, ObjectType authorizedDomain) external view returns(IAccessAdmin.Function[] memory authorizatedFunctions) {
54
+ return _authorizedFunctions[serviceDomain][authorizedDomain];
55
+ }
56
+
57
+ /// @dev Overwrite this function for a specific realease.
58
+ function _setupDomains() internal virtual {}
59
+
60
+ /// @dev Overwrite this function for a specific realease.
61
+ function _setupDomainAuthorizations() internal virtual {}
62
+
63
+ /// @dev Use this method to to add an authorized domain.
64
+ /// The services will need to be registered in the order they are added using this function.
65
+ function _authorizeDomain(ObjectType serviceDomain, address serviceAddress) internal {
66
+ _serviceDomains.push(serviceDomain);
67
+ _serviceAddress[serviceDomain] = serviceAddress;
68
+ }
69
+
70
+ function _authorizeForService(ObjectType serviceDomain, ObjectType authorizedDomain)
71
+ internal
72
+ returns (IAccessAdmin.Function[] storage authorizatedFunctions)
73
+ {
74
+ _authorizedDomains[serviceDomain].push(authorizedDomain);
75
+ return _authorizedFunctions[serviceDomain][authorizedDomain];
76
+ }
77
+
78
+ /// @dev Use this method to authorize a specific function authorization
79
+ function _authorize(IAccessAdmin.Function[] storage functions, bytes4 selector, string memory name) internal {
80
+ functions.push(
81
+ IAccessAdmin.Function({
82
+ selector: SelectorLib.toSelector(selector),
83
+ name: StrLib.toStr(name)}));
84
+ }
85
+ }
86
+