@etherisc/gif-next 0.0.2-d5522f6-712 → 0.0.2-d59d51e-694

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