@etherisc/gif-next 0.0.2-a04040f-684 → 0.0.2-a0d433e-961

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 +331 -8
  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} +254 -237
  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/{instance/policy/PolicyModule.sol/PolicyModule.json → components/IPoolComponent.sol/IPoolComponent.json} +143 -122
  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 +718 -79
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +628 -91
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1079 -821
  52. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  54. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +541 -0
  56. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/Instance.sol/Instance.json +2191 -881
  58. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1057 -0
  60. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  62. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  64. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +991 -0
  66. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +508 -0
  68. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  70. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  71. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +521 -0
  72. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  74. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  76. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  78. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  80. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  82. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +243 -0
  84. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  86. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IDistribution.sol/IDistribution.json} +2 -2
  88. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  90. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  92. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  94. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{treasury → module}/ITreasury.sol/ITreasury.json +1 -1
  96. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  98. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  100. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  102. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +684 -0
  104. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  106. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  108. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  110. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  112. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  114. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +499 -0
  116. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +536 -0
  118. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +984 -0
  120. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  122. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +718 -0
  124. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
  126. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +768 -0
  128. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  130. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  131. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  132. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  133. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +484 -27
  134. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  135. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
  136. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  137. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  138. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  139. package/artifacts/contracts/registry/Registry.sol/Registry.json +623 -43
  140. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  141. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
  142. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  143. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +517 -0
  144. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  145. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  146. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  147. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  148. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  149. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  150. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  152. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  153. package/artifacts/contracts/{components/Component.sol/Component.json → shared/IRegisterable.sol/IRegisterable.json} +98 -102
  154. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  155. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  156. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  158. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  159. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  160. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  161. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  162. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  163. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  164. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  165. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  166. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  167. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  168. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  169. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  170. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  171. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  172. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  173. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  174. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  176. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  177. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  178. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  179. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  180. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  181. package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
  182. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  183. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  184. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  185. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  186. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  187. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  188. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  189. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  190. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  191. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  192. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  196. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  198. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  199. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  200. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  202. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  203. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  204. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  206. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  208. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  210. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  212. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  214. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  215. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  216. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  217. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +77 -2
  218. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  219. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  220. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  222. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  224. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  225. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  226. package/contracts/components/BaseComponent.sol +148 -0
  227. package/contracts/components/Distribution.sol +163 -0
  228. package/contracts/components/IBaseComponent.sol +32 -0
  229. package/contracts/components/IDistributionComponent.sol +44 -0
  230. package/contracts/components/IPoolComponent.sol +66 -0
  231. package/contracts/components/IProductComponent.sol +35 -0
  232. package/contracts/components/Pool.sol +244 -25
  233. package/contracts/components/Product.sol +249 -46
  234. package/contracts/experiment/cloning/Cloner.sol +47 -0
  235. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  236. package/contracts/instance/BundleManager.sol +129 -0
  237. package/contracts/instance/Cloneable.sol +46 -0
  238. package/contracts/instance/IInstance.sol +61 -24
  239. package/contracts/instance/IInstanceBase.sol +26 -0
  240. package/contracts/instance/IInstanceService.sol +38 -0
  241. package/contracts/instance/Instance.sol +257 -53
  242. package/contracts/instance/InstanceAccessManager.sol +304 -0
  243. package/contracts/instance/InstanceBase.sol +41 -0
  244. package/contracts/instance/InstanceReader.sol +315 -0
  245. package/contracts/instance/InstanceService.sol +300 -0
  246. package/contracts/instance/InstanceServiceManager.sol +57 -0
  247. package/contracts/instance/ObjectManager.sol +101 -0
  248. package/contracts/instance/base/ComponentServiceBase.sol +72 -0
  249. package/contracts/instance/base/IInstanceBase.sol +23 -0
  250. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  251. package/contracts/instance/base/ILifecycle.sol +30 -0
  252. package/contracts/instance/base/KeyValueStore.sol +172 -0
  253. package/contracts/instance/base/Lifecycle.sol +100 -0
  254. package/contracts/instance/module/IAccess.sol +48 -0
  255. package/contracts/instance/module/IBundle.sol +20 -0
  256. package/contracts/instance/module/IDistribution.sol +39 -0
  257. package/contracts/instance/module/IPolicy.sol +45 -0
  258. package/contracts/instance/module/IRisk.sol +11 -0
  259. package/contracts/instance/module/ISetup.sol +46 -0
  260. package/contracts/instance/module/ITreasury.sol +23 -0
  261. package/contracts/instance/service/BundleService.sol +260 -0
  262. package/contracts/instance/service/BundleServiceManager.sol +54 -0
  263. package/contracts/instance/service/ComponentOwnerService.sol +317 -0
  264. package/contracts/instance/service/DistributionService.sol +118 -0
  265. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  266. package/contracts/instance/service/IBundleService.sol +45 -0
  267. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  268. package/contracts/instance/service/IDistributionService.sol +12 -0
  269. package/contracts/instance/service/IPolicyService.sol +87 -0
  270. package/contracts/instance/service/IPoolService.sol +20 -0
  271. package/contracts/instance/service/IProductService.sol +40 -0
  272. package/contracts/instance/service/PolicyService.sol +508 -0
  273. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  274. package/contracts/instance/service/PoolService.sol +124 -0
  275. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  276. package/contracts/instance/service/ProductService.sol +173 -0
  277. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  278. package/contracts/registry/ChainNft.sol +129 -62
  279. package/contracts/registry/IRegistry.sol +57 -43
  280. package/contracts/registry/IRegistryService.sol +50 -0
  281. package/contracts/registry/ITransferInterceptor.sol +6 -0
  282. package/contracts/registry/Registry.sol +392 -126
  283. package/contracts/registry/RegistryService.sol +358 -0
  284. package/contracts/registry/RegistryServiceManager.sol +80 -0
  285. package/contracts/registry/TokenRegistry.sol +111 -0
  286. package/contracts/shared/ContractDeployerLib.sol +72 -0
  287. package/contracts/shared/ERC165.sol +25 -0
  288. package/contracts/shared/INftOwnable.sol +22 -0
  289. package/contracts/shared/IRegisterable.sol +17 -0
  290. package/contracts/shared/IService.sol +15 -0
  291. package/contracts/shared/IVersionable.sol +96 -0
  292. package/contracts/shared/NftOwnable.sol +134 -0
  293. package/contracts/shared/ProxyManager.sol +94 -0
  294. package/contracts/shared/Registerable.sol +90 -0
  295. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  296. package/contracts/shared/Service.sol +55 -0
  297. package/contracts/shared/TokenHandler.sol +27 -0
  298. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  299. package/contracts/shared/Versionable.sol +147 -0
  300. package/contracts/test/TestFee.sol +25 -0
  301. package/contracts/test/TestRegisterable.sol +18 -0
  302. package/contracts/test/TestRoleId.sol +14 -0
  303. package/contracts/test/TestService.sol +24 -0
  304. package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
  305. package/contracts/test/TestVersion.sol +44 -0
  306. package/contracts/test/TestVersionable.sol +17 -0
  307. package/contracts/{mock → test}/Usdc.sol +1 -1
  308. package/contracts/types/AddressSet.sol +58 -0
  309. package/contracts/types/DistributorType.sol +55 -0
  310. package/contracts/types/Fee.sol +44 -20
  311. package/contracts/types/Key32.sol +50 -0
  312. package/contracts/types/NftId.sol +22 -1
  313. package/contracts/types/NftIdSet.sol +62 -0
  314. package/contracts/types/NumberId.sol +52 -0
  315. package/contracts/types/ObjectType.sol +60 -15
  316. package/contracts/types/Referral.sol +85 -0
  317. package/contracts/types/RiskId.sol +43 -0
  318. package/contracts/types/RoleId.sol +91 -0
  319. package/contracts/types/StateId.sol +18 -4
  320. package/contracts/types/Timestamp.sol +29 -4
  321. package/contracts/types/UFixed.sol +138 -23
  322. package/contracts/types/Version.sol +107 -0
  323. package/package.json +11 -5
  324. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  325. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  326. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  327. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  328. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -255
  329. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  330. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  331. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  333. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  334. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  335. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  336. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  337. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  339. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -299
  341. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  342. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  343. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  344. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  345. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  346. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  347. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  348. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  349. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  350. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  351. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  352. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  353. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  354. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  355. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  356. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  357. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  358. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  359. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -254
  360. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  361. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  362. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  363. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -129
  364. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  365. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -155
  366. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  367. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  368. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  369. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
  370. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  372. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  373. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  374. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  375. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  376. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  377. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  378. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  379. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  380. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  381. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  382. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  383. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  384. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  385. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  386. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  387. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  388. package/artifacts/contracts/mock/Usdc.sol/USDC.json +0 -338
  389. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  390. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  391. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  392. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  393. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  394. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  395. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  396. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  397. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  398. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  399. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  400. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  401. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -479
  402. package/contracts/components/Component.sol +0 -77
  403. package/contracts/components/IPool.sol +0 -15
  404. package/contracts/components/IProduct.sol +0 -16
  405. package/contracts/experiment/statemachine/README.md +0 -112
  406. package/contracts/instance/access/Access.sol +0 -165
  407. package/contracts/instance/access/IAccess.sol +0 -63
  408. package/contracts/instance/component/ComponentModule.sol +0 -274
  409. package/contracts/instance/component/IComponent.sol +0 -74
  410. package/contracts/instance/lifecycle/ILifecycle.sol +0 -47
  411. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  412. package/contracts/instance/policy/IPolicy.sol +0 -50
  413. package/contracts/instance/policy/PolicyModule.sol +0 -114
  414. package/contracts/instance/pool/IPoolModule.sol +0 -23
  415. package/contracts/instance/pool/PoolModule.sol +0 -81
  416. package/contracts/instance/product/IProductService.sol +0 -36
  417. package/contracts/instance/product/ProductService.sol +0 -136
  418. package/contracts/instance/treasury/ITreasury.sol +0 -91
  419. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  420. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  421. package/contracts/mock/TestPool.sol +0 -16
  422. package/contracts/mock/TestProduct.sol +0 -39
  423. package/contracts/registry/IChainNft.sol +0 -21
@@ -1,52 +1,271 @@
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 {ObjectType, POOL} from "../types/ObjectType.sol";
5
+ import {IProductService} from "../instance/service/IProductService.sol";
6
+ import {IPoolService} from "../instance/service/IPoolService.sol";
7
+ import {IBundleService} from "../instance/service/IBundleService.sol";
8
+ import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
5
9
  import {Fee} from "../types/Fee.sol";
6
- import {IPoolComponent} from "./IPool.sol";
7
- import {Component} from "./Component.sol";
10
+ import {UFixed} from "../types/UFixed.sol";
11
+ import {IPoolComponent} from "./IPoolComponent.sol";
12
+ import {BaseComponent} from "./BaseComponent.sol";
13
+ import {TokenHandler} from "../shared/TokenHandler.sol";
14
+ import {ISetup} from "../instance/module/ISetup.sol";
8
15
 
9
- contract Pool is Component, IPoolComponent {
10
- Fee private _stakingFee;
11
- Fee private _performanceFee;
16
+ import {IRegistry} from "../registry/IRegistry.sol";
17
+
18
+ // import {IPool} from "../instance/module/pool/IPoolModule.sol";
19
+ import {ITreasury} from "../instance/module/ITreasury.sol";
20
+ import {ISetup} from "../instance/module/ISetup.sol";
21
+ import {InstanceReader} from "../instance/InstanceReader.sol";
22
+
23
+ import {IRegisterable} from "../shared/IRegisterable.sol";
24
+ import {Registerable} from "../shared/Registerable.sol";
25
+
26
+ contract Pool is BaseComponent, IPoolComponent {
27
+ using NftIdLib for NftId;
28
+
29
+ bool internal _isConfirmingApplication;
30
+ UFixed internal _collateralizationLevel;
31
+
32
+ Fee internal _initialPoolFee;
33
+ Fee internal _initialStakingFee;
34
+ Fee internal _initialPerformanceFee;
35
+
36
+ TokenHandler internal _tokenHandler;
37
+
38
+ // may be used to interact with instance by derived contracts
39
+ IPoolService internal _poolService;
40
+
41
+ // only relevant to protect callback functions for "active" pools
42
+ IProductService private _productService;
43
+
44
+ IBundleService private _bundleService;
45
+
46
+ modifier onlyPoolService() {
47
+ require(
48
+ msg.sender == address(_poolService),
49
+ "ERROR:POL-001:NOT_POOL_SERVICE");
50
+ _;
51
+ }
52
+
53
+ modifier onlyProductService() {
54
+ require(
55
+ msg.sender == address(_productService),
56
+ "ERROR:POL-002:NOT_PRODUCT_SERVICE");
57
+ _;
58
+ }
12
59
 
13
60
  constructor(
14
61
  address registry,
15
- address instance,
62
+ NftId instanceNftId,
63
+ // TODO refactor into tokenNftId
16
64
  address token,
65
+ bool isInterceptor,
66
+ bool isConfirmingApplication,
67
+ UFixed collateralizationLevel,
68
+ Fee memory poolFee,
17
69
  Fee memory stakingFee,
18
- Fee memory performanceFee
19
- ) Component(registry, instance, token) {
20
- _stakingFee = stakingFee;
21
- _performanceFee = performanceFee;
70
+ Fee memory performanceFee,
71
+ address initialOwner
72
+ )
73
+ BaseComponent(registry, instanceNftId, token, POOL(), isInterceptor, initialOwner)
74
+ {
75
+ _isConfirmingApplication = isConfirmingApplication;
76
+ // TODO add validation
77
+ _collateralizationLevel = collateralizationLevel;
78
+ _initialPoolFee = poolFee;
79
+ _initialStakingFee = stakingFee;
80
+ _initialPerformanceFee = performanceFee;
81
+
82
+ _tokenHandler = new TokenHandler(token);
83
+
84
+ _poolService = _instance.getPoolService();
85
+ _productService = _instance.getProductService();
86
+ _bundleService = _instance.getBundleService();
87
+
88
+ _registerInterface(type(IPoolComponent).interfaceId);
89
+ }
90
+
91
+ function createBundle(
92
+ Fee memory fee,
93
+ uint256 initialAmount,
94
+ uint256 lifetime,
95
+ bytes memory filter
96
+ )
97
+ external
98
+ virtual override
99
+ returns(NftId bundleNftId)
100
+ {
101
+ address owner = msg.sender;
102
+ bundleNftId = _bundleService.createBundle(
103
+ owner,
104
+ fee,
105
+ initialAmount,
106
+ lifetime,
107
+ filter
108
+ );
109
+
110
+ // TODO add logging
22
111
  }
23
112
 
24
- // from pool component
25
- function getStakingFee()
113
+ /**
114
+ * @dev see {IPool.underwrite}.
115
+ * Default implementation that only writes a {LogUnderwrittenByPool} entry.
116
+ */
117
+ function underwrite(
118
+ NftId policyNftId,
119
+ bytes memory policyData,
120
+ bytes memory bundleFilter,
121
+ uint256 collateralizationAmount
122
+ )
26
123
  external
124
+ onlyProductService
125
+ virtual override
126
+ {
127
+ _underwrite(policyNftId, policyData, bundleFilter, collateralizationAmount);
128
+ }
129
+
130
+ /**
131
+ * @dev see {IPoolComponent.policyMatchesBundle}.
132
+ * Default implementation always returns true
133
+ */
134
+ function policyMatchesBundle(
135
+ bytes memory, // policyData
136
+ bytes memory // bundleFilter
137
+ )
138
+ public
27
139
  view
140
+ virtual override
141
+ returns (bool isMatching)
142
+ {
143
+ return true;
144
+ }
145
+
146
+
147
+ function isConfirmingApplication() external view override returns (bool isConfirmingApplication) {
148
+ return _isConfirmingApplication;
149
+ }
150
+
151
+ function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
152
+ return _collateralizationLevel;
153
+ }
154
+
155
+ function setFees(
156
+ Fee memory poolFee,
157
+ Fee memory stakingFee,
158
+ Fee memory performanceFee
159
+ )
160
+ external
161
+ onlyOwner
28
162
  override
29
- returns (Fee memory stakingFee)
30
163
  {
31
- return _stakingFee;
164
+ _poolService.setFees(poolFee, stakingFee, performanceFee);
32
165
  }
33
166
 
34
- function getPerformanceFee()
167
+ function setBundleFee(
168
+ NftId bundleNftId,
169
+ Fee memory fee
170
+ )
171
+ external
172
+ override
173
+ // TODO add onlyBundleOwner
174
+ {
175
+ _bundleService.setBundleFee(bundleNftId, fee);
176
+ }
177
+
178
+ function lockBundle(
179
+ NftId bundleNftId
180
+ )
181
+ external
182
+ override
183
+ // TODO add onlyBundleOwner
184
+ {
185
+ _bundleService.lockBundle(bundleNftId);
186
+ }
187
+
188
+ function unlockBundle(
189
+ NftId bundleNftId
190
+ )
35
191
  external
36
- view
37
192
  override
38
- returns (Fee memory performanceFee)
193
+ // TODO add onlyBundleOwner
39
194
  {
40
- return _performanceFee;
195
+ _bundleService.unlockBundle(bundleNftId);
41
196
  }
42
197
 
43
- // from registerable
44
- function getType() public pure override returns (ObjectType) {
45
- return POOL();
198
+ function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
199
+ InstanceReader reader = _instance.getInstanceReader();
200
+ return reader.getPoolSetupInfo(getNftId());
46
201
  }
47
202
 
48
- // from registerable
49
- function getData() external view override returns (bytes memory data) {
50
- return bytes(abi.encode(getInstance().getNftId()));
203
+ // from IRegisterable
204
+
205
+ // TODO used only once, occupies space
206
+ // TODO do not use super
207
+ function getInitialInfo()
208
+ public
209
+ view
210
+ override (IRegisterable, Registerable)
211
+ returns (IRegistry.ObjectInfo memory, bytes memory)
212
+ {
213
+ (
214
+ IRegistry.ObjectInfo memory info,
215
+ ) = super.getInitialInfo();
216
+
217
+ return (
218
+ info,
219
+ abi.encode(
220
+ ISetup.PoolSetupInfo(
221
+ _productNftId,
222
+ _tokenHandler,
223
+ _collateralizationLevel,
224
+ _initialPoolFee,
225
+ _initialStakingFee,
226
+ _initialPerformanceFee,
227
+ false,
228
+ _isConfirmingApplication,
229
+ _wallet
230
+ )
231
+ )
232
+ );
233
+ }
234
+
235
+ // Internals
236
+
237
+ function _underwrite(
238
+ NftId policyNftId,
239
+ bytes memory policyData,
240
+ bytes memory bundleFilter,
241
+ uint256 collateralizationAmount
242
+ )
243
+ internal
244
+ {
245
+ require(
246
+ policyMatchesBundle(policyData, bundleFilter),
247
+ "ERROR:POL-020:POLICY_BUNDLE_MISMATCH"
248
+ );
249
+
250
+ emit LogUnderwrittenByPool(policyNftId, collateralizationAmount, address(this));
251
+ }
252
+
253
+ function _createBundle(
254
+ address bundleOwner,
255
+ Fee memory fee,
256
+ uint256 amount,
257
+ uint256 lifetime,
258
+ bytes calldata filter
259
+ )
260
+ internal
261
+ returns(NftId bundleNftId)
262
+ {
263
+ bundleNftId = _bundleService.createBundle(
264
+ bundleOwner,
265
+ fee,
266
+ amount,
267
+ lifetime,
268
+ filter
269
+ );
51
270
  }
52
271
  }
@@ -1,89 +1,292 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IProductService} from "../instance/product/IProductService.sol";
5
- import {Component} from "./Component.sol";
6
- import {IProductComponent} from "./IProduct.sol";
7
- import {NftId} from "../types/NftId.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IRisk} from "../instance/module/IRisk.sol";
7
+ import {ITreasury} from "../instance/module/ITreasury.sol";
8
+ import {IProductService} from "../instance/service/IProductService.sol";
9
+ import {IPolicyService} from "../instance/service/IPolicyService.sol";
10
+ import {IProductComponent} from "./IProductComponent.sol";
11
+ import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
8
12
  import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
9
- import {Fee} from "../types/Fee.sol";
10
- import {Component} from "./Component.sol";
13
+ import {ReferralId} from "../types/Referral.sol";
14
+ import {RiskId, RiskIdLib} from "../types/RiskId.sol";
15
+ import {StateId} from "../types/StateId.sol";
16
+ import {Timestamp} from "../types/Timestamp.sol";
17
+ import {Fee, FeeLib} from "../types/Fee.sol";
18
+ import {BaseComponent} from "./BaseComponent.sol";
19
+
20
+ import {IRegistry} from "../registry/IRegistry.sol";
21
+ import {IRegisterable} from "../shared/IRegisterable.sol";
22
+ import {Registerable} from "../shared/Registerable.sol";
23
+ import {TokenHandler} from "../shared/TokenHandler.sol";
24
+
25
+ import {InstanceReader} from "../instance/InstanceReader.sol";
26
+ import {ISetup} from "../instance/module/ISetup.sol";
27
+ import {Pool} from "../components/Pool.sol";
28
+ import {Distribution} from "../components/Distribution.sol";
29
+
30
+ import {zeroNftId} from "../types/NftId.sol";
11
31
 
12
- contract Product is Component, IProductComponent {
13
- IProductService private _productService;
14
- address private _pool;
15
- Fee private _policyFee;
16
- Fee private _processingFee;
32
+ contract Product is BaseComponent, IProductComponent {
33
+ using NftIdLib for NftId;
34
+
35
+ IProductService internal _productService;
36
+ IPolicyService internal _policyService;
37
+ Pool internal _pool;
38
+ Distribution internal _distribution;
39
+ Fee internal _initialProductFee;
40
+ Fee internal _initialProcessingFee;
41
+ TokenHandler internal _tokenHandler;
42
+
43
+ NftId internal _poolNftId;
44
+ NftId internal _distributionNftId;
17
45
 
18
46
  constructor(
19
47
  address registry,
20
- address instance,
48
+ NftId instanceNftid,
21
49
  address token,
50
+ bool isInterceptor,
22
51
  address pool,
23
- Fee memory policyFee,
24
- Fee memory processingFee
25
- ) Component(registry, instance, token) {
52
+ address distribution,
53
+ Fee memory productFee,
54
+ Fee memory processingFee,
55
+ address initialOwner
56
+ ) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
26
57
  // TODO add validation
27
58
  _productService = _instance.getProductService();
28
- _pool = pool;
29
- _policyFee = policyFee;
30
- _processingFee = processingFee;
59
+ _policyService = _instance.getPolicyService();
60
+ _pool = Pool(pool);
61
+ _distribution = Distribution(distribution);
62
+ _initialProductFee = productFee;
63
+ _initialProcessingFee = processingFee;
64
+
65
+ _tokenHandler = new TokenHandler(token);
66
+
67
+ _poolNftId = getRegistry().getNftId(address(_pool));
68
+ _distributionNftId = getRegistry().getNftId(address(_distribution));
69
+
70
+ _registerInterface(type(IProductComponent).interfaceId);
71
+ }
72
+
73
+
74
+ function calculatePremium(
75
+ uint256 sumInsuredAmount,
76
+ RiskId riskId,
77
+ uint256 lifetime,
78
+ bytes memory applicationData,
79
+ ReferralId referralId,
80
+ NftId bundleNftId
81
+ )
82
+ external
83
+ view
84
+ override
85
+ returns (uint256 premiumAmount)
86
+ {
87
+ (premiumAmount,,,,) = _policyService.calculatePremium(
88
+ riskId,
89
+ sumInsuredAmount,
90
+ lifetime,
91
+ applicationData,
92
+ bundleNftId,
93
+ referralId
94
+ );
95
+ }
96
+
97
+
98
+ function calculateNetPremium(
99
+ uint256 sumInsuredAmount,
100
+ RiskId riskId,
101
+ uint256 lifetime,
102
+ bytes memory applicationData
103
+ )
104
+ external
105
+ view
106
+ virtual override
107
+ returns (uint256 netPremiumAmount)
108
+ {
109
+ // default 10% of sum insured
110
+ return sumInsuredAmount / 10;
111
+ }
112
+
113
+ function _toRiskId(string memory riskName) internal pure returns (RiskId riskId) {
114
+ return RiskIdLib.toRiskId(riskName);
115
+ }
116
+
117
+ function _createRisk(
118
+ RiskId id,
119
+ bytes memory data
120
+ ) internal {
121
+ _productService.createRisk(
122
+ id,
123
+ data
124
+ );
125
+ }
126
+
127
+ function _updateRisk(
128
+ RiskId id,
129
+ bytes memory data
130
+ ) internal {
131
+ _productService.updateRisk(
132
+ id,
133
+ data
134
+ );
135
+ }
136
+
137
+ function _updateRiskState(
138
+ RiskId id,
139
+ StateId state
140
+ ) internal {
141
+ _productService.updateRiskState(
142
+ id,
143
+ state
144
+ );
145
+ }
146
+
147
+ function _getRiskInfo(RiskId id) internal view returns (IRisk.RiskInfo memory info) {
148
+ return _instance.getInstanceReader().getRiskInfo(id);
31
149
  }
32
150
 
33
151
  function _createApplication(
34
152
  address applicationOwner,
153
+ RiskId riskId,
35
154
  uint256 sumInsuredAmount,
36
- uint256 premiumAmount,
37
155
  uint256 lifetime,
38
- NftId bundleNftId
156
+ bytes memory applicationData,
157
+ NftId bundleNftId,
158
+ ReferralId referralId
39
159
  ) internal returns (NftId nftId) {
40
- nftId = _productService.createApplication(
160
+ nftId = _policyService.createApplication(
41
161
  applicationOwner,
162
+ riskId,
42
163
  sumInsuredAmount,
43
- premiumAmount,
44
164
  lifetime,
45
- bundleNftId
165
+ applicationData,
166
+ bundleNftId,
167
+ referralId
46
168
  );
47
169
  }
48
170
 
49
- function _underwrite(NftId nftId) internal {
50
- _productService.underwrite(nftId);
171
+ function _underwrite(
172
+ NftId policyNftId,
173
+ bool requirePremiumPayment,
174
+ Timestamp activateAt
175
+ )
176
+ internal
177
+ {
178
+ _policyService.underwrite(
179
+ policyNftId,
180
+ requirePremiumPayment,
181
+ activateAt);
182
+ }
183
+
184
+ function _collectPremium(
185
+ NftId policyNftId,
186
+ Timestamp activateAt
187
+ )
188
+ internal
189
+ {
190
+ _policyService.collectPremium(
191
+ policyNftId,
192
+ activateAt);
51
193
  }
52
194
 
53
- function _collectPremium(NftId nftId) internal {
54
- _productService.collectPremium(nftId);
195
+ function _activate(
196
+ NftId policyNftId,
197
+ Timestamp activateAt
198
+ )
199
+ internal
200
+ {
201
+ _policyService.activate(
202
+ policyNftId,
203
+ activateAt);
55
204
  }
56
205
 
57
206
  function getPoolNftId() external view override returns (NftId poolNftId) {
58
- return _registry.getNftId(_pool);
207
+ return getRegistry().getNftId(address(_pool));
59
208
  }
60
209
 
61
- // from product component
62
- function getPolicyFee()
63
- external
64
- view
65
- override
66
- returns (Fee memory policyFee)
67
- {
68
- return _policyFee;
210
+ function getDistributionNftId() external view override returns (NftId distributionNftId) {
211
+ return getRegistry().getNftId(address(_distribution));
69
212
  }
70
213
 
71
- function getProcessingFee()
214
+ // from product component
215
+ function setFees(
216
+ Fee memory productFee,
217
+ Fee memory processingFee
218
+ )
72
219
  external
73
- view
220
+ onlyOwner
74
221
  override
75
- returns (Fee memory processingFee)
76
222
  {
77
- return _processingFee;
223
+ _productService.setFees(productFee, processingFee);
78
224
  }
79
225
 
80
- // from registerable
81
- function getType() public pure override returns (ObjectType) {
82
- return PRODUCT();
226
+ function getSetupInfo() public view returns (ISetup.ProductSetupInfo memory setupInfo) {
227
+ InstanceReader reader = _instance.getInstanceReader();
228
+ return reader.getProductSetupInfo(getNftId());
83
229
  }
84
230
 
85
- // from registerable
86
- function getData() external view override returns (bytes memory data) {
87
- return bytes(abi.encode(getInstance().getNftId()));
231
+ // from IRegisterable
232
+
233
+ function getInitialInfo()
234
+ public
235
+ view
236
+ override (IRegisterable, Registerable)
237
+ returns (IRegistry.ObjectInfo memory, bytes memory)
238
+ {
239
+ // from Registerable
240
+ (
241
+ IRegistry.ObjectInfo memory productInfo,
242
+ bytes memory data
243
+ ) = super.getInitialInfo();
244
+
245
+ // TODO read pool & distribution fees
246
+ // 1) from pool -> the only option -> pool must be registered first?
247
+ // 2) from instance -> all fees are set into instance at product registration which is ongoing here
248
+ // checks are done in registryProduct() where THIS function is called
249
+ //require(getRegistry().getObjectInfo(_poolNftId).objectType == POOL(), "POOL_NOT_REGISTERED");
250
+ //require(getRegistry().getObjectInfo(_distributionNftId).objectType == DISTRIBUTION(), "DISTRIBUTION_NOT_REGISTERED");
251
+
252
+ // from PoolComponent
253
+ (
254
+ ,
255
+ bytes memory poolData
256
+ ) = _pool.getInitialInfo();
257
+
258
+ (
259
+ ISetup.PoolSetupInfo memory poolSetupInfo
260
+ ) = abi.decode(poolData, (ISetup.PoolSetupInfo));
261
+
262
+ // from DistributionComponent
263
+ (
264
+ ,
265
+ bytes memory distributionData
266
+ ) = _distribution.getInitialInfo();
267
+
268
+ (
269
+ ISetup.DistributionSetupInfo memory distributionSetupInfo
270
+ ) = abi.decode(distributionData, (ISetup.DistributionSetupInfo));
271
+
272
+ return (
273
+ productInfo,
274
+ abi.encode(
275
+ ISetup.ProductSetupInfo(
276
+ _token,
277
+ _tokenHandler,
278
+ _distributionNftId,
279
+ _poolNftId,
280
+ distributionSetupInfo.distributionFee,
281
+ _initialProductFee,
282
+ _initialProcessingFee,
283
+ poolSetupInfo.poolFee,
284
+ poolSetupInfo.stakingFee,
285
+ poolSetupInfo.performanceFee,
286
+ false,
287
+ _wallet
288
+ )
289
+ )
290
+ );
88
291
  }
89
292
  }
@@ -0,0 +1,47 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
+
6
+
7
+ contract Cloner {
8
+
9
+ Mock1 public mock1;
10
+ Mock2 public mock2;
11
+
12
+ constructor() {
13
+ mock1 = new Mock1();
14
+ mock2 = new Mock2();
15
+ }
16
+
17
+ function createClone(address master)
18
+ external
19
+ returns (address cloned)
20
+ {
21
+ cloned = Clones.clone(master);
22
+ }
23
+ }
24
+
25
+
26
+ contract Mock1 {
27
+ function getValue() external virtual view returns (uint256) {
28
+ return 42;
29
+ }
30
+ }
31
+
32
+ contract Mock2 is Mock1 {
33
+ uint256 internal _value;
34
+
35
+ constructor() {
36
+ _value = 42;
37
+ }
38
+
39
+ function setValue(uint256 value) external virtual {
40
+ _value = value;
41
+ }
42
+
43
+ function getValue() external virtual override view returns (uint256) {
44
+ return _value;
45
+ }
46
+ }
47
+