@etherisc/gif-next 0.0.2-fd275d2-234 → 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 (545) hide show
  1. package/README.md +28 -14
  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 -104
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +299 -1344
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +356 -181
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +453 -3116
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +612 -181
  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 +493 -400
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +330 -127
  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 +71 -45
  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/IProductService.sol/IProductService.json → pool/IBundleService.sol/IBundleService.json} +284 -360
  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} +231 -204
  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/product/IPolicyService.sol/IPolicyService.json +701 -0
  78. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  79. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IPricingService.sol/IPricingService.json} +244 -383
  80. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  81. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +989 -0
  82. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  83. package/artifacts/contracts/{components/BaseComponent.sol/BaseComponent.json → product/IProductService.sol/IProductService.json} +140 -86
  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 +345 -121
  102. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +368 -222
  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 +434 -197
  108. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  109. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +298 -0
  110. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +438 -333
  112. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +324 -136
  114. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  115. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +1112 -0
  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 +449 -67
  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/shared/Component.sol/Component.json +890 -0
  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} +196 -216
  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/{instance/service/IDistributionService.sol/IDistributionService.json → shared/IComponent.sol/IComponent.json} +344 -165
  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/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +699 -0
  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 -34
  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 +84 -178
  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 +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 +185 -165
  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/staking/IStakingService.sol/IStakingService.json +626 -0
  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 +20 -20
  241. package/contracts/distribution/IDistributionComponent.sol +66 -0
  242. package/contracts/distribution/IDistributionService.sol +81 -0
  243. package/contracts/instance/BundleManager.sol +24 -50
  244. package/contracts/instance/IInstance.sol +57 -36
  245. package/contracts/instance/IInstanceService.sol +65 -14
  246. package/contracts/instance/Instance.sol +147 -373
  247. package/contracts/instance/InstanceAccessManager.sol +432 -177
  248. package/contracts/instance/InstanceAuthorizationsLib.sol +336 -0
  249. package/contracts/instance/InstanceReader.sol +136 -85
  250. package/contracts/instance/InstanceService.sol +304 -169
  251. package/contracts/instance/InstanceServiceManager.sol +12 -25
  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} +17 -30
  256. package/contracts/instance/module/IAccess.sol +37 -21
  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/Usdc.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 +14 -0
  289. package/contracts/registry/IRegistry.sol +65 -28
  290. package/contracts/registry/IRegistryService.sol +46 -28
  291. package/contracts/registry/ITransferInterceptor.sol +1 -0
  292. package/contracts/registry/Registry.sol +353 -238
  293. package/contracts/registry/RegistryAccessManager.sol +167 -0
  294. package/contracts/registry/RegistryService.sol +165 -195
  295. package/contracts/registry/RegistryServiceManager.sol +34 -42
  296. package/contracts/registry/ReleaseManager.sol +530 -0
  297. package/contracts/registry/ServiceAuthorizationsLib.sol +173 -0
  298. package/contracts/registry/TokenRegistry.sol +261 -53
  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 +4 -6
  313. package/contracts/shared/IRegistryLinked.sol +11 -0
  314. package/contracts/shared/IService.sol +7 -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 -80
  321. package/contracts/shared/PolicyHolder.sol +101 -0
  322. package/contracts/shared/ProxyManager.sol +126 -25
  323. package/contracts/shared/Registerable.sol +26 -41
  324. package/contracts/shared/RegistryLinked.sol +43 -0
  325. package/contracts/shared/Service.sol +45 -23
  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/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  354. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  355. package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -618
  356. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  357. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  358. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  359. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -152
  360. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  361. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -249
  362. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  363. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -157
  364. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  365. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -787
  366. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  367. package/artifacts/contracts/components/Product.sol/Product.json +0 -729
  368. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  369. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  370. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  371. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  372. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  373. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  374. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  375. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  376. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  377. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  378. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  379. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  380. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  381. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  382. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  383. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  384. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  385. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  386. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  387. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  388. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  389. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  390. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  391. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  392. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  393. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  394. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  395. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  396. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  397. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  398. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  399. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  400. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  401. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  402. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  403. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  404. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  405. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  406. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  407. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  408. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +0 -101
  409. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  410. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  411. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  412. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  413. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  414. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  415. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +0 -272
  416. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  417. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  418. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  419. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  420. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  421. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  422. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -502
  423. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  424. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -169
  425. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  426. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  427. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
  428. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  429. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  430. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  431. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -716
  432. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  433. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -444
  434. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  435. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  436. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  437. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  438. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  439. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -971
  440. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  441. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -460
  442. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  443. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -1147
  444. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  445. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -488
  446. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  447. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  448. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  449. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  450. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  451. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  452. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  453. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -305
  454. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  455. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  456. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  457. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -600
  458. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  459. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  460. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  461. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  462. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  463. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -286
  464. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  465. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  466. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  467. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  468. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  469. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  470. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  471. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  472. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  473. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  474. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  475. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  476. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  477. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  478. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  479. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  480. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  481. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -123
  482. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  483. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  484. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  485. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  486. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  487. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  488. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  489. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  490. package/contracts/components/BaseComponent.sol +0 -91
  491. package/contracts/components/Distribution.sol +0 -163
  492. package/contracts/components/IBaseComponent.sol +0 -25
  493. package/contracts/components/IDistributionComponent.sol +0 -44
  494. package/contracts/components/IPoolComponent.sol +0 -62
  495. package/contracts/components/IProductComponent.sol +0 -35
  496. package/contracts/components/Pool.sol +0 -247
  497. package/contracts/components/Product.sol +0 -289
  498. package/contracts/experiment/cloning/Cloner.sol +0 -47
  499. package/contracts/experiment/errors/Require.sol +0 -38
  500. package/contracts/experiment/errors/Revert.sol +0 -44
  501. package/contracts/experiment/inheritance/A.sol +0 -53
  502. package/contracts/experiment/inheritance/B.sol +0 -28
  503. package/contracts/experiment/inheritance/C.sol +0 -34
  504. package/contracts/experiment/inheritance/IA.sol +0 -13
  505. package/contracts/experiment/inheritance/IB.sol +0 -10
  506. package/contracts/experiment/inheritance/IC.sol +0 -12
  507. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  508. package/contracts/experiment/statemachine/ISM.sol +0 -25
  509. package/contracts/experiment/statemachine/SM.sol +0 -57
  510. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  511. package/contracts/experiment/types/TypeA.sol +0 -47
  512. package/contracts/experiment/types/TypeB.sol +0 -29
  513. package/contracts/instance/AccessManagedSimple.sol +0 -115
  514. package/contracts/instance/AccessManagerSimple.sol +0 -692
  515. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  516. package/contracts/instance/base/ComponentServiceBase.sol +0 -134
  517. package/contracts/instance/base/IInstanceBase.sol +0 -23
  518. package/contracts/instance/base/KeyValueStore.sol +0 -172
  519. package/contracts/instance/module/ISetup.sol +0 -46
  520. package/contracts/instance/module/ITreasury.sol +0 -23
  521. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  522. package/contracts/instance/service/DistributionService.sol +0 -88
  523. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  524. package/contracts/instance/service/IDistributionService.sol +0 -12
  525. package/contracts/instance/service/IPoolService.sol +0 -43
  526. package/contracts/instance/service/IProductService.sol +0 -110
  527. package/contracts/instance/service/PoolService.sol +0 -206
  528. package/contracts/instance/service/PoolServiceManager.sol +0 -54
  529. package/contracts/instance/service/ProductService.sol +0 -561
  530. package/contracts/instance/service/ProductServiceManager.sol +0 -54
  531. package/contracts/shared/ContractDeployerLib.sol +0 -72
  532. package/contracts/shared/RegisterableUpgradable.sol +0 -16
  533. package/contracts/test/TestFee.sol +0 -25
  534. package/contracts/test/TestRegisterable.sol +0 -18
  535. package/contracts/test/TestRoleId.sol +0 -14
  536. package/contracts/test/TestService.sol +0 -24
  537. package/contracts/test/TestToken.sol +0 -26
  538. package/contracts/test/TestVersion.sol +0 -44
  539. package/contracts/test/TestVersionable.sol +0 -17
  540. package/contracts/types/ChainId.sol +0 -38
  541. package/contracts/types/NumberId.sol +0 -52
  542. package/contracts/types/RoleId.sol +0 -90
  543. /package/contracts/{types → type}/AddressSet.sol +0 -0
  544. /package/contracts/{types → type}/Key32.sol +0 -0
  545. /package/contracts/{types → type}/RiskId.sol +0 -0
@@ -1,183 +1,228 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../shared/IService.sol";
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {NftId, NftIdLib} from "../type/NftId.sol";
7
+ import {VersionPart} from "../type/Version.sol";
8
+ import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, STAKING, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../type/ObjectType.sol";
6
9
 
7
10
  import {ChainNft} from "./ChainNft.sol";
8
11
  import {IRegistry} from "./IRegistry.sol";
9
- import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
10
- import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
11
- import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
12
- import {ITransferInterceptor} from "./ITransferInterceptor.sol";
13
-
14
- import {ERC165} from "../shared/ERC165.sol";
15
-
12
+ import {ReleaseManager} from "./ReleaseManager.sol";
13
+ import {TokenRegistry} from "./TokenRegistry.sol";
16
14
 
17
15
  // IMPORTANT
18
16
  // Each NFT minted by registry is accosiated with:
19
17
  // 1) NFT owner
20
18
  // 2) registred contract OR object stored in registered (parent) contract
21
19
  // Four registration flows:
22
- // 1) non IRegisterable address by registryOwner (TOKEN)
23
- // 2) IRegisterable address by registryOwner (SERVICE)
24
- // 3) IRegisterable address by approved service (INSTANCE, COMPONENT)
25
- // 4) state object by approved service (POLICY, BUNDLE, STAKE)
20
+ // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
21
+ // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
22
+ // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
23
+ // 4) state object by regular service (POLICY, BUNDLE, STAKE)
26
24
 
27
25
  contract Registry is
28
- ERC165,
29
26
  IRegistry
30
27
  {
31
- uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
32
28
  address public constant NFT_LOCK_ADDRESS = address(0x1);
33
29
  uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
34
- uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
30
+ uint256 public constant STAKING_TOKEN_SEQUENCE_ID = 3;
35
31
  string public constant EMPTY_URI = "";
36
32
 
37
- VersionPart internal _majorVersion;
33
+ mapping(NftId nftId => ObjectInfo info) private _info;
34
+ mapping(address object => NftId nftId) private _nftIdByAddress;
38
35
 
39
- mapping(NftId nftId => ObjectInfo info) internal _info;
40
- mapping(address object => NftId nftId) internal _nftIdByAddress;
36
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
41
37
 
42
- mapping(ObjectType objectType => mapping(
43
- ObjectType parentType => bool)) internal _isValidContractCombination;
38
+ mapping(ObjectType objectType => bool) private _coreTypes;
44
39
 
45
40
  mapping(ObjectType objectType => mapping(
46
- ObjectType parentType => bool)) internal _isValidObjectCombination;
41
+ ObjectType parentType => bool)) private _coreContractCombinations;
47
42
 
48
- mapping(NftId nftId => string name) internal _string;
49
- mapping(bytes32 serviceNameHash => mapping(
50
- VersionPart majorVersion => address service)) internal _service;
43
+ mapping(ObjectType objectType => mapping(
44
+ ObjectType parentType => bool)) private _coreObjectCombinations;
51
45
 
52
- NftId internal _registryNftId;
53
- NftId internal _serviceNftId; // set in stone upon registry creation
54
- ChainNft internal _chainNft;
46
+ NftId immutable _registryNftId;
47
+ ChainNft immutable _chainNft;
55
48
 
49
+ ReleaseManager immutable _releaseManager;
50
+ address private _tokenRegistryAddress;
51
+ address private _stakingAddress;
56
52
 
57
- modifier onlyOwner() {
58
- if(msg.sender != getOwner()) {
59
- revert NotOwner(msg.sender);
53
+ modifier onlyRegistryService() {
54
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
55
+ revert ErrorRegistryCallerNotRegistryService();
60
56
  }
61
57
  _;
62
58
  }
63
59
 
64
- modifier onlyRegistryService() {
65
- if(msg.sender != _info[_serviceNftId].objectAddress) {
66
- revert NotRegistryService();
60
+ modifier onlyReleaseManager() {
61
+ if(msg.sender != address(_releaseManager)) {
62
+ revert ErrorRegistryCallerNotReleaseManager();
67
63
  }
68
64
  _;
69
65
  }
70
66
 
71
- constructor(address registryOwner, VersionPart majorVersion)
72
- {
73
- require(registryOwner > address(0), "Registry: registry owner is 0");
74
-
75
- // major version at constructor time
76
- _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
77
- emit LogInitialMajorVersionSet(_majorVersion);
67
+ constructor() {
68
+ _releaseManager = ReleaseManager(msg.sender);
78
69
 
79
70
  // deploy NFT
80
- _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
71
+ _chainNft = new ChainNft(address(this));
81
72
 
82
73
  // initial registry setup
83
74
  _registerProtocol();
84
- _registerRegistry(registryOwner);
85
- _registerRegistryService(registryOwner);
75
+ _registryNftId = _registerRegistry();
86
76
 
87
- // set object parent relations
88
- _setupValidObjectParentCombinations();
77
+ // set object types and object parent relations
78
+ _setupValidCoreTypesAndCombinations();
79
+ }
80
+
81
+
82
+ function setTokenRegistry(
83
+ address tokenRegistry
84
+ )
85
+ external
86
+ onlyReleaseManager
87
+ {
88
+ if (_tokenRegistryAddress != address(0)) {
89
+ revert TokenRegistryAlreadySet(tokenRegistry);
90
+ }
91
+
92
+ if (address(tokenRegistry) == address(0)) {
93
+ revert TokenRegistryZero();
94
+ }
89
95
 
90
- _registerInterface(type(IRegistry).interfaceId);
96
+ _tokenRegistryAddress = tokenRegistry;
91
97
  }
92
98
 
93
- // from IRegistry
94
99
 
95
- /// @dev latest GIF release version
96
- function setMajorVersion(VersionPart newMajorVersion)
100
+ function registerStaking(
101
+ address stakingAddress,
102
+ address stakingOwner
103
+ )
97
104
  external
98
- onlyOwner
105
+ onlyReleaseManager
106
+ returns(NftId stakingNftId)
99
107
  {
100
- // ensure major version increments is one
101
- uint256 oldMax = _majorVersion.toInt();
102
- uint256 newMax = newMajorVersion.toInt();
103
- if (newMax <= oldMax || newMax - oldMax != 1) {
104
- revert MajorVersionMaxIncreaseInvalid(newMajorVersion, _majorVersion);
108
+ // staking contract for same chain may only be registered once
109
+ if (_stakingAddress != address(0)) {
110
+ revert StakingAlreadyRegistered(_stakingAddress);
105
111
  }
106
112
 
107
- _majorVersion = newMajorVersion;
108
- emit LogMajorVersionSet(_majorVersion);
113
+ _stakingAddress = stakingAddress;
114
+ uint256 stakingId = _chainNft.calculateTokenId(STAKING_TOKEN_SEQUENCE_ID);
115
+ stakingNftId = NftIdLib.toNftId(stakingId);
116
+
117
+ _nftIdByAddress[_stakingAddress] = stakingNftId;
118
+ _info[stakingNftId] = ObjectInfo({
119
+ nftId: stakingNftId,
120
+ parentNftId: _registryNftId,
121
+ objectType: STAKING(),
122
+ isInterceptor: false,
123
+ objectAddress: _stakingAddress,
124
+ initialOwner: stakingOwner,
125
+ data: ""
126
+ });
127
+
128
+ _chainNft.mint(stakingOwner, stakingId);
109
129
  }
110
130
 
111
- /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
112
- // TODO service registration means its approval for some type?
113
- // TODO registration of precompile addresses
114
- function register(ObjectInfo memory info)
131
+ function registerService(
132
+ ObjectInfo memory info,
133
+ VersionPart version,
134
+ ObjectType domain
135
+ )
115
136
  external
116
- onlyRegistryService
137
+ onlyReleaseManager
117
138
  returns(NftId nftId)
118
139
  {
119
- ObjectType objectType = info.objectType;
120
- NftId parentNftId = info.parentNftId;
121
- ObjectInfo memory parentInfo = _info[parentNftId];
122
- ObjectType parentType = parentInfo.objectType; // see function header
123
- address parentAddress = parentInfo.objectAddress;
124
-
125
- // parent is contract -> need to check? -> check before minting
126
- // special case: global registry nft as parent when not on mainnet -> global registry address is 0
127
- // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
128
- // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
129
- if(parentAddress == address(0)) {
130
- revert ZeroParentAddress();
140
+ address service = info.objectAddress;
141
+ /* must be guaranteed by release manager
142
+ if(service == address(0)) {
143
+ revert();
131
144
  }
132
145
 
133
- address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
134
-
135
- // TODO does external call
136
- uint256 mintedTokenId = _chainNft.mint(
137
- info.initialOwner,
138
- interceptor,
139
- EMPTY_URI);
140
- nftId = toNftId(mintedTokenId);
146
+ if(version.eqz()) {
147
+ revert();
148
+ }
141
149
 
142
- // TODO move nftId out of info struct
143
- // getters by nftId -> return struct without nftId
144
- // getters by address -> return nftId AND struct
145
- info.nftId = nftId;
146
- _info[nftId] = info;
150
+ if(info.objectType != SERVICE()) {
151
+ revert();
152
+ }
153
+ if(info.parentType != REGISTRY()) {
154
+ revert();
155
+ }
156
+ info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
157
+ */
158
+
159
+ if(domain.eqz()) {
160
+ revert ErrorRegistryDomainZero(service);
161
+ }
147
162
 
148
- if(info.objectAddress > address(0))
149
- {
150
- // TODO if need to add types latter -> at least call this check from registry service
151
- // parent is registered + object-parent types are valid
152
- if(_isValidContractCombination[objectType][parentType] == false) {
153
- revert InvalidTypesCombination(objectType, parentType);
154
- }
163
+ if(_service[version][domain] > address(0)) {
164
+ revert ErrorRegistryDomainAlreadyRegistered(service, version, domain);
165
+ }
166
+
167
+ _service[version][domain] = service;
155
168
 
156
- address contractAddress = info.objectAddress;
169
+ nftId = _register(info);
157
170
 
158
- if(_nftIdByAddress[contractAddress].gtz()) {
159
- revert ContractAlreadyRegistered(contractAddress);
160
- }
171
+ emit LogServiceRegistration(version, domain);
172
+ }
161
173
 
162
- _nftIdByAddress[contractAddress] = nftId;
174
+ function register(ObjectInfo memory info)
175
+ external
176
+ onlyRegistryService
177
+ returns(NftId nftId)
178
+ {
179
+ ObjectType objectType = info.objectType;
180
+ ObjectType parentType = _info[info.parentNftId].objectType;
163
181
 
164
- // special case
165
- if(objectType == SERVICE()) {
166
- _registerService(info);
182
+ // only valid core types combinations
183
+ if(info.objectAddress == address(0))
184
+ {
185
+ if(_coreObjectCombinations[objectType][parentType] == false) {
186
+ revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
167
187
  }
168
188
  }
169
189
  else
170
190
  {
171
- if(_isValidObjectCombination[objectType][parentType] == false) {
172
- revert InvalidTypesCombination(objectType, parentType);
191
+ if(_coreContractCombinations[objectType][parentType] == false) {
192
+ revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
173
193
  }
174
194
  }
175
195
 
176
- emit LogRegistration(info);
196
+ nftId = _register(info);
177
197
  }
198
+
199
+ function registerWithCustomType(ObjectInfo memory info)
200
+ external
201
+ onlyRegistryService
202
+ returns(NftId nftId)
203
+ {
204
+ ObjectType objectType = info.objectType;
205
+ ObjectType parentType = _info[info.parentNftId].objectType;
206
+
207
+ if(_coreTypes[objectType]) {
208
+ revert ErrorRegistryCoreTypeRegistration();
209
+ }
210
+
211
+ if(
212
+ parentType == PROTOCOL() ||
213
+ parentType == REGISTRY() ||
214
+ parentType == SERVICE()
215
+ ) {
216
+ revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
217
+ }
218
+
219
+ _register(info);
220
+ }
221
+
222
+
178
223
  /// @dev earliest GIF major version
179
- function getMajorVersionMin() external view returns (VersionPart) {
180
- return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
224
+ function getInitialVersion() external view returns (VersionPart) {
225
+ return _releaseManager.getInitialVersion();
181
226
  }
182
227
 
183
228
  // TODO make distinction between active an not yet active version
@@ -187,16 +232,20 @@ contract Registry is
187
232
  // in this case we might want to have a period where the latest version is
188
233
  // in the process of being set up while the latest active version is 1 major release smaller
189
234
  /// @dev latest GIF major version (might not yet be active)
190
- function getMajorVersionMax() external view returns (VersionPart) {
191
- return _majorVersion;
235
+ function getNextVersion() external view returns (VersionPart) {
236
+ return _releaseManager.getNextVersion();
192
237
  }
193
238
 
194
239
  /// @dev latest active GIF release version
195
- function getMajorVersion() external view returns (VersionPart) {
196
- return _majorVersion;
240
+ function getLatestVersion() external view returns (VersionPart) {
241
+ return _releaseManager.getLatestVersion();
197
242
  }
198
243
 
199
- function getObjectCount() external view override returns (uint256) {
244
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
245
+ return _releaseManager.getReleaseInfo(version);
246
+ }
247
+
248
+ function getObjectCount() external view returns (uint256) {
200
249
  return _chainNft.totalSupply();
201
250
  }
202
251
 
@@ -204,11 +253,11 @@ contract Registry is
204
253
  return _registryNftId;
205
254
  }
206
255
 
207
- function getNftId(address object) external view override returns (NftId id) {
256
+ function getNftId(address object) external view returns (NftId id) {
208
257
  return _nftIdByAddress[object];
209
258
  }
210
259
 
211
- function ownerOf(NftId nftId) public view override returns (address) {
260
+ function ownerOf(NftId nftId) public view returns (address) {
212
261
  return _chainNft.ownerOf(nftId.toInt());
213
262
  }
214
263
 
@@ -216,77 +265,144 @@ contract Registry is
216
265
  return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
217
266
  }
218
267
 
219
- function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
268
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
220
269
  return _info[nftId];
221
270
  }
222
271
 
223
- function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
272
+ function getObjectInfo(address object) external view returns (ObjectInfo memory) {
224
273
  return _info[_nftIdByAddress[object]];
225
274
  }
226
275
 
227
- function isRegistered(NftId nftId) public view override returns (bool) {
276
+ function isRegistered(NftId nftId) public view returns (bool) {
228
277
  return _info[nftId].objectType.gtz();
229
278
  }
230
279
 
231
- function isRegistered(address object) external view override returns (bool) {
280
+ function isRegistered(address object) external view returns (bool) {
232
281
  return _nftIdByAddress[object].gtz();
233
282
  }
234
283
 
235
- function isRegisteredService(address object) external view override returns (bool) {
236
- return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
284
+ function isRegisteredService(address object) external view returns (bool) {
285
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
286
+ }
287
+
288
+ function isRegisteredComponent(address object) external view returns (bool) {
289
+ NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
290
+ return _info[objectParentNftId].objectType == INSTANCE();
291
+ }
292
+
293
+ function isValidRelease(VersionPart version) external view returns (bool)
294
+ {
295
+ return _releaseManager.isValidRelease(version);
296
+ }
297
+
298
+ function getStakingAddress() external view returns (address staking) {
299
+ return _stakingAddress;
237
300
  }
238
301
 
239
- function getServiceName(NftId nftId) external view returns (string memory) {
240
- return _string[nftId];
302
+ function getTokenRegistryAddress() external view returns (address tokenRegistry) {
303
+ return _tokenRegistryAddress;
241
304
  }
242
305
 
243
- // special case to retrive a gif service
244
306
  function getServiceAddress(
245
- string memory serviceName,
246
- VersionPart majorVersion
247
- ) external view returns (address)
307
+ ObjectType serviceDomain,
308
+ VersionPart releaseVersion
309
+ ) external view returns (address service)
248
310
  {
249
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
250
- return _service[serviceNameHash][majorVersion];
311
+ service = _service[releaseVersion][serviceDomain];
251
312
  }
252
313
 
253
- function getChainNft() external view override returns (ChainNft) {
254
- return _chainNft;
314
+ function getReleaseAccessManagerAddress(VersionPart version) external view returns (address) {
315
+ return address(_releaseManager.getReleaseAccessManager(version));
316
+ }
317
+
318
+ function getReleaseManagerAddress() external view returns (address) {
319
+ return address(_releaseManager);
320
+ }
321
+
322
+ function getChainNftAddress() external view override returns (address) {
323
+ return address(_chainNft);
255
324
  }
256
325
 
257
326
  function getOwner() public view returns (address owner) {
258
327
  return ownerOf(address(this));
259
328
  }
260
329
 
330
+ // IERC165
331
+
332
+ function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
333
+ if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
334
+ return true;
335
+ }
336
+
337
+ return false;
338
+ }
339
+
261
340
  // Internals
262
341
 
263
- function _registerService(ObjectInfo memory info)
342
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
343
+ // TODO registration of precompile addresses
344
+ function _register(ObjectInfo memory info)
264
345
  internal
346
+ returns(NftId nftId)
265
347
  {
266
- (
267
- string memory serviceName,
268
- VersionPart majorVersion
269
- ) = abi.decode(info.data, (string, VersionPart));
270
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
271
-
272
- // ensures consistency of service.getVersion() and majorVersion here
273
- if(majorVersion != _majorVersion) {
274
- revert InvalidServiceVersion(majorVersion);
348
+ ObjectType objectType = info.objectType;
349
+ bool isInterceptor = info.isInterceptor;
350
+ address objectAddress = info.objectAddress;
351
+ address owner = info.initialOwner;
352
+
353
+ NftId parentNftId = info.parentNftId;
354
+ ObjectInfo memory parentInfo = _info[parentNftId];
355
+ ObjectType parentType = parentInfo.objectType; // see function header
356
+ address parentAddress = parentInfo.objectAddress;
357
+
358
+ // parent is contract -> need to check? -> check before minting
359
+ // special case: staking: to protocol possible as well
360
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
361
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
362
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
363
+ if(objectType != STAKE()) {
364
+ if(parentAddress == address(0)) {
365
+ revert ErrorRegistryParentAddressZero();
366
+ }
275
367
  }
276
-
277
- if(_service[serviceNameHash][majorVersion] != address(0)) {
278
- revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
368
+
369
+ address interceptorAddress = _getInterceptor(
370
+ isInterceptor,
371
+ objectType,
372
+ objectAddress,
373
+ parentInfo.isInterceptor,
374
+ parentAddress);
375
+
376
+ uint256 tokenId = _chainNft.getNextTokenId();
377
+ nftId = NftIdLib.toNftId(tokenId);
378
+ info.nftId = nftId;
379
+ _info[nftId] = info;
380
+
381
+ if(objectAddress > address(0)) {
382
+ if(_nftIdByAddress[objectAddress].gtz()) {
383
+ revert ErrorRegistryContractAlreadyRegistered(objectAddress);
384
+ }
385
+
386
+ _nftIdByAddress[objectAddress] = nftId;
279
387
  }
280
388
 
281
- _string[info.nftId] = serviceName;
282
- _service[serviceNameHash][majorVersion] = info.objectAddress;
389
+ emit LogRegistration(nftId, parentNftId, objectType, isInterceptor, objectAddress, owner);
390
+
391
+ // calls nft receiver(1) and interceptor(2)
392
+ uint256 mintedTokenId = _chainNft.mint(
393
+ owner,
394
+ interceptorAddress,
395
+ EMPTY_URI);
283
396
 
284
- emit LogServiceNameRegistration(serviceName, majorVersion);
397
+ assert(mintedTokenId == tokenId);
285
398
  }
286
399
 
287
400
  /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
401
+ /// special case: STAKES (parent may be any type) -> no intercept call
402
+ /// default case:
288
403
  function _getInterceptor(
289
404
  bool isInterceptor,
405
+ ObjectType objectType,
290
406
  address objectAddress,
291
407
  bool parentIsInterceptor,
292
408
  address parentObjectAddress
@@ -295,6 +411,11 @@ contract Registry is
295
411
  view
296
412
  returns (address interceptor)
297
413
  {
414
+ // no intercepting calls for stakes
415
+ if (objectType == STAKE()) {
416
+ return address(0);
417
+ }
418
+
298
419
  if (objectAddress == address(0)) {
299
420
  if (parentIsInterceptor) {
300
421
  return parentObjectAddress;
@@ -314,106 +435,76 @@ contract Registry is
314
435
 
315
436
  /// @dev protocol registration used to anchor the dip ecosystem relations
316
437
  function _registerProtocol()
317
- internal
438
+ private
318
439
  {
319
440
  uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
320
- NftId protocolNftId = toNftId(protocolId);
441
+ NftId protocolNftId = NftIdLib.toNftId(protocolId);
442
+
443
+ _info[protocolNftId] = ObjectInfo({
444
+ nftId: protocolNftId,
445
+ parentNftId: NftIdLib.zero(),
446
+ objectType: PROTOCOL(),
447
+ isInterceptor: false,
448
+ objectAddress: address(0),
449
+ initialOwner: NFT_LOCK_ADDRESS,
450
+ data: ""
451
+ });
321
452
 
322
453
  _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
323
-
324
- _info[protocolNftId] = ObjectInfo(
325
- protocolNftId,
326
- zeroNftId(), // parent
327
- PROTOCOL(),
328
- false, // isInterceptor
329
- address(0), // objectAddress
330
- NFT_LOCK_ADDRESS,// initialOwner
331
- ""
332
- );
333
454
  }
334
455
 
335
456
  /// @dev registry registration
336
457
  /// might also register the global registry when not on mainnet
337
- function _registerRegistry(address registryOwner)
338
- internal
458
+ function _registerRegistry()
459
+ private
460
+ returns (NftId registryNftId)
339
461
  {
340
462
  uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
341
- NftId registryNftId = toNftId(registryId);
342
-
463
+ registryNftId = NftIdLib.toNftId(registryId);
343
464
  NftId parentNftId;
344
465
 
345
466
  if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
346
467
  {// we're not the global registry
347
468
  _registerGlobalRegistry();
348
- parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
469
+ parentNftId = NftIdLib.toNftId(_chainNft.GLOBAL_REGISTRY_ID());
349
470
  }
350
471
  else
351
472
  {// we are global registry
352
- parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
473
+ parentNftId = NftIdLib.toNftId(_chainNft.PROTOCOL_NFT_ID());
353
474
  }
354
475
 
355
- _chainNft.mint(registryOwner, registryId);
356
-
357
- _info[registryNftId] = ObjectInfo(
358
- registryNftId,
359
- parentNftId,
360
- REGISTRY(),
361
- false, // isInterceptor
362
- address(this),
363
- registryOwner,
364
- ""
365
- );
476
+ _info[registryNftId] = ObjectInfo({
477
+ nftId: registryNftId,
478
+ parentNftId: parentNftId,
479
+ objectType: REGISTRY(),
480
+ isInterceptor: false,
481
+ objectAddress: address(this),
482
+ initialOwner: NFT_LOCK_ADDRESS,
483
+ data: ""
484
+ });
366
485
  _nftIdByAddress[address(this)] = registryNftId;
367
- _registryNftId = registryNftId;
368
- }
369
486
 
487
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
488
+ }
370
489
 
371
490
  /// @dev global registry registration for non mainnet registries
372
491
  function _registerGlobalRegistry()
373
- internal
492
+ private
374
493
  {
375
494
  uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
495
+ NftId globalRegistryNftId = NftIdLib.toNftId(globalRegistryId);
496
+
497
+ _info[globalRegistryNftId] = ObjectInfo({
498
+ nftId: globalRegistryNftId,
499
+ parentNftId: NftIdLib.toNftId(_chainNft.PROTOCOL_NFT_ID()),
500
+ objectType: REGISTRY(),
501
+ isInterceptor: false,
502
+ objectAddress: address(0),
503
+ initialOwner: NFT_LOCK_ADDRESS,
504
+ data: ""
505
+ });
376
506
 
377
507
  _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
378
-
379
- NftId globalRegistryNftId = toNftId(globalRegistryId);
380
-
381
- _info[globalRegistryNftId] = ObjectInfo(
382
- globalRegistryNftId,
383
- toNftId(_chainNft.PROTOCOL_NFT_ID()), // parent
384
- REGISTRY(),
385
- false, // isInterceptor
386
- address(0), // objectAddress
387
- NFT_LOCK_ADDRESS, // initialOwner
388
- "" // data
389
- );
390
- }
391
-
392
- function _registerRegistryService(address registryOwner)
393
- internal
394
- {
395
- uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
396
- NftId serviceNftId = toNftId(serviceId);
397
-
398
- _chainNft.mint(registryOwner, serviceId);
399
-
400
- _info[serviceNftId] = ObjectInfo(
401
- serviceNftId,
402
- _registryNftId,
403
- SERVICE(),
404
- false, // isInterceptor
405
- msg.sender, // service deploys registry
406
- registryOwner, // initialOwner,
407
- ""
408
- );
409
-
410
- _nftIdByAddress[msg.sender] = serviceNftId;
411
-
412
- string memory serviceName = "RegistryService";
413
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
414
- _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
415
- _string[serviceNftId] = serviceName;
416
- _serviceNftId = serviceNftId;
417
508
  }
418
509
 
419
510
  /// @dev defines which object - parent types relations are allowed to register
@@ -422,27 +513,51 @@ contract Registry is
422
513
  // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
423
514
  // 3) DO NOT use REGISTRY as object type
424
515
  // 2) DO NOT use PROTOCOL and "zeroObjectType"
425
- function _setupValidObjectParentCombinations()
426
- internal
516
+ function _setupValidCoreTypesAndCombinations()
517
+ private
427
518
  {
428
- // registry as parent, ONLY registry owner
429
- _isValidContractCombination[TOKEN()][REGISTRY()] = true;
430
- _isValidContractCombination[SERVICE()][REGISTRY()] = true;
431
-
432
- // registry as parent, ONLY approved
433
- _isValidContractCombination[INSTANCE()][REGISTRY()] = true;
519
+ _coreTypes[REGISTRY()] = true;
520
+ _coreTypes[SERVICE()] = true;
521
+ _coreTypes[TOKEN()] = true;
522
+ _coreTypes[INSTANCE()] = true;
523
+ _coreTypes[PRODUCT()] = true;
524
+ _coreTypes[POOL()] = true;
525
+ _coreTypes[DISTRIBUTION()] = true;
526
+ _coreTypes[DISTRIBUTOR()] = true;
527
+ _coreTypes[ORACLE()] = true;
528
+ _coreTypes[POLICY()] = true;
529
+ _coreTypes[BUNDLE()] = true;
530
+ _coreTypes[STAKING()] = true;
531
+ _coreTypes[STAKE()] = true;
434
532
 
435
- // instance as parent, ONLY approved
436
- _isValidContractCombination[PRODUCT()][INSTANCE()] = true;
437
- _isValidContractCombination[DISTRIBUTION()][INSTANCE()] = true;
438
- _isValidContractCombination[ORACLE()][INSTANCE()] = true;
439
- _isValidContractCombination[POOL()][INSTANCE()] = true;
440
-
441
- // product as parent, ONLY approved
442
- _isValidObjectCombination[POLICY()][PRODUCT()] = true;
443
-
444
- // pool as parent, ONLY approved
445
- _isValidObjectCombination[BUNDLE()][POOL()] = true;
446
- _isValidObjectCombination[STAKE()][POOL()] = true;
533
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
534
+ if(registryId == _chainNft.GLOBAL_REGISTRY_ID()) {
535
+ // we are global registry
536
+ // object is registry from different chain
537
+ // parent is global registry, this contract
538
+ _coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
539
+ //_coreObjectCombinations[REGISTRY()][REGISTRY()] = true;
540
+ } else {
541
+ // we are not global registry
542
+ // object is local registry, this contract
543
+ // parent is global registry, object with 0 address or registry from mainnet???
544
+ }
545
+ _coreContractCombinations[STAKING()][REGISTRY()] = true; // only for chain staking contract
546
+ _coreContractCombinations[TOKEN()][REGISTRY()] = true;
547
+ //_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
548
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
549
+
550
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
551
+ _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
552
+ _coreContractCombinations[ORACLE()][INSTANCE()] = true;
553
+ _coreContractCombinations[POOL()][INSTANCE()] = true;
554
+
555
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
556
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
557
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
558
+
559
+ // staking
560
+ _coreObjectCombinations[STAKE()][PROTOCOL()] = true;
561
+ _coreObjectCombinations[STAKE()][INSTANCE()] = true;
447
562
  }
448
563
  }