@etherisc/gif-next 0.0.2-b1fb5f9 → 0.0.2-b244df3-779

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 (414) hide show
  1. package/README.md +341 -9
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/BaseComponent.sol/BaseComponent.json} +241 -240
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +744 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/component/ComponentModule.sol/ComponentModule.json → components/IBaseComponent.sol/IBaseComponent.json} +195 -154
  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/components/IProductComponent.sol/IProductComponent.json +157 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +761 -35
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +666 -42
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  42. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  43. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  44. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  45. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  46. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  47. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  48. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  50. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  51. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  52. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  53. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  54. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  55. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  56. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  57. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  58. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  59. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  60. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1292 -460
  62. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  64. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +496 -0
  66. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  67. package/artifacts/contracts/instance/Instance.sol/Instance.json +2541 -573
  68. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1039 -0
  70. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  72. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  73. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  74. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1007 -0
  76. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +524 -0
  78. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  79. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  80. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +521 -0
  82. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  84. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  85. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  86. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  87. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  88. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  89. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  90. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  91. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  92. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +243 -0
  94. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  96. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  98. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  100. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  101. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  102. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  104. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  105. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  106. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  108. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  110. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  112. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +684 -0
  114. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  116. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  118. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  120. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  122. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  124. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +499 -0
  126. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +536 -0
  128. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +984 -0
  130. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  132. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +718 -0
  134. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
  136. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  137. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +768 -0
  138. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  139. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  140. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  141. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  142. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  143. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +429 -63
  144. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  145. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
  146. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  147. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  148. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  149. package/artifacts/contracts/registry/Registry.sol/Registry.json +566 -77
  150. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  151. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
  152. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  153. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +517 -0
  154. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  155. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  156. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  157. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  158. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  159. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  160. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  161. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  162. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  163. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +201 -0
  164. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  165. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  166. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  167. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  168. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  169. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  170. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  171. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  172. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  173. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  174. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  175. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  176. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  177. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  178. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  179. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  180. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  181. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  182. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  183. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  184. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  185. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  186. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  187. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  188. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  189. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  190. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  191. package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
  192. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  193. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  194. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  195. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  196. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  197. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  198. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  199. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  200. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  201. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  202. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  204. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  206. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  208. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  210. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  211. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  212. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  214. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  215. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  216. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  218. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  219. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  220. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  222. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  224. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  225. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  226. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  227. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  228. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  229. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +77 -2
  230. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  231. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  232. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  233. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  234. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  235. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  236. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  237. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  238. package/contracts/components/BaseComponent.sol +132 -0
  239. package/contracts/components/Distribution.sol +163 -0
  240. package/contracts/components/IBaseComponent.sol +31 -0
  241. package/contracts/components/IDistributionComponent.sol +44 -0
  242. package/contracts/components/IPoolComponent.sol +66 -0
  243. package/contracts/components/IProductComponent.sol +35 -0
  244. package/contracts/components/Pool.sol +261 -12
  245. package/contracts/components/Product.sol +262 -25
  246. package/contracts/experiment/cloning/Cloner.sol +47 -0
  247. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  248. package/contracts/experiment/statemachine/ISM.sol +25 -0
  249. package/contracts/experiment/statemachine/SM.sol +57 -0
  250. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  251. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  252. package/contracts/instance/BundleManager.sol +129 -0
  253. package/contracts/instance/Cloneable.sol +46 -0
  254. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  255. package/contracts/instance/IInstance.sol +59 -17
  256. package/contracts/instance/IInstanceBase.sol +26 -0
  257. package/contracts/instance/IInstanceService.sol +34 -0
  258. package/contracts/instance/Instance.sol +267 -55
  259. package/contracts/instance/InstanceAccessManager.sol +302 -0
  260. package/contracts/instance/InstanceBase.sol +41 -0
  261. package/contracts/instance/InstanceReader.sol +315 -0
  262. package/contracts/instance/InstanceService.sol +284 -0
  263. package/contracts/instance/InstanceServiceManager.sol +57 -0
  264. package/contracts/instance/ObjectManager.sol +101 -0
  265. package/contracts/instance/base/ComponentServiceBase.sol +72 -0
  266. package/contracts/instance/base/IInstanceBase.sol +23 -0
  267. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  268. package/contracts/instance/base/ILifecycle.sol +30 -0
  269. package/contracts/instance/base/KeyValueStore.sol +172 -0
  270. package/contracts/instance/base/Lifecycle.sol +100 -0
  271. package/contracts/instance/module/IAccess.sol +48 -0
  272. package/contracts/instance/module/IBundle.sol +20 -0
  273. package/contracts/instance/module/IDistribution.sol +39 -0
  274. package/contracts/instance/module/IPolicy.sol +45 -0
  275. package/contracts/instance/module/IRisk.sol +11 -0
  276. package/contracts/instance/module/ISetup.sol +46 -0
  277. package/contracts/instance/module/ITreasury.sol +23 -0
  278. package/contracts/instance/service/BundleService.sol +260 -0
  279. package/contracts/instance/service/BundleServiceManager.sol +54 -0
  280. package/contracts/instance/service/ComponentOwnerService.sol +317 -0
  281. package/contracts/instance/service/DistributionService.sol +118 -0
  282. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  283. package/contracts/instance/service/IBundleService.sol +45 -0
  284. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  285. package/contracts/instance/service/IDistributionService.sol +12 -0
  286. package/contracts/instance/service/IPolicyService.sol +87 -0
  287. package/contracts/instance/service/IPoolService.sol +20 -0
  288. package/contracts/instance/service/IProductService.sol +40 -0
  289. package/contracts/instance/service/PolicyService.sol +508 -0
  290. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  291. package/contracts/instance/service/PoolService.sol +124 -0
  292. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  293. package/contracts/instance/service/ProductService.sol +173 -0
  294. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  295. package/contracts/registry/ChainNft.sol +129 -62
  296. package/contracts/registry/IRegistry.sol +54 -53
  297. package/contracts/registry/IRegistryService.sol +50 -0
  298. package/contracts/registry/ITransferInterceptor.sol +6 -0
  299. package/contracts/registry/Registry.sol +379 -140
  300. package/contracts/registry/RegistryService.sol +358 -0
  301. package/contracts/registry/RegistryServiceManager.sol +80 -0
  302. package/contracts/registry/TokenRegistry.sol +111 -0
  303. package/contracts/shared/ContractDeployerLib.sol +72 -0
  304. package/contracts/shared/ERC165.sol +25 -0
  305. package/contracts/shared/INftOwnable.sol +22 -0
  306. package/contracts/shared/IRegisterable.sol +17 -0
  307. package/contracts/shared/IService.sol +15 -0
  308. package/contracts/shared/IVersionable.sol +96 -0
  309. package/contracts/shared/NftOwnable.sol +134 -0
  310. package/contracts/shared/ProxyManager.sol +94 -0
  311. package/contracts/shared/Registerable.sol +90 -0
  312. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  313. package/contracts/shared/Service.sol +55 -0
  314. package/contracts/shared/TokenHandler.sol +27 -0
  315. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  316. package/contracts/shared/Versionable.sol +147 -0
  317. package/contracts/test/TestFee.sol +25 -0
  318. package/contracts/test/TestRegisterable.sol +18 -0
  319. package/contracts/test/TestRoleId.sol +14 -0
  320. package/contracts/test/TestService.sol +24 -0
  321. package/contracts/test/TestToken.sol +26 -0
  322. package/contracts/test/TestVersion.sol +44 -0
  323. package/contracts/test/TestVersionable.sol +17 -0
  324. package/contracts/test/Usdc.sol +26 -0
  325. package/contracts/types/AddressSet.sol +58 -0
  326. package/contracts/types/DistributorType.sol +55 -0
  327. package/contracts/types/Fee.sol +56 -0
  328. package/contracts/types/Key32.sol +50 -0
  329. package/contracts/types/NftId.sol +22 -1
  330. package/contracts/types/NftIdSet.sol +62 -0
  331. package/contracts/types/NumberId.sol +52 -0
  332. package/contracts/types/ObjectType.sol +152 -0
  333. package/contracts/types/Referral.sol +85 -0
  334. package/contracts/types/RiskId.sol +43 -0
  335. package/contracts/types/RoleId.sol +92 -0
  336. package/contracts/types/StateId.sol +105 -0
  337. package/contracts/types/Timestamp.sol +29 -4
  338. package/contracts/types/UFixed.sol +150 -30
  339. package/contracts/types/Version.sol +107 -0
  340. package/package.json +17 -6
  341. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  342. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  343. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  344. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  345. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  346. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  347. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  348. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  349. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  350. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  351. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  352. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  353. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  354. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  355. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  356. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  357. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  358. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  359. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  360. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  361. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  362. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  363. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  364. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  365. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  366. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  367. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  368. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  369. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  370. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  371. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  372. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  373. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  374. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  375. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  376. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  377. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  378. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  379. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  380. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  381. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  382. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  383. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  384. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  385. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  386. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  387. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  388. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  389. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  390. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  391. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  392. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  393. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  394. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  395. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  396. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  397. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  398. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  399. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  400. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  401. package/contracts/components/Component.sol +0 -60
  402. package/contracts/components/IPool.sol +0 -9
  403. package/contracts/components/IProduct.sol +0 -9
  404. package/contracts/instance/access/Access.sol +0 -165
  405. package/contracts/instance/access/IAccess.sol +0 -63
  406. package/contracts/instance/component/ComponentModule.sol +0 -213
  407. package/contracts/instance/component/IComponent.sol +0 -73
  408. package/contracts/instance/policy/IPolicy.sol +0 -51
  409. package/contracts/instance/policy/PolicyModule.sol +0 -91
  410. package/contracts/instance/pool/IPoolModule.sol +0 -29
  411. package/contracts/instance/pool/PoolModule.sol +0 -73
  412. package/contracts/instance/product/IProductService.sol +0 -36
  413. package/contracts/instance/product/ProductService.sol +0 -112
  414. package/contracts/registry/IChainNft.sol +0 -21
@@ -0,0 +1,124 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Pool} from "../../components/Pool.sol";
5
+ import {IRegistry} from "../../registry/IRegistry.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {IBundle} from "../../instance/module/IBundle.sol";
8
+ import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
+ import {ISetup} from "../module/ISetup.sol";
10
+ import {IPolicy} from "../module/IPolicy.sol";
11
+
12
+ import {IVersionable} from "../../shared/IVersionable.sol";
13
+ import {Versionable} from "../../shared/Versionable.sol";
14
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
15
+
16
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
17
+ import {POOL, BUNDLE} from "../../types/ObjectType.sol";
18
+ import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
19
+ import {Fee, FeeLib} from "../../types/Fee.sol";
20
+ import {Version, VersionLib} from "../../types/Version.sol";
21
+ import {KEEP_STATE, StateId} from "../../types/StateId.sol";
22
+ import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
23
+
24
+ import {IService} from "../../shared/IService.sol";
25
+ import {Service} from "../../shared/Service.sol";
26
+ import {BundleManager} from "../BundleManager.sol";
27
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
28
+ import {IPoolService} from "./IPoolService.sol";
29
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
30
+ import {InstanceService} from "../InstanceService.sol";
31
+ import {InstanceReader} from "../InstanceReader.sol";
32
+ import {IBaseComponent} from "../../components/IBaseComponent.sol";
33
+
34
+ string constant POOL_SERVICE_NAME = "PoolService";
35
+
36
+ contract PoolService is
37
+ ComponentServiceBase,
38
+ IPoolService
39
+ {
40
+ using NftIdLib for NftId;
41
+
42
+ string public constant NAME = "PoolService";
43
+
44
+ address internal _registryAddress;
45
+
46
+ function _initialize(
47
+ address owner,
48
+ bytes memory data
49
+ )
50
+ internal
51
+ initializer
52
+ virtual override
53
+ {
54
+ address registryAddress;
55
+ address initialOwner;
56
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
57
+ // TODO while PoolService is not deployed in PoolServiceManager constructor
58
+ // owner is PoolServiceManager deployer
59
+ _initializeService(registryAddress, owner);
60
+
61
+ _registerInterface(type(IPoolService).interfaceId);
62
+ }
63
+
64
+ function getName() public pure override(Service, IService) returns(string memory name) {
65
+ return NAME;
66
+ }
67
+
68
+ function register(address poolAddress)
69
+ external
70
+ returns(NftId poolNftId)
71
+ {
72
+ address poolOwner = msg.sender;
73
+ IBaseComponent pool = IBaseComponent(poolAddress);
74
+
75
+ IRegistry.ObjectInfo memory info;
76
+ bytes memory data;
77
+ (info, data) = getRegistryService().registerPool(pool, poolOwner);
78
+
79
+ IInstance instance = _getInstance(info);
80
+
81
+ bool hasRole = getInstanceService().hasRole(
82
+ poolOwner,
83
+ POOL_OWNER_ROLE(),
84
+ address(instance));
85
+
86
+ if(!hasRole) {
87
+ revert ExpectedRoleMissing(POOL_OWNER_ROLE(), poolOwner);
88
+ }
89
+
90
+ poolNftId = info.nftId;
91
+ ISetup.PoolSetupInfo memory initialSetup = _decodeAndVerifyPoolSetup(data);
92
+ instance.createPoolSetup(poolNftId, initialSetup);
93
+ }
94
+
95
+ function _decodeAndVerifyPoolSetup(bytes memory data) internal returns(ISetup.PoolSetupInfo memory setup)
96
+ {
97
+ setup = abi.decode(
98
+ data,
99
+ (ISetup.PoolSetupInfo)
100
+ );
101
+
102
+ // TODO add checks if applicable
103
+ }
104
+
105
+ function setFees(
106
+ Fee memory poolFee,
107
+ Fee memory stakingFee,
108
+ Fee memory performanceFee
109
+ )
110
+ external
111
+ override
112
+ {
113
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
114
+ InstanceReader instanceReader = instance.getInstanceReader();
115
+ NftId poolNftId = poolInfo.nftId;
116
+
117
+ ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
118
+ poolSetupInfo.poolFee = poolFee;
119
+ poolSetupInfo.stakingFee = stakingFee;
120
+ poolSetupInfo.performanceFee = performanceFee;
121
+
122
+ instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
123
+ }
124
+ }
@@ -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
+ }
@@ -1,12 +1,30 @@
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 {ERC721, ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
5
- import {IChainNft} from "./IChainNft.sol";
5
+ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
6
6
 
7
- contract ChainNft is ERC721Enumerable, IChainNft {
8
- string public constant NAME = "Dezentralized Insurance Protocol Registry";
9
- string public constant SYMBOL = "DIPR";
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;
10
28
 
11
29
  // remember token uri
12
30
  mapping(uint256 tokenId => string uri) private _uri;
@@ -22,43 +40,79 @@ contract ChainNft is ERC721Enumerable, IChainNft {
22
40
  uint256 internal _totalMinted;
23
41
 
24
42
  modifier onlyRegistry() {
25
- require(msg.sender == _registry, "ERROR:NFT-001:CALLER_NOT_REGISTRY");
43
+ if (msg.sender != _registry) { revert CallerNotRegistry(msg.sender); }
26
44
  _;
27
45
  }
28
46
 
29
47
  constructor(address registry) ERC721(NAME, SYMBOL) {
30
- require(registry != address(0), "ERROR:NFT-010:REGISTRY_ZERO");
48
+ if (registry == address(0)) { revert RegistryAddressZero(); }
31
49
 
32
50
  _registry = registry;
33
-
34
51
  _chainIdInt = block.chainid;
35
- _chainIdDigits = _countDigits(_chainIdInt);
36
- _chainIdMultiplier = 10 ** _chainIdDigits;
52
+ _chainIdDigits = 0;
37
53
 
38
- // on mainnet/goerli start /1 (reserved for protocol nft) on other chains with 2
39
- if (block.chainid == 1 || block.chainid == 5) {
40
- _idNext = 1;
41
- } else {
42
- _idNext = 2;
54
+ // count digis
55
+ uint256 num = _chainIdInt;
56
+ while (num != 0) {
57
+ _chainIdDigits++;
58
+ num /= 10;
43
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);
44
73
  }
45
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
+ */
46
81
  function mint(
47
82
  address to,
83
+ address interceptor,
48
84
  string memory uri
49
- ) external override onlyRegistry returns (uint256 tokenId) {
85
+ ) public onlyRegistry returns (uint256 tokenId) {
50
86
  tokenId = _getNextTokenId();
51
- _totalMinted++;
52
87
 
53
- _safeMint(to, tokenId);
88
+ if (interceptor != address(0)) {
89
+ _interceptor[tokenId] = interceptor;
90
+ }
54
91
 
55
92
  if (bytes(uri).length > 0) {
56
93
  _uri[tokenId] = uri;
57
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
+ }
58
111
  }
59
112
 
60
- function burn(uint256 tokenId) external override onlyRegistry {
61
- _requireMinted(tokenId);
113
+
114
+ function burn(uint256 tokenId) external onlyRegistry {
115
+ _requireOwned(tokenId);
62
116
  _burn(tokenId);
63
117
  delete _uri[tokenId];
64
118
  }
@@ -66,70 +120,83 @@ contract ChainNft is ERC721Enumerable, IChainNft {
66
120
  function setURI(
67
121
  uint256 tokenId,
68
122
  string memory uri
69
- ) external override onlyRegistry {
70
- require(bytes(uri).length > 0, "ERROR:CRG-011:URI_EMPTY");
123
+ ) external onlyRegistry {
124
+ if (bytes(uri).length == 0) { revert NftUriEmpty(); }
125
+ if (bytes(_uri[tokenId]).length > 0) { revert NftUriAlreadySet(); }
71
126
 
72
- _requireMinted(tokenId);
127
+ _requireOwned(tokenId);
73
128
  _uri[tokenId] = uri;
74
129
  }
75
130
 
76
- function exists(uint256 tokenId) external view override returns (bool) {
77
- return _exists(tokenId);
131
+ function exists(uint256 tokenId) external view returns (bool) {
132
+ return _ownerOf(tokenId) != address(0);
78
133
  }
79
134
 
80
135
  function tokenURI(
81
136
  uint256 tokenId
82
137
  ) public view override returns (string memory) {
83
- _requireMinted(tokenId);
138
+ // gif generally does not revert for view functions
139
+ // this is an exception to keep the openzeppelin nft semantics
140
+ _requireOwned(tokenId);
84
141
  return _uri[tokenId];
85
142
  }
86
143
 
87
- function getRegistryAddress() external view override returns (address) {
144
+ function getInterceptor(uint256 tokenId) external view returns (address) {
145
+ return _interceptor[tokenId];
146
+ }
147
+
148
+ function getRegistryAddress() external view returns (address) {
88
149
  return _registry;
89
150
  }
90
151
 
91
- function totalMinted() external view override returns (uint256) {
152
+ function totalMinted() external view returns (uint256) {
92
153
  return _totalMinted;
93
154
  }
94
155
 
95
- // requirement: each chain registry produces token ids that
96
- // are guaranteed to not collide with any token id genereated
97
- // on a different chain
98
- //
99
- // format concat(counter,chainid,2 digits for len-of-chain-id)
100
- // restriction chainid up to 99 digits
101
- // decode: from right to left:
102
- // - 2 right most digits encode length of chainid
103
- // - move number of digits to left as determined above (-> chainid)
104
- // - the reminder to the left is the counter
105
- // examples
106
- // 1101
107
- // ^^ ^
108
- // || +- 1-digit chain id
109
- // |+-- chain id = 1 (mainnet)
110
- // +-- 1st token id on mainnet
111
- // (1 * 10 ** 1 + 1) * 100 + 1
112
- // 42987654321010
113
- // ^ ^ ^
114
- // | | +- 10-digit chain id
115
- // | +-- chain id = 9876543210 (hypothetical chainid)
116
- // +-- 42nd token id on this chain
117
- // (42 * 10 ** 10 + 9876543210) * 100 + 10
118
- // (index * 10 ** digits + chainid) * 100 + digits (1 < digits < 100)
119
-
120
- function _getNextTokenId() private returns (uint256 id) {
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) {
121
192
  id =
122
- (_idNext * _chainIdMultiplier + _chainIdInt) *
193
+ (idIndex * _chainIdMultiplier + _chainIdInt) *
123
194
  100 +
124
195
  _chainIdDigits;
125
- _idNext++;
126
196
  }
127
197
 
128
- function _countDigits(uint256 num) private pure returns (uint256 count) {
129
- count = 0;
130
- while (num != 0) {
131
- count++;
132
- num /= 10;
133
- }
198
+ function _getNextTokenId() private returns (uint256 id) {
199
+ id = calculateTokenId(_idNext);
200
+ _idNext++;
134
201
  }
135
202
  }