@etherisc/gif-next 0.0.2-f9bc4c7-556 → 0.0.2-fbe22f0-239

Sign up to get free protection for your applications and to get access to all the features.
Files changed (419) hide show
  1. package/README.md +314 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +858 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1114 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/IComponent.sol/IComponent.json} +281 -226
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +695 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +601 -76
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +582 -61
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1099 -159
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +1030 -84
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  45. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  46. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  47. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  48. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  49. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1150 -1021
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +591 -0
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +2047 -1067
  54. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  55. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +984 -0
  56. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1386 -0
  58. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1164 -0
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +584 -0
  62. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  64. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +728 -0
  66. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +45 -127
  68. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +55 -245
  71. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
  73. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  74. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  75. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  76. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  77. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  78. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  79. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  80. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  81. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  83. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  84. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  85. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  86. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  87. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1091 -0
  89. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1292 -0
  91. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +560 -0
  93. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +897 -0
  95. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +548 -0
  97. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +625 -0
  99. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +785 -0
  101. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  102. package/artifacts/contracts/instance/{base/InstanceBase.sol/InstanceBase.json → service/IDistributionService.sol/IDistributionService.json} +205 -85
  103. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +771 -0
  105. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +203 -80
  107. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +209 -150
  109. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  110. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1352 -0
  111. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  112. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +616 -0
  113. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +546 -86
  115. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  116. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +548 -0
  117. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  118. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +521 -213
  119. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  120. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +548 -0
  121. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  122. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  123. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  124. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +466 -34
  125. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  126. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +986 -0
  127. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  128. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  129. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  130. package/artifacts/contracts/registry/Registry.sol/Registry.json +470 -103
  131. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  132. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  133. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  134. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1325 -0
  135. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  136. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +575 -0
  137. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  138. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  139. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  140. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +505 -0
  141. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  142. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  143. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  144. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  145. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  146. package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → shared/INftOwnable.sol/INftOwnable.json} +56 -79
  147. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  148. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  149. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  150. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +116 -36
  151. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  152. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → shared/IService.sol/IService.json} +174 -117
  153. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  154. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  155. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  156. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +277 -0
  157. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  158. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +172 -0
  159. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  160. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +473 -0
  161. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  162. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +293 -25
  163. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  164. package/artifacts/contracts/shared/Service.sol/Service.json +601 -0
  165. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  166. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  167. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  168. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  169. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  170. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  171. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  173. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  174. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +309 -26
  175. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  176. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  177. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  178. package/artifacts/contracts/test/TestService.sol/TestService.json +412 -58
  179. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  180. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  181. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  182. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  183. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  184. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  185. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  186. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  187. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  188. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  192. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  194. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  195. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  196. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  198. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  199. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  200. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  202. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  204. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  206. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  208. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  210. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  212. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  214. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  216. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  218. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  219. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  220. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  221. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  222. package/contracts/components/Component.sol +230 -0
  223. package/contracts/components/Distribution.sol +156 -0
  224. package/contracts/components/IComponent.sol +50 -0
  225. package/contracts/components/IDistributionComponent.sol +47 -0
  226. package/contracts/components/IPoolComponent.sol +65 -35
  227. package/contracts/components/IProductComponent.sol +29 -9
  228. package/contracts/components/Pool.sol +180 -100
  229. package/contracts/components/Product.sol +203 -42
  230. package/contracts/experiment/cloning/Cloner.sol +47 -0
  231. package/contracts/instance/BundleManager.sol +125 -0
  232. package/contracts/instance/Cloneable.sol +46 -0
  233. package/contracts/instance/IInstance.sol +65 -45
  234. package/contracts/instance/IInstanceService.sol +41 -0
  235. package/contracts/instance/Instance.sol +253 -53
  236. package/contracts/instance/InstanceAccessManager.sol +297 -0
  237. package/contracts/instance/InstanceReader.sol +293 -0
  238. package/contracts/instance/InstanceService.sol +434 -0
  239. package/contracts/instance/InstanceServiceManager.sol +54 -0
  240. package/contracts/instance/ObjectManager.sol +84 -0
  241. package/contracts/instance/base/ComponentService.sol +134 -0
  242. package/contracts/instance/base/IKeyValueStore.sol +13 -13
  243. package/contracts/instance/base/ILifecycle.sol +3 -3
  244. package/contracts/instance/base/KeyValueStore.sol +53 -37
  245. package/contracts/instance/base/Lifecycle.sol +16 -11
  246. package/contracts/instance/module/IAccess.sol +47 -0
  247. package/contracts/instance/module/IBundle.sol +20 -0
  248. package/contracts/instance/module/IDistribution.sol +39 -0
  249. package/contracts/instance/module/IPolicy.sol +45 -0
  250. package/contracts/instance/module/IRisk.sol +11 -0
  251. package/contracts/instance/module/ISetup.sol +47 -0
  252. package/contracts/instance/module/ITreasury.sol +23 -0
  253. package/contracts/instance/service/ApplicationService.sol +268 -0
  254. package/contracts/instance/service/BundleService.sol +298 -0
  255. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  256. package/contracts/instance/service/DistributionService.sol +105 -0
  257. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  258. package/contracts/instance/service/IApplicationService.sol +82 -0
  259. package/contracts/instance/service/IBundleService.sol +54 -0
  260. package/contracts/instance/service/IDistributionService.sol +12 -0
  261. package/contracts/instance/service/IPolicyService.sol +88 -0
  262. package/contracts/instance/service/IPoolService.sol +8 -18
  263. package/contracts/instance/service/IProductService.sol +21 -39
  264. package/contracts/instance/service/PolicyService.sol +524 -0
  265. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  266. package/contracts/instance/service/PoolService.sol +78 -92
  267. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  268. package/contracts/instance/service/ProductService.sol +168 -289
  269. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  270. package/contracts/registry/ChainNft.sol +79 -36
  271. package/contracts/registry/IRegistry.sol +66 -24
  272. package/contracts/registry/IRegistryService.sol +65 -0
  273. package/contracts/registry/ITransferInterceptor.sol +6 -0
  274. package/contracts/registry/Registry.sol +364 -283
  275. package/contracts/registry/RegistryAccessManager.sol +216 -0
  276. package/contracts/registry/RegistryService.sol +261 -0
  277. package/contracts/registry/RegistryServiceManager.sol +62 -0
  278. package/contracts/registry/ReleaseManager.sol +332 -0
  279. package/contracts/registry/TokenRegistry.sol +113 -0
  280. package/contracts/shared/ContractDeployerLib.sol +72 -0
  281. package/contracts/shared/ERC165.sol +13 -8
  282. package/contracts/shared/INftOwnable.sol +27 -0
  283. package/contracts/shared/IPolicyHolder.sol +26 -0
  284. package/contracts/shared/IRegisterable.sol +10 -19
  285. package/contracts/shared/IService.sol +16 -0
  286. package/contracts/shared/IVersionable.sol +55 -11
  287. package/contracts/shared/NftOwnable.sol +187 -0
  288. package/contracts/shared/PolicyHolder.sol +52 -0
  289. package/contracts/shared/ProxyManager.sol +95 -0
  290. package/contracts/shared/Registerable.sol +58 -63
  291. package/contracts/shared/Service.sol +60 -0
  292. package/contracts/shared/TokenHandler.sol +27 -0
  293. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  294. package/contracts/shared/Versionable.sol +113 -54
  295. package/contracts/test/TestFee.sol +2 -2
  296. package/contracts/test/TestRegisterable.sol +5 -6
  297. package/contracts/test/TestRoleId.sol +1 -1
  298. package/contracts/test/TestService.sol +7 -14
  299. package/contracts/types/DistributorType.sol +55 -0
  300. package/contracts/types/Fee.sol +10 -5
  301. package/contracts/types/Key32.sol +8 -3
  302. package/contracts/types/NftIdSet.sol +26 -24
  303. package/contracts/types/NumberId.sol +52 -0
  304. package/contracts/types/ObjectType.sol +55 -14
  305. package/contracts/types/Referral.sol +85 -0
  306. package/contracts/types/RiskId.sol +43 -0
  307. package/contracts/types/RoleId.sol +62 -10
  308. package/contracts/types/StateId.sol +5 -1
  309. package/contracts/types/Timestamp.sol +7 -3
  310. package/contracts/types/UFixed.sol +128 -12
  311. package/contracts/types/Version.sol +13 -1
  312. package/package.json +6 -5
  313. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  314. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -174
  315. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  316. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  317. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  318. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  319. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +0 -300
  320. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  321. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -63
  322. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  323. package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -300
  324. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  325. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  326. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  327. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +0 -300
  328. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  330. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  333. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -296
  335. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -296
  338. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  340. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  341. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  342. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  344. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  345. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  346. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  347. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  348. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  349. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  350. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  351. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  352. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  353. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  354. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  355. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  356. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  357. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  358. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  359. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  360. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  361. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  362. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  363. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  364. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  365. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  366. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  367. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  368. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  369. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  370. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  371. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  372. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  373. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  374. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -523
  375. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  376. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  377. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  378. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  379. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  380. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  381. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  382. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  383. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  384. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  385. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  386. package/contracts/components/BaseComponent.sol +0 -88
  387. package/contracts/components/IBaseComponent.sol +0 -19
  388. package/contracts/experiment/statemachine/README.md +0 -112
  389. package/contracts/instance/IInstanceLinked.sol +0 -8
  390. package/contracts/instance/base/ComponentServiceBase.sol +0 -42
  391. package/contracts/instance/base/IInstanceBase.sol +0 -14
  392. package/contracts/instance/base/IService.sol +0 -15
  393. package/contracts/instance/base/InstanceBase.sol +0 -80
  394. package/contracts/instance/base/ModuleBase.sol +0 -52
  395. package/contracts/instance/base/ServiceBase.sol +0 -37
  396. package/contracts/instance/module/access/Access.sol +0 -149
  397. package/contracts/instance/module/access/IAccess.sol +0 -53
  398. package/contracts/instance/module/bundle/BundleModule.sol +0 -136
  399. package/contracts/instance/module/bundle/IBundle.sol +0 -58
  400. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  401. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  402. package/contracts/instance/module/component/ComponentModule.sol +0 -95
  403. package/contracts/instance/module/component/IComponent.sol +0 -53
  404. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  405. package/contracts/instance/module/policy/PolicyModule.sol +0 -76
  406. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  407. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  408. package/contracts/instance/module/risk/IRisk.sol +0 -10
  409. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  410. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  411. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  412. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  413. package/contracts/instance/service/ComponentOwnerService.sol +0 -170
  414. package/contracts/instance/service/IComponentOwnerService.sol +0 -22
  415. package/contracts/registry/IChainNft.sol +0 -21
  416. package/contracts/registry/IRegistryLinked.sol +0 -8
  417. package/contracts/shared/IOwnable.sol +0 -6
  418. package/contracts/test/TestPool.sol +0 -22
  419. package/contracts/test/TestProduct.sol +0 -44
@@ -0,0 +1,50 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IRegisterable} from "../shared/IRegisterable.sol";
7
+ import {IInstance} from "../instance/IInstance.sol";
8
+ import {IInstanceService} from "../instance/IInstanceService.sol";
9
+ import {IProductService} from "../instance/service/IProductService.sol";
10
+ import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
11
+ import {NftId} from "../types/NftId.sol";
12
+
13
+ interface IComponent is
14
+ IRegisterable,
15
+ ITransferInterceptor
16
+ {
17
+
18
+ error ErrorComponentNotChainNft(address caller);
19
+ error ErrorComponentNotProductService(address caller);
20
+ error ErrorComponentNotInstance(NftId instanceNftId, address instance);
21
+ error ErrorComponentProductNftAlreadySet();
22
+ error ErrorComponentWalletAddressZero();
23
+ error ErrorComponentWalletAddressIsSameAsCurrent(address newWallet);
24
+ error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
25
+ error ErrorComponentUnauthorized(address caller, uint64 requiredRoleIdNum);
26
+
27
+ event LogComponentWalletAddressChanged(address newWallet);
28
+ event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
29
+
30
+ function getName() external view returns (string memory name);
31
+
32
+ // TODO remove and replace with accessmanaged target locking mechanism
33
+ function lock() external;
34
+ function unlock() external;
35
+
36
+ function getToken() external view returns (IERC20Metadata token);
37
+
38
+ function setWallet(address walletAddress) external;
39
+ function getWallet() external view returns (address walletAddress);
40
+
41
+ function isNftInterceptor() external view returns(bool isInterceptor);
42
+
43
+ function getInstance() external view returns (IInstance instance);
44
+
45
+ function setProductNftId(NftId productNftId) external;
46
+ function getProductNftId() external view returns (NftId productNftId);
47
+
48
+ function getInstanceService() external view returns (IInstanceService);
49
+ function getProductService() external view returns (IProductService);
50
+ }
@@ -0,0 +1,47 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Fee} from "../types/Fee.sol";
5
+ import {IComponent} from "./IComponent.sol";
6
+ import {ISetup} from "../instance/module/ISetup.sol";
7
+ import {ReferralId} from "../types/Referral.sol";
8
+ import {NftId} from "../types/NftId.sol";
9
+
10
+ interface IDistributionComponent is IComponent {
11
+
12
+ function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
13
+
14
+ function setFees(
15
+ Fee memory distributionFee
16
+ ) external;
17
+
18
+ function calculateFeeAmount(
19
+ ReferralId referralId,
20
+ uint256 netPremiumAmount
21
+ ) external view returns (uint256 feeAmount);
22
+
23
+ function calculateRenewalFeeAmount(
24
+ ReferralId referralId,
25
+ uint256 netPremiumAmount
26
+ ) external view returns (uint256 feeAmount);
27
+
28
+ /// @dev callback from product service when selling a policy for a specific referralId
29
+ /// the used referral id and the collected fee are provided as parameters
30
+ /// the component implementation can then process this information accordingly
31
+ function processSale(
32
+ ReferralId referralId,
33
+ uint256 feeAmount
34
+ ) external;
35
+
36
+ /// @dev callback from product service when a policy is renews for a specific referralId
37
+ function processRenewal(
38
+ ReferralId referralId,
39
+ uint256 feeAmount
40
+ ) external;
41
+
42
+ /// @dev returns true iff the referral id is valid
43
+ function referralIsValid(ReferralId referralId) external view returns (bool isValid);
44
+
45
+ /// @dev returns true iff the component needs to be called when selling/renewing policis
46
+ function isVerifying() external view returns (bool verifying);
47
+ }
@@ -1,41 +1,81 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../types/NftId.sol";
5
4
  import {Fee} from "../types/Fee.sol";
5
+ import {IComponent} from "./IComponent.sol";
6
+ import {ISetup} from "../instance/module/ISetup.sol";
7
+ import {NftId} from "../types/NftId.sol";
6
8
  import {UFixed} from "../types/UFixed.sol";
7
- import {IBaseComponent} from "./IBaseComponent.sol";
8
9
 
9
- interface IPoolComponent is IBaseComponent {
10
+ /// @dev pool components hold and manage the collateral to cover active policies
11
+ /// pools come in different flavors
12
+ interface IPoolComponent is IComponent {
10
13
 
11
14
  event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
12
15
 
13
- /**
14
- * @dev creates a new bundle for this pool.
15
- */
16
- function createBundle(
17
- uint256 initialAmount,
18
- uint256 lifetime,
19
- bytes memory filter
20
- ) external returns(NftId bundleNftId);
21
-
22
- /**
23
- * @dev this is a callback function that is called by the product service when underwriting a policy.
24
- * the pool has the option to check the details and object to underwriting by reverting.
25
- * the function is only called for "active" pools that ask to be involved/notified
26
- * by product related state changes.
27
- */
28
- function underwrite(
29
- NftId policyNftId,
16
+ error ErrorPoolNotPoolService(address service);
17
+
18
+ function getSetupInfo() external view returns (ISetup.PoolSetupInfo memory setupInfo);
19
+
20
+ function setFees(
21
+ Fee memory poolFee,
22
+ Fee memory stakingFee,
23
+ Fee memory performanceFee
24
+ ) external;
25
+
26
+ /// @dev sets an additional bundle fee, this fee is added on top of the poolFee and deducted from the premium amounts.
27
+ /// via these fees individual bundler owner may earn income per policy in the context of peer to peer pools
28
+ function setBundleFee(
29
+ NftId bundleNftId,
30
+ Fee memory fee
31
+ ) external;
32
+
33
+ /// @dev this is a callback function that is called by the product service when underwriting a policy.
34
+ /// the pool has the option to check the details and object to underwriting by reverting.
35
+ /// the function is only called for "active" pools that ask to be involved/notified
36
+ /// by product related state changes.
37
+ function verifyApplication(
38
+ NftId applicationNftId,
30
39
  bytes memory policyData,
31
40
  bytes memory bundleFilter,
32
41
  uint256 collateralizationAmount
33
42
  ) external;
34
43
 
35
- /**
36
- * @dev returns true iff the policy application data in policyData matches
37
- * with the bundle filter criteria encoded in bundleFilter.
38
- */
44
+ function lockBundle(NftId bundleNftId) external;
45
+
46
+ function unlockBundle(NftId bundleNftId) external;
47
+
48
+ /// @dev defines the multiplier to calculate the required collateral to cover a given sum insured amount
49
+ /// default implementation returns 100%
50
+ function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
51
+
52
+ /// @dev defines the amount of collateral held in the pool.
53
+ /// if the value is < 100% the pool is required to hold a policy that covers the locally missing collateral
54
+ /// default implementation returns 100%
55
+ function getRetentionLevel() external view returns (UFixed retentionLevel);
56
+
57
+ /// @dev declares if pool intercept transfers of bundle nft ids
58
+ /// - yes: pool may block transfer of bundle ownership or simply updates some bookkeeping related to bundle ownership. callback function is nftTransferFrom
59
+ /// - no: pool is not involved in transfer of bundle ownership
60
+ /// default implementation returns false (no)
61
+ function isInterceptingBundleTransfers() external view returns (bool);
62
+
63
+ /// @dev declares if pool relies on external management of collateral (yes/no):
64
+ /// - yes: underwriting of new policies does not require an actual token balance, instead it is assumed that the pool owner will manage funds externally and inject enough tokens to allow process confirmed payouts
65
+ /// - no: the pool smart contract ensures that the necessary capacity of the pool prior to underwriting.
66
+ /// default implementation returns false (no)
67
+ function isExternallyManaged() external view returns (bool);
68
+
69
+ /// @dev declares if pool component is actively involved in underwriting (yes/no):
70
+ /// - yes: verifying pools components actively confirm underwriting applications, ie the pool component logic explicitly needs to confirm the locking of collateral to cover the sum insured of the policy
71
+ /// - no: underwriting a policy does not require any interaction with the pool component if the covering bundle can provide the necessary captial
72
+ /// default implementation returnsfalse (no)
73
+ function isVerifyingApplications() external view returns (bool);
74
+
75
+ /// @dev returns true iff the policy application data in policyData matches
76
+ /// with the bundle filter criteria encoded in bundleFilter
77
+ /// this is a callback function that is only called if a pool declares itself as a verifying pool
78
+ /// default implementation returns true
39
79
  function policyMatchesBundle(
40
80
  bytes memory policyData,
41
81
  bytes memory bundleFilter
@@ -44,14 +84,4 @@ interface IPoolComponent is IBaseComponent {
44
84
  view
45
85
  returns (bool isMatching);
46
86
 
47
- function isVerifying() external view returns (bool verifying);
48
-
49
- function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
50
-
51
- function getStakingFee() external view returns (Fee memory stakingFee);
52
-
53
- function getPerformanceFee()
54
- external
55
- view
56
- returns (Fee memory performanceFee);
57
87
  }
@@ -1,19 +1,39 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../types/NftId.sol";
5
4
  import {Fee} from "../types/Fee.sol";
6
- import {IBaseComponent} from "./IBaseComponent.sol";
5
+ import {IComponent} from "./IComponent.sol";
6
+ import {ISetup} from "../instance/module/ISetup.sol";
7
+ import {NftId} from "../types/NftId.sol";
8
+ import {ReferralId} from "../types/Referral.sol";
9
+ import {RiskId} from "../types/RiskId.sol";
10
+
11
+ interface IProductComponent is IComponent {
12
+
13
+ function getSetupInfo() external view returns (ISetup.ProductSetupInfo memory setupInfo);
7
14
 
8
- interface IProductComponent is IBaseComponent {
9
15
  function setFees(
10
- Fee memory policyFee,
16
+ Fee memory productFee,
11
17
  Fee memory processingFee
12
18
  ) external;
13
19
 
14
- function getPoolNftId() external view returns (NftId poolNftId);
15
-
16
- function getPolicyFee() external view returns (Fee memory policyFee);
20
+ function calculatePremium(
21
+ uint256 sumInsuredAmount,
22
+ RiskId riskId,
23
+ uint256 lifetime,
24
+ bytes memory applicationData,
25
+ NftId bundleNftId,
26
+ ReferralId referralId
27
+ ) external view returns (uint256 premiumAmount);
28
+
29
+ function calculateNetPremium(
30
+ uint256 sumInsuredAmount,
31
+ RiskId riskId,
32
+ uint256 lifetime,
33
+ bytes memory applicationData
34
+ ) external view returns (uint256 netPremiumAmount);
17
35
 
18
- function getProcessingFee() external view returns (Fee memory processingFee);
36
+
37
+ function getPoolNftId() external view returns (NftId poolNftId);
38
+ function getDistributionNftId() external view returns (NftId distributionNftId);
19
39
  }
@@ -1,105 +1,147 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {ObjectType, POOL} from "../types/ObjectType.sol";
5
- import {IProductService} from "../instance/service/IProductService.sol";
4
+ import {POOL} from "../types/ObjectType.sol";
6
5
  import {IPoolService} from "../instance/service/IPoolService.sol";
7
- import {NftId} from "../types/NftId.sol";
8
- import {Fee} from "../types/Fee.sol";
6
+ import {IBundleService} from "../instance/service/IBundleService.sol";
7
+ import {NftId, NftIdLib} from "../types/NftId.sol";
8
+ import {Fee, FeeLib} from "../types/Fee.sol";
9
9
  import {UFixed} from "../types/UFixed.sol";
10
10
  import {IPoolComponent} from "./IPoolComponent.sol";
11
- import {BaseComponent} from "./BaseComponent.sol";
11
+ import {Component} from "./Component.sol";
12
+ import {TokenHandler} from "../shared/TokenHandler.sol";
13
+ import {ISetup} from "../instance/module/ISetup.sol";
12
14
 
13
- contract Pool is BaseComponent, IPoolComponent {
15
+ import {ISetup} from "../instance/module/ISetup.sol";
16
+ import {InstanceReader} from "../instance/InstanceReader.sol";
14
17
 
15
- bool internal _isVerifying;
16
- UFixed internal _collateralizationLevel;
17
18
 
18
- // may be used to interact with instance by derived contracts
19
- IPoolService internal _poolService;
19
+ abstract contract Pool is
20
+ Component,
21
+ IPoolComponent
22
+ {
23
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.Pool")) - 1)) & ~bytes32(uint256(0xff));
24
+ bytes32 public constant POOL_STORAGE_LOCATION_V1 = 0x25e3e51823fbfffb988e0a2744bb93722d9f3e906c07cc0a9e77884c46c58300;
20
25
 
21
- // only relevant to protect callback functions for "active" pools
22
- IProductService private _productService;
26
+ struct PoolStorage {
27
+ UFixed _collateralizationLevel;
28
+ UFixed _retentionLevel;
23
29
 
24
- modifier onlyPoolService() {
25
- require(
26
- msg.sender == address(_poolService),
27
- "ERROR:POL-001:NOT_POOL_SERVICE");
28
- _;
30
+ bool _isExternallyManaged;
31
+ bool _isInterceptingBundleTransfers;
32
+ bool _isVerifyingApplications;
33
+
34
+ Fee _initialPoolFee;
35
+ Fee _initialStakingFee;
36
+ Fee _initialPerformanceFee;
37
+
38
+ TokenHandler _tokenHandler;
39
+
40
+ // may be used to interact with instance by derived contracts
41
+ IPoolService _poolService;
42
+ IBundleService _bundleService;
29
43
  }
30
44
 
31
- modifier onlyProductService() {
32
- require(
33
- msg.sender == address(_productService),
34
- "ERROR:POL-002:NOT_PRODUCT_SERVICE");
45
+ modifier onlyPoolService() {
46
+ if(msg.sender != address(_getPoolStorage()._poolService)) {
47
+ revert ErrorPoolNotPoolService(msg.sender);
48
+ }
35
49
  _;
36
50
  }
37
51
 
38
- constructor(
52
+
53
+ function initializePool(
39
54
  address registry,
40
55
  NftId instanceNftId,
56
+ string memory name,
41
57
  // TODO refactor into tokenNftId
42
58
  address token,
43
- bool verifying,
44
- UFixed collateralizationLevel
45
- )
46
- BaseComponent(registry, instanceNftId, token)
47
- {
48
- _isVerifying = verifying;
49
- // TODO add validation
50
- _collateralizationLevel = collateralizationLevel;
51
-
52
- _poolService = _instance.getPoolService();
53
- _productService = _instance.getProductService();
54
- }
55
-
56
- function createBundle(
57
- uint256 initialAmount,
58
- uint256 lifetime,
59
- bytes memory filter
59
+ bool isInterceptingNftTransfers,
60
+ bool isExternallyManaging,
61
+ bool isVerifying,
62
+ UFixed collateralizationLevel,
63
+ UFixed retentionLevel,
64
+ address initialOwner,
65
+ bytes memory data
60
66
  )
61
- external
62
- virtual override
63
- returns(NftId bundleNftId)
67
+ public
68
+ virtual
69
+ onlyInitializing()
64
70
  {
65
- address owner = msg.sender;
66
- bundleNftId = _poolService.createBundle(
67
- owner,
68
- initialAmount,
69
- lifetime,
70
- filter
71
- );
71
+ initializeComponent(registry, instanceNftId, name, token, POOL(), isInterceptingNftTransfers, initialOwner, data);
72
72
 
73
- // TODO add logging
73
+ PoolStorage storage $ = _getPoolStorage();
74
+ // TODO add validation
75
+ $._tokenHandler = new TokenHandler(token);
76
+ $._isExternallyManaged = isExternallyManaging;
77
+ $._isVerifyingApplications = isVerifying;
78
+ $._collateralizationLevel = collateralizationLevel;
79
+ $._retentionLevel = retentionLevel;
80
+ $._initialPoolFee = FeeLib.zeroFee();
81
+ $._initialStakingFee = FeeLib.zeroFee();
82
+ $._initialPerformanceFee = FeeLib.zeroFee();
83
+ $._poolService = getInstance().getPoolService();
84
+ $._bundleService = getInstance().getBundleService();
85
+
86
+ registerInterface(type(IPoolComponent).interfaceId);
74
87
  }
75
88
 
76
89
  /**
77
- * @dev see {IPool.underwrite}.
90
+ * @dev see {IPool.verifyApplication}.
78
91
  * Default implementation that only writes a {LogUnderwrittenByPool} entry.
79
92
  */
80
- function underwrite(
81
- NftId policyNftId,
82
- bytes memory policyData,
93
+ function verifyApplication(
94
+ NftId applicationNftId,
95
+ bytes memory applicationData,
83
96
  bytes memory bundleFilter,
84
97
  uint256 collateralizationAmount
85
98
  )
86
99
  external
87
- onlyProductService
100
+ restricted()
88
101
  virtual override
89
102
  {
90
- _underwrite(policyNftId, policyData, bundleFilter, collateralizationAmount);
103
+ require(
104
+ policyMatchesBundle(applicationData, bundleFilter),
105
+ "ERROR:POL-020:POLICY_BUNDLE_MISMATCH"
106
+ );
107
+
108
+ emit LogUnderwrittenByPool(applicationNftId, collateralizationAmount, address(this));
91
109
  }
92
110
 
93
- /**
94
- * @dev see {IPoolComponent.policyMatchesBundle}.
95
- * Default implementation always returns true
96
- */
111
+
112
+ function isInterceptingBundleTransfers() external view override returns (bool) {
113
+ return isNftInterceptor();
114
+ }
115
+
116
+
117
+ function isExternallyManaged() external view override returns (bool) {
118
+ return _getPoolStorage()._isExternallyManaged;
119
+ }
120
+
121
+
122
+ function getRetentionLevel() external view override returns (UFixed retentionLevel) {
123
+ return _getPoolStorage()._retentionLevel;
124
+ }
125
+
126
+
127
+ function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
128
+ return _getPoolStorage()._collateralizationLevel;
129
+ }
130
+
131
+
132
+ function isVerifyingApplications() external view override returns (bool isConfirmingApplication) {
133
+ return _getPoolStorage()._isVerifyingApplications;
134
+ }
135
+
136
+
137
+ /// @dev see {IPoolComponent.policyMatchesBundle}.
138
+ /// Default implementation always returns true
97
139
  function policyMatchesBundle(
98
140
  bytes memory, // policyData
99
141
  bytes memory // bundleFilter
100
142
  )
101
143
  public
102
- view
144
+ pure
103
145
  virtual override
104
146
  returns (bool isMatching)
105
147
  {
@@ -107,68 +149,106 @@ contract Pool is BaseComponent, IPoolComponent {
107
149
  }
108
150
 
109
151
 
110
- function isVerifying() external view override returns (bool verifying) {
111
- return _isVerifying;
152
+ function setFees(
153
+ Fee memory poolFee,
154
+ Fee memory stakingFee,
155
+ Fee memory performanceFee
156
+ )
157
+ external
158
+ onlyOwner
159
+ restricted()
160
+ override
161
+ {
162
+ _getPoolStorage()._poolService.setFees(poolFee, stakingFee, performanceFee);
112
163
  }
113
164
 
114
- function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
115
- return _collateralizationLevel;
165
+ function setBundleFee(
166
+ NftId bundleNftId,
167
+ Fee memory fee
168
+ )
169
+ external
170
+ override
171
+ // TODO add onlyBundleOwner
172
+ {
173
+ _getPoolStorage()._bundleService.setBundleFee(bundleNftId, fee);
116
174
  }
117
175
 
118
- function _underwrite(
119
- NftId policyNftId,
120
- bytes memory policyData,
121
- bytes memory bundleFilter,
122
- uint256 collateralizationAmount
176
+ function lockBundle(
177
+ NftId bundleNftId
123
178
  )
124
- internal
179
+ external
180
+ override
181
+ // TODO add onlyBundleOwner
125
182
  {
126
- require(
127
- policyMatchesBundle(policyData, bundleFilter),
128
- "ERROR:POL-020:POLICY_BUNDLE_MISMATCH"
129
- );
183
+ _getPoolStorage()._bundleService.lockBundle(bundleNftId);
184
+ }
130
185
 
131
- emit LogUnderwrittenByPool(policyNftId, collateralizationAmount, address(this));
186
+ function unlockBundle(
187
+ NftId bundleNftId
188
+ )
189
+ external
190
+ override
191
+ // TODO add onlyBundleOwner
192
+ {
193
+ _getPoolStorage()._bundleService.unlockBundle(bundleNftId);
132
194
  }
133
195
 
196
+ function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
197
+ InstanceReader reader = getInstance().getInstanceReader();
198
+ setupInfo = reader.getPoolSetupInfo(getNftId());
199
+
200
+ // fallback to initial setup info (wallet is always != address(0))
201
+ if(setupInfo.wallet == address(0)) {
202
+ setupInfo = _getInitialSetupInfo();
203
+ }
204
+ }
205
+
206
+ function _getInitialSetupInfo() internal view returns (ISetup.PoolSetupInfo memory) {
207
+ PoolStorage storage $ = _getPoolStorage();
208
+ return ISetup.PoolSetupInfo(
209
+ getProductNftId(),
210
+ $._tokenHandler,
211
+ isNftInterceptor(),
212
+ $._isExternallyManaged,
213
+ $._isVerifyingApplications,
214
+ $._collateralizationLevel,
215
+ $._retentionLevel,
216
+ $._initialPoolFee,
217
+ $._initialStakingFee,
218
+ $._initialPerformanceFee,
219
+ getWallet()
220
+ );
221
+ }
222
+
223
+ // Internals
224
+
134
225
  function _createBundle(
135
226
  address bundleOwner,
227
+ Fee memory fee,
136
228
  uint256 amount,
137
229
  uint256 lifetime,
138
- bytes calldata filter
230
+ bytes memory filter
139
231
  )
140
232
  internal
141
233
  returns(NftId bundleNftId)
142
234
  {
143
- bundleNftId = _poolService.createBundle(
235
+ bundleNftId = _getPoolStorage()._bundleService.createBundle(
144
236
  bundleOwner,
237
+ fee,
145
238
  amount,
146
239
  lifetime,
147
- filter
148
- );
149
- }
240
+ filter);
150
241
 
151
- // from pool component
152
- function getStakingFee()
153
- external
154
- view
155
- override
156
- returns (Fee memory stakingFee)
157
- {
158
- return _instance.getPoolSetup(getNftId()).stakingFee;
242
+ // TODO add logging
159
243
  }
160
244
 
161
- function getPerformanceFee()
162
- external
163
- view
164
- override
165
- returns (Fee memory performanceFee)
166
- {
167
- return _instance.getPoolSetup(getNftId()).performanceFee;
245
+ function getContractLocation(bytes memory name) external pure returns (bytes32 hash) {
246
+ return keccak256(abi.encode(uint256(keccak256(name)) - 1)) & ~bytes32(uint256(0xff));
168
247
  }
169
248
 
170
- // from registerable
171
- function getType() public pure override returns (ObjectType) {
172
- return POOL();
249
+ function _getPoolStorage() private pure returns (PoolStorage storage $) {
250
+ assembly {
251
+ $.slot := POOL_STORAGE_LOCATION_V1
252
+ }
173
253
  }
174
254
  }