@etherisc/gif-next 0.0.2-d5b7b78-706 → 0.0.2-d5fac82-078

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 (453) hide show
  1. package/README.md +8 -84
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/{components → distribution}/Distribution.sol/Distribution.json +90 -14
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1575 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +851 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/{components → distribution}/IDistributionComponent.sol/IDistributionComponent.json +145 -14
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/{instance/service → distribution}/IDistributionService.sol/IDistributionService.json +110 -283
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +6 -6
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +310 -2004
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +104 -55
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +420 -2725
  20. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  21. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +746 -0
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +188 -0
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +366 -71
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +179 -214
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +121 -95
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2847 -0
  32. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  33. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +1 -1
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  36. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  37. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +61 -12
  39. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +8 -8
  41. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol}/ObjectManager.json +3 -3
  43. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +1 -130
  45. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  52. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  53. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1307 -0
  54. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  55. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +767 -0
  56. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  57. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +234 -129
  58. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  59. package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +162 -21
  60. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  61. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  62. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  63. package/artifacts/contracts/{components → pool}/Pool.sol/Pool.json +91 -21
  64. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  65. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1641 -0
  66. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +779 -0
  68. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  69. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +937 -0
  70. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +719 -0
  72. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  73. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1405 -0
  74. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +819 -0
  76. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  77. package/artifacts/contracts/{instance/service/IClaimService.sol/IClaimService.json → product/IApplicationService.sol/IApplicationService.json} +184 -100
  78. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  80. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  81. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +211 -100
  82. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  83. package/artifacts/contracts/{instance/service/IApplicationService.sol/IApplicationService.json → product/IPricingService.sol/IPricingService.json} +120 -166
  84. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  85. package/artifacts/contracts/{components → product}/IProductComponent.sol/IProductComponent.json +152 -21
  86. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  87. package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +86 -28
  88. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1300 -0
  90. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +811 -0
  92. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  93. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1023 -0
  94. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +759 -0
  96. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  97. package/artifacts/contracts/{components → product}/Product.sol/Product.json +82 -22
  98. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  99. package/artifacts/contracts/product/ProductService.sol/ProductService.json +883 -0
  100. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +711 -0
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +110 -30
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +165 -84
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +133 -45
  110. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +305 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +209 -104
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +103 -55
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +542 -86
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +20 -35
  120. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +4 -0
  121. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +1193 -0
  122. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +4 -0
  123. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +1715 -0
  124. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +4 -0
  125. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +1728 -0
  126. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +4 -0
  127. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +1747 -0
  128. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +4 -0
  129. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +1765 -0
  130. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  131. package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
  132. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  133. package/artifacts/contracts/{components → shared}/Component.sol/Component.json +67 -7
  134. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  135. package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +133 -35
  136. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  137. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +4 -0
  138. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +1562 -0
  139. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +4 -0
  140. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +1594 -0
  141. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  142. package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +138 -7
  143. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
  145. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  146. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
  147. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
  149. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  150. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  151. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  152. package/artifacts/contracts/shared/IService.sol/IService.json +85 -27
  153. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  154. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  155. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +23 -43
  156. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  157. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
  158. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  159. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +81 -33
  160. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  161. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +27 -21
  162. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  163. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  164. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  165. package/artifacts/contracts/shared/Service.sol/Service.json +110 -28
  166. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  167. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  168. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  169. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  170. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  171. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  172. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -0
  173. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  174. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +786 -0
  175. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  176. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +699 -0
  177. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  178. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  179. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  180. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  181. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  182. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  183. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  185. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  186. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  187. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  188. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  189. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  190. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  191. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  192. package/artifacts/contracts/{types → type}/NftId.sol/NftIdLib.json +5 -5
  193. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  194. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  195. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  196. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  197. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  198. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  199. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  200. package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
  201. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  202. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  203. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  204. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  205. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  206. package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
  207. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  208. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  209. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  210. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
  211. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  212. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  213. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  214. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  215. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  216. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  217. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  218. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  219. package/contracts/{components → distribution}/Distribution.sol +21 -16
  220. package/contracts/distribution/DistributionService.sol +351 -0
  221. package/contracts/distribution/DistributionServiceManager.sol +42 -0
  222. package/contracts/{components → distribution}/IDistributionComponent.sol +7 -7
  223. package/contracts/{instance/service → distribution}/IDistributionService.sol +19 -30
  224. package/contracts/instance/BundleManager.sol +8 -9
  225. package/contracts/instance/IInstance.sol +45 -66
  226. package/contracts/instance/IInstanceService.sol +21 -20
  227. package/contracts/instance/Instance.sol +121 -218
  228. package/contracts/instance/InstanceAdmin.sol +354 -0
  229. package/contracts/instance/InstanceAuthorizationsLib.sol +320 -0
  230. package/contracts/instance/InstanceReader.sol +96 -18
  231. package/contracts/instance/InstanceService.sol +120 -317
  232. package/contracts/instance/InstanceServiceManager.sol +11 -21
  233. package/contracts/instance/InstanceStore.sol +211 -0
  234. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +1 -1
  235. package/contracts/instance/base/IKeyValueStore.sol +14 -10
  236. package/contracts/instance/base/ILifecycle.sol +3 -3
  237. package/contracts/instance/base/KeyValueStore.sol +39 -45
  238. package/contracts/instance/base/Lifecycle.sol +17 -5
  239. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +7 -7
  240. package/contracts/instance/module/IAccess.sol +3 -13
  241. package/contracts/instance/module/IBundle.sol +10 -8
  242. package/contracts/instance/module/IComponents.sol +11 -5
  243. package/contracts/instance/module/IDistribution.sol +7 -6
  244. package/contracts/instance/module/IPolicy.sol +22 -16
  245. package/contracts/instance/module/IRisk.sol +1 -1
  246. package/contracts/instance/module/ISetup.sol +4 -4
  247. package/contracts/instance/module/ITreasury.sol +2 -2
  248. package/contracts/pool/BundleService.sol +384 -0
  249. package/contracts/pool/BundleServiceManager.sol +42 -0
  250. package/contracts/pool/IBundleService.sol +118 -0
  251. package/contracts/{components → pool}/IPoolComponent.sol +14 -13
  252. package/contracts/pool/IPoolService.sol +114 -0
  253. package/contracts/{components → pool}/Pool.sol +25 -22
  254. package/contracts/pool/PoolService.sol +404 -0
  255. package/contracts/pool/PoolServiceManager.sol +42 -0
  256. package/contracts/product/ApplicationService.sol +187 -0
  257. package/contracts/{instance/service → product}/ApplicationServiceManager.sol +11 -8
  258. package/contracts/product/ClaimService.sol +443 -0
  259. package/contracts/{instance/service → product}/ClaimServiceManager.sol +11 -8
  260. package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
  261. package/contracts/product/IClaimService.sol +93 -0
  262. package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
  263. package/contracts/product/IPricingService.sol +37 -0
  264. package/contracts/{components → product}/IProductComponent.sol +11 -10
  265. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  266. package/contracts/product/PolicyService.sol +378 -0
  267. package/contracts/product/PolicyServiceManager.sol +42 -0
  268. package/contracts/product/PricingService.sol +276 -0
  269. package/contracts/product/PricingServiceManager.sol +42 -0
  270. package/contracts/{components → product}/Product.sol +160 -74
  271. package/contracts/product/ProductService.sol +212 -0
  272. package/contracts/product/ProductServiceManager.sol +42 -0
  273. package/contracts/registry/IRegistry.sol +28 -17
  274. package/contracts/registry/IRegistryService.sol +29 -37
  275. package/contracts/registry/Registry.sol +46 -48
  276. package/contracts/registry/RegistryAdmin.sol +143 -0
  277. package/contracts/registry/RegistryService.sol +37 -88
  278. package/contracts/registry/RegistryServiceManager.sol +21 -23
  279. package/contracts/registry/ReleaseManager.sol +318 -177
  280. package/contracts/registry/TokenRegistry.sol +6 -4
  281. package/contracts/shared/AccessManagerCustom.sol +736 -0
  282. package/contracts/shared/AccessManagerExtended.sol +469 -0
  283. package/contracts/shared/AccessManagerExtendedInitializeable.sol +13 -0
  284. package/contracts/shared/AccessManagerExtendedWithDisable.sol +125 -0
  285. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +14 -0
  286. package/contracts/{components → shared}/Component.sol +31 -11
  287. package/contracts/shared/ComponentService.sol +141 -0
  288. package/contracts/shared/IAccessManagerExtended.sol +74 -0
  289. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +17 -0
  290. package/contracts/{components → shared}/IComponent.sol +22 -6
  291. package/contracts/shared/INftOwnable.sol +1 -1
  292. package/contracts/shared/IPolicyHolder.sol +24 -10
  293. package/contracts/shared/IRegistryLinked.sol +0 -1
  294. package/contracts/shared/IService.sol +6 -6
  295. package/contracts/shared/IVersionable.sol +1 -1
  296. package/contracts/shared/NftOwnable.sol +13 -16
  297. package/contracts/shared/PolicyHolder.sol +31 -18
  298. package/contracts/shared/ProxyManager.sol +34 -3
  299. package/contracts/shared/Registerable.sol +12 -11
  300. package/contracts/shared/RegistryLinked.sol +0 -5
  301. package/contracts/shared/Service.sol +23 -9
  302. package/contracts/shared/TokenHandler.sol +4 -2
  303. package/contracts/shared/Versionable.sol +1 -1
  304. package/contracts/staking/IStakingService.sol +102 -0
  305. package/contracts/staking/StakingService.sol +169 -0
  306. package/contracts/staking/StakingServiceManager.sol +40 -0
  307. package/contracts/type/Amount.sol +109 -0
  308. package/contracts/{types → type}/ClaimId.sol +25 -2
  309. package/contracts/{types → type}/Fee.sol +16 -8
  310. package/contracts/{types → type}/NftIdSet.sol +1 -1
  311. package/contracts/{types → type}/ObjectType.sol +10 -5
  312. package/contracts/{types → type}/PayoutId.sol +33 -5
  313. package/contracts/{types → type}/RoleId.sol +50 -8
  314. package/contracts/{types → type}/StateId.sol +6 -2
  315. package/contracts/{types → type}/Timestamp.sol +5 -0
  316. package/package.json +1 -1
  317. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  318. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  319. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
  320. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  321. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  322. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  323. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  324. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  325. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  326. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  327. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  328. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -1311
  329. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  330. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
  331. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
  332. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -968
  333. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
  334. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -665
  335. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  336. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1093
  337. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  338. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -661
  339. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
  340. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -754
  341. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
  342. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -637
  343. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  344. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1732
  345. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  346. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -805
  347. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
  348. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  349. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
  350. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  351. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  352. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  353. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +0 -428
  354. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  355. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  356. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1021
  357. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  358. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -689
  359. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  360. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -824
  361. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  362. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -657
  363. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  364. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -777
  365. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  366. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -649
  367. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  368. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -285
  369. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  370. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  371. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  372. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  373. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  374. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
  375. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  376. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  377. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  378. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -521
  379. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  380. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  381. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  382. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  383. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  384. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
  385. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  386. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  387. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  388. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  389. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  390. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  391. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
  392. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
  393. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  394. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  395. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  396. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  397. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  398. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  399. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  400. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  401. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  402. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
  403. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
  404. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  405. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  406. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  407. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
  408. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  409. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  410. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  411. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  412. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  413. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  414. package/contracts/instance/InstanceAccessManager.sol +0 -522
  415. package/contracts/instance/base/ComponentService.sol +0 -134
  416. package/contracts/instance/service/ApplicationService.sol +0 -350
  417. package/contracts/instance/service/BundleService.sol +0 -336
  418. package/contracts/instance/service/BundleServiceManager.sol +0 -51
  419. package/contracts/instance/service/ClaimService.sol +0 -151
  420. package/contracts/instance/service/DistributionService.sol +0 -467
  421. package/contracts/instance/service/DistributionServiceManager.sol +0 -51
  422. package/contracts/instance/service/IBundleService.sol +0 -62
  423. package/contracts/instance/service/IClaimService.sol +0 -61
  424. package/contracts/instance/service/IPoolService.sol +0 -35
  425. package/contracts/instance/service/PolicyService.sol +0 -403
  426. package/contracts/instance/service/PolicyServiceManager.sol +0 -54
  427. package/contracts/instance/service/PoolService.sol +0 -220
  428. package/contracts/instance/service/PoolServiceManager.sol +0 -51
  429. package/contracts/instance/service/ProductService.sol +0 -241
  430. package/contracts/instance/service/ProductServiceManager.sol +0 -54
  431. package/contracts/registry/RegistryAccessManager.sol +0 -216
  432. package/contracts/shared/ContractDeployerLib.sol +0 -72
  433. package/contracts/test/TestFee.sol +0 -25
  434. package/contracts/test/TestRegisterable.sol +0 -18
  435. package/contracts/test/TestRoleId.sol +0 -14
  436. package/contracts/test/TestService.sol +0 -25
  437. package/contracts/test/TestToken.sol +0 -26
  438. package/contracts/test/TestVersion.sol +0 -44
  439. package/contracts/test/TestVersionable.sol +0 -17
  440. package/contracts/test/Usdc.sol +0 -26
  441. package/contracts/types/ChainId.sol +0 -38
  442. package/contracts/types/NumberId.sol +0 -52
  443. /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
  444. /package/contracts/{types → type}/AddressSet.sol +0 -0
  445. /package/contracts/{types → type}/Blocknumber.sol +0 -0
  446. /package/contracts/{types → type}/DistributorType.sol +0 -0
  447. /package/contracts/{types → type}/Key32.sol +0 -0
  448. /package/contracts/{types → type}/NftId.sol +0 -0
  449. /package/contracts/{types → type}/Referral.sol +0 -0
  450. /package/contracts/{types → type}/RiskId.sol +0 -0
  451. /package/contracts/{types → type}/Seconds.sol +0 -0
  452. /package/contracts/{types → type}/UFixed.sol +0 -0
  453. /package/contracts/{types → type}/Version.sol +0 -0
@@ -1,100 +1,196 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
4
5
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
6
 
6
- import {NftId} from "../types/NftId.sol";
7
- import {RoleId} from "../types/RoleId.sol";
8
- import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../types/ObjectType.sol";
9
- import {VersionPart, VersionPartLib} from "../types/Version.sol";
10
- import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
7
+ import {NftId} from "../type/NftId.sol";
8
+ import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
9
+ import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../type/ObjectType.sol";
10
+ import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
11
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
11
12
 
12
13
  import {IService} from "../shared/IService.sol";
14
+ import {AccessManagerExtendedWithDisableInitializeable} from "../shared/AccessManagerExtendedWithDisableInitializeable.sol";
13
15
 
14
16
  import {IRegistry} from "./IRegistry.sol";
15
17
  import {Registry} from "./Registry.sol";
16
18
  import {IRegistryService} from "./IRegistryService.sol";
17
- import {RegistryAccessManager} from "./RegistryAccessManager.sol";
19
+ import {RegistryAdmin} from "./RegistryAdmin.sol";
18
20
 
19
21
 
20
22
  contract ReleaseManager is AccessManaged
21
23
  {
22
24
  using ObjectTypeLib for ObjectType;
23
25
 
24
- event LogReleaseCreation(VersionPart version);
26
+ event LogReleaseCreation(
27
+ VersionPart version,
28
+ bytes32 salt,
29
+ address releaseAccessManager
30
+ );
25
31
  event LogReleaseActivation(VersionPart version);
26
32
 
27
- // createNextRelease
28
- error NotRegistryService();
29
- error UnexpectedServiceAuthority(address expected, address found);
30
33
 
34
+ // prepareRelease
35
+ error ErrorReleaseManagerReleaseEmpty();
36
+ error ErrorReleaseManagerReleaseAlreadyCreated(VersionPart version);
37
+
31
38
  // registerService
32
- error NotService();
39
+ error ErrorReleaseManagerNotService(IService service);
40
+ error ErrorReleaseManagerServiceAddressInvalid(IService given, address expected);
33
41
 
34
42
  // activateNextRelease
35
- error ReleaseNotCreated();
36
- error ReleaseRegistrationNotFinished();
43
+ error ErrorReleaseManagerReleaseNotCreated(VersionPart releaseVersion);
44
+ error ErrorReleaseManagerReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
45
+ error ErrorReleaseManagerReleaseAlreadyActivated(VersionPart releaseVersion);
37
46
 
38
- // _getAndVerifyContractInfo
39
- error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
40
- error NotRegisterableOwner(address notOwner);
41
- error SelfRegistration();
42
- error RegisterableOwnerIsRegistered();
47
+ // disableRelease
48
+ error ErrorReleaseManagerReleaseNotActivated(VersionPart releaseVersion);
49
+ error ErrorReleaseManagerReleaseAlreadyDisabled(VersionPart releaseVersion);
43
50
 
44
51
  // _verifyService
45
- error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
46
- error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
47
-
48
- // _verifyAndStoreConfig
49
- error ConfigMissing();
50
- error ConfigServiceDomainInvalid(uint configArrayIndex, ObjectType domain);
51
- error ConfigSelectorZero(uint configArrayIndex);
52
- error SelectorAlreadyExists(VersionPart releaseVersion, ObjectType serviceDomain);
53
-
54
-
55
- RegistryAccessManager private immutable _accessManager;
56
- IRegistry private immutable _registry;
52
+ error ErrorReleaseManagerServiceReleaseAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
53
+ error ErrorReleaseManagerServiceReleaseVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
57
54
 
58
- VersionPart immutable _initial;// first active version
59
- VersionPart _latest;// latest active version
60
- VersionPart _next;// version to create and activate
55
+ // _verifyServiceInfo
56
+ error ErrorReleaseManagerServiceInfoAddressInvalid(IService service, address expected);
57
+ error ErrorReleaseManagerServiceInfoInterceptorInvalid(IService service, bool isInterceptor);
58
+ error ErrorReleaseManagerServiceInfoTypeInvalid(IService service, ObjectType expected, ObjectType found);
59
+ error ErrorReleaseManagerServiceInfoOwnerInvalid(IService service, address expected, address found);
60
+ error ErrorReleaseManagerServiceSelfRegistration(IService service);
61
+ error ErrorReleaseManagerServiceOwnerRegistered(IService service, address owner);
61
62
 
62
- mapping(VersionPart version => IRegistry.ReleaseInfo info) _release;
63
+ // _verifyServiceAuthorizations
64
+ error ErrorReleaseManagerServiceRoleInvalid(address service, RoleId role);
63
65
 
64
- mapping(VersionPart version => mapping(ObjectType serviceDomain => bytes4[])) _selectors; // registry service function selector assigned to domain
66
+ RegistryAdmin public immutable _admin;
67
+ address public immutable _releaseAccessManagerCodeAddress;
68
+ IRegistry public immutable _registry;
65
69
 
66
- uint _awaitingRegistration; // "services left to register" counter
70
+ mapping(VersionPart version => AccessManagerExtendedWithDisableInitializeable accessManager) internal _releaseAccessManager;
71
+ mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
72
+ mapping(address registryService => bool isActive) internal _active;// have access to registry
67
73
 
68
- mapping(address registryService => bool isActive) _active;
74
+ VersionPart immutable internal _initial;// first active version
75
+ VersionPart internal _latest;// latest active version
76
+ VersionPart internal _next;// version to create and activate
69
77
 
70
- mapping(VersionPart version => bool isValid) _valid; // TODO refactor to use _active only
78
+ uint internal _awaitingRegistration; // "services left to register" counter
71
79
 
72
80
  constructor(
73
- RegistryAccessManager accessManager,
74
- VersionPart initialVersion)
75
- AccessManaged(accessManager.authority())
81
+ RegistryAdmin admin,
82
+ VersionPart initialVersion,
83
+ AccessManagerExtendedWithDisableInitializeable masterReleaseAccessManager)
84
+ AccessManaged(admin.authority())
76
85
  {
77
- require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
78
-
79
- _accessManager = accessManager;
80
-
86
+ _admin = admin;
81
87
  _initial = initialVersion;
82
- _next = initialVersion;
83
-
88
+ _next = VersionPartLib.toVersionPart(initialVersion.toInt() - 1);
84
89
  _registry = new Registry();
90
+ _releaseAccessManagerCodeAddress = address(masterReleaseAccessManager);
85
91
  }
86
92
 
87
- /// @dev skips previous release if was not activated
88
- function createNextRelease()
93
+ /// @dev skips previous release if it was not activated
94
+ function createNextRelease()
89
95
  external
90
96
  restricted // GIF_ADMIN_ROLE
97
+ returns(VersionPart version)
91
98
  {
92
- // allow to register new registry service for next version
93
- VersionPartLib.toVersionPart(_next.toInt() + 1);
94
- // disallow registration of regular services for next version while registry service is not registered
99
+ _next = VersionPartLib.toVersionPart(_next.toInt() + 1);
95
100
  _awaitingRegistration = 0;
101
+ }
102
+
103
+ function prepareNextRelease(
104
+ address[] memory addresses,
105
+ string[] memory names,
106
+ RoleId[][] memory serviceRoles,
107
+ string[][] memory serviceRoleNames,
108
+ RoleId[][] memory functionRoles,
109
+ string[][] memory functionRoleNames,
110
+ bytes4[][][] memory selectors,
111
+ bytes32 salt
112
+ )
113
+ external
114
+ restricted // GIF_MANAGER_ROLE
115
+ returns(address releaseAccessManagerAddress, VersionPart version, bytes32 releaseSalt)
116
+ {
117
+ if(addresses.length == 0) {
118
+ revert ErrorReleaseManagerReleaseEmpty();
119
+ }
120
+
121
+ if(_awaitingRegistration > 0) {
122
+ revert ErrorReleaseManagerReleaseAlreadyCreated(version);
123
+ }
124
+
125
+ _verifyReleaseAuthorizations(addresses, serviceRoles, functionRoles, selectors);
126
+
127
+ version = getNextVersion();
128
+
129
+ _releaseInfo[version].version = version;
130
+ _releaseInfo[version].addresses = addresses;
131
+ _releaseInfo[version].names = names;
132
+ _releaseInfo[version].serviceRoles = serviceRoles;
133
+ _releaseInfo[version].serviceRoleNames = serviceRoleNames;
134
+ _releaseInfo[version].functionRoles = functionRoles;
135
+ _releaseInfo[version].functionRoleNames = functionRoleNames;
136
+ _releaseInfo[version].selectors = selectors;
137
+ _awaitingRegistration = addresses.length;
138
+
139
+ // ensures unique salt
140
+ releaseSalt = keccak256(
141
+ bytes.concat(
142
+ bytes32(version.toInt()),
143
+ salt));
144
+
145
+ releaseAccessManagerAddress = Clones.cloneDeterministic(_releaseAccessManagerCodeAddress, releaseSalt);
146
+ AccessManagerExtendedWithDisableInitializeable releaseAccessManager = AccessManagerExtendedWithDisableInitializeable(releaseAccessManagerAddress);
147
+ releaseAccessManager.initialize(address(this), version);
148
+
149
+ _releaseAccessManager[version] = releaseAccessManager;
150
+
151
+ emit LogReleaseCreation(version, releaseSalt, releaseAccessManagerAddress);
152
+ }
153
+
154
+ function registerService(IService service)
155
+ external
156
+ restricted // GIF_MANAGER_ROLE
157
+ returns(NftId nftId)
158
+ {
159
+ (
160
+ IRegistry.ObjectInfo memory info,
161
+ ObjectType domain,
162
+ VersionPart version
163
+ ) = _verifyService(service);
164
+
165
+ if(_awaitingRegistration == 0) {
166
+ // TODO either release is not created or registration is finished
167
+ revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _awaitingRegistration);
168
+ }
169
+
170
+ uint serviceIdx = _awaitingRegistration - 1;
171
+ address serviceAddress = _releaseInfo[version].addresses[serviceIdx];
172
+ // TODO temp, while typescript addresses computation is not implemented
173
+ /*if(address(service) != serviceAddress) {
174
+ revert ErrorReleaseManagerServiceAddressInvalid(service, serviceAddress);
175
+ }*/
176
+
177
+ _setServiceAuthorizations(
178
+ _releaseAccessManager[version],
179
+ // TODO temp, while typescript addresses computation is not implemented
180
+ address(service),//serviceAddress,
181
+ _releaseInfo[version].names[serviceIdx],
182
+ _releaseInfo[version].serviceRoles[serviceIdx],
183
+ _releaseInfo[version].serviceRoleNames[serviceIdx],
184
+ _releaseInfo[version].functionRoles[serviceIdx],
185
+ _releaseInfo[version].functionRoleNames[serviceIdx],
186
+ _releaseInfo[version].selectors[serviceIdx]);
187
+
188
+ _awaitingRegistration = serviceIdx;
189
+ _releaseInfo[version].domains.push(domain);// checked in registry
96
190
 
97
- emit LogReleaseCreation(_next);
191
+ nftId = _registry.registerService(info, version, domain);
192
+
193
+ service.linkToRegisteredNftId();
98
194
  }
99
195
 
100
196
  function activateNextRelease()
@@ -104,117 +200,107 @@ contract ReleaseManager is AccessManaged
104
200
  VersionPart version = _next;
105
201
  address service = _registry.getServiceAddress(REGISTRY(), version);
106
202
 
107
- // release was created
203
+ // release exists, registry service is a MUST
204
+ //if(_releaseAccessManager[version] == address(0)) {
108
205
  if(service == address(0)) {
109
- revert ReleaseNotCreated();
206
+ revert ErrorReleaseManagerReleaseNotCreated(version);
110
207
  }
111
208
 
112
209
  // release fully deployed
113
210
  if(_awaitingRegistration > 0) {
114
- revert ReleaseRegistrationNotFinished();
211
+ revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _awaitingRegistration);
115
212
  }
116
213
 
117
- //setTargetClosed(service, false);
214
+ // release is not activated
215
+ if(_releaseInfo[version].activatedAt.gtz()) {
216
+ revert ErrorReleaseManagerReleaseAlreadyActivated(version);
217
+ }
118
218
 
119
219
  _latest = version;
120
220
 
121
221
  _active[service] = true;
122
- _valid[version] = true;
222
+ _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
123
223
 
124
224
  emit LogReleaseActivation(version);
125
225
  }
126
-
127
- // TODO deploy proxy and initialize with given implementation instead of using given proxy?
128
- // IMPORTANT: MUST never be possible to create with access/release manager, token registry
129
- // callable once per release after release creation, can not register regular services while registry service is not registered
130
- function registerRegistryService(IRegistryService service)
226
+
227
+ // TODO rename activatedAt to createdAt
228
+ // consider lastActivatedAt
229
+ function disableRelease(VersionPart version)
131
230
  external
132
- restricted // GIF_MANAGER_ROLE
133
- returns(NftId nftId)
231
+ restricted // GIF_ADMIN_ROLE
134
232
  {
135
- if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
136
- revert NotRegistryService();
233
+ // release was activated
234
+ if(_releaseInfo[version].activatedAt.eqz()) {
235
+ revert ErrorReleaseManagerReleaseNotActivated(version);
137
236
  }
138
237
 
139
- // TODO unreliable! MUST guarantee the same authority -> how?
140
- address serviceAuthority = service.authority();
141
- if(serviceAuthority != authority()) {
142
- revert UnexpectedServiceAuthority(
143
- authority(),
144
- serviceAuthority);
238
+ // release not disabled already
239
+ if(_releaseInfo[version].disabledAt.gtz()) {
240
+ revert ErrorReleaseManagerReleaseAlreadyDisabled(version);
145
241
  }
146
242
 
147
- IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
148
-
149
- VersionPart version = _next;
150
- ObjectType domain = REGISTRY();
151
- _verifyService(service, version, domain);
152
- _createRelease(service.getFunctionConfigs());
243
+ // disable release access manager
244
+ _releaseAccessManager[version].disable();
153
245
 
154
- nftId = _registry.registerService(info, version, domain);
246
+ // disable registry service
247
+ address registryServiceAddress = _registry.getServiceAddress(REGISTRY(), version);
248
+ _active[registryServiceAddress] = false;
155
249
 
156
- // external call
157
- service.linkToRegisteredNftId();
250
+ _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp();
158
251
  }
159
-
160
- // TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
161
- // TODO removing service from release? -> set _active to false forever, but keep all other records?
162
- function registerService(IService service)
252
+ // TODO consider reenable delay (few month), after expiration can not enable back
253
+ // after expiration release is not maintained in case of error:
254
+ // 1). we will not emeregency shutdown because of no fixing will be done -> right
255
+ // 2). we can shutdown but it never be enabled afterwards
256
+ function enableRelease(VersionPart version)
163
257
  external
164
- restricted // GIF_MANAGER_ROLE
165
- returns(NftId nftId)
258
+ restricted // GIF_ADMIN_ROLE
166
259
  {
167
- if(!service.supportsInterface(type(IService).interfaceId)) {
168
- revert NotService();
260
+ // release not disabled already
261
+ if(_releaseInfo[version].disabledAt.eqz()) {
262
+ //revert ErrorReleaseManagerReleaseAlreadyDisabled(version);
169
263
  }
170
264
 
171
- IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
172
- VersionPart version = getNextVersion();
173
- ObjectType domain = _release[version].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
174
- _verifyService(service, version, domain);
175
-
176
- // setup and grant unique role if service does registrations
177
- bytes4[] memory selectors = _selectors[version][domain];
178
- address registryService = _registry.getServiceAddress(REGISTRY(), version);
179
- if(selectors.length > 0) {
180
- _accessManager.setAndGrantUniqueRole(
181
- address(service),
182
- registryService,
183
- selectors);
184
- }
265
+ // disable release access manager
266
+ _releaseAccessManager[version].enable();
185
267
 
186
- _awaitingRegistration--;
187
-
188
- nftId = _registry.registerService(info, version, domain);
268
+ // disable registry service
269
+ address registryServiceAddress = _registry.getServiceAddress(REGISTRY(), version);
270
+ _active[registryServiceAddress] = true;
189
271
 
190
- // external call
191
- service.linkToRegisteredNftId();
272
+ _releaseInfo[version].disabledAt = zeroTimestamp();
192
273
  }
193
274
 
194
275
  //--- view functions ----------------------------------------------------//
195
276
 
196
- function isActiveRegistryService(address service) external view returns(bool)
197
- {
277
+ function predictDeterministicAddress(
278
+ address implementation,
279
+ bytes32 salt,
280
+ address deployer
281
+ ) external pure returns (address predicted) {
282
+ return Clones.predictDeterministicAddress(implementation, salt, deployer);
283
+ }
284
+
285
+ function isActiveRegistryService(address service) external view returns(bool) {
198
286
  return _active[service];
199
287
  }
200
288
 
201
- function isValidRelease(VersionPart version) external view returns(bool)
202
- {
203
- return _valid[version];
289
+ function isActiveRelease(VersionPart version) external view returns(bool) {
290
+ return _releaseInfo[version].disabledAt.gtz() ? false : _releaseInfo[version].activatedAt.gtz();
204
291
  }
205
292
 
206
- function getRegistry() external view returns(address)
293
+
294
+ function getRegistry() external view returns(address)
207
295
  {
208
296
  return (address(_registry));
209
297
  }
210
298
 
211
- function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
212
- {
213
- return _release[version];
299
+ function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
300
+ return _releaseInfo[version];
214
301
  }
215
302
 
216
- function getNextVersion() public view returns(VersionPart)
217
- {
303
+ function getNextVersion() public view returns(VersionPart) {
218
304
  return _next;
219
305
  }
220
306
 
@@ -226,97 +312,152 @@ contract ReleaseManager is AccessManaged
226
312
  return _initial;
227
313
  }
228
314
 
315
+ function getReleaseAccessManager(VersionPart version) external view returns(AccessManagerExtendedWithDisableInitializeable) {
316
+ return _releaseAccessManager[version];
317
+ }
318
+
229
319
  //--- private functions ----------------------------------------------------//
230
320
 
231
- function _getAndVerifyContractInfo(
321
+ function _verifyService(IService service)
322
+ internal
323
+ returns(
324
+ IRegistry.ObjectInfo memory serviceInfo,
325
+ ObjectType serviceDomain,
326
+ VersionPart serviceVersion
327
+ )
328
+ {
329
+ if(!service.supportsInterface(type(IService).interfaceId)) {
330
+ revert ErrorReleaseManagerNotService(service);
331
+ }
332
+
333
+ address owner = msg.sender;
334
+ address serviceAuthority = service.authority();
335
+ serviceVersion = service.getVersion().toMajorPart();
336
+ serviceDomain = service.getDomain();// checked in registry
337
+ serviceInfo = service.getInitialInfo();
338
+
339
+ _verifyServiceInfo(service, serviceInfo, owner);
340
+
341
+ VersionPart releaseVersion = getNextVersion(); // never 0
342
+ address releaseAuthority = address(_releaseAccessManager[releaseVersion]); // can be zero if registering service when release is not created
343
+
344
+ // IMPORTANT: can not guarantee service access is actually controlled by authority
345
+ if(serviceAuthority != releaseAuthority) {
346
+ revert ErrorReleaseManagerServiceReleaseAuthorityMismatch(
347
+ service,
348
+ serviceAuthority,
349
+ releaseAuthority);
350
+ }
351
+
352
+ if(serviceVersion != releaseVersion) {
353
+ revert ErrorReleaseManagerServiceReleaseVersionMismatch(
354
+ service,
355
+ serviceVersion,
356
+ releaseVersion);
357
+ }
358
+ }
359
+
360
+ function _verifyServiceInfo(
232
361
  IService service,
233
- ObjectType expectedType,
362
+ IRegistry.ObjectInfo memory info,
234
363
  address expectedOwner // assume always valid, can not be 0
235
364
  )
236
365
  internal
237
- // view
238
- returns(
239
- IRegistry.ObjectInfo memory info
240
- )
366
+ view
241
367
  {
242
- info = service.getInitialInfo();
243
- info.objectAddress = address(service);
244
- info.isInterceptor = false; // service is never interceptor, at least now
368
+ if(info.objectAddress != address(service)) {
369
+ revert ErrorReleaseManagerServiceInfoAddressInvalid(service, address(service));
370
+ }
245
371
 
246
- if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
247
- revert UnexpectedRegisterableType(expectedType, info.objectType);
372
+ if(info.isInterceptor != false) { // service is never interceptor
373
+ revert ErrorReleaseManagerServiceInfoInterceptorInvalid(service, info.isInterceptor);
374
+ }
375
+
376
+ if(info.objectType != SERVICE()) {// type is checked in registry anyway...but service logic may depend on expected value
377
+ revert ErrorReleaseManagerServiceInfoTypeInvalid(service, SERVICE(), info.objectType);
248
378
  }
249
379
 
250
380
  address owner = info.initialOwner;
251
381
 
252
382
  if(owner != expectedOwner) { // registerable owner protection
253
- revert NotRegisterableOwner(expectedOwner);
383
+ revert ErrorReleaseManagerServiceInfoOwnerInvalid(service, expectedOwner, owner);
254
384
  }
255
385
 
256
386
  if(owner == address(service)) {
257
- revert SelfRegistration();
387
+ revert ErrorReleaseManagerServiceSelfRegistration(service);
258
388
  }
259
389
 
260
390
  if(_registry.isRegistered(owner)) {
261
- revert RegisterableOwnerIsRegistered();
391
+ revert ErrorReleaseManagerServiceOwnerRegistered(service, owner);
262
392
  }
263
393
  }
264
394
 
265
- function _verifyService(
266
- IService service,
267
- VersionPart expectedVersion,
268
- ObjectType expectedDomain
395
+ function _verifyReleaseAuthorizations(
396
+ address[] memory serviceAddress,
397
+ RoleId[][] memory serviceRoles,
398
+ RoleId[][] memory functionRoles,
399
+ bytes4[][][] memory selectors
269
400
  )
270
401
  internal
271
402
  view
272
- returns(ObjectType)
273
403
  {
274
- if(service.getMajorVersion() != expectedVersion) {
275
- revert UnexpectedServiceVersion(expectedVersion, service.getMajorVersion());
276
- }
277
-
278
- if(service.getDomain() != expectedDomain) {
279
- revert UnexpectedServiceDomain(expectedDomain, service.getDomain());
404
+ for(uint serviceIdx = 0; serviceIdx < serviceAddress.length; serviceIdx++)
405
+ {
406
+ for(uint roleIdx = 0; roleIdx < serviceRoles[serviceIdx].length; roleIdx++)
407
+ {
408
+ RoleId role = serviceRoles[serviceIdx][roleIdx];
409
+ if(role == ADMIN_ROLE() || role == PUBLIC_ROLE()) {
410
+ revert ErrorReleaseManagerServiceRoleInvalid(serviceAddress[serviceIdx], role);
411
+ }
412
+ }
280
413
  }
281
-
282
- return expectedDomain;
414
+ // TODO no duplicate service "domain" role per release
415
+ // TODO no duplicate service roles per service
416
+ // TODO no duplicate service function roles per service
417
+ // TODO no duplicate service function selectors per service
283
418
  }
284
419
 
285
- // TODO check if registry supports types specified in the config array
286
- function _createRelease(IRegistryService.FunctionConfig[] memory config)
420
+ function _setServiceAuthorizations(
421
+ AccessManagerExtendedWithDisableInitializeable accessManager, // release access manager
422
+ address serviceAddress,
423
+ string memory serviceName,
424
+ RoleId[] memory serviceRoles,
425
+ string[] memory serviceRoleNames,
426
+ RoleId[] memory functionRoles,
427
+ string[] memory functionRoleNames,
428
+ bytes4[][] memory selectors
429
+ )
287
430
  internal
288
431
  {
289
- VersionPart version = getNextVersion();
432
+ accessManager.createTarget(serviceAddress, serviceName);
290
433
 
291
- if(config.length == 0) {
292
- revert ConfigMissing();
293
- }
294
- // always in release
295
- _release[version].domains.push(REGISTRY());
296
- for(uint idx = 0; idx < config.length; idx++)
434
+ for(uint idx = 0; idx < functionRoles.length; idx++)
297
435
  {
298
- ObjectType domain = config[idx].serviceDomain;
299
- // not "registry service" / zero domain
300
- if(
301
- domain == REGISTRY() ||
302
- domain.eqz()
303
- ) { revert ConfigServiceDomainInvalid(idx, domain); }
304
-
305
- bytes4[] memory selectors = config[idx].selectors;
306
-
307
- // 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
308
- // no overwrite
309
- if(_selectors[version][domain].length > 0) {
310
- revert SelectorAlreadyExists(version, domain);
436
+ uint64 roleInt = functionRoles[idx].toInt();
437
+
438
+ if(!accessManager.isRoleExists(roleInt)) {
439
+ accessManager.createRole(roleInt, functionRoleNames[idx]);
311
440
  }
312
-
313
- _selectors[version][domain] = selectors;
314
- _release[version].domains.push(domain);
441
+
442
+ accessManager.setTargetFunctionRole(
443
+ serviceAddress,
444
+ selectors[idx],
445
+ roleInt);
315
446
  }
316
- // TODO set when activated?
317
- _release[version].createdAt = TimestampLib.blockTimestamp();
318
- //_release[version].updatedAt = TimestampLib.blockTimestamp();
447
+
448
+ for(uint idx = 0; idx < serviceRoles.length; idx++)
449
+ {
450
+ uint64 roleInt = serviceRoles[idx].toInt();
451
+
452
+ if(!accessManager.isRoleExists(roleInt)) {
453
+ accessManager.createRole(roleInt, serviceRoleNames[idx]);
454
+ }
319
455
 
320
- _awaitingRegistration = config.length;
456
+ accessManager.grantRole(
457
+ serviceRoles[idx].toInt(),
458
+ serviceAddress,
459
+ 0);
460
+ }
461
+
321
462
  }
322
- }
463
+ }