@etherisc/gif-next 0.0.2-b22ff39-218 → 0.0.2-b4fc06b-491

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 (363) hide show
  1. package/README.md +278 -8
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/{instance/component/ComponentModule.sol/ComponentModule.json → components/BaseComponent.sol/BaseComponent.json} +149 -162
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +610 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/component/IComponent.sol/IComponentModule.json → components/IBaseComponent.sol/IBaseComponent.json} +129 -107
  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 +249 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +157 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +598 -37
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +570 -47
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  42. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  43. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  44. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  45. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  46. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  47. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  48. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  50. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  51. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  52. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  53. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +114 -0
  54. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  55. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -0
  56. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  58. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +247 -788
  60. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
  62. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  63. package/artifacts/contracts/instance/Instance.sol/Instance.json +2999 -550
  64. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +930 -0
  66. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1283 -0
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +755 -0
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +432 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +481 -0
  74. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  76. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  77. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  78. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  80. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  82. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  84. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  88. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  90. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  92. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  94. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  96. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  98. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  100. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  102. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  104. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +561 -0
  106. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +751 -0
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  109. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +516 -68
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
  114. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  115. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  116. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.json +640 -76
  118. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1261 -0
  120. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +508 -0
  122. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  123. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  124. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  125. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  126. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  127. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  129. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +201 -0
  130. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  131. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  132. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  134. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  136. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  137. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  138. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  140. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  142. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  143. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  144. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  145. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  146. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  147. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  148. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  149. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  150. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  151. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  152. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  153. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  154. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  155. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  156. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  157. package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
  158. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  159. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  160. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  161. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  162. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  164. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  165. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  166. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  168. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  170. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  172. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  173. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  174. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  175. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  176. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  177. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  178. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  180. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  181. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  182. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  184. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  186. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  188. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  190. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  192. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  194. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +77 -2
  196. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  198. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  200. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  202. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  204. package/contracts/components/BaseComponent.sol +86 -0
  205. package/contracts/components/Distribution.sol +166 -0
  206. package/contracts/components/IBaseComponent.sol +24 -0
  207. package/contracts/components/IDistributionComponent.sol +43 -0
  208. package/contracts/components/IPoolComponent.sol +62 -0
  209. package/contracts/components/IProductComponent.sol +35 -0
  210. package/contracts/components/Pool.sol +249 -12
  211. package/contracts/components/Product.sol +267 -25
  212. package/contracts/experiment/cloning/Cloner.sol +47 -0
  213. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  214. package/contracts/experiment/statemachine/ISM.sol +25 -0
  215. package/contracts/experiment/statemachine/SM.sol +57 -0
  216. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  217. package/contracts/instance/AccessManagedSimple.sol +122 -0
  218. package/contracts/instance/AccessManagerSimple.sol +692 -0
  219. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  220. package/contracts/instance/IInstance.sol +25 -15
  221. package/contracts/instance/IInstanceService.sol +30 -0
  222. package/contracts/instance/Instance.sol +432 -54
  223. package/contracts/instance/InstanceAccessManager.sol +288 -0
  224. package/contracts/instance/InstanceReader.sol +290 -0
  225. package/contracts/instance/InstanceService.sol +138 -0
  226. package/contracts/instance/InstanceServiceManager.sol +56 -0
  227. package/contracts/instance/base/ComponentServiceBase.sol +49 -0
  228. package/contracts/instance/base/IInstanceBase.sol +23 -0
  229. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  230. package/contracts/instance/base/ILifecycle.sol +30 -0
  231. package/contracts/instance/base/KeyValueStore.sol +172 -0
  232. package/contracts/instance/base/Lifecycle.sol +100 -0
  233. package/contracts/instance/module/IAccess.sol +38 -0
  234. package/contracts/instance/module/IBundle.sol +19 -0
  235. package/contracts/instance/module/IDistribution.sol +39 -0
  236. package/contracts/instance/module/IPolicy.sol +45 -0
  237. package/contracts/instance/module/IRisk.sol +11 -0
  238. package/contracts/instance/module/ISetup.sol +43 -0
  239. package/contracts/instance/module/ITreasury.sol +23 -0
  240. package/contracts/instance/service/ComponentOwnerService.sol +317 -0
  241. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  242. package/contracts/instance/service/IDistributionService.sol +12 -0
  243. package/contracts/instance/service/IPoolService.sol +37 -0
  244. package/contracts/instance/service/IProductService.sol +107 -0
  245. package/contracts/registry/ChainNft.sol +129 -62
  246. package/contracts/registry/IRegistry.sol +68 -58
  247. package/contracts/registry/IRegistryService.sol +35 -0
  248. package/contracts/registry/ITransferInterceptor.sol +6 -0
  249. package/contracts/registry/Registry.sol +399 -140
  250. package/contracts/registry/RegistryService.sol +444 -0
  251. package/contracts/registry/RegistryServiceManager.sol +64 -0
  252. package/contracts/shared/ContractDeployerLib.sol +72 -0
  253. package/contracts/shared/ERC165.sol +21 -0
  254. package/contracts/shared/INftOwnable.sol +22 -0
  255. package/contracts/shared/IRegisterable.sol +17 -0
  256. package/contracts/shared/IService.sol +15 -0
  257. package/contracts/shared/IVersionable.sol +96 -0
  258. package/contracts/shared/NftOwnable.sol +136 -0
  259. package/contracts/shared/ProxyManager.sol +94 -0
  260. package/contracts/shared/Registerable.sol +89 -0
  261. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  262. package/contracts/shared/Service.sol +54 -0
  263. package/contracts/shared/TokenHandler.sol +27 -0
  264. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  265. package/contracts/shared/Versionable.sol +147 -0
  266. package/contracts/test/TestFee.sol +25 -0
  267. package/contracts/test/TestRegisterable.sol +18 -0
  268. package/contracts/test/TestRoleId.sol +14 -0
  269. package/contracts/test/TestService.sol +24 -0
  270. package/contracts/test/TestToken.sol +26 -0
  271. package/contracts/test/TestVersion.sol +44 -0
  272. package/contracts/test/TestVersionable.sol +17 -0
  273. package/contracts/test/Usdc.sol +26 -0
  274. package/contracts/types/AddressSet.sol +58 -0
  275. package/contracts/types/DistributorType.sol +55 -0
  276. package/contracts/types/Fee.sol +56 -0
  277. package/contracts/types/Key32.sol +50 -0
  278. package/contracts/types/NftId.sol +22 -1
  279. package/contracts/types/NftIdSet.sol +60 -0
  280. package/contracts/types/NumberId.sol +52 -0
  281. package/contracts/types/ObjectType.sol +152 -0
  282. package/contracts/types/Referral.sol +85 -0
  283. package/contracts/types/RiskId.sol +43 -0
  284. package/contracts/types/RoleId.sol +82 -0
  285. package/contracts/types/StateId.sol +101 -0
  286. package/contracts/types/Timestamp.sol +29 -4
  287. package/contracts/types/UFixed.sol +150 -30
  288. package/contracts/types/Version.sol +107 -0
  289. package/package.json +16 -6
  290. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  291. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  292. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  293. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  294. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  295. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  296. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  297. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  298. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  299. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  300. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  301. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  302. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  303. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  304. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  305. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  306. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  307. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  308. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  309. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  310. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  311. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  312. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  313. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  314. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  315. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  316. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  317. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  318. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  319. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  320. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  321. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  322. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  323. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  324. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  325. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  326. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  327. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  328. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  330. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  331. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  332. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  333. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  334. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  335. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  336. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  337. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  338. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  339. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  340. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  341. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  342. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  343. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  344. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  345. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  346. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  347. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  348. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  349. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  350. package/contracts/components/Component.sol +0 -60
  351. package/contracts/components/IPool.sol +0 -9
  352. package/contracts/components/IProduct.sol +0 -9
  353. package/contracts/instance/access/Access.sol +0 -165
  354. package/contracts/instance/access/IAccess.sol +0 -63
  355. package/contracts/instance/component/ComponentModule.sol +0 -213
  356. package/contracts/instance/component/IComponent.sol +0 -73
  357. package/contracts/instance/policy/IPolicy.sol +0 -51
  358. package/contracts/instance/policy/PolicyModule.sol +0 -91
  359. package/contracts/instance/pool/IPoolModule.sol +0 -29
  360. package/contracts/instance/pool/PoolModule.sol +0 -73
  361. package/contracts/instance/product/IProductService.sol +0 -36
  362. package/contracts/instance/product/ProductService.sol +0 -112
  363. package/contracts/registry/IChainNft.sol +0 -21
@@ -1,22 +1,259 @@
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 {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
8
+ import {Fee} from "../types/Fee.sol";
9
+ import {UFixed} from "../types/UFixed.sol";
10
+ import {IPoolComponent} from "./IPoolComponent.sol";
11
+ import {BaseComponent} from "./BaseComponent.sol";
12
+ import {TokenHandler} from "../shared/TokenHandler.sol";
13
+ import {ISetup} from "../instance/module/ISetup.sol";
14
+
15
+ import {IRegistry} from "../registry/IRegistry.sol";
16
+
17
+ // import {IPool} from "../instance/module/pool/IPoolModule.sol";
18
+ import {ITreasury} from "../instance/module/ITreasury.sol";
19
+ import {ISetup} from "../instance/module/ISetup.sol";
20
+ import {InstanceReader} from "../instance/InstanceReader.sol";
21
+
22
+ import {IRegisterable} from "../shared/IRegisterable.sol";
23
+ import {Registerable} from "../shared/Registerable.sol";
24
+
25
+ contract Pool is BaseComponent, IPoolComponent {
26
+ using NftIdLib for NftId;
27
+
28
+ bool internal _isVerifying;
29
+ UFixed internal _collateralizationLevel;
30
+
31
+ Fee internal _initialPoolFee;
32
+ Fee internal _initialStakingFee;
33
+ Fee internal _initialPerformanceFee;
34
+
35
+ // may be used to interact with instance by derived contracts
36
+ IPoolService internal _poolService;
37
+
38
+ // only relevant to protect callback functions for "active" pools
39
+ IProductService private _productService;
40
+
41
+ modifier onlyPoolService() {
42
+ require(
43
+ msg.sender == address(_poolService),
44
+ "ERROR:POL-001:NOT_POOL_SERVICE");
45
+ _;
46
+ }
47
+
48
+ modifier onlyProductService() {
49
+ require(
50
+ msg.sender == address(_productService),
51
+ "ERROR:POL-002:NOT_PRODUCT_SERVICE");
52
+ _;
53
+ }
6
54
 
7
- contract Pool is Component, IPoolComponent {
8
55
  constructor(
9
56
  address registry,
10
- address instance
11
- ) Component(registry, instance) {}
57
+ NftId instanceNftId,
58
+ NftId productNftId,
59
+ // TODO refactor into tokenNftId
60
+ address token,
61
+ bool isInterceptor,
62
+ bool verifying,
63
+ UFixed collateralizationLevel,
64
+ Fee memory poolFee,
65
+ Fee memory stakingFee,
66
+ Fee memory performanceFee,
67
+ address initialOwner
68
+ )
69
+ BaseComponent(registry, instanceNftId, productNftId, token, POOL(), isInterceptor, initialOwner)
70
+ {
71
+ _isVerifying = verifying;
72
+ // TODO add validation
73
+ _collateralizationLevel = collateralizationLevel;
74
+ _initialPoolFee = poolFee;
75
+ _initialStakingFee = stakingFee;
76
+ _initialPerformanceFee = performanceFee;
77
+
78
+ // TODO: reactivate when services are available again
79
+ // _poolService = _instance.getPoolService();
80
+ // _productService = _instance.getProductService();
81
+
82
+ _registerInterface(type(IPoolComponent).interfaceId);
83
+ }
84
+
85
+ function createBundle(
86
+ Fee memory fee,
87
+ uint256 initialAmount,
88
+ uint256 lifetime,
89
+ bytes memory filter
90
+ )
91
+ external
92
+ virtual override
93
+ returns(NftId bundleNftId)
94
+ {
95
+ address owner = msg.sender;
96
+ bundleNftId = _poolService.createBundle(
97
+ owner,
98
+ fee,
99
+ initialAmount,
100
+ lifetime,
101
+ filter
102
+ );
103
+
104
+ // TODO add logging
105
+ }
106
+
107
+ /**
108
+ * @dev see {IPool.underwrite}.
109
+ * Default implementation that only writes a {LogUnderwrittenByPool} entry.
110
+ */
111
+ function underwrite(
112
+ NftId policyNftId,
113
+ bytes memory policyData,
114
+ bytes memory bundleFilter,
115
+ uint256 collateralizationAmount
116
+ )
117
+ external
118
+ onlyProductService
119
+ virtual override
120
+ {
121
+ _underwrite(policyNftId, policyData, bundleFilter, collateralizationAmount);
122
+ }
123
+
124
+ /**
125
+ * @dev see {IPoolComponent.policyMatchesBundle}.
126
+ * Default implementation always returns true
127
+ */
128
+ function policyMatchesBundle(
129
+ bytes memory, // policyData
130
+ bytes memory // bundleFilter
131
+ )
132
+ public
133
+ view
134
+ virtual override
135
+ returns (bool isMatching)
136
+ {
137
+ return true;
138
+ }
139
+
140
+
141
+ function isVerifying() external view override returns (bool verifying) {
142
+ return _isVerifying;
143
+ }
144
+
145
+ function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
146
+ return _collateralizationLevel;
147
+ }
148
+
149
+ function setFees(
150
+ Fee memory poolFee,
151
+ Fee memory stakingFee,
152
+ Fee memory performanceFee
153
+ )
154
+ external
155
+ onlyOwner
156
+ override
157
+ {
158
+ _poolService.setFees(poolFee, stakingFee, performanceFee);
159
+ }
160
+
161
+ function setBundleFee(
162
+ NftId bundleNftId,
163
+ Fee memory fee
164
+ )
165
+ external
166
+ override
167
+ // TODO add onlyBundleOwner
168
+ {
169
+ _poolService.setBundleFee(bundleNftId, fee);
170
+ }
171
+
172
+ function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
173
+ // TODO fix this
174
+ if (getNftId().eq(zeroNftId())) {
175
+ return ISetup.PoolSetupInfo(
176
+ _productNftId,
177
+ TokenHandler(address(0)),
178
+ _collateralizationLevel,
179
+ _initialPoolFee,
180
+ _initialStakingFee,
181
+ _initialPerformanceFee,
182
+ _isVerifying,
183
+ _wallet
184
+ );
185
+ }
186
+
187
+ InstanceReader reader = _instance.getInstanceReader();
188
+ return reader.getPoolSetupInfo(getNftId());
189
+ }
190
+
191
+ // from IRegisterable
192
+
193
+ // TODO used only once, occupies space
194
+ // TODO do not use super
195
+ function getInitialInfo()
196
+ public
197
+ view
198
+ override (IRegisterable, Registerable)
199
+ returns (IRegistry.ObjectInfo memory, bytes memory)
200
+ {
201
+ (
202
+ IRegistry.ObjectInfo memory info,
203
+ bytes memory data
204
+ ) = super.getInitialInfo();
205
+
206
+ return (
207
+ info,
208
+ abi.encode(
209
+ ISetup.PoolSetupInfo(
210
+ getProductNftId(),
211
+ TokenHandler(address(0)),
212
+ _collateralizationLevel,
213
+ _initialPoolFee,
214
+ _initialStakingFee,
215
+ _initialPerformanceFee,
216
+ _isVerifying,
217
+ _wallet
218
+ )
219
+ )
220
+ );
221
+ }
222
+
223
+ // Internals
224
+
225
+ function _underwrite(
226
+ NftId policyNftId,
227
+ bytes memory policyData,
228
+ bytes memory bundleFilter,
229
+ uint256 collateralizationAmount
230
+ )
231
+ internal
232
+ {
233
+ require(
234
+ policyMatchesBundle(policyData, bundleFilter),
235
+ "ERROR:POL-020:POLICY_BUNDLE_MISMATCH"
236
+ );
12
237
 
13
- // from registerable
14
- function getType() public view override returns (uint256) {
15
- return _registry.POOL();
238
+ emit LogUnderwrittenByPool(policyNftId, collateralizationAmount, address(this));
16
239
  }
17
240
 
18
- // from registerable
19
- function getData() external view override returns (bytes memory data) {
20
- return bytes(abi.encode(getInstance().getNftId()));
241
+ function _createBundle(
242
+ address bundleOwner,
243
+ Fee memory fee,
244
+ uint256 amount,
245
+ uint256 lifetime,
246
+ bytes calldata filter
247
+ )
248
+ internal
249
+ returns(NftId bundleNftId)
250
+ {
251
+ bundleNftId = _poolService.createBundle(
252
+ bundleOwner,
253
+ fee,
254
+ amount,
255
+ lifetime,
256
+ filter
257
+ );
21
258
  }
22
259
  }
@@ -1,55 +1,297 @@
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";
8
5
 
9
- contract Product is Component, IProductComponent {
10
- IProductService private _productService;
11
- address private _pool;
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 {IProductComponent} from "./IProductComponent.sol";
10
+ import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
+ import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
12
+ import {ReferralId} from "../types/Referral.sol";
13
+ import {RiskId, RiskIdLib} from "../types/RiskId.sol";
14
+ import {StateId} from "../types/StateId.sol";
15
+ import {Timestamp} from "../types/Timestamp.sol";
16
+ import {Fee, FeeLib} from "../types/Fee.sol";
17
+ import {BaseComponent} from "./BaseComponent.sol";
18
+
19
+ import {IRegistry} from "../registry/IRegistry.sol";
20
+ import {IRegisterable} from "../shared/IRegisterable.sol";
21
+ import {Registerable} from "../shared/Registerable.sol";
22
+ import {TokenHandler} from "../shared/TokenHandler.sol";
23
+
24
+ import {InstanceReader} from "../instance/InstanceReader.sol";
25
+ import {ISetup} from "../instance/module/ISetup.sol";
26
+ import {Pool} from "../components/Pool.sol";
27
+
28
+ import {zeroNftId} from "../types/NftId.sol";
29
+
30
+ contract Product is BaseComponent, IProductComponent {
31
+ using NftIdLib for NftId;
32
+
33
+ IProductService internal _productService;
34
+ Pool internal _pool;
35
+ address internal _distribution;
36
+ Fee internal _initialProductFee;
37
+ Fee internal _initialProcessingFee;
38
+
39
+ NftId internal _poolNftId;
40
+ NftId internal _distributionNftId;
12
41
 
13
42
  constructor(
14
43
  address registry,
15
- address instance,
16
- address pool
17
- ) Component(registry, instance) {
18
- _productService = _instance.getProductService();
19
- _pool = pool;
44
+ NftId instanceNftid,
45
+ address token,
46
+ bool isInterceptor,
47
+ address pool,
48
+ address distribution,
49
+ Fee memory productFee,
50
+ Fee memory processingFee,
51
+ address initialOwner
52
+ ) BaseComponent(registry, instanceNftid, zeroNftId(), token, PRODUCT(), isInterceptor, initialOwner) {
53
+ // TODO add validation
54
+ // TODO: reactivate when services are available again
55
+ // _productService = _instance.getProductService();
56
+ _pool = Pool(pool);
57
+ _distribution = distribution;
58
+ _initialProductFee = productFee;
59
+ _initialProcessingFee = processingFee;
60
+
61
+ _poolNftId = getRegistry().getNftId(address(_pool));
62
+ _distributionNftId = getRegistry().getNftId(_distribution);
63
+
64
+ _registerInterface(type(IProductComponent).interfaceId);
65
+ }
66
+
67
+
68
+ function calculatePremium(
69
+ uint256 sumInsuredAmount,
70
+ RiskId riskId,
71
+ uint256 lifetime,
72
+ bytes memory applicationData,
73
+ ReferralId referralId,
74
+ NftId bundleNftId
75
+ )
76
+ external
77
+ view
78
+ override
79
+ returns (uint256 premiumAmount)
80
+ {
81
+ (premiumAmount,,,,) = _productService.calculatePremium(
82
+ riskId,
83
+ sumInsuredAmount,
84
+ lifetime,
85
+ applicationData,
86
+ bundleNftId,
87
+ referralId
88
+ );
89
+ }
90
+
91
+
92
+ function calculateNetPremium(
93
+ uint256 sumInsuredAmount,
94
+ RiskId riskId,
95
+ uint256 lifetime,
96
+ bytes memory applicationData
97
+ )
98
+ external
99
+ view
100
+ virtual override
101
+ returns (uint256 netPremiumAmount)
102
+ {
103
+ // default 10% of sum insured
104
+ return sumInsuredAmount / 10;
105
+ }
106
+
107
+ function _toRiskId(string memory riskName) internal pure returns (RiskId riskId) {
108
+ return RiskIdLib.toRiskId(riskName);
109
+ }
110
+
111
+ function _createRisk(
112
+ RiskId id,
113
+ bytes memory data
114
+ ) internal {
115
+ _productService.createRisk(
116
+ id,
117
+ data
118
+ );
119
+ }
120
+
121
+ function _setRiskInfo(
122
+ RiskId id,
123
+ IRisk.RiskInfo memory info
124
+ ) internal {
125
+ _productService.setRiskInfo(
126
+ id,
127
+ info
128
+ );
129
+ }
130
+
131
+ function _updateRiskState(
132
+ RiskId id,
133
+ StateId state
134
+ ) internal {
135
+ _productService.updateRiskState(
136
+ id,
137
+ state
138
+ );
139
+ }
140
+
141
+ function _getRiskInfo(RiskId id) internal view returns (IRisk.RiskInfo memory info) {
142
+ return _instance.getInstanceReader().getRiskInfo(id);
20
143
  }
21
144
 
22
145
  function _createApplication(
23
146
  address applicationOwner,
147
+ RiskId riskId,
24
148
  uint256 sumInsuredAmount,
25
- uint256 premiumAmount,
26
149
  uint256 lifetime,
27
- NftId bundleNftId
150
+ bytes memory applicationData,
151
+ NftId bundleNftId,
152
+ ReferralId referralId
28
153
  ) internal returns (NftId nftId) {
29
154
  nftId = _productService.createApplication(
30
155
  applicationOwner,
156
+ riskId,
31
157
  sumInsuredAmount,
32
- premiumAmount,
33
158
  lifetime,
34
- bundleNftId
159
+ applicationData,
160
+ bundleNftId,
161
+ referralId
35
162
  );
36
163
  }
37
164
 
38
- function _underwrite(NftId nftId) internal {
39
- _productService.underwrite(nftId);
165
+ function _underwrite(
166
+ NftId policyNftId,
167
+ bool requirePremiumPayment,
168
+ Timestamp activateAt
169
+ )
170
+ internal
171
+ {
172
+ _productService.underwrite(
173
+ policyNftId,
174
+ requirePremiumPayment,
175
+ activateAt);
176
+ }
177
+
178
+ function _collectPremium(
179
+ NftId policyNftId,
180
+ Timestamp activateAt
181
+ )
182
+ internal
183
+ {
184
+ _productService.collectPremium(
185
+ policyNftId,
186
+ activateAt);
187
+ }
188
+
189
+ function _activate(
190
+ NftId policyNftId,
191
+ Timestamp activateAt
192
+ )
193
+ internal
194
+ {
195
+ _productService.activate(
196
+ policyNftId,
197
+ activateAt);
40
198
  }
41
199
 
42
200
  function getPoolNftId() external view override returns (NftId poolNftId) {
43
- return _registry.getNftId(_pool);
201
+ return getRegistry().getNftId(address(_pool));
202
+ }
203
+
204
+ function getDistributionNftId() external view override returns (NftId distributionNftId) {
205
+ return getRegistry().getNftId(_distribution);
206
+ }
207
+
208
+ // from product component
209
+ function setFees(
210
+ Fee memory productFee,
211
+ Fee memory processingFee
212
+ )
213
+ external
214
+ onlyOwner
215
+ override
216
+ {
217
+ _productService.setFees(productFee, processingFee);
44
218
  }
45
219
 
46
- // from registerable
47
- function getType() public view override returns (uint256) {
48
- return _registry.PRODUCT();
220
+ function getSetupInfo() public view returns (ISetup.ProductSetupInfo memory setupInfo) {
221
+ if (getNftId().eq(zeroNftId())) {
222
+ return ISetup.ProductSetupInfo(
223
+ _token,
224
+ TokenHandler(address(0)),
225
+ _distributionNftId,
226
+ _poolNftId,
227
+ FeeLib.zeroFee(), //_instance.getDistributionFee(_distributionNftId)
228
+ _initialProductFee,
229
+ _initialProcessingFee,
230
+ FeeLib.zeroFee(), //_instance.getPoolFee(_poolNftId)
231
+ FeeLib.zeroFee(), //_instance.getStakingFee(_poolNftId)
232
+ FeeLib.zeroFee() //_instance.getPerformanceFee(_poolNftId)
233
+ );
234
+ }
235
+
236
+ InstanceReader reader = _instance.getInstanceReader();
237
+ return reader.getProductSetupInfo(getNftId());
49
238
  }
50
239
 
51
- // from registerable
52
- function getData() external view override returns (bytes memory data) {
53
- return bytes(abi.encode(getInstance().getNftId()));
240
+ // from IRegisterable
241
+
242
+ // TODO used only once, occupies space
243
+ function getInitialInfo()
244
+ public
245
+ view
246
+ override (IRegisterable, Registerable)
247
+ returns (IRegistry.ObjectInfo memory, bytes memory)
248
+ {
249
+ // from Registerable
250
+ (
251
+ IRegistry.ObjectInfo memory productInfo,
252
+ bytes memory data
253
+ ) = super.getInitialInfo();
254
+
255
+ // TODO read pool & distribution fees
256
+ // 1) from pool -> the only option -> pool must be registered first?
257
+ // 2) from instance -> all fees are set into instance at product registration which is ongoing here
258
+ // checks are done in registryProduct() where THIS function is called
259
+ //require(getRegistry().getObjectInfo(_poolNftId).objectType == POOL(), "POOL_NOT_REGISTERED");
260
+ //require(getRegistry().getObjectInfo(_distributionNftId).objectType == DISTRIBUTION(), "DISTRIBUTION_NOT_REGISTERED");
261
+
262
+ // from PoolComponent
263
+ (
264
+ IRegistry.ObjectInfo memory poolInfo,
265
+ bytes memory poolData
266
+ ) = _pool.getInitialInfo();
267
+
268
+ (
269
+ /*IPool.PoolInfo memory info*/,
270
+ /*address wallet*/,
271
+ /*IERC20Metadata token*/,
272
+ Fee memory initialPoolFee,
273
+ Fee memory initialStakingFee,
274
+ Fee memory initialPerformanceFee
275
+ ) = abi.decode(poolData, (ISetup.PoolSetupInfo, address, IERC20Metadata, Fee, Fee, Fee));
276
+
277
+ // TODO from DistributionComponent
278
+
279
+ return (
280
+ productInfo,
281
+ abi.encode(
282
+ ISetup.ProductSetupInfo(
283
+ _token,
284
+ TokenHandler(address(0)),
285
+ _distributionNftId,
286
+ _poolNftId,
287
+ FeeLib.zeroFee(), //_instance.getDistributionFee(_distributionNftId)
288
+ _initialProductFee,
289
+ _initialProcessingFee,
290
+ initialPoolFee,
291
+ initialStakingFee,
292
+ initialPerformanceFee
293
+ )
294
+ )
295
+ );
54
296
  }
55
297
  }
@@ -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
+
@@ -0,0 +1,27 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {ObjectType} from "../../types/ObjectType.sol";
5
+ import {StateId, toStateId, zeroStateId} from "../../types/StateId.sol";
6
+
7
+ contract LifeCycleModule {
8
+ mapping(ObjectType objectType => StateId initialState)
9
+ private _initialState;
10
+
11
+ mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
12
+ private _isValidTransition;
13
+
14
+ function getInitialState(
15
+ ObjectType objectType
16
+ ) external view returns (StateId) {
17
+ return _initialState[objectType];
18
+ }
19
+
20
+ function isValidTransition(
21
+ ObjectType objectType,
22
+ StateId fromId,
23
+ StateId toId
24
+ ) external view returns (bool) {
25
+ return _isValidTransition[objectType][fromId][toId];
26
+ }
27
+ }
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {StateId} from "../../types/StateId.sol";
5
+
6
+ interface ISMEE {
7
+ error ErrorInitialStateUndefined();
8
+ error ErrorStartStateUndefined();
9
+ error ErrorNextStateUndefined();
10
+ error ErrorStateChangeInvalid(StateId currentStateId, StateId newStateId);
11
+
12
+ event LogInitialStateSet(StateId initialStateId);
13
+ event LogStateChanged(StateId oldStateId, StateId newStateId);
14
+ }
15
+
16
+ interface ISM is ISMEE {
17
+ function changeToState(StateId newStateId) external;
18
+
19
+ function isValidTransition(
20
+ StateId currentStateId,
21
+ StateId newStateId
22
+ ) external view returns (bool isValid);
23
+
24
+ function getState() external view returns (StateId currentStateId);
25
+ }