@etherisc/gif-next 0.0.2-ecbd488-936 → 0.0.2-ed1536c-164

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