@etherisc/gif-next 0.0.2-b9b3e89 → 0.0.2-b9e43cf-870

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