@etherisc/gif-next 0.0.2-96853ac-143 → 0.0.2-96b5b72-170

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 (496) hide show
  1. package/README.md +337 -19
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1387 -0
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +780 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +1011 -0
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +840 -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 +312 -1138
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +616 -0
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +443 -1231
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1348 -0
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1574 -0
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +979 -0
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +656 -0
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2847 -0
  32. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  33. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +190 -0
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  35. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +478 -0
  36. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  37. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  39. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +581 -0
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +194 -0
  42. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
  44. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  45. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
  46. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  47. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  48. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  49. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  50. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IDistribution.sol/IDistribution.json} +2 -2
  52. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  54. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  58. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  59. package/artifacts/contracts/instance/{treasury → module}/ITreasury.sol/ITreasury.json +1 -1
  60. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  61. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  62. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  64. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  65. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +735 -0
  66. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  67. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1106 -0
  68. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  69. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  70. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  71. package/artifacts/contracts/pool/Pool.sol/Pool.json +1418 -0
  72. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  73. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1630 -0
  74. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +712 -0
  76. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  77. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  78. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  79. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
  80. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  81. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
  82. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  83. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
  84. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  85. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +493 -0
  86. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  87. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  88. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +651 -0
  90. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  91. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +510 -0
  92. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  93. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +872 -0
  94. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  95. package/artifacts/contracts/product/IProductService.sol/IProductService.json +442 -0
  96. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  97. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  98. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  100. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  101. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  102. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  104. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  105. package/artifacts/contracts/product/Product.sol/Product.json +1209 -0
  106. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  107. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  108. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +252 -2
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +680 -64
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +919 -0
  116. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +52 -0
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +750 -87
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1211 -0
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +657 -0
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +620 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +485 -0
  130. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  131. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  132. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  133. package/artifacts/contracts/shared/Component.sol/Component.json +723 -0
  134. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  135. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +631 -0
  136. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  137. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  138. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  139. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → shared/IComponent.sol/IComponent.json} +240 -229
  140. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  141. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +647 -0
  142. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +125 -0
  144. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  145. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  146. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  147. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +175 -0
  148. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  149. package/artifacts/contracts/{instance/access/IAccess.sol/IAccessCheckRole.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +11 -11
  150. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  151. package/artifacts/contracts/shared/IService.sol/IService.json +327 -0
  152. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  153. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
  154. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  155. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +884 -0
  156. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +238 -0
  158. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  159. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  160. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  161. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +569 -0
  162. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  163. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +339 -0
  164. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  165. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  166. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  167. package/artifacts/contracts/shared/Service.sol/Service.json +488 -0
  168. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  169. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +150 -0
  170. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  171. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  172. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  173. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
  174. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  175. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +507 -0
  176. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  177. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +545 -0
  178. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  179. package/artifacts/contracts/staking/Staking.sol/Staking.json +854 -0
  180. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  181. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +640 -0
  182. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  183. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +797 -0
  184. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  185. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +632 -0
  186. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  187. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +10 -0
  188. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  189. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  190. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  191. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  192. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  194. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  195. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  196. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  197. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  198. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  199. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  200. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
  202. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  203. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  204. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  205. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  206. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  208. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  209. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  210. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  211. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +86 -0
  212. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  213. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +156 -0
  214. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  215. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -0
  216. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  217. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  218. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  219. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +280 -0
  220. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  221. package/artifacts/contracts/{types/ChainId.sol/ChainIdLib.json → type/UFixed.sol/MathLib.json} +4 -4
  222. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  223. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +479 -0
  224. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  225. package/artifacts/contracts/type/Version.sol/VersionLib.json +177 -0
  226. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  227. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +49 -0
  228. package/contracts/distribution/Distribution.sol +285 -0
  229. package/contracts/distribution/DistributionService.sol +349 -0
  230. package/contracts/distribution/DistributionServiceManager.sol +51 -0
  231. package/contracts/distribution/IDistributionComponent.sol +71 -0
  232. package/contracts/distribution/IDistributionService.sol +87 -0
  233. package/contracts/instance/BundleManager.sol +126 -0
  234. package/contracts/instance/IInstance.sol +74 -22
  235. package/contracts/instance/IInstanceService.sol +73 -0
  236. package/contracts/instance/Instance.sol +210 -53
  237. package/contracts/instance/InstanceAccessManager.sol +543 -0
  238. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  239. package/contracts/instance/InstanceReader.sol +368 -0
  240. package/contracts/instance/InstanceService.sol +308 -0
  241. package/contracts/instance/InstanceServiceManager.sol +54 -0
  242. package/contracts/instance/InstanceStore.sol +211 -0
  243. package/contracts/instance/base/Cloneable.sol +51 -0
  244. package/contracts/instance/base/IKeyValueStore.sol +53 -0
  245. package/contracts/instance/base/ILifecycle.sol +30 -0
  246. package/contracts/instance/base/KeyValueStore.sol +169 -0
  247. package/contracts/instance/base/Lifecycle.sol +121 -0
  248. package/contracts/instance/base/ObjectManager.sol +82 -0
  249. package/contracts/instance/module/IAccess.sol +54 -0
  250. package/contracts/instance/module/IBundle.sol +23 -0
  251. package/contracts/instance/module/IComponents.sol +41 -0
  252. package/contracts/instance/module/IDistribution.sol +42 -0
  253. package/contracts/instance/module/IPolicy.sol +78 -0
  254. package/contracts/instance/module/IRisk.sol +11 -0
  255. package/contracts/instance/module/ISetup.sol +33 -0
  256. package/contracts/instance/module/ITreasury.sol +23 -0
  257. package/contracts/pool/BundleService.sol +382 -0
  258. package/contracts/pool/BundleServiceManager.sol +51 -0
  259. package/contracts/pool/IBundleService.sol +118 -0
  260. package/contracts/pool/IPoolComponent.sol +114 -0
  261. package/contracts/pool/IPoolService.sol +114 -0
  262. package/contracts/pool/Pool.sol +302 -0
  263. package/contracts/pool/PoolService.sol +403 -0
  264. package/contracts/pool/PoolServiceManager.sol +51 -0
  265. package/contracts/product/ApplicationService.sol +186 -0
  266. package/contracts/product/ApplicationServiceManager.sol +35 -0
  267. package/contracts/product/ClaimService.sol +442 -0
  268. package/contracts/product/ClaimServiceManager.sol +35 -0
  269. package/contracts/product/IApplicationService.sol +62 -0
  270. package/contracts/product/IClaimService.sol +93 -0
  271. package/contracts/product/IPolicyService.sol +80 -0
  272. package/contracts/product/IPricingService.sol +37 -0
  273. package/contracts/product/IProductComponent.sol +41 -0
  274. package/contracts/product/IProductService.sol +40 -0
  275. package/contracts/product/PolicyService.sol +376 -0
  276. package/contracts/product/PolicyServiceManager.sol +54 -0
  277. package/contracts/product/PricingService.sol +275 -0
  278. package/contracts/product/PricingServiceManager.sol +51 -0
  279. package/contracts/product/Product.sol +379 -0
  280. package/contracts/product/ProductService.sol +210 -0
  281. package/contracts/product/ProductServiceManager.sol +54 -0
  282. package/contracts/registry/ChainNft.sol +143 -62
  283. package/contracts/registry/IRegistry.sol +84 -41
  284. package/contracts/registry/IRegistryService.sol +69 -0
  285. package/contracts/registry/ITransferInterceptor.sol +7 -0
  286. package/contracts/registry/Registry.sol +451 -128
  287. package/contracts/registry/RegistryAccessManager.sol +207 -0
  288. package/contracts/registry/RegistryService.sol +304 -0
  289. package/contracts/registry/RegistryServiceManager.sol +60 -0
  290. package/contracts/registry/ReleaseManager.sol +360 -0
  291. package/contracts/registry/TokenRegistry.sol +116 -0
  292. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  293. package/contracts/shared/Component.sol +177 -0
  294. package/contracts/shared/ComponentService.sol +150 -0
  295. package/contracts/shared/ERC165.sol +27 -0
  296. package/contracts/shared/IComponent.sol +58 -0
  297. package/contracts/shared/IInstanceLinkedComponent.sol +52 -0
  298. package/contracts/shared/INftOwnable.sol +23 -0
  299. package/contracts/shared/IPolicyHolder.sol +40 -0
  300. package/contracts/shared/IRegisterable.sol +15 -0
  301. package/contracts/shared/IRegistryLinked.sol +11 -0
  302. package/contracts/shared/IService.sol +18 -0
  303. package/contracts/shared/IVersionable.sol +53 -0
  304. package/contracts/shared/InstanceLinkedComponent.sol +271 -0
  305. package/contracts/shared/NftOwnable.sol +118 -0
  306. package/contracts/shared/PolicyHolder.sol +94 -0
  307. package/contracts/shared/ProxyManager.sol +169 -0
  308. package/contracts/shared/Registerable.sol +75 -0
  309. package/contracts/shared/RegistryLinked.sol +43 -0
  310. package/contracts/shared/Service.sol +72 -0
  311. package/contracts/shared/TokenHandler.sol +58 -0
  312. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  313. package/contracts/shared/Versionable.sol +59 -0
  314. package/contracts/staking/IStaking.sol +30 -0
  315. package/contracts/staking/IStakingService.sol +105 -0
  316. package/contracts/staking/Staking.sol +65 -0
  317. package/contracts/staking/StakingManager.sol +46 -0
  318. package/contracts/staking/StakingService.sol +204 -0
  319. package/contracts/staking/StakingServiceManager.sol +41 -0
  320. package/contracts/type/AddressSet.sol +58 -0
  321. package/contracts/type/Amount.sol +109 -0
  322. package/contracts/{types → type}/Blocknumber.sol +1 -0
  323. package/contracts/type/ClaimId.sol +75 -0
  324. package/contracts/type/DistributorType.sol +55 -0
  325. package/contracts/type/Fee.sol +65 -0
  326. package/contracts/type/Key32.sol +50 -0
  327. package/contracts/{types → type}/NftId.sol +30 -1
  328. package/contracts/type/NftIdSet.sol +62 -0
  329. package/contracts/{types → type}/ObjectType.sol +74 -15
  330. package/contracts/type/PayoutId.sol +82 -0
  331. package/contracts/type/Referral.sol +89 -0
  332. package/contracts/type/RiskId.sol +43 -0
  333. package/contracts/type/RoleId.sol +132 -0
  334. package/contracts/type/Seconds.sol +54 -0
  335. package/contracts/{types → type}/StateId.sol +23 -4
  336. package/contracts/{types → type}/Timestamp.sol +36 -6
  337. package/contracts/type/UFixed.sol +326 -0
  338. package/contracts/type/Version.sol +108 -0
  339. package/package.json +12 -5
  340. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  341. package/artifacts/contracts/components/Component.sol/Component.json +0 -205
  342. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  343. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  344. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  345. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -255
  346. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  347. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  348. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  349. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -328
  350. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  351. package/artifacts/contracts/components/Product.sol/Product.json +0 -346
  352. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  354. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  356. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  358. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  359. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  360. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  361. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  362. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  363. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  364. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  365. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  366. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  367. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  368. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  369. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  370. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  371. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  372. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  373. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  374. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  375. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  376. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  377. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  378. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  379. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  380. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  381. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  382. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  383. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  384. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  385. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  386. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  387. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  388. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  389. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  390. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  391. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  392. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  393. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  394. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  395. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -299
  396. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  397. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  398. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  399. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  400. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  401. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  402. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  403. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  404. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  405. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  406. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  407. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  408. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  409. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  410. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  411. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  412. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  413. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  414. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -254
  415. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  416. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -254
  417. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  418. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  419. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -129
  420. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  421. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -155
  422. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  423. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  424. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  425. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
  426. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  427. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  428. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  429. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  430. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  431. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  432. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  433. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  434. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  435. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  436. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  437. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  438. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  439. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  440. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  441. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  442. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  443. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  444. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  445. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  446. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  447. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  448. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  449. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  450. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  451. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -92
  452. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  453. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  454. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  455. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +0 -174
  456. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  457. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -479
  458. package/contracts/components/Component.sol +0 -77
  459. package/contracts/components/IPool.sol +0 -15
  460. package/contracts/components/IProduct.sol +0 -16
  461. package/contracts/components/Pool.sol +0 -52
  462. package/contracts/components/Product.sol +0 -89
  463. package/contracts/experiment/errors/Require.sol +0 -38
  464. package/contracts/experiment/errors/Revert.sol +0 -44
  465. package/contracts/experiment/inheritance/A.sol +0 -53
  466. package/contracts/experiment/inheritance/B.sol +0 -28
  467. package/contracts/experiment/inheritance/C.sol +0 -34
  468. package/contracts/experiment/inheritance/IA.sol +0 -13
  469. package/contracts/experiment/inheritance/IB.sol +0 -10
  470. package/contracts/experiment/inheritance/IC.sol +0 -12
  471. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  472. package/contracts/experiment/statemachine/ISM.sol +0 -25
  473. package/contracts/experiment/statemachine/README.md +0 -112
  474. package/contracts/experiment/statemachine/SM.sol +0 -57
  475. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  476. package/contracts/experiment/types/TypeA.sol +0 -47
  477. package/contracts/experiment/types/TypeB.sol +0 -29
  478. package/contracts/instance/access/Access.sol +0 -165
  479. package/contracts/instance/access/IAccess.sol +0 -63
  480. package/contracts/instance/component/ComponentModule.sol +0 -274
  481. package/contracts/instance/component/IComponent.sol +0 -74
  482. package/contracts/instance/lifecycle/ILifecycle.sol +0 -47
  483. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  484. package/contracts/instance/policy/IPolicy.sol +0 -50
  485. package/contracts/instance/policy/PolicyModule.sol +0 -114
  486. package/contracts/instance/pool/IPoolModule.sol +0 -23
  487. package/contracts/instance/pool/PoolModule.sol +0 -81
  488. package/contracts/instance/product/IProductService.sol +0 -36
  489. package/contracts/instance/product/ProductService.sol +0 -136
  490. package/contracts/instance/treasury/ITreasury.sol +0 -91
  491. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  492. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  493. package/contracts/registry/IChainNft.sol +0 -21
  494. package/contracts/types/ChainId.sol +0 -38
  495. package/contracts/types/Fee.sol +0 -32
  496. package/contracts/types/UFixed.sol +0 -210
@@ -1,182 +1,505 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {NftId, toNftId, zeroNftId} 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";
9
+
10
+ import {ChainNft} from "./ChainNft.sol";
11
+ import {IRegistry} from "./IRegistry.sol";
12
+ import {ReleaseManager} from "./ReleaseManager.sol";
13
+
14
+ // IMPORTANT
15
+ // Each NFT minted by registry is accosiated with:
16
+ // 1) NFT owner
17
+ // 2) registred contract OR object stored in registered (parent) contract
18
+ // Four registration flows:
19
+ // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
20
+ // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
21
+ // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
22
+ // 4) state object by regular service (POLICY, BUNDLE, STAKE)
23
+
24
+ contract Registry is
25
+ IRegistry
26
+ {
27
+ address public constant NFT_LOCK_ADDRESS = address(0x1);
28
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
29
+ uint256 public constant STAKING_TOKEN_SEQUENCE_ID = 3;
30
+ string public constant EMPTY_URI = "";
31
+
32
+ mapping(NftId nftId => ObjectInfo info) private _info;
33
+ mapping(address object => NftId nftId) private _nftIdByAddress;
34
+
35
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
3
36
 
4
- import {IChainNft} from "./IChainNft.sol";
5
- import {IRegistry, IRegistryLinked, IRegisterable} from "./IRegistry.sol";
6
- import {NftId, toNftId, NftIdLib} from "../types/NftId.sol";
7
- import {ObjectType, INSTANCE, POLICY, BUNDLE} from "../types/ObjectType.sol";
37
+ mapping(ObjectType objectType => bool) private _coreTypes;
8
38
 
9
- contract RegistryLinked is IRegistryLinked {
10
- IRegistry internal _registry;
39
+ mapping(ObjectType objectType => mapping(
40
+ ObjectType parentType => bool)) private _coreContractCombinations;
11
41
 
12
- constructor(address registry) {
13
- _registry = IRegistry(registry);
42
+ mapping(ObjectType objectType => mapping(
43
+ ObjectType parentType => bool)) private _coreObjectCombinations;
44
+
45
+ NftId private _registryNftId;
46
+ ChainNft private _chainNft;
47
+
48
+ ReleaseManager private _releaseManager;
49
+ address private _stakingAddress;
50
+
51
+ modifier onlyRegistryService() {
52
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
53
+ revert CallerNotRegistryService();
54
+ }
55
+ _;
14
56
  }
15
57
 
16
- function getRegistry() external view override returns (IRegistry registry) {
17
- return _registry;
58
+ modifier onlyReleaseManager() {
59
+ if(msg.sender != address(_releaseManager)) {
60
+ revert CallerNotReleaseManager();
61
+ }
62
+ _;
18
63
  }
19
- }
20
64
 
21
- abstract contract Registerable is RegistryLinked, IRegisterable {
22
- using NftIdLib for NftId;
65
+ constructor() {
66
+ _releaseManager = ReleaseManager(msg.sender);
67
+
68
+ // deploy NFT
69
+ _chainNft = new ChainNft(address(this));
70
+
71
+ // initial registry setup
72
+ _registerProtocol();
73
+ _registerRegistry();
74
+
75
+ // set object types and object parent relations
76
+ _setupValidCoreTypesAndCombinations();
77
+ }
78
+
79
+
80
+ function registerStaking(
81
+ address stakingAddress,
82
+ address stakingOwner
83
+ )
84
+ external
85
+ onlyReleaseManager
86
+ returns(NftId stakingNftId)
87
+ {
88
+ // staking contract for same chain may only be registered once
89
+ if (_stakingAddress != address(0)) {
90
+ revert StakingAlreadyRegistered(_stakingAddress);
91
+ }
92
+
93
+ _stakingAddress = stakingAddress;
94
+ uint256 stakingId = _chainNft.calculateTokenId(STAKING_TOKEN_SEQUENCE_ID);
95
+ stakingNftId = toNftId(stakingId);
96
+
97
+ _nftIdByAddress[_stakingAddress] = stakingNftId;
98
+ _info[stakingNftId] = ObjectInfo({
99
+ nftId: stakingNftId,
100
+ parentNftId: _registryNftId,
101
+ objectType: STAKING(),
102
+ isInterceptor: false,
103
+ objectAddress: _stakingAddress,
104
+ initialOwner: stakingOwner,
105
+ data: ""
106
+ });
107
+
108
+ _chainNft.mint(stakingOwner, stakingId);
109
+ }
110
+
111
+ function registerService(
112
+ ObjectInfo memory info,
113
+ VersionPart version,
114
+ ObjectType domain
115
+ )
116
+ external
117
+ onlyReleaseManager
118
+ returns(NftId nftId)
119
+ {
120
+ /* must be guaranteed by release manager
121
+ if(info.objectType != SERVICE()) {
122
+ revert();
123
+ }
124
+ if(info.parentType != REGISTRY()) {
125
+ revert();
126
+ }
127
+ info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
128
+ */
129
+
130
+ if(_service[version][domain] > address(0)) {
131
+ revert ServiceAlreadyRegistered(info.objectAddress);
132
+ }
133
+
134
+ _service[version][domain] = info.objectAddress; // nftId;
23
135
 
24
- address private _initialOwner;
136
+ nftId = _register(info);
25
137
 
26
- constructor(address registry) RegistryLinked(registry) {
27
- _initialOwner = msg.sender;
138
+ emit LogServiceRegistration(version, domain);
28
139
  }
29
140
 
30
- // getType, getData and register need to be implemented by concrete contract
141
+ function register(ObjectInfo memory info)
142
+ external
143
+ onlyRegistryService
144
+ returns(NftId nftId)
145
+ {
146
+ ObjectType objectType = info.objectType;
147
+ ObjectType parentType = _info[info.parentNftId].objectType;
148
+
149
+ // TODO do not need it here -> SERVICE is no longer part of _coreContractCombinations
150
+ // no service registrations
151
+ if(objectType == SERVICE()) {
152
+ revert ServiceRegistration();
153
+ }
31
154
 
32
- function isRegisterable() external pure override returns (bool) {
33
- return true;
155
+ // only valid core types combinations
156
+ if(info.objectAddress == address(0))
157
+ {
158
+ if(_coreObjectCombinations[objectType][parentType] == false) {
159
+ revert InvalidTypesCombination(objectType, parentType);
160
+ }
161
+ }
162
+ else
163
+ {
164
+ if(_coreContractCombinations[objectType][parentType] == false) {
165
+ revert InvalidTypesCombination(objectType, parentType);
166
+ }
167
+ }
168
+
169
+ nftId = _register(info);
34
170
  }
35
171
 
36
- function getInitialOwner() public view override returns (address deployer) {
37
- return _initialOwner;
172
+ function registerWithCustomType(ObjectInfo memory info)
173
+ external
174
+ onlyRegistryService
175
+ returns(NftId nftId)
176
+ {
177
+ ObjectType objectType = info.objectType;
178
+ ObjectType parentType = _info[info.parentNftId].objectType;
179
+
180
+ if(_coreTypes[objectType]) {
181
+ revert CoreTypeRegistration();
182
+ }
183
+
184
+ if(
185
+ parentType == PROTOCOL() ||
186
+ parentType == REGISTRY() ||
187
+ parentType == SERVICE()
188
+ ) {
189
+ revert InvalidTypesCombination(objectType, parentType);
190
+ }
191
+
192
+ _register(info);
38
193
  }
39
194
 
40
- function isRegistered() public view override returns (bool) {
41
- NftId nftId = _registry.getNftId(address(this));
42
- return nftId.gtz();
195
+
196
+ /// @dev earliest GIF major version
197
+ function getInitialVersion() external view returns (VersionPart) {
198
+ return _releaseManager.getInitialVersion();
43
199
  }
44
200
 
45
- function getNftId() public view override returns (NftId nftId) {
46
- return _registry.getNftId(address(this));
201
+ // TODO make distinction between active an not yet active version
202
+ // need to be thought trough, not yet clear if necessary
203
+ // need to answer question: what is the latest version during the upgrade process?
204
+ // likely setting up a new gif version does not fit into a single tx
205
+ // in this case we might want to have a period where the latest version is
206
+ // in the process of being set up while the latest active version is 1 major release smaller
207
+ /// @dev latest GIF major version (might not yet be active)
208
+ function getNextVersion() external view returns (VersionPart) {
209
+ return _releaseManager.getNextVersion();
47
210
  }
48
211
 
49
- function getOwner() public view override returns (address owner) {
50
- NftId id = _registry.getNftId(address(this));
51
- owner = _registry.getOwner(id);
52
- return owner != address(0) ? owner : _initialOwner;
212
+ /// @dev latest active GIF release version
213
+ function getLatestVersion() external view returns (VersionPart) {
214
+ return _releaseManager.getLatestVersion();
53
215
  }
54
- }
55
216
 
56
- contract Registry is IRegistry {
57
- using NftIdLib for NftId;
217
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
218
+ return _releaseManager.getReleaseInfo(version);
219
+ }
58
220
 
59
- string public constant EMPTY_URI = "";
221
+ function getObjectCount() external view returns (uint256) {
222
+ return _chainNft.totalSupply();
223
+ }
60
224
 
61
- mapping(NftId nftId => RegistryInfo info) private _info;
62
- mapping(NftId nftId => address owner) private _owner;
63
- mapping(address object => NftId nftId) private _nftIdByAddress;
225
+ function getReleaseManagerAddress() external view returns (address) {
226
+ return address(_releaseManager);
227
+ }
64
228
 
65
- IChainNft private _chainNft;
229
+ function getNftId() external view returns (NftId nftId) {
230
+ return _registryNftId;
231
+ }
66
232
 
67
- function initialize(address chainNft) external {
68
- require(
69
- address(_chainNft) == address(0),
70
- "ERROR:REG-001:ALREADY_INITIALIZED"
71
- );
72
- _chainNft = IChainNft(chainNft);
233
+ function getNftId(address object) external view returns (NftId id) {
234
+ return _nftIdByAddress[object];
73
235
  }
74
236
 
75
- function register(
76
- address objectAddress
77
- ) external override returns (NftId nftId) {
78
- require(
79
- _nftIdByAddress[objectAddress].eqz(),
80
- "ERROR:REG-002:ALREADY_REGISTERED"
81
- );
237
+ function ownerOf(NftId nftId) public view returns (address) {
238
+ return _chainNft.ownerOf(nftId.toInt());
239
+ }
82
240
 
83
- IRegisterable registerable = IRegisterable(objectAddress);
84
- require(
85
- registerable.isRegisterable(),
86
- "ERROR:REG-003:NOT_REGISTERABLE"
87
- );
241
+ function ownerOf(address contractAddress) public view returns (address) {
242
+ return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
243
+ }
88
244
 
89
- // check parent exists (for objects not instances)
90
- if (registerable.getType() != INSTANCE()) {
91
- RegistryInfo memory parentInfo = _info[
92
- registerable.getParentNftId()
93
- ];
94
- require(parentInfo.nftId.gtz(), "ERROR:REG-004:PARENT_NOT_FOUND");
95
- // check validity of parent relation, valid relations are
96
- // policy -> product, bundle -> pool, product -> instance, pool -> instance
245
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
246
+ return _info[nftId];
247
+ }
248
+
249
+ function getObjectInfo(address object) external view returns (ObjectInfo memory) {
250
+ return _info[_nftIdByAddress[object]];
251
+ }
252
+
253
+ function isRegistered(NftId nftId) public view returns (bool) {
254
+ return _info[nftId].objectType.gtz();
255
+ }
256
+
257
+ function isRegistered(address object) external view returns (bool) {
258
+ return _nftIdByAddress[object].gtz();
259
+ }
260
+
261
+ function isRegisteredService(address object) external view returns (bool) {
262
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
263
+ }
264
+
265
+ function isRegisteredComponent(address object) external view returns (bool) {
266
+ NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
267
+ return _info[objectParentNftId].objectType == INSTANCE();
268
+ }
269
+
270
+ function isValidRelease(VersionPart version) external view returns (bool)
271
+ {
272
+ return _releaseManager.isValidRelease(version);
273
+ }
274
+
275
+ function getStakingAddress() external view returns (address staking) {
276
+ return _stakingAddress;
277
+ }
278
+
279
+ function getServiceAddress(
280
+ ObjectType serviceDomain,
281
+ VersionPart releaseVersion
282
+ ) external view returns (address service)
283
+ {
284
+ // TODO how can I get service address while release is not validated/activated ?!! -> user will check validity of release on its own
285
+ //if(_releaseManager.isValidRelease(releaseVersion)) {
286
+ service = _service[releaseVersion][serviceDomain];
287
+ //}
288
+ }
289
+
290
+ function getChainNftAddress() external view override returns (address) {
291
+ return address(_chainNft);
292
+ }
293
+
294
+ function getOwner() public view returns (address owner) {
295
+ return ownerOf(address(this));
296
+ }
297
+
298
+ // IERC165
299
+
300
+ function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
301
+ if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
302
+ return true;
97
303
  }
98
304
 
99
- uint256 mintedTokenId = _chainNft.mint(
100
- registerable.getInitialOwner(),
101
- EMPTY_URI
102
- );
103
- nftId = toNftId(mintedTokenId);
104
-
105
- RegistryInfo memory info = RegistryInfo(
106
- nftId,
107
- registerable.getParentNftId(),
108
- registerable.getType(),
109
- objectAddress,
110
- registerable.getInitialOwner()
111
- );
305
+ return false;
306
+ }
307
+
308
+ // Internals
112
309
 
310
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
311
+ // TODO registration of precompile addresses
312
+ function _register(ObjectInfo memory info)
313
+ internal
314
+ returns(NftId nftId)
315
+ {
316
+ ObjectType objectType = info.objectType;
317
+ NftId parentNftId = info.parentNftId;
318
+ ObjectInfo memory parentInfo = _info[parentNftId];
319
+ ObjectType parentType = parentInfo.objectType; // see function header
320
+ address parentAddress = parentInfo.objectAddress;
321
+
322
+ // parent is contract -> need to check? -> check before minting
323
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
324
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
325
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
326
+ if(parentAddress == address(0)) {
327
+ revert ZeroParentAddress();
328
+ }
329
+
330
+ address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
331
+ uint256 tokenId = _chainNft.getNextTokenId();
332
+ nftId = toNftId(tokenId);
333
+
334
+ info.nftId = nftId;
113
335
  _info[nftId] = info;
114
- _nftIdByAddress[objectAddress] = nftId;
115
336
 
116
- // add logging
337
+ if(info.objectAddress > address(0))
338
+ {
339
+ address contractAddress = info.objectAddress;
340
+
341
+ if(_nftIdByAddress[contractAddress].gtz()) {
342
+ revert ContractAlreadyRegistered(contractAddress);
343
+ }
344
+
345
+ _nftIdByAddress[contractAddress] = nftId;
346
+ }
347
+
348
+ emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
349
+
350
+ // calls nft receiver(1) and interceptor(2)
351
+ uint256 mintedTokenId = _chainNft.mint(
352
+ info.initialOwner,
353
+ interceptor,
354
+ EMPTY_URI);
355
+ assert(mintedTokenId == tokenId);
356
+
117
357
  }
118
358
 
119
- function registerObjectForInstance(
120
- NftId parentNftId,
121
- ObjectType objectType,
122
- address initialOwner
359
+ /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
360
+ function _getInterceptor(
361
+ bool isInterceptor,
362
+ address objectAddress,
363
+ bool parentIsInterceptor,
364
+ address parentObjectAddress
123
365
  )
124
- external
125
- override
126
- returns (
127
- // TODO add onlyRegisteredInstance
128
- NftId nftId
129
- )
366
+ internal
367
+ view
368
+ returns (address interceptor)
130
369
  {
131
- // TODO add more validation
132
- require(
133
- objectType == POLICY() || objectType == BUNDLE(),
134
- "ERROR:REG-005:TYPE_INVALID"
135
- );
136
-
137
- uint256 mintedTokenId = _chainNft.mint(initialOwner, EMPTY_URI);
138
- nftId = toNftId(mintedTokenId);
139
-
140
- RegistryInfo memory info = RegistryInfo(
141
- nftId,
142
- parentNftId,
143
- objectType,
144
- address(0),
145
- initialOwner
146
- );
370
+ if (objectAddress == address(0)) {
371
+ if (parentIsInterceptor) {
372
+ return parentObjectAddress;
373
+ } else {
374
+ return address(0);
375
+ }
376
+ }
147
377
 
148
- _info[nftId] = info;
378
+ if (isInterceptor) {
379
+ return objectAddress;
380
+ }
149
381
 
150
- // add logging
382
+ return address(0);
151
383
  }
152
384
 
153
- function getObjectCount() external view override returns (uint256) {
154
- return _chainNft.totalSupply();
155
- }
385
+ // Internals called only in constructor
156
386
 
157
- function getNftId(
158
- address object
159
- ) external view override returns (NftId id) {
160
- return _nftIdByAddress[object];
387
+ /// @dev protocol registration used to anchor the dip ecosystem relations
388
+ function _registerProtocol()
389
+ private
390
+ {
391
+ uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
392
+ NftId protocolNftId = toNftId(protocolId);
393
+
394
+ _info[protocolNftId] = ObjectInfo({
395
+ nftId: protocolNftId,
396
+ parentNftId: zeroNftId(),
397
+ objectType: PROTOCOL(),
398
+ isInterceptor: false,
399
+ objectAddress: address(0),
400
+ initialOwner: NFT_LOCK_ADDRESS,
401
+ data: ""
402
+ });
403
+
404
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
161
405
  }
162
406
 
163
- function isRegistered(
164
- address object
165
- ) external view override returns (bool) {
166
- return _nftIdByAddress[object].gtz();
167
- }
407
+ /// @dev registry registration
408
+ /// might also register the global registry when not on mainnet
409
+ function _registerRegistry()
410
+ private
411
+ {
412
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
413
+ NftId registryNftId = toNftId(registryId);
414
+ NftId parentNftId;
415
+
416
+ if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
417
+ {// we're not the global registry
418
+ _registerGlobalRegistry();
419
+ parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
420
+ }
421
+ else
422
+ {// we are global registry
423
+ parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
424
+ }
168
425
 
169
- function getInfo(
170
- NftId nftId
171
- ) external view override returns (RegistryInfo memory info) {
172
- return _info[nftId];
426
+ _info[registryNftId] = ObjectInfo({
427
+ nftId: registryNftId,
428
+ parentNftId: parentNftId,
429
+ objectType: REGISTRY(),
430
+ isInterceptor: false,
431
+ objectAddress: address(this),
432
+ initialOwner: NFT_LOCK_ADDRESS,
433
+ data: ""
434
+ });
435
+ _nftIdByAddress[address(this)] = registryNftId;
436
+ _registryNftId = registryNftId;
437
+
438
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
173
439
  }
174
440
 
175
- function getOwner(NftId nftId) external view override returns (address) {
176
- return _chainNft.ownerOf(nftId.toInt());
441
+ /// @dev global registry registration for non mainnet registries
442
+ function _registerGlobalRegistry()
443
+ private
444
+ {
445
+ uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
446
+ NftId globalRegistryNftId = toNftId(globalRegistryId);
447
+
448
+ _info[globalRegistryNftId] = ObjectInfo({
449
+ nftId: globalRegistryNftId,
450
+ parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
451
+ objectType: REGISTRY(),
452
+ isInterceptor: false,
453
+ objectAddress: address(0),
454
+ initialOwner: NFT_LOCK_ADDRESS,
455
+ data: ""
456
+ });
457
+
458
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
177
459
  }
178
460
 
179
- function getNftAddress() external view override returns (address nft) {
180
- return address(_chainNft);
461
+ /// @dev defines which object - parent types relations are allowed to register
462
+ // IMPORTANT:
463
+ // 1) EACH object type MUST have only one parent type across ALL mappings
464
+ // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
465
+ // 3) DO NOT use REGISTRY as object type
466
+ // 2) DO NOT use PROTOCOL and "zeroObjectType"
467
+ function _setupValidCoreTypesAndCombinations()
468
+ private
469
+ {
470
+ _coreTypes[REGISTRY()] = true;
471
+ _coreTypes[SERVICE()] = true;
472
+ _coreTypes[TOKEN()] = true;
473
+ _coreTypes[INSTANCE()] = true;
474
+ _coreTypes[PRODUCT()] = true;
475
+ _coreTypes[POOL()] = true;
476
+ _coreTypes[DISTRIBUTION()] = true;
477
+ _coreTypes[POLICY()] = true;
478
+ _coreTypes[BUNDLE()] = true;
479
+ _coreTypes[STAKING()] = true;
480
+ _coreTypes[STAKE()] = true;
481
+
482
+ _coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
483
+ _coreContractCombinations[STAKING()][REGISTRY()] = true; // only for chain staking contract
484
+ _coreContractCombinations[TOKEN()][REGISTRY()] = true;
485
+ //_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
486
+
487
+ // registry as parent, ONLY approved
488
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
489
+
490
+ // instance as parent, ONLY approved
491
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
492
+ _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
493
+ _coreContractCombinations[ORACLE()][INSTANCE()] = true;
494
+ _coreContractCombinations[POOL()][INSTANCE()] = true;
495
+
496
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
497
+
498
+ // product as parent, ONLY approved
499
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
500
+
501
+ // pool as parent, ONLY approved
502
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
503
+ _coreObjectCombinations[STAKE()][POOL()] = true;
181
504
  }
182
505
  }