@etherisc/gif-next 0.0.2-b9b3e89 → 0.0.2-bc11089-288

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 (423) hide show
  1. package/README.md +364 -8
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +469 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +772 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/access/Access.sol/AccessModule.json → components/IBaseComponent.sol/IBaseComponent.json} +207 -223
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +275 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/{instance/pool/PoolModule.sol/PoolModule.json → components/IProductComponent.sol/IProductComponent.json} +81 -86
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +812 -40
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +719 -49
  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 +4 -0
  25. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +105 -0
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +4 -0
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +105 -0
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +4 -0
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +128 -0
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +4 -0
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +42 -0
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +76 -0
  34. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +89 -0
  36. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +4 -0
  37. package/artifacts/contracts/{instance/product/IProductService.sol/IProductService.json → experiment/inheritance/IA.sol/IA.json} +64 -50
  38. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +37 -0
  40. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +50 -0
  42. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +4 -0
  43. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +63 -0
  44. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  45. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  46. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  47. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  48. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  49. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  50. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  51. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  52. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  53. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  54. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +4 -0
  55. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +10 -0
  56. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +4 -0
  57. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +10 -0
  58. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  59. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  60. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  62. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  63. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  64. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  65. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1314 -469
  66. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  67. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  68. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +541 -0
  70. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  71. package/artifacts/contracts/instance/Instance.sol/Instance.json +2531 -505
  72. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1057 -0
  74. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  76. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  77. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  78. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +991 -0
  80. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  81. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +508 -0
  82. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  83. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  84. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  85. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +521 -0
  86. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  87. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  88. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  89. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  90. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  91. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  92. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  93. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  94. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  95. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  96. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +243 -0
  98. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  100. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  102. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  104. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  105. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  106. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  107. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  108. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  110. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  112. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  114. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  116. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +684 -0
  118. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  120. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  122. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  124. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  126. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  128. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +499 -0
  130. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +536 -0
  132. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +984 -0
  134. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  136. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  137. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +718 -0
  138. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  139. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
  140. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  141. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +768 -0
  142. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  143. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  144. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
  145. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +771 -0
  146. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  147. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +453 -79
  148. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  149. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
  150. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  151. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  152. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  153. package/artifacts/contracts/registry/Registry.sol/Registry.json +626 -79
  154. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  155. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
  156. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  157. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +517 -0
  158. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  159. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  160. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  161. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  162. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  163. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  164. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  165. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  166. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  167. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +201 -0
  168. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  169. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  170. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  171. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  172. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  173. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  174. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  175. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  176. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  177. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  178. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  179. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  180. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  181. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  182. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  183. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  184. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  185. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  186. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  187. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  188. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  189. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  190. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  191. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  192. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  193. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  194. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  195. package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
  196. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  197. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  198. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  199. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  200. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  201. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  202. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  203. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  204. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  205. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  206. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  208. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
  210. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  212. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  214. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  216. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +153 -0
  218. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  219. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  220. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  222. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  224. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  225. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  226. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  227. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  228. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  229. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  230. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  231. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  232. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  233. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +249 -0
  234. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  235. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  236. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  237. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  238. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  239. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  240. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  241. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  242. package/contracts/components/BaseComponent.sol +148 -0
  243. package/contracts/components/Distribution.sol +163 -0
  244. package/contracts/components/IBaseComponent.sol +32 -0
  245. package/contracts/components/IDistributionComponent.sol +44 -0
  246. package/contracts/components/IPoolComponent.sol +66 -0
  247. package/contracts/components/IProductComponent.sol +35 -0
  248. package/contracts/components/Pool.sol +260 -18
  249. package/contracts/components/Product.sol +263 -36
  250. package/contracts/experiment/cloning/Cloner.sol +47 -0
  251. package/contracts/experiment/errors/Require.sol +38 -0
  252. package/contracts/experiment/errors/Revert.sol +44 -0
  253. package/contracts/experiment/inheritance/A.sol +53 -0
  254. package/contracts/experiment/inheritance/B.sol +28 -0
  255. package/contracts/experiment/inheritance/C.sol +34 -0
  256. package/contracts/experiment/inheritance/IA.sol +13 -0
  257. package/contracts/experiment/inheritance/IB.sol +10 -0
  258. package/contracts/experiment/inheritance/IC.sol +12 -0
  259. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  260. package/contracts/experiment/statemachine/ISM.sol +25 -0
  261. package/contracts/experiment/statemachine/SM.sol +57 -0
  262. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  263. package/contracts/experiment/types/TypeA.sol +47 -0
  264. package/contracts/experiment/types/TypeB.sol +29 -0
  265. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  266. package/contracts/instance/BundleManager.sol +129 -0
  267. package/contracts/instance/Cloneable.sol +46 -0
  268. package/contracts/instance/IInstance.sol +57 -15
  269. package/contracts/instance/IInstanceBase.sol +26 -0
  270. package/contracts/instance/IInstanceService.sol +38 -0
  271. package/contracts/instance/Instance.sol +257 -44
  272. package/contracts/instance/InstanceAccessManager.sol +304 -0
  273. package/contracts/instance/InstanceBase.sol +41 -0
  274. package/contracts/instance/InstanceReader.sol +315 -0
  275. package/contracts/instance/InstanceService.sol +300 -0
  276. package/contracts/instance/InstanceServiceManager.sol +57 -0
  277. package/contracts/instance/ObjectManager.sol +101 -0
  278. package/contracts/instance/base/ComponentServiceBase.sol +72 -0
  279. package/contracts/instance/base/IInstanceBase.sol +23 -0
  280. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  281. package/contracts/instance/base/ILifecycle.sol +30 -0
  282. package/contracts/instance/base/KeyValueStore.sol +172 -0
  283. package/contracts/instance/base/Lifecycle.sol +100 -0
  284. package/contracts/instance/module/IAccess.sol +48 -0
  285. package/contracts/instance/module/IBundle.sol +20 -0
  286. package/contracts/instance/module/IDistribution.sol +39 -0
  287. package/contracts/instance/module/IPolicy.sol +45 -0
  288. package/contracts/instance/module/IRisk.sol +11 -0
  289. package/contracts/instance/module/ISetup.sol +46 -0
  290. package/contracts/instance/module/ITreasury.sol +23 -0
  291. package/contracts/instance/service/BundleService.sol +260 -0
  292. package/contracts/instance/service/BundleServiceManager.sol +54 -0
  293. package/contracts/instance/service/ComponentOwnerService.sol +317 -0
  294. package/contracts/instance/service/DistributionService.sol +118 -0
  295. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  296. package/contracts/instance/service/IBundleService.sol +45 -0
  297. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  298. package/contracts/instance/service/IDistributionService.sol +12 -0
  299. package/contracts/instance/service/IPolicyService.sol +87 -0
  300. package/contracts/instance/service/IPoolService.sol +20 -0
  301. package/contracts/instance/service/IProductService.sol +40 -0
  302. package/contracts/instance/service/PolicyService.sol +508 -0
  303. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  304. package/contracts/instance/service/PoolService.sol +124 -0
  305. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  306. package/contracts/instance/service/ProductService.sol +173 -0
  307. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  308. package/contracts/registry/ChainNft.sol +202 -0
  309. package/contracts/registry/IRegistry.sol +70 -55
  310. package/contracts/registry/IRegistryService.sol +50 -0
  311. package/contracts/registry/ITransferInterceptor.sol +6 -0
  312. package/contracts/registry/Registry.sol +380 -129
  313. package/contracts/registry/RegistryService.sol +358 -0
  314. package/contracts/registry/RegistryServiceManager.sol +80 -0
  315. package/contracts/registry/TokenRegistry.sol +111 -0
  316. package/contracts/shared/ContractDeployerLib.sol +72 -0
  317. package/contracts/shared/ERC165.sol +25 -0
  318. package/contracts/shared/INftOwnable.sol +22 -0
  319. package/contracts/shared/IRegisterable.sol +17 -0
  320. package/contracts/shared/IService.sol +15 -0
  321. package/contracts/shared/IVersionable.sol +96 -0
  322. package/contracts/shared/NftOwnable.sol +134 -0
  323. package/contracts/shared/ProxyManager.sol +94 -0
  324. package/contracts/shared/Registerable.sol +90 -0
  325. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  326. package/contracts/shared/Service.sol +55 -0
  327. package/contracts/shared/TokenHandler.sol +27 -0
  328. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  329. package/contracts/shared/Versionable.sol +147 -0
  330. package/contracts/test/TestFee.sol +25 -0
  331. package/contracts/test/TestRegisterable.sol +18 -0
  332. package/contracts/test/TestRoleId.sol +14 -0
  333. package/contracts/test/TestService.sol +24 -0
  334. package/contracts/test/TestToken.sol +26 -0
  335. package/contracts/test/TestVersion.sol +44 -0
  336. package/contracts/test/TestVersionable.sol +17 -0
  337. package/contracts/test/Usdc.sol +26 -0
  338. package/contracts/types/AddressSet.sol +58 -0
  339. package/contracts/types/Blocknumber.sol +118 -0
  340. package/contracts/types/ChainId.sol +38 -0
  341. package/contracts/types/DistributorType.sol +55 -0
  342. package/contracts/types/Fee.sol +56 -0
  343. package/contracts/types/Key32.sol +50 -0
  344. package/contracts/types/NftId.sol +72 -0
  345. package/contracts/types/NftIdSet.sol +62 -0
  346. package/contracts/types/NumberId.sol +52 -0
  347. package/contracts/types/ObjectType.sol +152 -0
  348. package/contracts/types/Referral.sol +85 -0
  349. package/contracts/types/RiskId.sol +43 -0
  350. package/contracts/types/RoleId.sol +91 -0
  351. package/contracts/types/StateId.sol +105 -0
  352. package/contracts/types/Timestamp.sol +127 -0
  353. package/contracts/types/UFixed.sol +325 -0
  354. package/contracts/types/Version.sol +107 -0
  355. package/package.json +21 -6
  356. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  357. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  358. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  359. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  360. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  361. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  362. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  363. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  364. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  365. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  366. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  367. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  368. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  369. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  370. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  372. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  373. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  374. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  375. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
  376. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  377. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  378. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  379. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  380. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  381. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  382. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  383. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  384. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  385. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  386. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  387. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  388. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  389. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  390. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  391. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  392. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  393. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  394. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  395. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  396. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  397. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  398. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  399. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  400. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
  401. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  402. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  403. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  404. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  405. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  406. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  407. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  408. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  409. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  410. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  411. package/contracts/components/Component.sol +0 -62
  412. package/contracts/components/IPool.sol +0 -9
  413. package/contracts/components/IProduct.sol +0 -11
  414. package/contracts/instance/access/Access.sol +0 -218
  415. package/contracts/instance/access/IAccess.sol +0 -83
  416. package/contracts/instance/component/ComponentModule.sol +0 -259
  417. package/contracts/instance/component/IComponent.sol +0 -94
  418. package/contracts/instance/policy/IPolicy.sol +0 -66
  419. package/contracts/instance/policy/PolicyModule.sol +0 -106
  420. package/contracts/instance/pool/IPoolModule.sol +0 -40
  421. package/contracts/instance/pool/PoolModule.sol +0 -83
  422. package/contracts/instance/product/IProductService.sol +0 -45
  423. package/contracts/instance/product/ProductService.sol +0 -105
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {PoolService} from "./PoolService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {VersionLib} from "../../types/Version.sol";
10
+
11
+ contract PoolServiceManager is ProxyManager {
12
+
13
+ PoolService private _poolService;
14
+
15
+ /// @dev initializes proxy manager with pool service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ PoolService poolSrv = new PoolService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(poolSrv),
25
+ data);
26
+
27
+ _poolService = PoolService(address(versionable));
28
+
29
+ Registry registry = Registry(registryAddress);
30
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ RegistryService registryService = RegistryService(registryServiceAddress);
32
+ // TODO this must have a role or own nft to register service
33
+ //registryService.registerService(_poolService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_poolService));
40
+
41
+ // implies that after this constructor call only upgrade functionality is available
42
+ _isDeployed = true;
43
+ }
44
+
45
+ //--- view functions ----------------------------------------------------//
46
+ function getPoolService()
47
+ external
48
+ view
49
+ returns (PoolService poolService)
50
+ {
51
+ return _poolService;
52
+ }
53
+
54
+ }
@@ -0,0 +1,173 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IProductComponent} from "../../components/IProductComponent.sol";
6
+ import {Product} from "../../components/Product.sol";
7
+ import {IBaseComponent} from "../../components/IBaseComponent.sol";
8
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
9
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
10
+ import {IInstance} from "../IInstance.sol";
11
+ import {IPolicy} from "../module/IPolicy.sol";
12
+ import {IRisk} from "../module/IRisk.sol";
13
+ import {IBundle} from "../module/IBundle.sol";
14
+ import {IProductService} from "./IProductService.sol";
15
+ import {ITreasury} from "../module/ITreasury.sol";
16
+ import {ISetup} from "../module/ISetup.sol";
17
+
18
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
19
+
20
+ import {IVersionable} from "../../shared/IVersionable.sol";
21
+ import {Versionable} from "../../shared/Versionable.sol";
22
+
23
+ import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
24
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
25
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
26
+ import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
27
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
28
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
29
+ import {Fee, FeeLib} from "../../types/Fee.sol";
30
+ import {ReferralId} from "../../types/Referral.sol";
31
+ import {RiskId} from "../../types/RiskId.sol";
32
+ import {StateId} from "../../types/StateId.sol";
33
+ import {Version, VersionLib} from "../../types/Version.sol";
34
+ import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
35
+
36
+ import {IService} from "../../shared/IService.sol";
37
+ import {Service} from "../../shared/Service.sol";
38
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
39
+ import {IProductService} from "./IProductService.sol";
40
+ import {InstanceReader} from "../InstanceReader.sol";
41
+ import {IPoolService} from "./PoolService.sol";
42
+ import {POOL_SERVICE_NAME} from "./PoolService.sol";
43
+
44
+ string constant PRODUCT_SERVICE_NAME = "ProductService";
45
+
46
+ // TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
47
+ contract ProductService is ComponentServiceBase, IProductService {
48
+ using NftIdLib for NftId;
49
+
50
+ string public constant NAME = "ProductService";
51
+
52
+ IPoolService internal _poolService;
53
+
54
+ event LogProductServiceSender(address sender);
55
+
56
+ function _initialize(
57
+ address owner,
58
+ bytes memory data
59
+ )
60
+ internal
61
+ initializer
62
+ virtual override
63
+ {
64
+ address registryAddress;
65
+ address initialOwner;
66
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
67
+
68
+ _initializeService(registryAddress, owner);
69
+
70
+ _poolService = IPoolService(_registry.getServiceAddress(POOL_SERVICE_NAME, getMajorVersion()));
71
+
72
+ _registerInterface(type(IProductService).interfaceId);
73
+ }
74
+
75
+
76
+ function getName() public pure override(IService, Service) returns(string memory name) {
77
+ return NAME;
78
+ }
79
+
80
+ function register(address productAddress)
81
+ external
82
+ returns(NftId productNftId)
83
+ {
84
+ address productOwner = msg.sender;
85
+ IBaseComponent product = IBaseComponent(productAddress);
86
+
87
+ IRegistry.ObjectInfo memory info;
88
+ bytes memory data;
89
+ (info, data) = getRegistryService().registerProduct(product, productOwner);
90
+
91
+ IInstance instance = _getInstance(info);
92
+ bool hasRole = getInstanceService().hasRole(
93
+ productOwner,
94
+ PRODUCT_OWNER_ROLE(),
95
+ address(instance));
96
+
97
+ if(!hasRole) {
98
+ revert ExpectedRoleMissing(PRODUCT_OWNER_ROLE(), productOwner);
99
+ }
100
+
101
+ productNftId = info.nftId;
102
+ ISetup.ProductSetupInfo memory initialSetup = _decodeAndVerifyProductSetup(data);
103
+ instance.createProductSetup(productNftId, initialSetup);
104
+ }
105
+
106
+ function _decodeAndVerifyProductSetup(bytes memory data) internal returns(ISetup.ProductSetupInfo memory setup)
107
+ {
108
+ setup = abi.decode(
109
+ data,
110
+ (ISetup.ProductSetupInfo)
111
+ );
112
+
113
+ // TODO add checks if applicable
114
+ }
115
+
116
+ function setFees(
117
+ Fee memory productFee,
118
+ Fee memory processingFee
119
+ )
120
+ external
121
+ {
122
+ // TODO check args
123
+
124
+ (
125
+ IRegistry.ObjectInfo memory productInfo,
126
+ IInstance instance
127
+ ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
128
+
129
+ InstanceReader instanceReader = instance.getInstanceReader();
130
+ NftId productNftId = productInfo.nftId;
131
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
132
+
133
+ productSetupInfo.productFee = productFee;
134
+ productSetupInfo.processingFee = processingFee;
135
+
136
+ instance.updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
137
+ }
138
+
139
+ function createRisk(
140
+ RiskId riskId,
141
+ bytes memory data
142
+ ) external override {
143
+ (
144
+ IRegistry.ObjectInfo memory productInfo,
145
+ IInstance instance
146
+ ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
147
+ NftId productNftId = productInfo.nftId;
148
+ IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
149
+ instance.createRisk(
150
+ riskId,
151
+ riskInfo
152
+ );
153
+ }
154
+
155
+ function updateRisk(
156
+ RiskId riskId,
157
+ bytes memory data
158
+ ) external {
159
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
160
+ InstanceReader instanceReader = instance.getInstanceReader();
161
+ IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
162
+ riskInfo.data = data;
163
+ instance.updateRisk(riskId, riskInfo, KEEP_STATE());
164
+ }
165
+
166
+ function updateRiskState(
167
+ RiskId riskId,
168
+ StateId state
169
+ ) external {
170
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
171
+ instance.updateRiskState(riskId, state);
172
+ }
173
+ }
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {ProductService} from "./ProductService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {VersionLib} from "../../types/Version.sol";
10
+
11
+ contract ProductServiceManager is ProxyManager {
12
+
13
+ ProductService private _productService;
14
+
15
+ /// @dev initializes proxy manager with product service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ ProductService svc = new ProductService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(svc),
25
+ data);
26
+
27
+ _productService = ProductService(address(versionable));
28
+
29
+ // Registry registry = Registry(registryAddress);
30
+ // address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ // RegistryService registryService = RegistryService(registryServiceAddress);
32
+ // TODO this must have a role or own nft to register service
33
+ //registryService.registerService(_productService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_productService));
40
+
41
+ // implies that after this constructor call only upgrade functionality is available
42
+ _isDeployed = true;
43
+ }
44
+
45
+ //--- view functions ----------------------------------------------------//
46
+ function getProductService()
47
+ external
48
+ view
49
+ returns (ProductService productService)
50
+ {
51
+ return _productService;
52
+ }
53
+
54
+ }
@@ -0,0 +1,202 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ERC721, ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
5
+ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
6
+
7
+ import {ITransferInterceptor} from "./ITransferInterceptor.sol";
8
+
9
+ contract ChainNft is ERC721Enumerable {
10
+
11
+ // constants
12
+ string public constant NAME = "Dezentralized Insurance Protocol NFT";
13
+ string public constant SYMBOL = "DIPNFT";
14
+
15
+ uint256 public constant PROTOCOL_NFT_ID = 1101;
16
+ uint256 public constant GLOBAL_REGISTRY_ID = 2101;
17
+
18
+ // custom errors
19
+ error CallerNotRegistry(address caller);
20
+ error RegistryAddressZero();
21
+ error NftUriEmpty();
22
+ error NftUriAlreadySet();
23
+
24
+ // contract state
25
+
26
+ // remember interceptors
27
+ mapping(uint256 tokenId => address interceptor) private _interceptor;
28
+
29
+ // remember token uri
30
+ mapping(uint256 tokenId => string uri) private _uri;
31
+
32
+ // remember registry
33
+ address private _registry;
34
+
35
+ // only used for _getNextTokenId
36
+ uint256 internal _chainIdInt;
37
+ uint256 internal _chainIdDigits;
38
+ uint256 internal _chainIdMultiplier;
39
+ uint256 internal _idNext;
40
+ uint256 internal _totalMinted;
41
+
42
+ modifier onlyRegistry() {
43
+ if (msg.sender != _registry) { revert CallerNotRegistry(msg.sender); }
44
+ _;
45
+ }
46
+
47
+ constructor(address registry) ERC721(NAME, SYMBOL) {
48
+ if (registry == address(0)) { revert RegistryAddressZero(); }
49
+
50
+ _registry = registry;
51
+ _chainIdInt = block.chainid;
52
+ _chainIdDigits = 0;
53
+
54
+ // count digis
55
+ uint256 num = _chainIdInt;
56
+ while (num != 0) {
57
+ _chainIdDigits++;
58
+ num /= 10;
59
+ }
60
+
61
+ _chainIdMultiplier = 10 ** _chainIdDigits;
62
+ _idNext = 4;
63
+ }
64
+
65
+ /**
66
+ * @dev mints a token for a specified token id
67
+ * not part of the IRegistry interface only needed for
68
+ * initial registry setup (protocol and global registry objects)
69
+ */
70
+ function mint(address to, uint256 tokenId) external onlyRegistry {
71
+ _totalMinted++;
72
+ _safeMint(to, tokenId);
73
+ }
74
+
75
+
76
+ /**
77
+ * @dev mints the next token to register new objects
78
+ * non-zero transferInterceptors are recorded and called during nft token transfers.
79
+ * the contract receiving such a notification may decides to revert or record the transfer
80
+ */
81
+ function mint(
82
+ address to,
83
+ address interceptor,
84
+ string memory uri
85
+ ) public onlyRegistry returns (uint256 tokenId) {
86
+ tokenId = _getNextTokenId();
87
+
88
+ if (interceptor != address(0)) {
89
+ _interceptor[tokenId] = interceptor;
90
+ }
91
+
92
+ if (bytes(uri).length > 0) {
93
+ _uri[tokenId] = uri;
94
+ }
95
+
96
+ _totalMinted++;
97
+ _safeMint(to, tokenId);
98
+ }
99
+
100
+
101
+ /**
102
+ * @dev amend the open zeppelin transferFrom function by an interceptor call if such an interceptor is defined for the nft token id
103
+ * this allows distribution, product and pool components to be notified when distributors, policies and bundles are transferred.
104
+ */
105
+ function transferFrom(address from, address to, uint256 tokenId) public override (ERC721, IERC721) {
106
+ super.transferFrom(from, to, tokenId);
107
+
108
+ if (_interceptor[tokenId] != address(0)) {
109
+ ITransferInterceptor(_interceptor[tokenId]).nftTransferFrom(from, to, tokenId);
110
+ }
111
+ }
112
+
113
+
114
+ function burn(uint256 tokenId) external onlyRegistry {
115
+ _requireOwned(tokenId);
116
+ _burn(tokenId);
117
+ delete _uri[tokenId];
118
+ }
119
+
120
+ function setURI(
121
+ uint256 tokenId,
122
+ string memory uri
123
+ ) external onlyRegistry {
124
+ if (bytes(uri).length == 0) { revert NftUriEmpty(); }
125
+ if (bytes(_uri[tokenId]).length > 0) { revert NftUriAlreadySet(); }
126
+
127
+ _requireOwned(tokenId);
128
+ _uri[tokenId] = uri;
129
+ }
130
+
131
+ function exists(uint256 tokenId) external view returns (bool) {
132
+ return _ownerOf(tokenId) != address(0);
133
+ }
134
+
135
+ function tokenURI(
136
+ uint256 tokenId
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
140
+ _requireOwned(tokenId);
141
+ return _uri[tokenId];
142
+ }
143
+
144
+ function getInterceptor(uint256 tokenId) external view returns (address) {
145
+ return _interceptor[tokenId];
146
+ }
147
+
148
+ function getRegistryAddress() external view returns (address) {
149
+ return _registry;
150
+ }
151
+
152
+ function totalMinted() external view returns (uint256) {
153
+ return _totalMinted;
154
+ }
155
+
156
+ /**
157
+ * @dev token id calculation based on an index value that is supposed
158
+ * to increase with every minted token
159
+ *
160
+ * requirement: each chain registry produces token ids that
161
+ * are guaranteed to not collide with any token id genereated
162
+ * on a different chain
163
+ *
164
+ * format concat(counter,chainid,2 digits for len-of-chain-id)
165
+ * restriction chainid up to 99 digits
166
+ * decode: from right to left:
167
+ * - 2 right most digits encode length of chainid
168
+ * - move number of digits to left as determined above (-> chainid)
169
+ * - the reminder to the left is the counter
170
+ *
171
+ * special cases
172
+ * 1101 -> decentralized insurance protocol
173
+ * 2102 -> global registry
174
+ * 2xxxxx -> chain registry, where xxxxx = <chain-part>
175
+ *
176
+ * examples
177
+ * 1101
178
+ * ^^ ^
179
+ * || +- 1-digit chain id
180
+ * |+-- chain id = 1 (mainnet)
181
+ * +-- 1st token id on mainnet
182
+ * (1 * 10 ** 1 + 1) * 100 + 1
183
+ * 42987654321010
184
+ * ^ ^ ^
185
+ * | | +- 10-digit chain id
186
+ * | +-- chain id = 9876543210 (hypothetical chainid)
187
+ * +-- 42nd token id on this chain
188
+ * (42 * 10 ** 10 + 9876543210) * 100 + 10
189
+ * (index * 10 ** digits + chainid) * 100 + digits (1 < digits < 100)
190
+ */
191
+ function calculateTokenId(uint256 idIndex) public view returns (uint256 id) {
192
+ id =
193
+ (idIndex * _chainIdMultiplier + _chainIdInt) *
194
+ 100 +
195
+ _chainIdDigits;
196
+ }
197
+
198
+ function _getNextTokenId() private returns (uint256 id) {
199
+ id = calculateTokenId(_idNext);
200
+ _idNext++;
201
+ }
202
+ }
@@ -1,66 +1,81 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- interface IOwnable {
5
- function getOwner() external view returns(address owner);
6
- }
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
7
5
 
8
- interface IRegistryLinked {
6
+ import {ChainNft} from "./ChainNft.sol";
7
+ import {NftId} from "../types/NftId.sol";
8
+ import {ObjectType} from "../types/ObjectType.sol";
9
+ import {VersionPart} from "../types/Version.sol";
9
10
 
10
- event LogDebug(uint256 idx, address module, string comment);
11
+ interface IRegistry is IERC165 {
11
12
 
12
- function getRegistry() external view returns(IRegistry registry);
13
- }
13
+ event LogInitialMajorVersionSet(VersionPart majorVersion);
14
+ event LogMajorVersionSet(VersionPart majorVersionMax);
15
+ event LogRegistration(ObjectInfo info);
16
+ event LogServiceNameRegistration(string serviceName, VersionPart majorVersion);
14
17
 
15
- interface IRegisterable is
16
- IOwnable,
17
- IRegistryLinked
18
- {
18
+ // setMajorVersion()
19
+ error NotOwner(address account);
20
+ error MajorVersionMaxIncreaseInvalid(VersionPart newMajorVersionMax, VersionPart existingMaxMajorVersion);
19
21
 
20
- function register() external returns(uint256 nftId);
21
-
22
- function getNftId() external view returns(uint256 nftId);
23
- function getParentNftId() external view returns(uint256 parentNftId);
24
- function getType() external view returns(uint256 objectType);
25
- function getData() external view returns(bytes memory data);
26
- function isRegisterable() external pure returns(bool);
27
- function getInitialOwner() external view returns(address initialOwner);
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);
28
29
 
29
- function isRegistered() external view returns(bool);
30
- }
30
+ struct ObjectInfo {
31
+ NftId nftId;
32
+ NftId parentNftId;
33
+ ObjectType objectType;
34
+ bool isInterceptor;
35
+ address objectAddress;
36
+ address initialOwner;
37
+ bytes data;
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)
31
40
 
41
+ function setMajorVersion(VersionPart newMajorVersionMax) external;
32
42
 
33
- interface IRegistry {
43
+ function register(ObjectInfo memory info) external returns (NftId nftId);
34
44
 
35
- struct RegistryInfo {
36
- uint256 nftId;
37
- uint256 parentNftId;
38
- uint256 objectType;
39
- address objectAddress;
40
- address initialOwner;
41
- }
42
-
43
- function TOKEN() external pure returns(uint256);
44
- function INSTANCE() external pure returns(uint256);
45
- function PRODUCT() external pure returns(uint256);
46
- function ORACLE() external pure returns(uint256);
47
- function POOL() external pure returns(uint256);
48
- function POLICY() external pure returns(uint256);
49
- function BUNDLE() external pure returns(uint256);
50
-
51
- function register(address objectAddress) external returns(uint256 nftId);
52
- function registerObjectForInstance(
53
- uint256 parentNftid,
54
- uint256 objectType,
55
- address initialOwner
56
- )
57
- external returns(uint256 nftId);
58
-
59
- function transfer(uint256 nftId, address newOwner) external;
60
-
61
- function getNftId(address objectAddress) external view returns(uint256 nftId);
62
- function getInfo(uint256 nftId) external view returns(RegistryInfo memory info);
63
- function getOwner(uint256 nftId) external view returns(address ownerAddress);
64
-
65
- function isRegistered(address objectAddress) external view returns(bool);
66
- }
45
+ function getMajorVersionMin() external view returns (VersionPart);
46
+
47
+ function getMajorVersionMax() external view returns (VersionPart);
48
+
49
+ function getMajorVersion() external view returns (VersionPart);
50
+
51
+ function getObjectCount() external view returns (uint256);
52
+
53
+ function getNftId() external view returns (NftId nftId);
54
+
55
+ function getNftId(address objectAddress) external view returns (NftId nftId);
56
+
57
+ function ownerOf(NftId nftId) external view returns (address);
58
+
59
+ function ownerOf(address contractAddress) external view returns (address);
60
+
61
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory info);
62
+
63
+ function getObjectInfo(address object) external view returns (ObjectInfo memory info);
64
+
65
+ function isRegistered(NftId nftId) external view returns (bool);
66
+
67
+ function isRegistered(address contractAddress) external view returns (bool);
68
+
69
+ function isRegisteredService(address contractAddress) external view returns (bool);
70
+
71
+ function getServiceName(NftId nftId) external view returns (string memory name);
72
+
73
+ function getServiceAddress(
74
+ string memory serviceName,
75
+ VersionPart majorVersion
76
+ ) external view returns (address serviceAddress);
77
+
78
+ function getChainNft() external view returns (ChainNft);
79
+
80
+ function getOwner() external view returns (address);
81
+ }
@@ -0,0 +1,50 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
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
+
10
+ import {IRegisterable} from "../shared/IRegisterable.sol";
11
+ import {IBaseComponent} from "../components/IBaseComponent.sol";
12
+
13
+ interface IRegistryService is IService {
14
+
15
+ error SelfRegistration();
16
+ error NotRegistryOwner();
17
+
18
+ error NotService();
19
+ error NotInstance();
20
+ error NotProduct();
21
+ error NotPool();
22
+ error NotDistribution();
23
+
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);
30
+
31
+
32
+ function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
33
+
34
+ function registerInstance(IRegisterable instance)
35
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
36
+
37
+ function registerProduct(IBaseComponent product, address owner)
38
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
39
+
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);
49
+ }
50
+
@@ -0,0 +1,6 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ interface ITransferInterceptor {
5
+ function nftTransferFrom(address from, address to, uint256 tokenId) external;
6
+ }