@etherisc/gif-next 0.0.2-cddad6b-504 → 0.0.2-ce8407f-016

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 (348) hide show
  1. package/README.md +40 -25
  2. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +115 -48
  4. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  5. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  6. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  7. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  8. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  9. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  10. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  11. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  12. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  13. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  14. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  16. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  20. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  22. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  24. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  25. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  26. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  27. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1119 -0
  28. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  29. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  30. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  31. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1 -1998
  32. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  33. package/artifacts/contracts/instance/Instance.sol/Instance.json +2378 -1243
  34. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  36. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  37. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +878 -0
  38. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  39. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +117 -0
  40. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +32 -86
  42. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/IService.sol/IService.json +174 -53
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +138 -112
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  49. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +1 -1
  50. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +220 -52
  51. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  53. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  54. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  55. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  56. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  57. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  58. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  59. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  60. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  61. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  62. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  63. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  64. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  65. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  66. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +141 -12
  67. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  68. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
  69. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  70. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +298 -39
  71. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  72. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +745 -0
  73. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  74. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  75. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  76. package/artifacts/contracts/registry/Registry.sol/Registry.json +489 -120
  77. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  78. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1013 -0
  79. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  80. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +476 -0
  81. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  82. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  83. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  84. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  85. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  86. package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
  87. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  88. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  89. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  90. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  91. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  92. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  93. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  94. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  95. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  96. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  97. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  98. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  99. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  100. package/artifacts/contracts/shared/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
  101. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  102. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  103. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  104. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  105. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  106. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  107. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +5 -111
  108. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  109. package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
  110. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  111. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  112. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  113. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  114. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  115. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  116. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  117. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  118. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  119. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  120. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  121. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  122. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  123. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  124. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  125. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  126. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  127. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  128. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  129. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  130. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  131. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  132. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  133. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  134. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  135. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  136. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  137. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  138. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  139. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  140. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  141. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  142. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  143. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  144. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  145. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  146. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  147. package/contracts/components/IBaseComponent.sol +4 -4
  148. package/contracts/instance/AccessManagedSimple.sol +114 -0
  149. package/contracts/instance/AccessManagerSimple.sol +682 -0
  150. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  151. package/contracts/instance/IInstance.sol +3 -50
  152. package/contracts/instance/Instance.sol +379 -61
  153. package/contracts/instance/InstanceAccessManager.sol +288 -0
  154. package/contracts/instance/InstanceReader.sol +235 -0
  155. package/contracts/instance/InstanceService.sol +45 -0
  156. package/contracts/instance/base/IKeyValueStore.sol +10 -12
  157. package/contracts/instance/base/ILifecycle.sol +3 -3
  158. package/contracts/instance/base/KeyValueStore.sol +46 -19
  159. package/contracts/instance/base/Lifecycle.sol +1 -1
  160. package/contracts/instance/base/ServiceBase.sol +20 -13
  161. package/contracts/instance/module/IAccess.sol +38 -0
  162. package/contracts/instance/module/IBundle.sol +19 -0
  163. package/contracts/instance/module/IDistribution.sol +39 -0
  164. package/contracts/instance/module/IPolicy.sol +45 -0
  165. package/contracts/instance/module/IRisk.sol +11 -0
  166. package/contracts/instance/module/ISetup.sol +41 -0
  167. package/contracts/instance/module/ITreasury.sol +23 -0
  168. package/contracts/registry/ChainNft.sol +43 -15
  169. package/contracts/registry/IChainNft.sol +3 -2
  170. package/contracts/registry/IRegistry.sol +42 -26
  171. package/contracts/registry/IRegistryService.sol +29 -0
  172. package/contracts/registry/ITransferInterceptor.sol +6 -0
  173. package/contracts/registry/Registry.sol +383 -273
  174. package/contracts/registry/RegistryService.sol +369 -0
  175. package/contracts/registry/RegistryServiceManager.sol +43 -0
  176. package/contracts/shared/ContractDeployerLib.sol +72 -0
  177. package/contracts/shared/ERC165.sol +1 -1
  178. package/contracts/shared/INftOwnable.sol +22 -0
  179. package/contracts/shared/IRegisterable.sol +9 -16
  180. package/contracts/shared/IVersionable.sol +55 -11
  181. package/contracts/shared/NftOwnable.sol +136 -0
  182. package/contracts/shared/ProxyManager.sol +94 -0
  183. package/contracts/shared/Registerable.sol +62 -59
  184. package/contracts/shared/TokenHandler.sol +27 -0
  185. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  186. package/contracts/shared/Versionable.sol +113 -55
  187. package/contracts/test/TestRegisterable.sol +5 -6
  188. package/contracts/test/TestRoleId.sol +6 -6
  189. package/contracts/test/TestService.sol +5 -11
  190. package/contracts/types/DistributorType.sol +55 -0
  191. package/contracts/types/Key32.sol +8 -3
  192. package/contracts/types/NumberId.sol +52 -0
  193. package/contracts/types/ObjectType.sol +35 -14
  194. package/contracts/types/Referral.sol +85 -0
  195. package/contracts/types/RoleId.sol +46 -9
  196. package/contracts/types/StateId.sol +1 -1
  197. package/contracts/types/Timestamp.sol +7 -3
  198. package/contracts/types/Version.sol +9 -0
  199. package/package.json +1 -1
  200. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  201. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -174
  202. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  203. package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -405
  204. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  205. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -340
  206. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  207. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -487
  208. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  209. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -370
  210. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  211. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -578
  212. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  213. package/artifacts/contracts/components/Product.sol/Product.json +0 -444
  214. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  215. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  216. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  217. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +0 -300
  218. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  219. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  220. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  221. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +0 -376
  222. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  223. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  224. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  225. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  226. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  227. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  228. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  229. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  230. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  231. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  232. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  233. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  234. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  235. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  236. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  237. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  238. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  239. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  240. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  241. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  242. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  243. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  244. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  245. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  246. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  247. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  248. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  249. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  250. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  251. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  252. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -144
  253. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  254. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
  255. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  256. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  257. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  258. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  259. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  260. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  261. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  262. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -511
  263. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  264. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  265. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  266. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -511
  267. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  268. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -531
  269. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  270. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -420
  271. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  272. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +0 -364
  273. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  274. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +0 -325
  275. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  276. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +0 -440
  277. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  278. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +0 -630
  279. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  280. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -543
  281. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  282. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -858
  283. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  284. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  285. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.dbg.json +0 -4
  286. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.json +0 -495
  287. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  288. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  289. package/artifacts/contracts/shared/Proxy.sol/Proxy.dbg.json +0 -4
  290. package/artifacts/contracts/shared/Proxy.sol/Proxy.json +0 -178
  291. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
  292. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.dbg.json +0 -4
  293. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.json +0 -187
  294. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  295. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -405
  296. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  297. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -578
  298. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  299. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -575
  300. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  301. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  302. package/contracts/components/BaseComponent.sol +0 -94
  303. package/contracts/components/Distribution.sol +0 -132
  304. package/contracts/components/IDistributionComponent.sol +0 -47
  305. package/contracts/components/IPoolComponent.sol +0 -71
  306. package/contracts/components/IProductComponent.sol +0 -38
  307. package/contracts/components/Pool.sol +0 -235
  308. package/contracts/components/Product.sol +0 -227
  309. package/contracts/experiment/statemachine/README.md +0 -112
  310. package/contracts/instance/IInstanceLinked.sol +0 -8
  311. package/contracts/instance/base/ComponentServiceBase.sol +0 -42
  312. package/contracts/instance/base/IInstanceBase.sol +0 -22
  313. package/contracts/instance/base/InstanceBase.sol +0 -91
  314. package/contracts/instance/base/ModuleBase.sol +0 -57
  315. package/contracts/instance/module/access/Access.sol +0 -149
  316. package/contracts/instance/module/access/IAccess.sol +0 -53
  317. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  318. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  319. package/contracts/instance/module/component/ComponentModule.sol +0 -70
  320. package/contracts/instance/module/component/IComponent.sol +0 -28
  321. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  322. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  323. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  324. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  325. package/contracts/instance/module/pool/IPoolModule.sol +0 -40
  326. package/contracts/instance/module/pool/PoolModule.sol +0 -90
  327. package/contracts/instance/module/risk/IRisk.sol +0 -26
  328. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  329. package/contracts/instance/module/treasury/ITreasury.sol +0 -82
  330. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  331. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -138
  332. package/contracts/instance/service/ComponentOwnerService.sol +0 -157
  333. package/contracts/instance/service/DistributionService.sol +0 -59
  334. package/contracts/instance/service/IComponentOwnerService.sol +0 -22
  335. package/contracts/instance/service/IDistributionService.sol +0 -12
  336. package/contracts/instance/service/IPoolService.sol +0 -37
  337. package/contracts/instance/service/IProductService.sol +0 -107
  338. package/contracts/instance/service/PoolService.sol +0 -149
  339. package/contracts/instance/service/ProductService.sol +0 -509
  340. package/contracts/registry/IRegistryLinked.sol +0 -8
  341. package/contracts/registry/RegistryUpgradeable.sol +0 -416
  342. package/contracts/shared/IOwnable.sol +0 -6
  343. package/contracts/shared/Proxy.sol +0 -83
  344. package/contracts/shared/VersionableUpgradeable.sol +0 -108
  345. package/contracts/test/TestDistribution.sol +0 -21
  346. package/contracts/test/TestPool.sol +0 -25
  347. package/contracts/test/TestProduct.sol +0 -72
  348. package/contracts/types/ReferralId.sol +0 -48
@@ -1,12 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
5
5
  import {Key32, KeyId, Key32Lib} from "../../types/Key32.sol";
6
6
  import {NftId} from "../../types/NftId.sol";
7
7
  import {ObjectType} from "../../types/ObjectType.sol";
8
8
  import {StateId, ACTIVE} from "../../types/StateId.sol";
9
- import {Timestamp, blockTimestamp, zeroTimestamp} from "../../types/Timestamp.sol";
9
+ import {Timestamp, TimestampLib} from "../../types/Timestamp.sol";
10
10
 
11
11
  import {Lifecycle} from "./Lifecycle.sol";
12
12
  import {IKeyValueStore} from "./IKeyValueStore.sol";
@@ -29,12 +29,21 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
29
29
 
30
30
  function create(
31
31
  Key32 key32,
32
- ObjectType objectType,
33
32
  bytes memory data
34
33
  )
35
34
  public
36
35
  onlyOwner
37
36
  {
37
+ _create(key32, data);
38
+ }
39
+
40
+ function _create(
41
+ Key32 key32,
42
+ bytes memory data
43
+ )
44
+ internal
45
+ {
46
+ ObjectType objectType = key32.toObjectType();
38
47
  require(objectType.gtz(), "ERROR:KVS-010:TYPE_UNDEFINED");
39
48
 
40
49
  Metadata storage metadata = _value[key32].metadata;
@@ -55,12 +64,26 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
55
64
  _value[key32].data = data;
56
65
 
57
66
  // solhint-disable-next-line avoid-tx-origin
58
- emit LogInfoCreated(toKey(key32), initialState, createdBy, tx.origin);
67
+ emit LogInfoCreated(key32.toObjectType(), key32.toKeyId(), initialState, createdBy, tx.origin);
59
68
  }
60
69
 
61
- function update(Key32 key32, StateId state, bytes memory data)
70
+ function update(
71
+ Key32 key32,
72
+ bytes memory data,
73
+ StateId state
74
+ )
62
75
  public
63
76
  onlyOwner
77
+ {
78
+ _update(key32, data, state);
79
+ }
80
+
81
+ function _update(
82
+ Key32 key32,
83
+ bytes memory data,
84
+ StateId state
85
+ )
86
+ internal
64
87
  {
65
88
  require(state.gtz(), "ERROR:KVS-020:STATE_UNDEFINED");
66
89
  Metadata storage metadata = _value[key32].metadata;
@@ -78,16 +101,21 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
78
101
  metadata.updatedIn = blockBlocknumber();
79
102
 
80
103
  // create log entries
81
- Key memory key = toKey(key32);
82
- // solhint-disable-next-line avoid-tx-origin
83
- emit LogStateUpdated(key, state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
84
- // solhint-disable-next-line avoid-tx-origin
85
- emit LogInfoUpdated(key, state, updatedBy, tx.origin, lastUpdatedIn);
104
+ // solhint-disable avoid-tx-origin
105
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
106
+ emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
107
+ // solhing-enable
86
108
  }
87
109
 
88
110
  function updateData(Key32 key32, bytes memory data)
89
111
  public
90
112
  onlyOwner
113
+ {
114
+ _updateData(key32, data);
115
+ }
116
+
117
+ function _updateData(Key32 key32, bytes memory data)
118
+ internal
91
119
  {
92
120
  Metadata storage metadata = _value[key32].metadata;
93
121
  StateId state = metadata.state;
@@ -103,14 +131,19 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
103
131
  metadata.updatedIn = blockBlocknumber();
104
132
 
105
133
  // create log entry
106
- Key memory key = toKey(key32);
107
134
  // solhint-disable-next-line avoid-tx-origin
108
- emit LogInfoUpdated(key, state, updatedBy, tx.origin, lastUpdatedIn);
135
+ emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
109
136
  }
110
137
 
111
138
  function updateState(Key32 key32, StateId state)
112
139
  public
113
140
  onlyOwner
141
+ {
142
+ _updateState(key32, state);
143
+ }
144
+
145
+ function _updateState(Key32 key32, StateId state)
146
+ internal
114
147
  {
115
148
  require(state.gtz(), "ERROR:KVS-040:STATE_UNDEFINED");
116
149
  Metadata storage metadata = _value[key32].metadata;
@@ -125,9 +158,8 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
125
158
  metadata.updatedIn = blockBlocknumber();
126
159
 
127
160
  // create log entry
128
- Key memory key = toKey(key32);
129
161
  // solhint-disable-next-line avoid-tx-origin
130
- emit LogStateUpdated(key, state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
162
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
131
163
  }
132
164
 
133
165
  function exists(Key32 key32) public view returns (bool) {
@@ -153,9 +185,4 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
153
185
  function toKey32(ObjectType objectType, KeyId id) external pure override returns(Key32) {
154
186
  return Key32Lib.toKey32(objectType, id);
155
187
  }
156
-
157
- function toKey(Key32 key32) public pure override returns (Key memory key) {
158
- (ObjectType objectType, KeyId id) = key32.toKey();
159
- return Key(objectType, id);
160
- }
161
188
  }
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
5
  import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
@@ -3,9 +3,10 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {NftId, zeroNftId} from "../../types/NftId.sol";
5
5
  import {ObjectType, SERVICE} from "../../types/ObjectType.sol";
6
- import {Version, VersionPart} from "../../types/Version.sol";
6
+ import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
7
7
 
8
8
  import {Registerable} from "../../shared/Registerable.sol";
9
+ import {IRegistry} from "../../registry/IRegistry.sol";
9
10
  import {IVersionable} from "../../shared/IVersionable.sol";
10
11
  import {Versionable} from "../../shared/Versionable.sol";
11
12
 
@@ -16,22 +17,28 @@ abstract contract ServiceBase is
16
17
  Versionable,
17
18
  IService
18
19
  {
20
+ function getName() public pure virtual override returns(string memory name);
19
21
 
20
- constructor(
21
- address registry,
22
- NftId registryNftId
23
- )
24
- Registerable(registry, registryNftId)
25
- Versionable()
26
- {
27
- _registerInterface(type(IService).interfaceId);
22
+ function getMajorVersion() public view virtual override returns(VersionPart majorVersion) {
23
+ return getVersion().toMajorPart();
28
24
  }
29
25
 
30
- function getMajorVersion() external view override returns(VersionPart majorVersion) {
31
- return this.getVersion().toMajorPart();
26
+ // from Versionable
27
+ function getVersion()
28
+ public
29
+ pure
30
+ virtual override (IVersionable, Versionable)
31
+ returns(Version)
32
+ {
33
+ return VersionLib.toVersion(3,0,0);
32
34
  }
33
35
 
34
- function getType() external pure override returns (ObjectType) {
35
- return SERVICE();
36
+ function _initializeServiceBase(address registry, NftId registryNftId, address initialOwner)
37
+ internal
38
+ //onlyInitializing //TODO uncomment when "fully" upgradeable
39
+ {// service must provide its name and version upon registration
40
+ bytes memory data = abi.encode(getName(), getMajorVersion());
41
+ _initializeRegisterable(registry, registryNftId, SERVICE(), false, initialOwner, data);
42
+ _registerInterface(type(IService).interfaceId);
36
43
  }
37
44
  }
@@ -0,0 +1,38 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {EnumerableSet} from "@openzeppelin5/contracts/utils/structs/EnumerableSet.sol";
5
+ import {ShortString, ShortStrings} from "@openzeppelin5/contracts/utils/ShortStrings.sol";
6
+
7
+ import {RoleId} from "../../types/RoleId.sol";
8
+
9
+ interface IAccess {
10
+ struct RoleInfo {
11
+ ShortString name;
12
+ bool isCustom;
13
+ }
14
+
15
+ struct TargetInfo {
16
+ ShortString name;
17
+ bool isCustom;
18
+ }
19
+
20
+ error ErrorTargetAddressZero();
21
+ error ErrorTargetAlreadyExists(address target, ShortString name);
22
+ error ErrorTargetDoesNotExist(address target);
23
+ error ErrorTargetNameEmpty(address target);
24
+ error ErrorTargetNameExists(address target, address existingTarget, ShortString name);
25
+
26
+ error ErrorRoleIdInvalid(RoleId roleId);
27
+ error ErrorRoleIdTooBig(RoleId roleId);
28
+ error ErrorRoleIdTooSmall(RoleId roleId);
29
+ error ErrorRoleIdAlreadyExists(RoleId roleId, ShortString name);
30
+ error ErrorRoleIdNotActive(RoleId roleId);
31
+ error ErrorRoleNameEmpty(RoleId roleId);
32
+ error ErrorRoleNameNotUnique(RoleId roleId, ShortString name);
33
+ error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
34
+ error ErrorGrantNonexstentRole(RoleId roleId);
35
+ error ErrorRevokeNonexstentRole(RoleId roleId);
36
+ error ErrorRenounceNonexstentRole(RoleId roleId);
37
+
38
+ }
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {Timestamp} from "../../types/Timestamp.sol";
7
+
8
+ interface IBundle {
9
+ struct BundleInfo {
10
+ NftId poolNftId;
11
+ Fee fee; // bundle fee on net premium amounts
12
+ bytes filter; // required conditions for applications to be considered for collateralization by this bundle
13
+ uint256 capitalAmount; // net investment capital + net premiums - payouts
14
+ uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
15
+ uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
16
+ Timestamp expiredAt; // no new policies
17
+ Timestamp closedAt; // no open policies, locked amount = 0
18
+ }
19
+ }
@@ -0,0 +1,39 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {DistributorType} from "../../types/DistributorType.sol";
5
+ import {NftId} from "../../types/NftId.sol";
6
+ import {Timestamp} from "../../types/Timestamp.sol";
7
+ import {UFixed} from "../../types/UFixed.sol";
8
+
9
+ interface IDistribution {
10
+
11
+ struct DistributorTypeInfo {
12
+ string name;
13
+ UFixed minDiscountPercentage;
14
+ UFixed maxDiscountPercentage;
15
+ UFixed commissionPercentage;
16
+ uint32 maxReferralCount;
17
+ uint32 maxReferralLifetime;
18
+ bool allowSelfReferrals;
19
+ bool allowRenewals;
20
+ bytes data;
21
+ }
22
+
23
+ struct DistributorInfo {
24
+ DistributorType distributorType;
25
+ bool active;
26
+ bytes data;
27
+ }
28
+
29
+ struct ReferralInfo {
30
+ NftId distributorNftId;
31
+ string referralCode;
32
+ UFixed discountPercentage;
33
+ uint32 maxReferrals;
34
+ uint32 usedReferrals;
35
+ Timestamp expiryAt;
36
+ bytes data;
37
+ }
38
+
39
+ }
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {NumberId} from "../../types/NumberId.sol";
6
+ import {ReferralId} from "../../types/Referral.sol";
7
+ import {RiskId} from "../../types/RiskId.sol";
8
+ import {Timestamp} from "../../types/Timestamp.sol";
9
+
10
+ interface IPolicy {
11
+ struct PolicyInfo {
12
+ NftId productNftId;
13
+ NftId bundleNftId;
14
+ ReferralId referralId;
15
+ RiskId riskId;
16
+ uint256 sumInsuredAmount;
17
+ uint256 premiumAmount;
18
+ uint256 premiumPaidAmount;
19
+ uint256 lifetime;
20
+ bytes applicationData;
21
+ bytes policyData;
22
+ uint16 claimsCount;
23
+ uint16 openClaimsCount;
24
+ uint256 payoutAmount;
25
+ Timestamp activatedAt; // time of underwriting
26
+ Timestamp expiredAt; // no new claims (activatedAt + lifetime)
27
+ Timestamp closedAt; // no locked capital (or declinedAt)
28
+ }
29
+
30
+ // claimId neeeds to be encoded policyNftId:claimId combination
31
+ struct ClaimInfo {
32
+ uint256 claimAmount;
33
+ uint256 paidAmount;
34
+ bytes data;
35
+ Timestamp closedAt; // payoment of confirmed claim amount (or declinedAt)
36
+ }
37
+
38
+ // claimId neeeds to be encoded policyNftId:claimId combination
39
+ struct PayoutInfo {
40
+ NumberId claimId;
41
+ uint256 amount;
42
+ bytes data;
43
+ Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
44
+ }
45
+ }
@@ -0,0 +1,11 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+
6
+ interface IRisk {
7
+ struct RiskInfo {
8
+ NftId productNftId;
9
+ bytes data;
10
+ }
11
+ }
@@ -0,0 +1,41 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {Fee} from "../../types/Fee.sol";
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
9
+
10
+ interface ISetup {
11
+ struct ProductSetupInfo {
12
+ IERC20Metadata token;
13
+ TokenHandler tokenHandler;
14
+ NftId distributionNftId;
15
+ NftId poolNftId;
16
+ Fee distributionFee; // default distribution fee (no referral id)
17
+ Fee productFee; // product fee on net premium
18
+ Fee processingFee; // product fee on payout amounts
19
+ Fee poolFee; // pool fee on net premium
20
+ Fee stakingFee; // pool fee on staked capital from investor
21
+ Fee performanceFee; // pool fee on profits from capital investors
22
+ }
23
+
24
+ struct DistributionSetupInfo {
25
+ NftId productNftId;
26
+ TokenHandler tokenHandler;
27
+ Fee distributionFee; // default distribution fee (no referral id)
28
+ bool isIntercepting; // intercepts nft transfers (for distributors)
29
+ address wallet;
30
+ }
31
+
32
+ struct PoolSetupInfo {
33
+ NftId productNftId;
34
+ TokenHandler tokenHandler;
35
+ Fee poolFee; // pool fee on net premium
36
+ Fee stakingFee; // pool fee on staked capital from investor
37
+ Fee performanceFee; // pool fee on profits from capital investors
38
+ bool isIntercepting; // intercepts nft transfers (for bundles)
39
+ address wallet;
40
+ }
41
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {Fee} from "../../types/Fee.sol";
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
9
+
10
+ interface ITreasury {
11
+ struct TreasuryInfo {
12
+ IERC20Metadata token;
13
+ TokenHandler tokenHandler;
14
+ NftId distributionNftId;
15
+ NftId poolNftId;
16
+ Fee distributionFee; // default distribution fee (no referral id)
17
+ Fee productFee; // product fee on net premium
18
+ Fee processingFee; // product fee on payout amounts
19
+ Fee poolFee; // pool fee on net premium
20
+ Fee stakingFee; // pool fee on staked capital from investor
21
+ Fee performanceFee; // pool fee on profits from capital investors
22
+ }
23
+ }
@@ -1,8 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ERC721, ERC721Enumerable} from "@openzeppelin5/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
5
+ import {IERC721} from "@openzeppelin5/contracts/token/ERC721/IERC721.sol";
3
6
 
4
- import {ERC721, ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
5
7
  import {IChainNft} from "./IChainNft.sol";
8
+ import {ITransferInterceptor} from "./ITransferInterceptor.sol";
6
9
 
7
10
  contract ChainNft is ERC721Enumerable, IChainNft {
8
11
  string public constant NAME = "Dezentralized Insurance Protocol Registry";
@@ -11,6 +14,9 @@ contract ChainNft is ERC721Enumerable, IChainNft {
11
14
  uint256 public constant PROTOCOL_NFT_ID = 1101;
12
15
  uint256 public constant GLOBAL_REGISTRY_ID = 2101;
13
16
 
17
+ // remember interceptors
18
+ mapping(uint256 tokenId => address interceptor) private _interceptor;
19
+
14
20
  // remember token uri
15
21
  mapping(uint256 tokenId => string uri) private _uri;
16
22
 
@@ -37,18 +43,36 @@ contract ChainNft is ERC721Enumerable, IChainNft {
37
43
  _chainIdInt = block.chainid;
38
44
  _chainIdDigits = _countDigits(_chainIdInt);
39
45
  _chainIdMultiplier = 10 ** _chainIdDigits;
40
- _idNext = 3;
46
+ _idNext = 4;
41
47
  }
42
48
 
49
+ /**
50
+ * @dev mints a token for a specified token id
51
+ * not part of the IRegistry interface only needed for
52
+ * initial registry setup (protocol and global registry objects)
53
+ */
54
+ function mint(address to, uint256 tokenId) external onlyRegistry {
55
+ _totalMinted++;
56
+ _safeMint(to, tokenId);
57
+ }
58
+
59
+
43
60
  /**
44
61
  * @dev mints the next token to register new objects
62
+ * non-zero transferInterceptors are recorded and called during nft token transfers.
63
+ * the contract receiving such a notification may decides to revert or record the transfer
45
64
  */
46
65
  function mint(
47
66
  address to,
67
+ address interceptor,
48
68
  string memory uri
49
- ) external override onlyRegistry returns (uint256 tokenId) {
69
+ ) public onlyRegistry returns (uint256 tokenId) {
50
70
  tokenId = _getNextTokenId();
51
71
 
72
+ if (interceptor != address(0)) {
73
+ _interceptor[tokenId] = interceptor;
74
+ }
75
+
52
76
  if (bytes(uri).length > 0) {
53
77
  _uri[tokenId] = uri;
54
78
  }
@@ -57,18 +81,22 @@ contract ChainNft is ERC721Enumerable, IChainNft {
57
81
  _totalMinted++;
58
82
  }
59
83
 
84
+
60
85
  /**
61
- * @dev mints a token for a specified token id
62
- * not part of the IRegistry interface only needed for
63
- * initial registry setup (protocol and global registry objects)
64
- */
65
- function mint(address to, uint256 tokenId) external onlyRegistry {
66
- _totalMinted++;
67
- _safeMint(to, tokenId);
86
+ * @dev amend the open zeppelin transferFrom function by an interceptor call if such an interceptor is defined for the nft token id
87
+ * this allows distribution, product and pool components to be notified when distributors, policies and bundles are transferred.
88
+ */
89
+ function transferFrom(address from, address to, uint256 tokenId) public override (ERC721, IERC721) {
90
+ super.transferFrom(from, to, tokenId);
91
+
92
+ if (_interceptor[tokenId] != address(0)) {
93
+ ITransferInterceptor(_interceptor[tokenId]).nftTransferFrom(from, to, tokenId);
94
+ }
68
95
  }
69
96
 
97
+
70
98
  function burn(uint256 tokenId) external override onlyRegistry {
71
- _requireMinted(tokenId);
99
+ _requireOwned(tokenId);
72
100
  _burn(tokenId);
73
101
  delete _uri[tokenId];
74
102
  }
@@ -79,18 +107,18 @@ contract ChainNft is ERC721Enumerable, IChainNft {
79
107
  ) external override onlyRegistry {
80
108
  require(bytes(uri).length > 0, "ERROR:CRG-011:URI_EMPTY");
81
109
 
82
- _requireMinted(tokenId);
110
+ _requireOwned(tokenId);
83
111
  _uri[tokenId] = uri;
84
112
  }
85
113
 
86
114
  function exists(uint256 tokenId) external view override returns (bool) {
87
- return _exists(tokenId);
115
+ return _ownerOf(tokenId) != address(0);
88
116
  }
89
117
 
90
118
  function tokenURI(
91
119
  uint256 tokenId
92
120
  ) public view override returns (string memory) {
93
- _requireMinted(tokenId);
121
+ _requireOwned(tokenId);
94
122
  return _uri[tokenId];
95
123
  }
96
124
 
@@ -1,11 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
4
+ import {IERC721Enumerable} from "@openzeppelin5/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
5
5
 
6
6
  interface IChainNft is IERC721Enumerable {
7
7
  function mint(
8
8
  address to,
9
+ address interceptor,
9
10
  string memory uri
10
11
  ) external returns (uint256 tokenId);
11
12
 
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
4
+ import {IERC165} from "@openzeppelin5/contracts/utils/introspection/IERC165.sol";
5
5
 
6
6
  import {NftId} from "../types/NftId.sol";
7
7
  import {ObjectType} from "../types/ObjectType.sol";
@@ -9,49 +9,65 @@ import {VersionPart} from "../types/Version.sol";
9
9
  import {IChainNft} from "./IChainNft.sol";
10
10
 
11
11
  interface IRegistry is IERC165 {
12
+
13
+ event LogRegistration(NftId indexed nftId, NftId parentNftId, ObjectType objectType, bool isInterceptor, address objectAddress, address initialOwner);
14
+
15
+ event LogServiceNameRegistration(string serviceName, VersionPart majorVersion);
16
+
17
+ event LogApproval(NftId indexed nftId, ObjectType objectType);
18
+
12
19
  struct ObjectInfo {
13
20
  NftId nftId;
14
21
  NftId parentNftId;
15
22
  ObjectType objectType;
23
+ bool isInterceptor;
16
24
  address objectAddress;
17
25
  address initialOwner;
18
26
  bytes data;
19
- }
20
-
21
- function register(address objectAddress) external returns (NftId nftId);
27
+ }// TODO delete nftId and initialOwner(if not used) from struct
22
28
 
23
- function registerObjectForInstance(
24
- NftId parentNftid,
25
- ObjectType objectType,
26
- address initialOwner,
27
- bytes memory data
29
+ function register(ObjectInfo memory info) external returns (NftId nftId);
30
+
31
+ function registerFrom(
32
+ address from,
33
+ ObjectInfo memory info
28
34
  ) external returns (NftId nftId);
29
35
 
30
- function getServiceAddress(string memory serviceName, VersionPart majorVersion) external view returns (address serviceAddress);
36
+ function approve(
37
+ NftId registrar,
38
+ ObjectType object,
39
+ ObjectType parent
40
+ ) external;
31
41
 
32
- function getObjectCount() external view returns (uint256);
42
+ function allowance(
43
+ NftId registrar,
44
+ ObjectType object
45
+ ) external view returns (bool);
33
46
 
34
- function getNftId() external view returns (NftId nftId);
47
+ function getObjectCount() external view returns (uint256);
35
48
 
36
- function getNftId(
37
- address objectAddress
38
- ) external view returns (NftId nftId);
49
+ function getNftId(address objectAddress) external view returns (NftId nftId);
39
50
 
40
- function getObjectInfo(
41
- NftId nftId
42
- ) external view returns (ObjectInfo memory info);
51
+ function ownerOf(NftId nftId) external view returns (address);
43
52
 
44
- function getName(
45
- NftId nftId
46
- ) external view returns (string memory name);
53
+ function ownerOf(address contractAddress) external view returns (address);
47
54
 
48
- function getProtocolOwner() external view returns (address);
55
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory info);
49
56
 
50
- function getOwner(NftId nftId) external view returns (address ownerAddress);
57
+ function getObjectInfo(address object) external view returns (ObjectInfo memory info);
51
58
 
52
59
  function isRegistered(NftId nftId) external view returns (bool);
53
60
 
54
- function isRegistered(address objectAddress) external view returns (bool);
61
+ function isRegistered(address contractAddress) external view returns (bool);
62
+
63
+ function getServiceName(NftId nftId) external view returns (string memory name);
64
+
65
+ function getServiceAddress(
66
+ string memory serviceName,
67
+ VersionPart majorVersion
68
+ ) external view returns (address serviceAddress);
55
69
 
56
70
  function getChainNft() external view returns (IChainNft);
57
- }
71
+
72
+ function getOwner() external view returns (address);
73
+ }