@etherisc/gif-next 0.0.2-fca9315-260 → 0.0.2-fd4931b-974

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 (535) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1410 -0
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1343 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +799 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/{components/Pool.sol/Pool.json → distribution/IDistributionComponent.sol/IDistributionComponent.json} +366 -367
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +808 -0
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +68 -54
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +267 -1594
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +285 -211
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +412 -2526
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +480 -166
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +132 -0
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +610 -421
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +438 -399
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +348 -106
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +3468 -0
  32. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  33. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  34. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  35. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +6 -1
  36. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
  38. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  39. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +58 -75
  40. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  41. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  42. package/artifacts/contracts/instance/module/{ISetup.sol/ISetup.json → IComponents.sol/IComponents.json} +2 -2
  43. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  45. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  46. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  47. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  48. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  49. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1091 -0
  50. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  51. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +723 -0
  52. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  53. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +257 -288
  54. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  55. package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +565 -186
  56. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  57. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1044 -0
  58. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  59. package/artifacts/contracts/pool/Pool.sol/Pool.json +1559 -0
  60. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  61. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1411 -0
  62. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +719 -0
  64. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  65. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +820 -0
  66. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +699 -0
  68. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  69. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1264 -0
  70. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +787 -0
  72. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  73. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IApplicationService.sol/IApplicationService.json} +211 -212
  74. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  75. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  76. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  77. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +237 -302
  78. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  79. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +530 -0
  80. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  81. package/artifacts/contracts/{components/Product.sol/Product.json → product/IProductComponent.sol/IProductComponent.json} +351 -311
  82. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  83. package/artifacts/contracts/{instance/service/IDistributionService.sol/IDistributionService.json → product/IProductService.sol/IProductService.json} +112 -172
  84. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  85. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1132 -0
  86. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  87. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +731 -0
  88. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  89. package/artifacts/contracts/product/PricingService.sol/PricingService.json +969 -0
  90. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +755 -0
  92. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  93. package/artifacts/contracts/{components/IProductComponent.sol/IProductComponent.json → product/Product.sol/Product.json} +857 -214
  94. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  95. package/artifacts/contracts/product/ProductService.sol/ProductService.json +673 -0
  96. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  97. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +675 -0
  98. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  99. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  100. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  101. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +158 -13
  102. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +337 -225
  104. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  105. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  106. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  107. package/artifacts/contracts/registry/Registry.sol/Registry.json +277 -30
  108. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  109. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +74 -61
  110. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +465 -267
  112. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +334 -93
  114. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +634 -69
  116. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.json +137 -0
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +448 -50
  120. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  121. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  122. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  123. package/artifacts/contracts/{components/Distribution.sol/Distribution.json → shared/Component.sol/Component.json} +321 -280
  124. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  125. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1461 -0
  126. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  127. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +765 -0
  128. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  129. package/artifacts/contracts/{instance/service/IProductService.sol/IProductService.json → shared/ComponentVerifyingService.sol/ComponentVerifyingService.json} +215 -226
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  132. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  133. package/artifacts/contracts/{components/IDistributionComponent.sol/IDistributionComponent.json → shared/IComponent.sol/IComponent.json} +205 -228
  134. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  135. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +854 -0
  136. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  137. package/artifacts/contracts/{components/Component.sol/Component.json → shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json} +203 -160
  138. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  139. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +50 -1
  140. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  141. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +1 -1
  142. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
  144. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  145. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +207 -0
  146. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  147. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -29
  148. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  149. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  150. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  151. package/artifacts/contracts/shared/IService.sol/IService.json +71 -160
  152. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  153. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  154. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  155. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +1030 -0
  156. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  157. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +581 -0
  158. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  159. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +194 -0
  160. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +4 -0
  161. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +314 -0
  162. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  163. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +102 -35
  164. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  165. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +320 -0
  166. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  167. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +310 -74
  168. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  169. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +125 -60
  170. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  171. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  172. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  173. package/artifacts/contracts/shared/Service.sol/Service.json +172 -160
  174. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  175. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +60 -6
  176. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  177. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  178. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  179. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  180. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  181. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1770 -0
  182. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  183. package/artifacts/contracts/{instance/base/ComponentService.sol/ComponentService.json → staking/IStakingService.sol/IStakingService.json} +261 -238
  184. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  185. package/artifacts/contracts/staking/Staking.sol/Staking.json +2500 -0
  186. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  187. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +844 -0
  188. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  189. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +263 -0
  190. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  191. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +960 -0
  192. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  193. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +694 -0
  194. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  195. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +308 -0
  196. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  197. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  198. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  199. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  200. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  201. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +16 -3
  202. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  204. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  205. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  206. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  207. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  208. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  209. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  210. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  211. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +185 -0
  212. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  213. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  214. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  215. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  216. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  217. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  218. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  219. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  220. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  221. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  222. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  223. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  224. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  225. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +148 -0
  226. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  227. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  228. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  229. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +39 -8
  230. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  231. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  232. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  233. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  234. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  235. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  236. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  237. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  238. package/contracts/distribution/Distribution.sol +263 -0
  239. package/contracts/distribution/DistributionService.sol +298 -0
  240. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +15 -12
  241. package/contracts/distribution/IDistributionComponent.sol +66 -0
  242. package/contracts/distribution/IDistributionService.sol +81 -0
  243. package/contracts/instance/BundleManager.sol +15 -14
  244. package/contracts/instance/IInstance.sol +49 -44
  245. package/contracts/instance/IInstanceService.sol +57 -15
  246. package/contracts/instance/Instance.sol +138 -179
  247. package/contracts/instance/InstanceAccessManager.sol +406 -161
  248. package/contracts/instance/InstanceAuthorizationsLib.sol +336 -0
  249. package/contracts/instance/InstanceReader.sol +135 -62
  250. package/contracts/instance/InstanceService.sol +240 -305
  251. package/contracts/instance/InstanceServiceManager.sol +12 -22
  252. package/contracts/instance/InstanceStore.sol +260 -0
  253. package/contracts/instance/base/BalanceStore.sol +118 -0
  254. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +8 -3
  255. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +12 -14
  256. package/contracts/instance/module/IAccess.sol +24 -18
  257. package/contracts/instance/module/IBundle.sol +8 -8
  258. package/contracts/instance/module/IComponents.sol +52 -0
  259. package/contracts/instance/module/IDistribution.sol +7 -4
  260. package/contracts/instance/module/IPolicy.sol +56 -17
  261. package/contracts/instance/module/IRisk.sol +1 -1
  262. package/contracts/{test/TestToken.sol → mock/Dip.sol} +5 -5
  263. package/contracts/pool/BundleService.sol +296 -0
  264. package/contracts/pool/BundleServiceManager.sol +42 -0
  265. package/contracts/pool/IBundleService.sol +106 -0
  266. package/contracts/pool/IPoolComponent.sol +112 -0
  267. package/contracts/pool/IPoolService.sol +147 -0
  268. package/contracts/pool/Pool.sol +299 -0
  269. package/contracts/pool/PoolService.sol +424 -0
  270. package/contracts/pool/PoolServiceManager.sol +42 -0
  271. package/contracts/product/ApplicationService.sol +254 -0
  272. package/contracts/product/ApplicationServiceManager.sol +38 -0
  273. package/contracts/product/ClaimService.sol +437 -0
  274. package/contracts/product/ClaimServiceManager.sol +38 -0
  275. package/contracts/product/IApplicationService.sol +62 -0
  276. package/contracts/product/IClaimService.sol +93 -0
  277. package/contracts/product/IPolicyService.sol +78 -0
  278. package/contracts/product/IPricingService.sol +39 -0
  279. package/contracts/product/IProductComponent.sol +42 -0
  280. package/contracts/product/IProductService.sol +33 -0
  281. package/contracts/product/PolicyService.sol +473 -0
  282. package/contracts/product/PolicyServiceManager.sol +42 -0
  283. package/contracts/product/PricingService.sol +301 -0
  284. package/contracts/product/PricingServiceManager.sol +42 -0
  285. package/contracts/product/Product.sol +377 -0
  286. package/contracts/product/ProductService.sol +124 -0
  287. package/contracts/product/ProductServiceManager.sol +42 -0
  288. package/contracts/registry/ChainNft.sol +15 -1
  289. package/contracts/registry/IRegistry.sol +38 -18
  290. package/contracts/registry/IRegistryService.sol +41 -38
  291. package/contracts/registry/ITransferInterceptor.sol +1 -0
  292. package/contracts/registry/Registry.sol +193 -82
  293. package/contracts/registry/RegistryAccessManager.sol +72 -121
  294. package/contracts/registry/RegistryService.sol +164 -98
  295. package/contracts/registry/RegistryServiceManager.sol +28 -18
  296. package/contracts/registry/ReleaseManager.sol +390 -192
  297. package/contracts/registry/ServiceAuthorizationsLib.sol +173 -0
  298. package/contracts/registry/TokenRegistry.sol +263 -56
  299. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  300. package/contracts/shared/Component.sol +286 -0
  301. package/contracts/shared/ComponentService.sol +595 -0
  302. package/contracts/shared/ComponentServiceManager.sol +35 -0
  303. package/contracts/shared/ComponentVerifyingService.sol +111 -0
  304. package/contracts/shared/ERC165.sol +14 -12
  305. package/contracts/shared/IComponent.sol +74 -0
  306. package/contracts/shared/IComponentService.sol +91 -0
  307. package/contracts/shared/IInstanceLinkedComponent.sol +46 -0
  308. package/contracts/{instance/base → shared}/IKeyValueStore.sol +14 -10
  309. package/contracts/{instance/base → shared}/ILifecycle.sol +3 -3
  310. package/contracts/shared/INftOwnable.sol +12 -11
  311. package/contracts/shared/IPolicyHolder.sol +45 -0
  312. package/contracts/shared/IRegisterable.sol +3 -3
  313. package/contracts/shared/IRegistryLinked.sol +11 -0
  314. package/contracts/shared/IService.sol +6 -4
  315. package/contracts/shared/IVersionable.sol +5 -48
  316. package/contracts/shared/InstanceLinkedComponent.sol +145 -0
  317. package/contracts/shared/KeyValueStore.sol +130 -0
  318. package/contracts/{instance/base → shared}/Lifecycle.sol +28 -7
  319. package/contracts/shared/NftIdSetManager.sol +69 -0
  320. package/contracts/shared/NftOwnable.sol +64 -85
  321. package/contracts/shared/PolicyHolder.sol +101 -0
  322. package/contracts/shared/ProxyManager.sol +126 -25
  323. package/contracts/shared/Registerable.sol +19 -30
  324. package/contracts/shared/RegistryLinked.sol +43 -0
  325. package/contracts/shared/Service.sol +37 -20
  326. package/contracts/shared/TokenHandler.sol +37 -6
  327. package/contracts/shared/Versionable.sol +4 -92
  328. package/contracts/staking/IStaking.sol +113 -0
  329. package/contracts/staking/IStakingService.sol +122 -0
  330. package/contracts/staking/Staking.sol +348 -0
  331. package/contracts/staking/StakingManager.sol +52 -0
  332. package/contracts/staking/StakingReader.sol +92 -0
  333. package/contracts/staking/StakingService.sol +294 -0
  334. package/contracts/staking/StakingServiceManager.sol +44 -0
  335. package/contracts/staking/TargetManagerLib.sol +141 -0
  336. package/contracts/type/Amount.sol +114 -0
  337. package/contracts/{types → type}/Blocknumber.sol +7 -1
  338. package/contracts/type/ClaimId.sol +75 -0
  339. package/contracts/{types → type}/DistributorType.sol +2 -2
  340. package/contracts/{types → type}/Fee.sol +32 -22
  341. package/contracts/{types → type}/NftId.sol +17 -11
  342. package/contracts/{types → type}/NftIdSet.sol +1 -1
  343. package/contracts/{types → type}/ObjectType.sol +26 -9
  344. package/contracts/type/PayoutId.sol +82 -0
  345. package/contracts/{types → type}/Referral.sol +4 -0
  346. package/contracts/type/RoleId.sol +143 -0
  347. package/contracts/type/Seconds.sol +63 -0
  348. package/contracts/{types → type}/StateId.sol +24 -6
  349. package/contracts/{types → type}/Timestamp.sol +18 -13
  350. package/contracts/{types → type}/UFixed.sol +1 -0
  351. package/contracts/{types → type}/Version.sol +1 -0
  352. package/package.json +3 -3
  353. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  354. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  355. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
  356. package/artifacts/contracts/components/IComponent.sol/IComponent.json +0 -455
  357. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  358. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  359. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  360. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  361. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  362. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  363. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  364. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  365. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  366. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  367. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  368. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  369. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  370. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  371. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  372. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  373. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  374. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  375. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  376. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  377. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  378. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  379. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  380. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  381. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  382. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  383. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  384. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  385. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  386. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  387. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  388. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  389. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  390. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  391. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  392. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  393. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  394. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  395. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  396. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  397. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  398. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  399. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  400. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  401. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  402. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  403. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +0 -261
  404. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
  405. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  406. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  407. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  408. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -502
  409. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  410. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -169
  411. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  412. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  413. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
  414. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  415. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1102
  416. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  417. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -449
  418. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  419. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -772
  420. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  421. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -437
  422. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  423. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  424. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  425. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  426. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  427. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  428. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1227
  429. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  430. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -505
  431. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  432. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -806
  433. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  434. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -437
  435. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  436. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -856
  437. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  438. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -437
  439. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  440. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  441. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  442. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  443. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  444. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -313
  445. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  446. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  447. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  448. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -608
  449. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  450. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  451. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  452. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  453. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  454. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -286
  455. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  456. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  457. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  458. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  459. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  460. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  461. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  462. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  463. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  464. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  465. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  466. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  467. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  468. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  469. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  470. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  471. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  472. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -123
  473. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  474. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  475. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  476. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  477. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  478. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  479. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  480. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  481. package/contracts/components/Component.sol +0 -216
  482. package/contracts/components/Distribution.sol +0 -150
  483. package/contracts/components/IComponent.sol +0 -43
  484. package/contracts/components/IDistributionComponent.sol +0 -47
  485. package/contracts/components/IPoolComponent.sol +0 -60
  486. package/contracts/components/IProductComponent.sol +0 -39
  487. package/contracts/components/Pool.sol +0 -227
  488. package/contracts/components/Product.sol +0 -265
  489. package/contracts/experiment/cloning/Cloner.sol +0 -47
  490. package/contracts/experiment/errors/Require.sol +0 -38
  491. package/contracts/experiment/errors/Revert.sol +0 -44
  492. package/contracts/experiment/inheritance/A.sol +0 -53
  493. package/contracts/experiment/inheritance/B.sol +0 -28
  494. package/contracts/experiment/inheritance/C.sol +0 -34
  495. package/contracts/experiment/inheritance/IA.sol +0 -13
  496. package/contracts/experiment/inheritance/IB.sol +0 -10
  497. package/contracts/experiment/inheritance/IC.sol +0 -12
  498. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  499. package/contracts/experiment/statemachine/ISM.sol +0 -25
  500. package/contracts/experiment/statemachine/SM.sol +0 -57
  501. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  502. package/contracts/experiment/types/TypeA.sol +0 -47
  503. package/contracts/experiment/types/TypeB.sol +0 -29
  504. package/contracts/instance/base/ComponentService.sol +0 -134
  505. package/contracts/instance/base/KeyValueStore.sol +0 -172
  506. package/contracts/instance/module/ISetup.sol +0 -46
  507. package/contracts/instance/module/ITreasury.sol +0 -23
  508. package/contracts/instance/service/BundleService.sol +0 -293
  509. package/contracts/instance/service/BundleServiceManager.sol +0 -51
  510. package/contracts/instance/service/DistributionService.sol +0 -106
  511. package/contracts/instance/service/IBundleService.sol +0 -44
  512. package/contracts/instance/service/IDistributionService.sol +0 -12
  513. package/contracts/instance/service/IPolicyService.sol +0 -94
  514. package/contracts/instance/service/IPoolService.sol +0 -20
  515. package/contracts/instance/service/IProductService.sol +0 -40
  516. package/contracts/instance/service/PolicyService.sol +0 -538
  517. package/contracts/instance/service/PolicyServiceManager.sol +0 -54
  518. package/contracts/instance/service/PoolService.sol +0 -110
  519. package/contracts/instance/service/PoolServiceManager.sol +0 -51
  520. package/contracts/instance/service/ProductService.sol +0 -234
  521. package/contracts/instance/service/ProductServiceManager.sol +0 -54
  522. package/contracts/shared/ContractDeployerLib.sol +0 -72
  523. package/contracts/test/TestFee.sol +0 -25
  524. package/contracts/test/TestRegisterable.sol +0 -18
  525. package/contracts/test/TestRoleId.sol +0 -14
  526. package/contracts/test/TestService.sol +0 -25
  527. package/contracts/test/TestVersion.sol +0 -44
  528. package/contracts/test/TestVersionable.sol +0 -17
  529. package/contracts/test/Usdc.sol +0 -26
  530. package/contracts/types/ChainId.sol +0 -38
  531. package/contracts/types/NumberId.sol +0 -52
  532. package/contracts/types/RoleId.sol +0 -90
  533. /package/contracts/{types → type}/AddressSet.sol +0 -0
  534. /package/contracts/{types → type}/Key32.sol +0 -0
  535. /package/contracts/{types → type}/RiskId.sol +0 -0
@@ -1,225 +1,331 @@
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";
5
+ import {IAccessManager} from "@openzeppelin/contracts/access/manager/IAccessManager.sol";
4
6
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
7
 
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";
11
-
12
- import {IService} from "../shared/IService.sol";
13
-
8
+ import {AccessManagerUpgradeableInitializeable} from "../shared/AccessManagerUpgradeableInitializeable.sol";
9
+ import {ILifecycle} from "../shared/ILifecycle.sol";
10
+ import {IRegisterable} from "../shared/IRegisterable.sol";
14
11
  import {IRegistry} from "./IRegistry.sol";
15
- import {Registry} from "./Registry.sol";
16
12
  import {IRegistryService} from "./IRegistryService.sol";
13
+ import {IService} from "../shared/IService.sol";
14
+ import {IStaking} from "../staking/IStaking.sol";
15
+ import {NftId} from "../type/NftId.sol";
16
+ import {ObjectType, ObjectTypeLib, zeroObjectType, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
17
+ import {Registry} from "./Registry.sol";
17
18
  import {RegistryAccessManager} from "./RegistryAccessManager.sol";
18
-
19
-
20
- contract ReleaseManager is AccessManaged
19
+ import {RoleId, ADMIN_ROLE} from "../type/RoleId.sol";
20
+ import {ServiceAuthorizationsLib} from "./ServiceAuthorizationsLib.sol";
21
+ import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE} from "../type/StateId.sol";
22
+ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
23
+ import {TokenRegistry} from "./TokenRegistry.sol";
24
+ import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
25
+
26
+ // gif admin is not technical, should sent simple txs
27
+ // foundation creates
28
+ // other guy deployes
29
+ // other guy checks (can precompute addresses and compare with what deployed)
30
+ // foundation activates
31
+ // TODO add function to deactivate releases
32
+ // TODO in next pr add getVersion() to releaseAccessManager only, set in initialize()
33
+ // TODO in next pr make single base for registry access manager, release access manager and instance access manager
34
+
35
+ contract ReleaseManager is
36
+ AccessManaged,
37
+ ILifecycle
21
38
  {
22
39
  using ObjectTypeLib for ObjectType;
23
40
 
24
- event LogReleaseCreation(VersionPart version);
41
+ event LogReleaseCreation(VersionPart version, bytes32 salt, AccessManagerUpgradeableInitializeable accessManager);
25
42
  event LogReleaseActivation(VersionPart version);
26
43
 
27
44
  // createNextRelease
28
- error NotRegistryService();
29
- error UnexpectedServiceAuthority(address expected, address found);
45
+ error ErrorReleaseManagerReleaseCreationDisallowed(StateId currentStateId);
46
+
47
+ // prepareRelease
48
+ error ErrorReleaseManagerReleasePreparationDisallowed(StateId currentStateId);
49
+ error ErrorReleaseManagerReleaseEmpty();
50
+ error ErrorReleaseManagerReleaseAlreadyCreated(VersionPart version);
51
+
52
+ // register staking
53
+ error ErrorReleaseManagerStakingAlreadySet(address stakingAddress);
30
54
 
31
55
  // registerService
32
- error NotService();
56
+ error ErrorReleaseManagerServiceRegistrationDisallowed(StateId currentStateId);
57
+ error ErrorReleaseManagerNotService(IService service);
58
+ error ErrorReleaseManagerServiceAddressInvalid(IService given, address expected);
33
59
 
34
60
  // activateNextRelease
35
- error ReleaseNotCreated();
36
- error ReleaseRegistrationNotFinished();
61
+ error ErrorReleaseManagerActivationDisallowed(StateId currentStateId);
62
+ error ErrorReleaseManagerReleaseNotCreated(VersionPart releaseVersion);
63
+ error ErrorReleaseManagerReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
64
+ error ErrorReleaseManagerReleaseAlreadyActivated(VersionPart releaseVersion);
37
65
 
38
- // _getAndVerifyContractInfo
39
- error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
40
- error NotRegisterableOwner(address notOwner);
41
- error SelfRegistration();
42
- error RegisterableOwnerIsRegistered();
66
+ // _verifyService
67
+ error ErrorReleaseManagerServiceReleaseAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
68
+ error ErrorReleaseManagerServiceReleaseVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
43
69
 
44
70
  // _verifyServiceInfo
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;
71
+ error ErrorReleaseManagerServiceInfoAddressInvalid(IService service, address expected);
72
+ error ErrorReleaseManagerServiceInfoInterceptorInvalid(IService service, bool isInterceptor);
73
+ error ErrorReleaseManagerServiceInfoTypeInvalid(IService service, ObjectType expected, ObjectType found);
74
+ error ErrorReleaseManagerServiceInfoOwnerInvalid(IService service, address expected, address found);
75
+ error ErrorReleaseManagerServiceSelfRegistration(IService service);
76
+ error ErrorReleaseManagerServiceOwnerRegistered(IService service, address owner);
57
77
 
58
- VersionPart immutable _initial;// first active version
59
- VersionPart _latest;// latest active version
60
- VersionPart _next;// version to create and activate
78
+ // _verifyServiceAuthorizations
79
+ error ErrorReleaseManagerServiceRoleInvalid(address service, RoleId role);
61
80
 
62
- mapping(VersionPart version => IRegistry.ReleaseInfo info) _release;
81
+ RegistryAccessManager public immutable _accessManager;
82
+ Registry public immutable _registry;
83
+ TokenRegistry private immutable _tokenRegistry;
84
+ IStaking private _staking;
63
85
 
64
- mapping(VersionPart version => mapping(ObjectType serviceDomain => bytes4)) _selector; // registry service function selector assigned to domain
86
+ mapping(VersionPart version => AccessManagerUpgradeableInitializeable accessManager) internal _releaseAccessManager;
87
+ mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
88
+ mapping(address registryService => bool isActive) internal _active;// have access to registry
65
89
 
66
- uint _awaitingRegistration; // "services left to register" counter
90
+ VersionPart immutable internal _initial;// first active version
91
+ VersionPart internal _latest; // latest active version
92
+ VersionPart internal _next; // version to create and activate
93
+ StateId internal _state; // current state of release manager
67
94
 
68
- mapping(address registryService => bool isActive) _active;
95
+ uint256 internal _awaitingRegistration; // "services left to register" counter
69
96
 
70
- mapping(VersionPart version => bool isValid) _valid; // TODO refactor to use _active only
71
97
 
72
98
  constructor(
73
99
  RegistryAccessManager accessManager,
74
- VersionPart initialVersion)
100
+ VersionPart initialVersion,
101
+ address dipTokenAddress
102
+ )
75
103
  AccessManaged(accessManager.authority())
76
104
  {
77
- require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
78
-
79
105
  _accessManager = accessManager;
80
-
81
106
  _initial = initialVersion;
82
- _next = initialVersion;
107
+ _next = VersionPartLib.toVersionPart(initialVersion.toInt() - 1);
108
+ _state = getInitialState(RELEASE());
83
109
 
84
110
  _registry = new Registry();
111
+ _tokenRegistry = new TokenRegistry(
112
+ address(_registry),
113
+ dipTokenAddress);
114
+
115
+ _registry.setTokenRegistry(address(_tokenRegistry));
85
116
  }
86
117
 
118
+
87
119
  /// @dev skips previous release if was not activated
120
+ /// sets release manager into state SCHEDULED
88
121
  function createNextRelease()
89
122
  external
90
123
  restricted // GIF_ADMIN_ROLE
124
+ returns(VersionPart version)
91
125
  {
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
95
- _awaitingRegistration = 0;
126
+ if (!isValidTransition(RELEASE(), _state, SCHEDULED())) {
127
+ revert ErrorReleaseManagerReleaseCreationDisallowed(_state);
128
+ }
96
129
 
97
- emit LogReleaseCreation(_next);
130
+ _next = VersionPartLib.toVersionPart(_next.toInt() + 1);
131
+ _awaitingRegistration = 0;
132
+ _state = SCHEDULED();
98
133
  }
99
134
 
100
- function activateNextRelease()
101
- external
102
- restricted // GIF_ADMIN_ROLE
135
+
136
+ function prepareNextRelease(
137
+ address[] memory addresses,
138
+ RoleId[][] memory serviceRoles,
139
+ RoleId[][] memory functionRoles,
140
+ bytes4[][][] memory selectors,
141
+ bytes32 salt
142
+ )
143
+ external
144
+ restricted() // GIF_MANAGER_ROLE
145
+ returns(
146
+ address releaseAccessManagerAddress,
147
+ VersionPart version,
148
+ bytes32 releaseSalt
149
+ )
103
150
  {
104
- VersionPart version = _next;
105
- address service = _registry.getServiceAddress(REGISTRY(), version);
151
+ if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
152
+ revert ErrorReleaseManagerReleasePreparationDisallowed(_state);
153
+ }
106
154
 
107
- // release was created
108
- if(service == address(0)) {
109
- revert ReleaseNotCreated();
155
+ if(addresses.length == 0) {
156
+ revert ErrorReleaseManagerReleaseEmpty();
110
157
  }
111
158
 
112
- // release fully deployed
113
159
  if(_awaitingRegistration > 0) {
114
- revert ReleaseRegistrationNotFinished();
160
+ revert ErrorReleaseManagerReleaseAlreadyCreated(version);
115
161
  }
116
162
 
117
- //setTargetClosed(service, false);
163
+ _verifyReleaseAuthorizations(addresses, serviceRoles, functionRoles, selectors);
118
164
 
119
- _latest = version;
165
+ version = getNextVersion();
120
166
 
121
- _active[service] = true;
122
- _valid[version] = true;
167
+ _releaseInfo[version].version = version;
168
+ _releaseInfo[version].addresses = addresses;
169
+ _releaseInfo[version].serviceRoles = serviceRoles;
170
+ _releaseInfo[version].functionRoles = functionRoles;
171
+ _releaseInfo[version].selectors = selectors;
172
+ _awaitingRegistration = addresses.length;
173
+ _state = DEPLOYING();
123
174
 
124
- emit LogReleaseActivation(version);
175
+ version = getNextVersion();
176
+ // ensures unique salt
177
+ releaseSalt = keccak256(
178
+ bytes.concat(
179
+ bytes32(version.toInt()),
180
+ salt));
181
+
182
+ releaseAccessManagerAddress = Clones.cloneDeterministic(_accessManager.authority(), releaseSalt);
183
+ AccessManagerUpgradeableInitializeable releaseAccessManager = AccessManagerUpgradeableInitializeable(releaseAccessManagerAddress);
184
+
185
+ _releaseAccessManager[version] = releaseAccessManager;
186
+
187
+ releaseAccessManager.initialize(address(this));
188
+
189
+ emit LogReleaseCreation(version, releaseSalt, releaseAccessManager);
125
190
  }
126
191
 
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)
192
+
193
+ function registerStaking(
194
+ address stakingAddress,
195
+ address stakingOwner
196
+ )
131
197
  external
132
- restricted // GIF_MANAGER_ROLE
198
+ restricted // GIF_ADMIN_ROLE
133
199
  returns(NftId nftId)
134
200
  {
135
- if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
136
- revert NotRegistryService();
137
- }
201
+ // TODO add verify staking contract
202
+ _staking = IStaking(stakingAddress);
138
203
 
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);
145
- }
204
+ nftId = _registry.registerStaking(
205
+ stakingAddress,
206
+ stakingOwner);
146
207
 
147
- IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
208
+ _staking.linkToRegisteredNftId();
209
+ }
148
210
 
149
- VersionPart version = _next;
150
- ObjectType domain = REGISTRY();
151
- _verifyServiceInfo(info, version, domain);
152
211
 
153
- // data: config bytes
154
- _createRelease(service.getFunctionConfigs());
212
+ function registerService(IService service)
213
+ external
214
+ restricted // GIF_MANAGER_ROLE
215
+ returns(NftId nftId)
216
+ {
217
+ if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
218
+ revert ErrorReleaseManagerServiceRegistrationDisallowed(_state);
219
+ }
220
+
221
+ (
222
+ IRegistry.ObjectInfo memory info,
223
+ ObjectType domain,
224
+ VersionPart version
225
+ ) = _verifyService(service);
226
+
227
+ require(_awaitingRegistration > 0, "_awaitingRegistration == 0");
228
+
229
+ uint serviceIdx = _awaitingRegistration - 1;
230
+ address serviceAddress = _releaseInfo[version].addresses[serviceIdx];
231
+ // TODO temp, while typescript addresses computation is not implemented
232
+ /*if(address(service) != serviceAddress) {
233
+ revert ErrorReleaseManagerServiceAddressInvalid(service, serviceAddress);
234
+ }*/
235
+
236
+ _setServiceAuthorizations(
237
+ _releaseAccessManager[version],
238
+ // TODO temp, while typescript addresses computation is not implemented
239
+ address(service),//serviceAddress,
240
+ _releaseInfo[version].serviceRoles[serviceIdx],
241
+ _releaseInfo[version].functionRoles[serviceIdx],
242
+ _releaseInfo[version].selectors[serviceIdx]);
243
+
244
+ // TODO decide for one of the approaches
245
+ // // service to service authorization
246
+ // ServiceAuthorizationsLib.ServiceAuthorization memory authz = ServiceAuthorizationsLib.getAuthorizations(domain);
247
+ // for(uint8 idx = 0; idx < authz.authorizedRole.length; idx++) {
248
+ // _accessManager.setTargetFunctionRole(
249
+ // address(service),
250
+ // authz.authorizedSelectors[idx],
251
+ // authz.authorizedRole[idx]);
252
+ // }
253
+
254
+ _awaitingRegistration = serviceIdx;
255
+ _state = DEPLOYING();
256
+
257
+ // checked in registry
258
+ _releaseInfo[version].domains.push(domain);
155
259
 
156
- //setTargetClosed(service, true);
157
-
158
260
  nftId = _registry.registerService(info, version, domain);
159
261
 
160
- // external call
161
262
  service.linkToRegisteredNftId();
162
263
  }
163
264
 
164
- // TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
165
- // TODO removing service from release? -> set _active to false forever, but keep all other records?
166
- function registerService(IService service)
167
- external
168
- restricted // GIF_MANAGER_ROLE
169
- returns(NftId nftId)
265
+
266
+ function activateNextRelease()
267
+ external
268
+ restricted // GIF_ADMIN_ROLE
170
269
  {
171
- if(!service.supportsInterface(type(IService).interfaceId)) {
172
- revert NotService();
270
+ if (!isValidTransition(RELEASE(), _state, ACTIVE())) {
271
+ revert ErrorReleaseManagerActivationDisallowed(_state);
173
272
  }
174
273
 
175
- IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
176
- VersionPart version = getNextVersion();
177
- ObjectType domain = _release[version].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
178
- _verifyServiceInfo(info, version, domain);
179
-
180
- // setup and grant unique role if service does registrations
181
- bytes4[] memory selector = new bytes4[](1);
182
- selector[0] = _selector[version][domain];
183
- address registryService = _registry.getServiceAddress(REGISTRY(), version);
184
- if(selector[0] != 0) {
185
- _accessManager.setAndGrantUniqueRole(
186
- address(service),
187
- registryService,
188
- selector);
274
+ VersionPart version = _next;
275
+ address service = _registry.getServiceAddress(REGISTRY(), version);
276
+
277
+ // release exists, registry service is a MUST
278
+ //if(_releaseAccessManager[version] == address(0)) {
279
+ if(service == address(0)) {
280
+ revert ErrorReleaseManagerReleaseNotCreated(version);
189
281
  }
190
-
191
- _awaitingRegistration--;
192
282
 
193
- nftId = _registry.registerService(info, version, domain);
283
+ // release fully deployed
284
+ if(_awaitingRegistration > 0) {
285
+ revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _awaitingRegistration);
286
+ }
287
+
288
+ // release is not activated
289
+ if(_releaseInfo[version].activatedAt.gtz()) {
290
+ revert ErrorReleaseManagerReleaseAlreadyActivated(version);
291
+ }
194
292
 
195
- // external call
196
- service.linkToRegisteredNftId();
293
+ _latest = version;
294
+ _state = ACTIVE();
295
+
296
+ _active[service] = true;
297
+ _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
298
+
299
+ emit LogReleaseActivation(version);
197
300
  }
198
301
 
199
302
  //--- view functions ----------------------------------------------------//
200
303
 
201
- function isActiveRegistryService(address service) external view returns(bool)
202
- {
304
+ function predictDeterministicAddress(
305
+ address implementation,
306
+ bytes32 salt,
307
+ address deployer
308
+ ) external pure returns (address predicted) {
309
+ return Clones.predictDeterministicAddress(implementation, salt, deployer);
310
+ }
311
+
312
+ function isActiveRegistryService(address service) external view returns(bool) {
203
313
  return _active[service];
204
314
  }
205
315
 
206
- function isValidRelease(VersionPart version) external view returns(bool)
207
- {
208
- return _valid[version];
316
+ function isValidRelease(VersionPart version) external view returns(bool) {
317
+ return _releaseInfo[version].activatedAt.gtz();
209
318
  }
210
319
 
211
- function getRegistry() external view returns(address)
212
- {
320
+ function getRegistryAddress() external view returns(address) {
213
321
  return (address(_registry));
214
322
  }
215
323
 
216
- function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
217
- {
218
- return _release[version];
324
+ function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
325
+ return _releaseInfo[version];
219
326
  }
220
327
 
221
- function getNextVersion() public view returns(VersionPart)
222
- {
328
+ function getNextVersion() public view returns(VersionPart) {
223
329
  return _next;
224
330
  }
225
331
 
@@ -231,102 +337,194 @@ contract ReleaseManager is AccessManaged
231
337
  return _initial;
232
338
  }
233
339
 
340
+ function getState() external view returns (StateId stateId) {
341
+ return _state;
342
+ }
343
+
344
+ function getRemainingServicesToRegister() external view returns (uint256 services) {
345
+ return _awaitingRegistration;
346
+ }
347
+
348
+ function getReleaseAccessManager(VersionPart version) external view returns(AccessManagerUpgradeableInitializeable) {
349
+ return _releaseAccessManager[version];
350
+ }
351
+
352
+ //--- ILifecycle -----------------------------------------------------------//
353
+
354
+ function hasLifecycle(ObjectType objectType) external view returns (bool) { return objectType == RELEASE(); }
355
+
356
+ function getInitialState(ObjectType objectType) public view returns (StateId stateId) {
357
+ if (objectType == RELEASE()) {
358
+ stateId = INITIAL();
359
+ }
360
+ }
361
+
362
+ function isValidTransition(
363
+ ObjectType objectType,
364
+ StateId fromId,
365
+ StateId toId
366
+ )
367
+ public
368
+ view
369
+ returns (bool isValid)
370
+ {
371
+ if (objectType != RELEASE()) { return false; }
372
+
373
+ if (fromId == INITIAL() && toId == SCHEDULED()) { return true; }
374
+ if (fromId == SCHEDULED() && toId == DEPLOYING()) { return true; }
375
+ if (fromId == DEPLOYING() && toId == SCHEDULED()) { return true; }
376
+ if (fromId == DEPLOYING() && toId == DEPLOYING()) { return true; }
377
+ if (fromId == DEPLOYING() && toId == ACTIVE()) { return true; }
378
+
379
+ return false;
380
+ }
381
+
234
382
  //--- private functions ----------------------------------------------------//
235
383
 
236
- function _getAndVerifyContractInfo(
384
+ function _verifyService(IService service)
385
+ internal
386
+ returns(
387
+ IRegistry.ObjectInfo memory serviceInfo,
388
+ ObjectType serviceDomain,
389
+ VersionPart serviceVersion
390
+ )
391
+ {
392
+ if(!service.supportsInterface(type(IService).interfaceId)) {
393
+ revert ErrorReleaseManagerNotService(service);
394
+ }
395
+
396
+ address owner = msg.sender;
397
+ address serviceAuthority = service.authority();
398
+ serviceVersion = service.getVersion().toMajorPart();
399
+ serviceDomain = service.getDomain();// checked in registry
400
+ serviceInfo = service.getInitialInfo();
401
+
402
+ _verifyServiceInfo(service, serviceInfo, owner);
403
+
404
+ VersionPart releaseVersion = getNextVersion(); // never 0
405
+ address releaseAuthority = address(_releaseAccessManager[releaseVersion]); // can be zero if registering service when release is not created
406
+
407
+ // IMPORTANT: can not guarantee service access is actually controlled by authority
408
+ if(serviceAuthority != releaseAuthority) {
409
+ revert ErrorReleaseManagerServiceReleaseAuthorityMismatch(
410
+ service,
411
+ serviceAuthority,
412
+ releaseAuthority);
413
+ }
414
+
415
+ if(serviceVersion != releaseVersion) {
416
+ revert ErrorReleaseManagerServiceReleaseVersionMismatch(
417
+ service,
418
+ serviceVersion,
419
+ releaseVersion);
420
+ }
421
+ }
422
+
423
+
424
+ function _verifyServiceInfo(
237
425
  IService service,
238
- ObjectType expectedType,
426
+ IRegistry.ObjectInfo memory info,
239
427
  address expectedOwner // assume always valid, can not be 0
240
428
  )
241
429
  internal
242
- // view
243
- returns(
244
- IRegistry.ObjectInfo memory info
245
- )
430
+ view
246
431
  {
247
- info = service.getInitialInfo();
248
- info.objectAddress = address(service);
249
- info.isInterceptor = false; // service is never interceptor, at least now
432
+ if(info.objectAddress != address(service)) {
433
+ revert ErrorReleaseManagerServiceInfoAddressInvalid(service, address(service));
434
+ }
250
435
 
251
- if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
252
- revert UnexpectedRegisterableType(expectedType, info.objectType);
436
+ if(info.isInterceptor != false) { // service is never interceptor
437
+ revert ErrorReleaseManagerServiceInfoInterceptorInvalid(service, info.isInterceptor);
438
+ }
439
+
440
+ if(info.objectType != SERVICE()) {// type is checked in registry anyway...but service logic may depend on expected value
441
+ revert ErrorReleaseManagerServiceInfoTypeInvalid(service, SERVICE(), info.objectType);
253
442
  }
254
443
 
255
444
  address owner = info.initialOwner;
256
445
 
257
446
  if(owner != expectedOwner) { // registerable owner protection
258
- revert NotRegisterableOwner(expectedOwner);
447
+ revert ErrorReleaseManagerServiceInfoOwnerInvalid(service, expectedOwner, owner);
259
448
  }
260
449
 
261
450
  if(owner == address(service)) {
262
- revert SelfRegistration();
451
+ revert ErrorReleaseManagerServiceSelfRegistration(service);
263
452
  }
264
453
 
265
454
  if(_registry.isRegistered(owner)) {
266
- revert RegisterableOwnerIsRegistered();
455
+ revert ErrorReleaseManagerServiceOwnerRegistered(service, owner);
267
456
  }
268
457
  }
269
458
 
270
- function _verifyServiceInfo(
271
- IRegistry.ObjectInfo memory info,
272
- VersionPart expectedVersion,
273
- ObjectType expectedDomain
459
+
460
+ function _verifyReleaseAuthorizations(
461
+ address[] memory serviceAddress,
462
+ RoleId[][] memory serviceRoles,
463
+ RoleId[][] memory functionRoles,
464
+ bytes4[][][] memory selectors
274
465
  )
275
466
  internal
276
467
  view
277
- returns(ObjectType)
278
468
  {
279
- (
280
- ObjectType domain,
281
- VersionPart version
282
- ) = abi.decode(info.data, (ObjectType, VersionPart));
283
-
284
- if(version != expectedVersion) {
285
- revert UnexpectedServiceVersion(expectedVersion, version);
286
- }
287
-
288
- if(domain != expectedDomain) {
289
- revert UnexpectedServiceDomain(expectedDomain, domain);
469
+ for(uint serviceIdx = 0; serviceIdx < serviceAddress.length; serviceIdx++)
470
+ {
471
+ for(uint roleIdx = 0; roleIdx < serviceRoles[serviceIdx].length; roleIdx++)
472
+ {
473
+ RoleId role = serviceRoles[serviceIdx][roleIdx];
474
+ if(role == ADMIN_ROLE()) {
475
+ revert ErrorReleaseManagerServiceRoleInvalid(serviceAddress[serviceIdx], role);
476
+ }
477
+ }
290
478
  }
291
479
 
292
- return domain;
480
+ // TODO no duplicate service "domain" role per release
481
+ // TODO no duplicate service roles per service
482
+ // TODO no duplicate service function roles per service
483
+ // TODO no duplicate service function selectors per service
293
484
  }
294
485
 
295
- // TODO check if registry supports types specified in the config array
296
- function _createRelease(IRegistryService.FunctionConfig[] memory config)
486
+ function _setServiceAuthorizations(
487
+ IAccessManager accessManager,
488
+ address serviceAddress,
489
+ RoleId[] memory serviceRoles,
490
+ RoleId[] memory functionRoles,
491
+ bytes4[][] memory selectors
492
+ )
297
493
  internal
298
494
  {
299
- VersionPart version = getNextVersion();
300
-
301
- if(config.length == 0) {
302
- revert ConfigMissing();
303
- }
304
- // always in release
305
- _release[version].domains.push(REGISTRY());
306
- for(uint idx = 0; idx < config.length; idx++)
495
+ for(uint idx = 0; idx < functionRoles.length; idx++)
307
496
  {
308
- ObjectType domain = config[idx].serviceDomain;
309
- bytes4 selector = config[idx].selector;
310
-
311
- // not "registry service" / zero domain
312
- if(
313
- domain == REGISTRY() ||
314
- domain.eqz()
315
- ) { revert ConfigServiceDomainInvalid(idx, domain); }
316
-
317
- // 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
318
- // no overwrite
319
- if(_selector[version][domain] > 0) {
320
- revert SelectorAlreadyExists(version, domain);
321
- }
497
+ accessManager.setTargetFunctionRole(
498
+ serviceAddress,
499
+ selectors[idx],
500
+ functionRoles[idx].toInt());
501
+
502
+ // TODO check/figure out which approach to take
503
+ // ObjectType domain = config[idx].serviceDomain;
504
+ // // not "registry service" / zero domain
505
+ // if(
506
+ // domain == REGISTRY() ||
507
+ // domain.eqz()
508
+ // ) { revert ConfigServiceDomainInvalid(idx, domain); }
509
+
510
+ // bytes4[] memory selectors = config[idx].authorizedSelectors;
511
+
512
+ // // TODO can be zero -> e.g. duplicate domain, first with zero selector, second with non zero selector -> need to check _release[version].domains.contains(domain) instead
513
+ // // no overwrite
514
+ // if(_selectors[version][domain].length > 0) {
515
+ // revert SelectorAlreadyExists(version, domain);
516
+ // }
322
517
 
323
- _selector[version][domain] = selector;
324
- _release[version].domains.push(domain);
518
+ // _selectors[version][domain] = selectors;
519
+ // _release[version].domains.push(domain);
325
520
  }
326
- // TODO set when activated?
327
- _release[version].createdAt = TimestampLib.blockTimestamp();
328
- //_release[version].updatedAt = TimestampLib.blockTimestamp();
329
521
 
330
- _awaitingRegistration = config.length;
522
+ for(uint idx = 0; idx < serviceRoles.length; idx++)
523
+ {
524
+ accessManager.grantRole(
525
+ serviceRoles[idx].toInt(),
526
+ serviceAddress,
527
+ 0);
528
+ }
331
529
  }
332
530
  }