@etherisc/gif-next 0.0.2-e1e92ab-754 → 0.0.2-e2d8c7d-942

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 (370) hide show
  1. package/README.md +160 -2
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +152 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +220 -33
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +114 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -25
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +24 -57
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -50
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +291 -68
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +299 -58
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  50. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  52. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +807 -1023
  54. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +496 -0
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +2290 -1055
  60. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
  62. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1079 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +560 -0
  70. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +40 -0
  74. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  76. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  77. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  80. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  81. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  82. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  84. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  86. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  88. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  90. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  92. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  94. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  96. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  98. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  100. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +47 -47
  102. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +95 -41
  104. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  106. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  108. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +1 -1
  110. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  111. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  112. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  113. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +9 -71
  115. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  116. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -232
  117. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  118. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +984 -0
  119. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  120. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  121. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  122. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +81 -116
  123. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  124. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
  125. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  126. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +76 -376
  127. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  128. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  129. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  130. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
  131. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  132. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +202 -1
  133. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  134. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -19
  135. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  136. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  137. package/artifacts/contracts/registry/Registry.sol/Registry.json +173 -50
  138. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  139. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +75 -27
  140. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  141. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +61 -34
  142. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  143. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  144. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  145. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  146. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  147. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  149. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  150. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +1 -1
  151. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  153. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  154. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  155. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  156. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  157. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  158. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  159. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +2 -104
  160. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  161. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +2 -2
  162. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  163. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  164. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  165. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  166. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  170. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  172. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestService.sol/TestService.json +26 -10
  174. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  176. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  177. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  178. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +18 -2
  179. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  180. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  181. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  196. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  198. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  200. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  202. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  204. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  206. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  208. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  210. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  212. package/contracts/components/BaseComponent.sol +64 -11
  213. package/contracts/components/Distribution.sol +23 -15
  214. package/contracts/components/IBaseComponent.sol +14 -2
  215. package/contracts/components/IDistributionComponent.sol +2 -4
  216. package/contracts/components/IPoolComponent.sol +5 -3
  217. package/contracts/components/IProductComponent.sol +2 -4
  218. package/contracts/components/Pool.sol +57 -32
  219. package/contracts/components/Product.sol +59 -66
  220. package/contracts/experiment/cloning/Cloner.sol +47 -0
  221. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  222. package/contracts/instance/BundleManager.sol +129 -0
  223. package/contracts/instance/Cloneable.sol +46 -0
  224. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  225. package/contracts/instance/IInstance.sol +52 -44
  226. package/contracts/instance/IInstanceBase.sol +26 -0
  227. package/contracts/instance/IInstanceService.sol +34 -0
  228. package/contracts/instance/Instance.sol +444 -63
  229. package/contracts/instance/InstanceAccessManager.sol +288 -0
  230. package/contracts/instance/InstanceBase.sol +41 -0
  231. package/contracts/instance/InstanceReader.sol +315 -0
  232. package/contracts/instance/InstanceService.sol +299 -0
  233. package/contracts/instance/InstanceServiceManager.sol +57 -0
  234. package/contracts/instance/ObjectManager.sol +101 -0
  235. package/contracts/instance/base/ComponentServiceBase.sol +44 -21
  236. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  237. package/contracts/instance/base/ILifecycle.sol +3 -3
  238. package/contracts/instance/base/KeyValueStore.sol +49 -38
  239. package/contracts/instance/base/Lifecycle.sol +1 -1
  240. package/contracts/instance/module/IAccess.sol +38 -0
  241. package/contracts/instance/module/IBundle.sol +20 -0
  242. package/contracts/instance/module/IDistribution.sol +39 -0
  243. package/contracts/instance/module/IPolicy.sol +45 -0
  244. package/contracts/instance/module/IRisk.sol +11 -0
  245. package/contracts/instance/module/ISetup.sol +46 -0
  246. package/contracts/instance/module/ITreasury.sol +23 -0
  247. package/contracts/instance/service/BundleService.sol +260 -0
  248. package/contracts/instance/service/BundleServiceManager.sol +54 -0
  249. package/contracts/instance/service/ComponentOwnerService.sol +62 -60
  250. package/contracts/instance/service/DistributionService.sol +79 -15
  251. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  252. package/contracts/instance/service/IBundleService.sol +45 -0
  253. package/contracts/instance/service/IComponentOwnerService.sol +1 -1
  254. package/contracts/instance/service/IDistributionService.sol +1 -1
  255. package/contracts/instance/service/IPolicyService.sol +87 -0
  256. package/contracts/instance/service/IPoolService.sol +7 -24
  257. package/contracts/instance/service/IProductService.sol +9 -76
  258. package/contracts/instance/service/PolicyService.sol +508 -0
  259. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  260. package/contracts/instance/service/PoolService.sol +79 -104
  261. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  262. package/contracts/instance/service/ProductService.sol +97 -434
  263. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  264. package/contracts/registry/ChainNft.sol +38 -23
  265. package/contracts/registry/IRegistry.sol +28 -4
  266. package/contracts/registry/IRegistryService.sol +34 -19
  267. package/contracts/registry/Registry.sol +82 -60
  268. package/contracts/registry/RegistryService.sol +42 -125
  269. package/contracts/registry/RegistryServiceManager.sol +24 -7
  270. package/contracts/registry/TokenRegistry.sol +111 -0
  271. package/contracts/shared/ERC165.sol +6 -2
  272. package/contracts/{instance/base → shared}/IService.sol +3 -3
  273. package/contracts/shared/NftOwnable.sol +2 -4
  274. package/contracts/shared/Registerable.sol +1 -0
  275. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  276. package/contracts/shared/Service.sol +55 -0
  277. package/contracts/shared/TokenHandler.sol +27 -0
  278. package/contracts/shared/Versionable.sol +2 -2
  279. package/contracts/test/TestRoleId.sol +1 -1
  280. package/contracts/test/TestService.sol +3 -5
  281. package/contracts/types/DistributorType.sol +55 -0
  282. package/contracts/types/Key32.sol +8 -3
  283. package/contracts/types/NftIdSet.sol +26 -24
  284. package/contracts/types/NumberId.sol +52 -0
  285. package/contracts/types/ObjectType.sol +35 -14
  286. package/contracts/types/Referral.sol +85 -0
  287. package/contracts/types/RoleId.sol +62 -15
  288. package/contracts/types/StateId.sol +5 -1
  289. package/contracts/types/Timestamp.sol +7 -3
  290. package/contracts/types/Version.sol +4 -1
  291. package/package.json +1 -1
  292. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  293. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  294. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  295. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  296. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  297. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  298. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  299. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  300. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  301. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  302. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  303. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  304. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
  305. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  306. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  307. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  308. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  309. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  310. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  311. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  312. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  313. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  314. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  316. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -271
  317. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -271
  319. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  321. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  322. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  323. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  325. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  327. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  328. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  330. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  333. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  334. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  335. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  337. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  338. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
  339. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  340. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -557
  341. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  342. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -716
  343. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  344. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -744
  345. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  346. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  347. package/contracts/instance/IInstanceLinked.sol +0 -8
  348. package/contracts/instance/base/InstanceBase.sol +0 -89
  349. package/contracts/instance/base/ModuleBase.sol +0 -57
  350. package/contracts/instance/base/ServiceBase.sol +0 -44
  351. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  352. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  353. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  354. package/contracts/instance/module/component/IComponent.sol +0 -28
  355. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  356. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  357. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  358. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  359. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  360. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  361. package/contracts/instance/module/risk/IRisk.sol +0 -26
  362. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  363. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  364. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  365. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  366. package/contracts/registry/IChainNft.sol +0 -22
  367. package/contracts/test/TestDistribution.sol +0 -22
  368. package/contracts/test/TestPool.sol +0 -27
  369. package/contracts/test/TestProduct.sol +0 -74
  370. package/contracts/types/ReferralId.sol +0 -48
@@ -4,16 +4,25 @@ pragma solidity ^0.8.20;
4
4
  import {ERC721, ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
5
5
  import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
6
6
 
7
- import {IChainNft} from "./IChainNft.sol";
8
7
  import {ITransferInterceptor} from "./ITransferInterceptor.sol";
9
8
 
10
- contract ChainNft is ERC721Enumerable, IChainNft {
11
- string public constant NAME = "Dezentralized Insurance Protocol Registry";
12
- string public constant SYMBOL = "DIPR";
9
+ contract ChainNft is ERC721Enumerable {
10
+
11
+ // constants
12
+ string public constant NAME = "Dezentralized Insurance Protocol NFT";
13
+ string public constant SYMBOL = "DIPNFT";
13
14
 
14
15
  uint256 public constant PROTOCOL_NFT_ID = 1101;
15
16
  uint256 public constant GLOBAL_REGISTRY_ID = 2101;
16
17
 
18
+ // custom errors
19
+ error CallerNotRegistry(address caller);
20
+ error RegistryAddressZero();
21
+ error NftUriEmpty();
22
+ error NftUriAlreadySet();
23
+
24
+ // contract state
25
+
17
26
  // remember interceptors
18
27
  mapping(uint256 tokenId => address interceptor) private _interceptor;
19
28
 
@@ -31,17 +40,24 @@ contract ChainNft is ERC721Enumerable, IChainNft {
31
40
  uint256 internal _totalMinted;
32
41
 
33
42
  modifier onlyRegistry() {
34
- require(msg.sender == _registry, "ERROR:NFT-001:CALLER_NOT_REGISTRY");
43
+ if (msg.sender != _registry) { revert CallerNotRegistry(msg.sender); }
35
44
  _;
36
45
  }
37
46
 
38
47
  constructor(address registry) ERC721(NAME, SYMBOL) {
39
- require(registry != address(0), "ERROR:NFT-010:REGISTRY_ZERO");
48
+ if (registry == address(0)) { revert RegistryAddressZero(); }
40
49
 
41
50
  _registry = registry;
42
-
43
51
  _chainIdInt = block.chainid;
44
- _chainIdDigits = _countDigits(_chainIdInt);
52
+ _chainIdDigits = 0;
53
+
54
+ // count digis
55
+ uint256 num = _chainIdInt;
56
+ while (num != 0) {
57
+ _chainIdDigits++;
58
+ num /= 10;
59
+ }
60
+
45
61
  _chainIdMultiplier = 10 ** _chainIdDigits;
46
62
  _idNext = 4;
47
63
  }
@@ -77,8 +93,8 @@ contract ChainNft is ERC721Enumerable, IChainNft {
77
93
  _uri[tokenId] = uri;
78
94
  }
79
95
 
80
- _safeMint(to, tokenId);
81
96
  _totalMinted++;
97
+ _safeMint(to, tokenId);
82
98
  }
83
99
 
84
100
 
@@ -95,7 +111,7 @@ contract ChainNft is ERC721Enumerable, IChainNft {
95
111
  }
96
112
 
97
113
 
98
- function burn(uint256 tokenId) external override onlyRegistry {
114
+ function burn(uint256 tokenId) external onlyRegistry {
99
115
  _requireOwned(tokenId);
100
116
  _burn(tokenId);
101
117
  delete _uri[tokenId];
@@ -104,29 +120,36 @@ contract ChainNft is ERC721Enumerable, IChainNft {
104
120
  function setURI(
105
121
  uint256 tokenId,
106
122
  string memory uri
107
- ) external override onlyRegistry {
108
- require(bytes(uri).length > 0, "ERROR:CRG-011:URI_EMPTY");
123
+ ) external onlyRegistry {
124
+ if (bytes(uri).length == 0) { revert NftUriEmpty(); }
125
+ if (bytes(_uri[tokenId]).length > 0) { revert NftUriAlreadySet(); }
109
126
 
110
127
  _requireOwned(tokenId);
111
128
  _uri[tokenId] = uri;
112
129
  }
113
130
 
114
- function exists(uint256 tokenId) external view override returns (bool) {
131
+ function exists(uint256 tokenId) external view returns (bool) {
115
132
  return _ownerOf(tokenId) != address(0);
116
133
  }
117
134
 
118
135
  function tokenURI(
119
136
  uint256 tokenId
120
137
  ) public view override returns (string memory) {
138
+ // gif generally does not revert for view functions
139
+ // this is an exception to keep the openzeppelin nft semantics
121
140
  _requireOwned(tokenId);
122
141
  return _uri[tokenId];
123
142
  }
124
143
 
125
- function getRegistryAddress() external view override returns (address) {
144
+ function getInterceptor(uint256 tokenId) external view returns (address) {
145
+ return _interceptor[tokenId];
146
+ }
147
+
148
+ function getRegistryAddress() external view returns (address) {
126
149
  return _registry;
127
150
  }
128
151
 
129
- function totalMinted() external view override returns (uint256) {
152
+ function totalMinted() external view returns (uint256) {
130
153
  return _totalMinted;
131
154
  }
132
155
 
@@ -176,12 +199,4 @@ contract ChainNft is ERC721Enumerable, IChainNft {
176
199
  id = calculateTokenId(_idNext);
177
200
  _idNext++;
178
201
  }
179
-
180
- function _countDigits(uint256 num) private pure returns (uint256 count) {
181
- count = 0;
182
- while (num != 0) {
183
- count++;
184
- num /= 10;
185
- }
186
- }
187
202
  }
@@ -3,17 +3,29 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
 
6
+ import {ChainNft} from "./ChainNft.sol";
6
7
  import {NftId} from "../types/NftId.sol";
7
8
  import {ObjectType} from "../types/ObjectType.sol";
8
9
  import {VersionPart} from "../types/Version.sol";
9
- import {IChainNft} from "./IChainNft.sol";
10
10
 
11
11
  interface IRegistry is IERC165 {
12
12
 
13
+ event LogInitialMajorVersionSet(VersionPart majorVersion);
14
+ event LogMajorVersionSet(VersionPart majorVersionMax);
13
15
  event LogRegistration(ObjectInfo info);
14
-
15
16
  event LogServiceNameRegistration(string serviceName, VersionPart majorVersion);
16
17
 
18
+ // setMajorVersion()
19
+ error NotOwner(address account);
20
+ error MajorVersionMaxIncreaseInvalid(VersionPart newMajorVersionMax, VersionPart existingMaxMajorVersion);
21
+
22
+ // register()
23
+ error NotRegistryService();
24
+ error ZeroParentAddress();
25
+ error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
26
+ error ContractAlreadyRegistered(address objectAddress);
27
+ error InvalidServiceVersion(VersionPart majorVersion);
28
+ error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
17
29
 
18
30
  struct ObjectInfo {
19
31
  NftId nftId;
@@ -24,12 +36,22 @@ interface IRegistry is IERC165 {
24
36
  address initialOwner;
25
37
  bytes data;
26
38
  }// TODO delete nftId and initialOwner(if not used) from struct
39
+ // TODO strong disagree, keep nftId there (lets keep get object info return object consistent)
40
+
41
+ function setMajorVersion(VersionPart newMajorVersionMax) external;
27
42
 
28
43
  function register(ObjectInfo memory info) external returns (NftId nftId);
29
-
44
+
45
+ function getMajorVersionMin() external view returns (VersionPart);
46
+
47
+ function getMajorVersionMax() external view returns (VersionPart);
48
+
49
+ function getMajorVersion() external view returns (VersionPart);
30
50
 
31
51
  function getObjectCount() external view returns (uint256);
32
52
 
53
+ function getNftId() external view returns (NftId nftId);
54
+
33
55
  function getNftId(address objectAddress) external view returns (NftId nftId);
34
56
 
35
57
  function ownerOf(NftId nftId) external view returns (address);
@@ -44,6 +66,8 @@ interface IRegistry is IERC165 {
44
66
 
45
67
  function isRegistered(address contractAddress) external view returns (bool);
46
68
 
69
+ function isRegisteredService(address contractAddress) external view returns (bool);
70
+
47
71
  function getServiceName(NftId nftId) external view returns (string memory name);
48
72
 
49
73
  function getServiceAddress(
@@ -51,7 +75,7 @@ interface IRegistry is IERC165 {
51
75
  VersionPart majorVersion
52
76
  ) external view returns (address serviceAddress);
53
77
 
54
- function getChainNft() external view returns (IChainNft);
78
+ function getChainNft() external view returns (ChainNft);
55
79
 
56
80
  function getOwner() external view returns (address);
57
81
  }
@@ -1,35 +1,50 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../../contracts/types/NftId.sol";
5
- import {ObjectType} from "../../contracts/types/ObjectType.sol";
6
- import {RoleId} from "../../contracts/types/RoleId.sol";
7
- import {IService} from "../../contracts/instance/base/IService.sol";
8
- import {IRegistry} from "../../contracts/registry/IRegistry.sol";
4
+ import {NftId} from "../types/NftId.sol";
5
+ import {ObjectType} from "../types/ObjectType.sol";
6
+ import {RoleId} from "../types/RoleId.sol";
7
+ import {IService} from "../shared/IService.sol";
8
+ import {IRegistry} from "./IRegistry.sol";
9
9
 
10
- import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
11
- import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
10
+ import {IRegisterable} from "../shared/IRegisterable.sol";
11
+ import {IBaseComponent} from "../components/IBaseComponent.sol";
12
12
 
13
13
  interface IRegistryService is IService {
14
14
 
15
- function registerToken(address tokenAddress) external returns(NftId nftId);
15
+ error SelfRegistration();
16
+ error NotRegistryOwner();
16
17
 
17
- function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
18
+ error NotService();
19
+ error NotInstance();
20
+ error NotProduct();
21
+ error NotPool();
22
+ error NotDistribution();
18
23
 
19
- function registerInstance(IRegisterable instance)
20
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
24
+ error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
25
+ error NotRegisterableOwner(address expectedOwner);
26
+ error RegisterableOwnerIsZero();
27
+ error RegisterableOwnerIsRegistered();
28
+ error InvalidInitialOwner(address initialOwner);
29
+ error InvalidAddress(address registerableAddress);
21
30
 
22
- function registerProduct(IBaseComponent product, address owner)
23
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
24
31
 
25
- function registerPool(IBaseComponent pool, address owner)
26
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
32
+ function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
27
33
 
28
- function registerDistribution(IBaseComponent distribution, address owner)
29
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
34
+ function registerInstance(IRegisterable instance)
35
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
30
36
 
31
- function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId); // -> easy to upgrade
37
+ function registerProduct(IBaseComponent product, address owner)
38
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
32
39
 
33
- function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
40
+ function registerPool(IBaseComponent pool, address owner)
41
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
42
+
43
+ function registerDistribution(IBaseComponent distribution, address owner)
44
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
45
+
46
+ function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId); // -> easy to upgrade
47
+
48
+ function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
34
49
  }
35
50
 
@@ -2,13 +2,12 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../instance/base/IService.sol";
5
+ import {IService} from "../shared/IService.sol";
6
6
 
7
- import {IChainNft} from "./IChainNft.sol";
8
7
  import {ChainNft} from "./ChainNft.sol";
9
8
  import {IRegistry} from "./IRegistry.sol";
10
9
  import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
- import {Version, VersionPart, VersionLib} from "../types/Version.sol";
10
+ import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
12
11
  import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
13
12
  import {ITransferInterceptor} from "./ITransferInterceptor.sol";
14
13
 
@@ -29,55 +28,40 @@ contract Registry is
29
28
  ERC165,
30
29
  IRegistry
31
30
  {
32
- // register
33
- error NotRegistryService();
34
- error ZeroParentAddress();
35
- error ContractAlreadyRegistered(address objectAddress);
36
- error InvalidServiceVersion(VersionPart majorVersion);
37
- error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
38
-
39
- // approve
40
- error NotOwner();
41
- error NotRegisteredContract(NftId registrarNftId);
42
- error NotService(NftId registrarNftId);
43
- error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
44
-
45
- uint256 public constant MAJOR_VERSION_MIN = 3;
31
+ uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
46
32
  address public constant NFT_LOCK_ADDRESS = address(0x1);
33
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
47
34
  uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
48
35
  string public constant EMPTY_URI = "";
49
36
 
50
- mapping(NftId nftId => ObjectInfo info) _info;
51
- mapping(address object => NftId nftId) _nftIdByAddress;
37
+ VersionPart internal _majorVersion;
52
38
 
53
- mapping(NftId registrator => mapping(
54
- ObjectType objectType => bool)) _isApproved;
39
+ mapping(NftId nftId => ObjectInfo info) internal _info;
40
+ mapping(address object => NftId nftId) internal _nftIdByAddress;
55
41
 
56
42
  mapping(ObjectType objectType => mapping(
57
- ObjectType parentType => bool)) _isValidContractCombination;
43
+ ObjectType parentType => bool)) internal _isValidContractCombination;
58
44
 
59
45
  mapping(ObjectType objectType => mapping(
60
- ObjectType parentType => bool)) _isValidObjectCombination;
46
+ ObjectType parentType => bool)) internal _isValidObjectCombination;
61
47
 
62
- mapping(NftId nftId => string name) _string;
48
+ mapping(NftId nftId => string name) internal _string;
63
49
  mapping(bytes32 serviceNameHash => mapping(
64
- VersionPart majorVersion => address service)) _service;
50
+ VersionPart majorVersion => address service)) internal _service;
65
51
 
66
- NftId _registryNftId;
67
- NftId _serviceNftId; // set in stone upon registry creation
68
- IChainNft _chainNft;
69
- ChainNft _chainNftInternal;
52
+ NftId internal _registryNftId;
53
+ NftId internal _serviceNftId; // set in stone upon registry creation
54
+ ChainNft internal _chainNft;
70
55
 
71
56
 
72
57
  modifier onlyOwner() {
73
58
  if(msg.sender != getOwner()) {
74
- revert NotOwner();
59
+ revert NotOwner(msg.sender);
75
60
  }
76
61
  _;
77
62
  }
78
63
 
79
64
  modifier onlyRegistryService() {
80
-
81
65
  if(msg.sender != _info[_serviceNftId].objectAddress) {
82
66
  revert NotRegistryService();
83
67
  }
@@ -87,11 +71,13 @@ contract Registry is
87
71
  constructor(address registryOwner, VersionPart majorVersion)
88
72
  {
89
73
  require(registryOwner > address(0), "Registry: registry owner is 0");
90
- require(majorVersion.toInt() == MAJOR_VERSION_MIN, "Registry: initial major version of registry service is not MAJOR_VERSION_MIN");
74
+
75
+ // major version at constructor time
76
+ _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
77
+ emit LogInitialMajorVersionSet(_majorVersion);
91
78
 
92
79
  // deploy NFT
93
- _chainNftInternal = new ChainNft(address(this));// adds 10kb to deployment size
94
- _chainNft = IChainNft(_chainNftInternal);
80
+ _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
95
81
 
96
82
  // initial registry setup
97
83
  _registerProtocol();
@@ -104,6 +90,24 @@ contract Registry is
104
90
  _registerInterface(type(IRegistry).interfaceId);
105
91
  }
106
92
 
93
+ // from IRegistry
94
+
95
+ /// @dev latest GIF release version
96
+ function setMajorVersion(VersionPart newMajorVersion)
97
+ external
98
+ onlyOwner
99
+ {
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);
105
+ }
106
+
107
+ _majorVersion = newMajorVersion;
108
+ emit LogMajorVersionSet(_majorVersion);
109
+ }
110
+
107
111
  /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
108
112
  // TODO service registration means its approval for some type?
109
113
  // TODO registration of precompile addresses
@@ -171,13 +175,35 @@ contract Registry is
171
175
 
172
176
  emit LogRegistration(info);
173
177
  }
178
+ /// @dev earliest GIF major version
179
+ function getMajorVersionMin() external view returns (VersionPart) {
180
+ return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
181
+ }
182
+
183
+ // TODO make distinction between active an not yet active version
184
+ // need to be thought trough, not yet clear if necessary
185
+ // need to answer question: what is the latest version during the upgrade process?
186
+ // likely setting up a new gif version does not fit into a single tx
187
+ // in this case we might want to have a period where the latest version is
188
+ // in the process of being set up while the latest active version is 1 major release smaller
189
+ /// @dev latest GIF major version (might not yet be active)
190
+ function getMajorVersionMax() external view returns (VersionPart) {
191
+ return _majorVersion;
192
+ }
193
+
194
+ /// @dev latest active GIF release version
195
+ function getMajorVersion() external view returns (VersionPart) {
196
+ return _majorVersion;
197
+ }
174
198
 
175
- // from IRegistry
176
199
  function getObjectCount() external view override returns (uint256) {
177
-
178
200
  return _chainNft.totalSupply();
179
201
  }
180
202
 
203
+ function getNftId() external view returns (NftId nftId) {
204
+ return _registryNftId;
205
+ }
206
+
181
207
  function getNftId(address object) external view override returns (NftId id) {
182
208
  return _nftIdByAddress[object];
183
209
  }
@@ -187,7 +213,6 @@ contract Registry is
187
213
  }
188
214
 
189
215
  function ownerOf(address contractAddress) public view returns (address) {
190
-
191
216
  return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
192
217
  }
193
218
 
@@ -196,7 +221,6 @@ contract Registry is
196
221
  }
197
222
 
198
223
  function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
199
-
200
224
  return _info[_nftIdByAddress[object]];
201
225
  }
202
226
 
@@ -208,6 +232,10 @@ contract Registry is
208
232
  return _nftIdByAddress[object].gtz();
209
233
  }
210
234
 
235
+ function isRegisteredService(address object) external view override returns (bool) {
236
+ return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
237
+ }
238
+
211
239
  function getServiceName(NftId nftId) external view returns (string memory) {
212
240
  return _string[nftId];
213
241
  }
@@ -222,7 +250,7 @@ contract Registry is
222
250
  return _service[serviceNameHash][majorVersion];
223
251
  }
224
252
 
225
- function getChainNft() external view override returns (IChainNft) {
253
+ function getChainNft() external view override returns (ChainNft) {
226
254
  return _chainNft;
227
255
  }
228
256
 
@@ -241,14 +269,8 @@ contract Registry is
241
269
  ) = abi.decode(info.data, (string, VersionPart));
242
270
  bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
243
271
 
244
- // TODO MUST guarantee consistency of service.getVersion() and majorVersion here
245
- // TODO update _serviceNftId when registryService with new major version is registered? -> it is fixed in current setup -> can lock up
246
- // TODO do not use names -> each object type is registered by corresponding service -> conflicting with approve()
247
- if(
248
- majorVersion.toInt() < MAJOR_VERSION_MIN ||
249
- (majorVersion.toInt() > MAJOR_VERSION_MIN &&
250
- _service[serviceNameHash][VersionLib.toVersionPart(majorVersion.toInt() - 1)] == address(0) )
251
- ) {
272
+ // ensures consistency of service.getVersion() and majorVersion here
273
+ if(majorVersion != _majorVersion) {
252
274
  revert InvalidServiceVersion(majorVersion);
253
275
  }
254
276
 
@@ -294,10 +316,10 @@ contract Registry is
294
316
  function _registerProtocol()
295
317
  internal
296
318
  {
297
- uint256 protocolId = _chainNftInternal.PROTOCOL_NFT_ID();
319
+ uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
298
320
  NftId protocolNftId = toNftId(protocolId);
299
321
 
300
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, protocolId);
322
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
301
323
 
302
324
  _info[protocolNftId] = ObjectInfo(
303
325
  protocolNftId,
@@ -315,22 +337,22 @@ contract Registry is
315
337
  function _registerRegistry(address registryOwner)
316
338
  internal
317
339
  {
318
- uint256 registryId = _chainNftInternal.calculateTokenId(2);
340
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
319
341
  NftId registryNftId = toNftId(registryId);
320
342
 
321
343
  NftId parentNftId;
322
344
 
323
- if(registryId != _chainNftInternal.GLOBAL_REGISTRY_ID())
345
+ if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
324
346
  {// we're not the global registry
325
347
  _registerGlobalRegistry();
326
- parentNftId = toNftId(_chainNftInternal.GLOBAL_REGISTRY_ID());
348
+ parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
327
349
  }
328
350
  else
329
351
  {// we are global registry
330
- parentNftId = toNftId(_chainNftInternal.PROTOCOL_NFT_ID());
352
+ parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
331
353
  }
332
354
 
333
- _chainNftInternal.mint(registryOwner, registryId);
355
+ _chainNft.mint(registryOwner, registryId);
334
356
 
335
357
  _info[registryNftId] = ObjectInfo(
336
358
  registryNftId,
@@ -350,15 +372,15 @@ contract Registry is
350
372
  function _registerGlobalRegistry()
351
373
  internal
352
374
  {
353
- uint256 globalRegistryId = _chainNftInternal.GLOBAL_REGISTRY_ID();
375
+ uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
354
376
 
355
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, globalRegistryId);
377
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
356
378
 
357
379
  NftId globalRegistryNftId = toNftId(globalRegistryId);
358
380
 
359
381
  _info[globalRegistryNftId] = ObjectInfo(
360
382
  globalRegistryNftId,
361
- toNftId(_chainNftInternal.PROTOCOL_NFT_ID()), // parent
383
+ toNftId(_chainNft.PROTOCOL_NFT_ID()), // parent
362
384
  REGISTRY(),
363
385
  false, // isInterceptor
364
386
  address(0), // objectAddress
@@ -370,10 +392,10 @@ contract Registry is
370
392
  function _registerRegistryService(address registryOwner)
371
393
  internal
372
394
  {
373
- uint256 serviceId = _chainNftInternal.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
395
+ uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
374
396
  NftId serviceNftId = toNftId(serviceId);
375
397
 
376
- _chainNftInternal.mint(registryOwner, serviceId);
398
+ _chainNft.mint(registryOwner, serviceId);
377
399
 
378
400
  _info[serviceNftId] = ObjectInfo(
379
401
  serviceNftId,
@@ -389,7 +411,7 @@ contract Registry is
389
411
 
390
412
  string memory serviceName = "RegistryService";
391
413
  bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
392
- _service[serviceNameHash][VersionLib.toVersionPart(MAJOR_VERSION_MIN)] = msg.sender;
414
+ _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
393
415
  _string[serviceNftId] = serviceName;
394
416
  _serviceNftId = serviceNftId;
395
417
  }