@etherisc/gif-next 0.0.2-bd7444a → 0.0.2-bdcb44f-543

Sign up to get free protection for your applications and to get access to all the features.
Files changed (426) hide show
  1. package/README.md +436 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +626 -31
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1279 -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} +234 -239
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +829 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +1029 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +672 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1319 -81
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +959 -91
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  21. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2038 -508
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +509 -0
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +2715 -456
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +984 -0
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1355 -0
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1046 -0
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +693 -0
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  39. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +552 -0
  40. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  42. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  52. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  56. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  57. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  58. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  59. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  60. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  61. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  62. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  64. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  66. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1096 -0
  68. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  70. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  72. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1553 -0
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +793 -0
  78. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +633 -0
  82. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +858 -0
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +519 -0
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +347 -0
  90. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +384 -0
  92. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1000 -0
  94. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  96. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
  98. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +649 -0
  100. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
  102. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  105. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  106. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  107. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +519 -61
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  109. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +890 -0
  110. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  111. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  112. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/Registry.sol/Registry.json +567 -75
  114. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  115. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  117. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1177 -0
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
  120. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  122. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  123. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  124. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  125. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  126. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  127. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  128. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  129. package/artifacts/contracts/{registry/Registry.sol/Registerable.json → shared/INftOwnable.sol/INftOwnable.json} +46 -74
  130. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  131. package/artifacts/contracts/{instance/product/IProductService.sol/IProductService.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +68 -53
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  133. package/artifacts/contracts/{instance/pool/PoolModule.sol/PoolModule.json → shared/IRegisterable.sol/IRegisterable.json} +106 -80
  134. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  135. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegistryLinked.sol}/IRegistryLinked.json +18 -19
  136. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  137. package/artifacts/contracts/shared/IService.sol/IService.json +269 -0
  138. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
  140. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +251 -0
  142. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  143. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  144. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  145. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +582 -0
  146. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  147. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +352 -0
  148. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  149. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  150. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  151. package/artifacts/contracts/shared/Service.sol/Service.json +425 -0
  152. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  153. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  154. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  155. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  156. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
  158. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  159. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  160. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  161. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +383 -0
  162. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  164. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestService.sol/TestService.json +521 -0
  166. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  168. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  170. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +104 -0
  172. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  173. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  174. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  175. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  176. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  178. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  180. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  182. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  184. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  196. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  204. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  206. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  208. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +97 -4
  210. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  212. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  214. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  218. package/contracts/components/Component.sol +198 -39
  219. package/contracts/components/Distribution.sol +293 -0
  220. package/contracts/components/IComponent.sol +68 -0
  221. package/contracts/components/IDistributionComponent.sol +79 -0
  222. package/contracts/components/IPoolComponent.sol +151 -0
  223. package/contracts/components/IProductComponent.sol +40 -0
  224. package/contracts/components/Pool.sol +366 -17
  225. package/contracts/components/Product.sol +256 -33
  226. package/contracts/instance/BundleManager.sol +125 -0
  227. package/contracts/instance/Cloneable.sol +46 -0
  228. package/contracts/instance/IInstance.sol +87 -15
  229. package/contracts/instance/IInstanceService.sol +59 -0
  230. package/contracts/instance/Instance.sol +270 -43
  231. package/contracts/instance/InstanceAccessManager.sol +297 -0
  232. package/contracts/instance/InstanceReader.sol +293 -0
  233. package/contracts/instance/InstanceService.sol +490 -0
  234. package/contracts/instance/InstanceServiceManager.sol +54 -0
  235. package/contracts/instance/ObjectManager.sol +84 -0
  236. package/contracts/instance/base/ComponentService.sol +134 -0
  237. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  238. package/contracts/instance/base/ILifecycle.sol +30 -0
  239. package/contracts/instance/base/KeyValueStore.sol +172 -0
  240. package/contracts/instance/base/Lifecycle.sol +100 -0
  241. package/contracts/instance/module/IAccess.sol +47 -0
  242. package/contracts/instance/module/IBundle.sol +21 -0
  243. package/contracts/instance/module/IDistribution.sol +41 -0
  244. package/contracts/instance/module/IPolicy.sol +72 -0
  245. package/contracts/instance/module/IRisk.sol +11 -0
  246. package/contracts/instance/module/ISetup.sol +46 -0
  247. package/contracts/instance/module/ITreasury.sol +23 -0
  248. package/contracts/instance/service/ApplicationService.sol +349 -0
  249. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  250. package/contracts/instance/service/BundleService.sol +299 -0
  251. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  252. package/contracts/instance/service/ClaimService.sol +151 -0
  253. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  254. package/contracts/instance/service/DistributionService.sol +394 -0
  255. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  256. package/contracts/instance/service/IApplicationService.sol +82 -0
  257. package/contracts/instance/service/IBundleService.sol +55 -0
  258. package/contracts/instance/service/IClaimService.sol +61 -0
  259. package/contracts/instance/service/IDistributionService.sol +86 -0
  260. package/contracts/instance/service/IPolicyService.sol +70 -0
  261. package/contracts/instance/service/IPoolService.sol +20 -0
  262. package/contracts/instance/service/IProductService.sol +40 -0
  263. package/contracts/instance/service/PolicyService.sol +402 -0
  264. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  265. package/contracts/instance/service/PoolService.sol +109 -0
  266. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  267. package/contracts/instance/service/ProductService.sol +233 -0
  268. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  269. package/contracts/registry/ChainNft.sol +138 -109
  270. package/contracts/registry/IRegistry.sol +78 -49
  271. package/contracts/registry/IRegistryService.sol +67 -0
  272. package/contracts/registry/ITransferInterceptor.sol +6 -0
  273. package/contracts/registry/Registry.sol +398 -116
  274. package/contracts/registry/RegistryAccessManager.sol +216 -0
  275. package/contracts/registry/RegistryService.sol +283 -0
  276. package/contracts/registry/RegistryServiceManager.sol +62 -0
  277. package/contracts/registry/ReleaseManager.sol +322 -0
  278. package/contracts/registry/TokenRegistry.sol +116 -0
  279. package/contracts/shared/ContractDeployerLib.sol +72 -0
  280. package/contracts/shared/ERC165.sol +27 -0
  281. package/contracts/shared/INftOwnable.sol +23 -0
  282. package/contracts/shared/IPolicyHolder.sol +26 -0
  283. package/contracts/shared/IRegisterable.sol +15 -0
  284. package/contracts/shared/IRegistryLinked.sol +12 -0
  285. package/contracts/shared/IService.sol +18 -0
  286. package/contracts/shared/IVersionable.sol +53 -0
  287. package/contracts/shared/NftOwnable.sol +120 -0
  288. package/contracts/shared/PolicyHolder.sol +81 -0
  289. package/contracts/shared/ProxyManager.sol +169 -0
  290. package/contracts/shared/Registerable.sol +74 -0
  291. package/contracts/shared/RegistryLinked.sol +48 -0
  292. package/contracts/shared/Service.sol +58 -0
  293. package/contracts/shared/TokenHandler.sol +27 -0
  294. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  295. package/contracts/shared/Versionable.sol +59 -0
  296. package/contracts/test/TestFee.sol +25 -0
  297. package/contracts/test/TestRegisterable.sol +18 -0
  298. package/contracts/test/TestRoleId.sol +14 -0
  299. package/contracts/test/TestService.sol +25 -0
  300. package/contracts/test/TestToken.sol +26 -0
  301. package/contracts/test/TestVersion.sol +44 -0
  302. package/contracts/test/TestVersionable.sol +17 -0
  303. package/contracts/test/Usdc.sol +26 -0
  304. package/contracts/types/AddressSet.sol +58 -0
  305. package/contracts/types/Blocknumber.sol +76 -18
  306. package/contracts/types/ChainId.sol +18 -10
  307. package/contracts/types/ClaimId.sol +52 -0
  308. package/contracts/types/DistributorType.sol +55 -0
  309. package/contracts/types/Fee.sol +56 -0
  310. package/contracts/types/Key32.sol +50 -0
  311. package/contracts/types/NftId.sol +48 -11
  312. package/contracts/types/NftIdSet.sol +62 -0
  313. package/contracts/types/NumberId.sol +52 -0
  314. package/contracts/types/ObjectType.sol +156 -0
  315. package/contracts/types/PayoutId.sol +54 -0
  316. package/contracts/types/Referral.sol +85 -0
  317. package/contracts/types/RiskId.sol +43 -0
  318. package/contracts/types/RoleId.sol +95 -0
  319. package/contracts/types/Seconds.sol +54 -0
  320. package/contracts/types/StateId.sol +105 -0
  321. package/contracts/types/Timestamp.sol +90 -19
  322. package/contracts/types/UFixed.sol +193 -75
  323. package/contracts/types/Version.sol +107 -0
  324. package/package.json +21 -6
  325. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  326. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  327. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  328. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  329. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  330. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  331. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  333. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  335. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  337. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  339. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  341. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  343. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  345. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  347. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  349. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  351. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  352. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  353. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  354. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  355. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  356. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  357. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  358. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  359. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  360. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  361. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  362. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  363. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  364. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  365. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  366. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  367. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  368. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  369. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  370. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  371. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  372. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  373. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  374. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  375. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  376. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  377. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  378. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  379. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  380. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  381. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  382. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  383. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  385. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  386. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  387. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  388. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  389. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  390. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  391. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  392. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  393. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  394. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  395. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  396. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  397. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  398. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  399. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  400. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  401. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  402. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  403. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -440
  404. package/contracts/components/IPool.sol +0 -9
  405. package/contracts/components/IProduct.sol +0 -12
  406. package/contracts/experiment/errors/Require.sol +0 -33
  407. package/contracts/experiment/errors/Revert.sol +0 -39
  408. package/contracts/experiment/inheritance/A.sol +0 -56
  409. package/contracts/experiment/inheritance/B.sol +0 -23
  410. package/contracts/experiment/inheritance/C.sol +0 -28
  411. package/contracts/experiment/inheritance/IA.sol +0 -18
  412. package/contracts/experiment/inheritance/IB.sol +0 -9
  413. package/contracts/experiment/inheritance/IC.sol +0 -11
  414. package/contracts/experiment/types/TypeA.sol +0 -42
  415. package/contracts/experiment/types/TypeB.sol +0 -24
  416. package/contracts/instance/access/Access.sol +0 -218
  417. package/contracts/instance/access/IAccess.sol +0 -83
  418. package/contracts/instance/component/ComponentModule.sol +0 -248
  419. package/contracts/instance/component/IComponent.sol +0 -95
  420. package/contracts/instance/policy/IPolicy.sol +0 -66
  421. package/contracts/instance/policy/PolicyModule.sol +0 -107
  422. package/contracts/instance/pool/IPoolModule.sol +0 -41
  423. package/contracts/instance/pool/PoolModule.sol +0 -86
  424. package/contracts/instance/product/IProductService.sol +0 -46
  425. package/contracts/instance/product/ProductService.sol +0 -108
  426. package/contracts/registry/IChainNft.sol +0 -18
@@ -0,0 +1,79 @@
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, ReferralStatus} from "../types/Referral.sol";
8
+ import {NftId} from "../types/NftId.sol";
9
+ import {DistributorType} from "../types/DistributorType.sol";
10
+ import {UFixed} from "../types/UFixed.sol";
11
+ import {Timestamp} from "../types/Timestamp.sol";
12
+
13
+ interface IDistributionComponent is IComponent {
14
+
15
+ event LogDistributorUpdated(address to, address caller);
16
+
17
+ function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
18
+
19
+ function setFees(
20
+ Fee memory minDistributionOwnerFee,
21
+ Fee memory distributionFee
22
+ ) external;
23
+
24
+ function createDistributorType(
25
+ string memory name,
26
+ UFixed minDiscountPercentage,
27
+ UFixed maxDiscountPercentage,
28
+ UFixed commissionPercentage,
29
+ uint32 maxReferralCount,
30
+ uint32 maxReferralLifetime,
31
+ bool allowSelfReferrals,
32
+ bool allowRenewals,
33
+ bytes memory data
34
+ ) external returns (DistributorType distributorType);
35
+
36
+ function createDistributor(
37
+ address distributor,
38
+ DistributorType distributorType,
39
+ bytes memory data
40
+ ) external returns(NftId distributorNftId);
41
+
42
+ function updateDistributorType(
43
+ NftId distributorNftId,
44
+ DistributorType distributorType,
45
+ bytes memory data
46
+ ) external;
47
+
48
+ function calculateRenewalFeeAmount(
49
+ ReferralId referralId,
50
+ uint256 netPremiumAmount
51
+ ) external view returns (uint256 feeAmount);
52
+
53
+ /// @dev callback from product service when selling a policy for a specific referralId
54
+ /// the used referral id and the collected fee are provided as parameters
55
+ /// the component implementation can then process this information accordingly
56
+ function processSale(
57
+ ReferralId referralId,
58
+ uint256 feeAmount
59
+ ) external;
60
+
61
+ /// @dev callback from product service when a policy is renews for a specific referralId
62
+ function processRenewal(
63
+ ReferralId referralId,
64
+ uint256 feeAmount
65
+ ) external;
66
+
67
+ function getDiscountPercentage(
68
+ string memory referralCode
69
+ ) external view returns (UFixed discountPercentage, ReferralStatus status);
70
+
71
+ function getDistributionFee() external view returns (Fee memory distibutionFee);
72
+
73
+ function getReferralId(
74
+ string memory referralCode
75
+ ) external returns (ReferralId referralId);
76
+
77
+ /// @dev returns true iff the component needs to be called when selling/renewing policis
78
+ function isVerifying() external view returns (bool verifying);
79
+ }
@@ -0,0 +1,151 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
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";
8
+ import {RoleId} from "../types/RoleId.sol";
9
+ import {Seconds} from "../types/Seconds.sol";
10
+ import {UFixed} from "../types/UFixed.sol";
11
+
12
+ /// @dev pool components hold and manage the collateral to cover active policies
13
+ /// pools come in different flavors
14
+ interface IPoolComponent is IComponent {
15
+
16
+ error ErrorPoolNotBundleOwner(NftId bundleNftId, address caller);
17
+ error ErrorPoolNotPoolService(address caller);
18
+
19
+ error ErrorPoolApplicationBundleMismatch(NftId applicationNftId);
20
+ error ErrorPoolBundleOwnerRoleAlreadySet();
21
+
22
+ event LogPoolVerifiedByPool(address pool, NftId applicationNftId, uint256 collateralizationAmount);
23
+ event LogPoolBundleMaxCapitalAmountUpdated(uint256 previousMaxCapitalAmount, uint256 currentMaxCapitalAmount);
24
+ event LogPoolBundleOwnerRoleSet(RoleId bundleOwnerRole);
25
+
26
+ /// @dev increases the staked tokens by the specified amount
27
+ /// only the bundle owner may stake tokens
28
+ /// bundle MUST be in active or locked state
29
+ function stake(NftId bundleNftId, uint256 amount) external;
30
+
31
+ /// @dev decreases the staked tokens by the specified amount
32
+ /// only the bundle owner may unstake tokens from the bundle
33
+ /// bundle MUST be in active, locked or closed state
34
+ function unstake(NftId bundleNftId, uint256 amount) external;
35
+
36
+ /// @dev extends the bundle lifetime of the bundle by the specified time
37
+ /// only the bundle owner may extend the bundle's lifetime
38
+ /// bundle MUST be in active or locked state
39
+ function extend(NftId bundleNftId, Seconds lifetimeExtension) external;
40
+
41
+ /// @dev locks the specified bundle
42
+ /// a bundle to be locked MUST be in active state
43
+ /// locked bundles may not be used to underwrite any new policy
44
+ function lockBundle(NftId bundleNftId) external;
45
+
46
+ /// @dev unlocks the specified bundle
47
+ /// a bundle to be unlocked MUST be in locked state
48
+ function unlockBundle(NftId bundleNftId) external;
49
+
50
+ /// @dev close the specified bundle
51
+ /// a bundle to be closed MUST be in active or locked state
52
+ /// to close a bundle all all linked policies MUST be in closed state as well
53
+ /// closing a bundle finalizes the bundle bookkeeping including overall profit calculation
54
+ /// once a bundle is closed this action cannot be reversed
55
+ function close(NftId bundleNftId) external;
56
+
57
+ /// @dev sets the fee for the specified bundle
58
+ /// the fee is added on top of the poolFee and deducted from the premium amounts
59
+ /// via these fees individual bundler owner may earn income per policy in the context of peer to peer pools
60
+ function setBundleFee(
61
+ NftId bundleNftId,
62
+ Fee memory fee
63
+ ) external;
64
+
65
+ /// @dev sets the maximum overall capital amound held by this pool
66
+ /// function may only be called by pool owner
67
+ function setMaxCapitalAmount(uint256 maxCapitalAmount) external;
68
+
69
+ /// @dev sets the required role to create/own bundles
70
+ /// may only be called once after setting up a pool
71
+ /// may only be called by pool owner
72
+ function setBundleOwnerRole(RoleId bundleOwnerRole) external;
73
+
74
+ /// @dev update pool fees to the specified values
75
+ /// pool fees: are deducted from the premium amount and goes to the pool owner
76
+ /// staking fees: are deducted from the staked tokens by a bundle owner and goes to the pool owner
77
+ /// performance fees: when a bundle is closed a bundle specific profit is calculated
78
+ /// the performance fee is deducted from this profit and goes to the pool owner
79
+ function setFees(
80
+ Fee memory poolFee,
81
+ Fee memory stakingFee,
82
+ Fee memory performanceFee
83
+ ) external;
84
+
85
+ /// @dev this is a callback function that is called by the product service when underwriting a policy.
86
+ /// the pool has the option to check the details and object to underwriting by reverting.
87
+ /// the function is only called for "active" pools that ask to be involved/notified
88
+ /// by product related state changes.
89
+ function verifyApplication(
90
+ NftId applicationNftId,
91
+ bytes memory applicationData,
92
+ NftId bundleNftId,
93
+ bytes memory bundleFilter,
94
+ uint256 collateralizationAmount
95
+ ) external;
96
+
97
+ /// @dev defines the multiplier to calculate the required collateral to cover a given sum insured amount
98
+ /// default implementation returns 100%
99
+ function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
100
+
101
+ /// @dev defines the amount of collateral held in the pool.
102
+ /// if the value is < 100% the pool is required to hold a policy that covers the locally missing collateral
103
+ /// default implementation returns 100%
104
+ function getRetentionLevel() external view returns (UFixed retentionLevel);
105
+
106
+ /// @dev declares if pool relies on external management of collateral (yes/no):
107
+ /// - 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
108
+ /// - no: the pool smart contract ensures that the necessary capacity of the pool prior to underwriting.
109
+ /// default implementation returns false (no)
110
+ function isExternallyManaged() external view returns (bool);
111
+
112
+ /// @dev declares if pool component is actively involved in underwriting (yes/no):
113
+ /// - 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
114
+ /// - no: underwriting a policy does not require any interaction with the pool component if the covering bundle can provide the necessary captial
115
+ /// default implementation returnsfalse (no)
116
+ function isVerifyingApplications() external view returns (bool);
117
+
118
+ /// @dev returns the maximum overall capital amound held by this pool
119
+ function getMaxCapitalAmount() external view returns (uint256 maxCapitalAmount);
120
+
121
+ /// @dev declares if pool intercept transfers of bundle nft ids
122
+ /// - yes: pool may block transfer of bundle ownership or simply updates some bookkeeping related to bundle ownership. callback function is nftTransferFrom
123
+ /// - no: pool is not involved in transfer of bundle ownership
124
+ /// default implementation returns false (no)
125
+ function isInterceptingBundleTransfers() external view returns (bool);
126
+
127
+ /// @dev returns the required role for bundle owners
128
+ /// default emplementation returns PUBLIC_ROLE
129
+ /// the PUBLIC_ROLE role implies that no specific roole is required for bundle owners
130
+ function getBundleOwnerRole() external view returns (RoleId bundleOwnerRole);
131
+
132
+ /// @dev returns true iff the application matches with the bundle
133
+ /// this is a callback function that is only called if a pool declares itself as a verifying pool
134
+ /// default implementation returns true
135
+ function applicationMatchesBundle(
136
+ NftId applicationNftId,
137
+ bytes memory applicationData,
138
+ NftId bundleNftId,
139
+ bytes memory bundleFilter,
140
+ uint256 collateralizationAmount
141
+ )
142
+ external
143
+ view
144
+ returns (bool isMatching);
145
+
146
+ /// @dev returns setup infos for this pool
147
+ /// when registered with an instance the setup info is obtained from the data stored in the instance
148
+ /// when not registered the function returns the initial setup info
149
+ function getSetupInfo() external view returns (ISetup.PoolSetupInfo memory setupInfo);
150
+
151
+ }
@@ -0,0 +1,40 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
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";
8
+ import {ReferralId} from "../types/Referral.sol";
9
+ import {RiskId} from "../types/RiskId.sol";
10
+ import {Seconds} from "../types/Seconds.sol";
11
+
12
+ interface IProductComponent is IComponent {
13
+
14
+ function getSetupInfo() external view returns (ISetup.ProductSetupInfo memory setupInfo);
15
+
16
+ function setFees(
17
+ Fee memory productFee,
18
+ Fee memory processingFee
19
+ ) external;
20
+
21
+ function calculatePremium(
22
+ uint256 sumInsuredAmount,
23
+ RiskId riskId,
24
+ Seconds lifetime,
25
+ bytes memory applicationData,
26
+ NftId bundleNftId,
27
+ ReferralId referralId
28
+ ) external view returns (uint256 premiumAmount);
29
+
30
+ function calculateNetPremium(
31
+ uint256 sumInsuredAmount,
32
+ RiskId riskId,
33
+ Seconds lifetime,
34
+ bytes memory applicationData
35
+ ) external view returns (uint256 netPremiumAmount);
36
+
37
+
38
+ function getPoolNftId() external view returns (NftId poolNftId);
39
+ function getDistributionNftId() external view returns (NftId distributionNftId);
40
+ }
@@ -1,29 +1,378 @@
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
4
  import {Component} from "./Component.sol";
5
+ import {Fee, FeeLib} from "../types/Fee.sol";
6
+ import {IBundleService} from "../instance/service/IBundleService.sol";
7
+ import {InstanceReader} from "../instance/InstanceReader.sol";
8
+ import {IPoolComponent} from "./IPoolComponent.sol";
9
+ import {IPoolService} from "../instance/service/IPoolService.sol";
10
+ import {ISetup} from "../instance/module/ISetup.sol";
11
+ import {NftId, NftIdLib} from "../types/NftId.sol";
12
+ import {POOL} from "../types/ObjectType.sol";
13
+ import {RoleId, PUBLIC_ROLE} from "../types/RoleId.sol";
14
+ import {Seconds} from "../types/Seconds.sol";
15
+ import {TokenHandler} from "../shared/TokenHandler.sol";
16
+ import {UFixed} from "../types/UFixed.sol";
6
17
 
7
18
 
8
- contract Pool is
9
- Component,
10
- IPoolComponent
19
+ abstract contract Pool is
20
+ Component,
21
+ IPoolComponent
11
22
  {
23
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.Pool")) - 1)) & ~bytes32(uint256(0xff));
24
+ bytes32 public constant POOL_STORAGE_LOCATION_V1 = 0x25e3e51823fbfffb988e0a2744bb93722d9f3e906c07cc0a9e77884c46c58300;
12
25
 
13
- constructor(
14
- address registry,
15
- address instance
26
+ struct PoolStorage {
27
+ UFixed _collateralizationLevel;
28
+ UFixed _retentionLevel;
29
+ uint256 _maxCapitalAmount;
30
+
31
+ bool _isExternallyManaged;
32
+ bool _isVerifyingApplications;
33
+
34
+ RoleId _bundleOwnerRole;
35
+ bool _isInterceptingBundleTransfers;
36
+
37
+ Fee _initialPoolFee;
38
+ Fee _initialStakingFee;
39
+ Fee _initialPerformanceFee;
40
+
41
+ TokenHandler _tokenHandler;
42
+
43
+ // may be used to interact with instance by derived contracts
44
+ IPoolService _poolService;
45
+ IBundleService _bundleService;
46
+ }
47
+
48
+
49
+ modifier onlyBundleOwner(NftId bundleNftId) {
50
+ if(msg.sender != getRegistry().ownerOf(bundleNftId)) {
51
+ revert ErrorPoolNotBundleOwner(bundleNftId, msg.sender);
52
+ }
53
+ _;
54
+ }
55
+
56
+
57
+ modifier onlyPoolService() {
58
+ if(msg.sender != address(_getPoolStorage()._poolService)) {
59
+ revert ErrorPoolNotPoolService(msg.sender);
60
+ }
61
+ _;
62
+ }
63
+
64
+
65
+ function initializePool(
66
+ address registry,
67
+ NftId instanceNftId,
68
+ string memory name,
69
+ address token,
70
+ bool isInterceptingNftTransfers,
71
+ bool isExternallyManaging,
72
+ bool isVerifying,
73
+ UFixed collateralizationLevel,
74
+ UFixed retentionLevel,
75
+ address initialOwner,
76
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
77
+ )
78
+ public
79
+ virtual
80
+ onlyInitializing()
81
+ {
82
+ initializeComponent(registry, instanceNftId, name, token, POOL(), isInterceptingNftTransfers, initialOwner, registryData);
83
+
84
+ PoolStorage storage $ = _getPoolStorage();
85
+ // TODO add validation
86
+ $._tokenHandler = new TokenHandler(token);
87
+ $._maxCapitalAmount = type(uint256).max;
88
+ $._isExternallyManaged = isExternallyManaging;
89
+ $._isVerifyingApplications = isVerifying;
90
+ $._bundleOwnerRole = PUBLIC_ROLE();
91
+ $._collateralizationLevel = collateralizationLevel;
92
+ $._retentionLevel = retentionLevel;
93
+ $._initialPoolFee = FeeLib.zeroFee();
94
+ $._initialStakingFee = FeeLib.zeroFee();
95
+ $._initialPerformanceFee = FeeLib.zeroFee();
96
+ $._poolService = getInstance().getPoolService();
97
+ $._bundleService = getInstance().getBundleService();
98
+
99
+ registerInterface(type(IPoolComponent).interfaceId);
100
+ }
101
+
102
+
103
+ function stake(
104
+ NftId bundleNftId,
105
+ uint256 amount
106
+ )
107
+ public
108
+ virtual
109
+ restricted()
110
+ onlyBundleOwner(bundleNftId)
111
+ {
112
+ // TODO add implementation
113
+ }
114
+
115
+
116
+ function unstake(
117
+ NftId bundleNftId,
118
+ uint256 amount
119
+ )
120
+ public
121
+ virtual
122
+ restricted()
123
+ onlyBundleOwner(bundleNftId)
124
+ {
125
+ // TODO add implementation
126
+ }
127
+
128
+
129
+ function extend(
130
+ NftId bundleNftId,
131
+ Seconds lifetimeExtension
16
132
  )
17
- Component(registry, instance)
18
- { }
133
+ public
134
+ virtual
135
+ restricted()
136
+ onlyBundleOwner(bundleNftId)
137
+ {
138
+ // TODO add implementation
139
+ }
140
+
141
+
142
+ function lockBundle(NftId bundleNftId)
143
+ public
144
+ virtual
145
+ restricted()
146
+ onlyBundleOwner(bundleNftId)
147
+ {
148
+ _getPoolStorage()._bundleService.lockBundle(bundleNftId);
149
+ }
150
+
151
+
152
+ function unlockBundle(NftId bundleNftId)
153
+ public
154
+ virtual
155
+ restricted()
156
+ onlyBundleOwner(bundleNftId)
157
+ {
158
+ _getPoolStorage()._bundleService.unlockBundle(bundleNftId);
159
+ }
160
+
161
+
162
+ function close(NftId bundleNftId)
163
+ public
164
+ virtual
165
+ restricted()
166
+ onlyBundleOwner(bundleNftId)
167
+ {
168
+ // TODO add implementation
169
+ }
170
+
171
+
172
+ function setBundleFee(
173
+ NftId bundleNftId,
174
+ Fee memory fee
175
+ )
176
+ public
177
+ virtual
178
+ restricted()
179
+ onlyBundleOwner(bundleNftId)
180
+ {
181
+ _getPoolStorage()._bundleService.setBundleFee(bundleNftId, fee);
182
+ }
183
+
184
+
185
+ function setMaxCapitalAmount(uint256 maxCapitalAmount)
186
+ public
187
+ virtual
188
+ restricted()
189
+ onlyOwner()
190
+ {
191
+ // TODO refactor to use pool service
192
+ // _getPoolStorage()._poolService.setMaxCapitalAmount(...);
193
+
194
+ uint256 previousMaxCapitalAmount = _getPoolStorage()._maxCapitalAmount;
195
+ _getPoolStorage()._maxCapitalAmount = maxCapitalAmount;
196
+
197
+ emit LogPoolBundleMaxCapitalAmountUpdated(previousMaxCapitalAmount, maxCapitalAmount);
198
+ }
199
+
200
+
201
+ function setBundleOwnerRole(RoleId bundleOwnerRole)
202
+ public
203
+ virtual
204
+ restricted()
205
+ onlyOwner()
206
+ {
207
+ // TODO refactor to use pool service
208
+ // _getPoolStorage()._poolService.setBundleOwnerRole(...);
209
+
210
+ if(_getPoolStorage()._bundleOwnerRole != PUBLIC_ROLE()) {
211
+ revert ErrorPoolBundleOwnerRoleAlreadySet();
212
+ }
213
+
214
+ _getPoolStorage()._bundleOwnerRole = bundleOwnerRole;
19
215
 
20
- // from registerable
21
- function getType() public view override returns(uint256) {
22
- return _registry.POOL();
216
+ emit LogPoolBundleOwnerRoleSet(bundleOwnerRole);
23
217
  }
24
218
 
25
- // from registerable
26
- function getData() external view override returns(bytes memory data) {
27
- return bytes(abi.encode(getInstance().getNftId()));
219
+
220
+ function setFees(
221
+ Fee memory poolFee,
222
+ Fee memory stakingFee,
223
+ Fee memory performanceFee
224
+ )
225
+ public
226
+ virtual
227
+ restricted()
228
+ onlyOwner()
229
+ {
230
+ _getPoolStorage()._poolService.setFees(poolFee, stakingFee, performanceFee);
231
+ }
232
+
233
+
234
+ /// @dev see {IPool.verifyApplication}
235
+ function verifyApplication(
236
+ NftId applicationNftId,
237
+ bytes memory applicationData,
238
+ NftId bundleNftId,
239
+ bytes memory bundleFilter,
240
+ uint256 collateralizationAmount
241
+ )
242
+ public
243
+ virtual
244
+ restricted()
245
+ {
246
+ // validate application data against bundle filter
247
+ if(!applicationMatchesBundle(
248
+ applicationNftId,
249
+ applicationData,
250
+ bundleNftId,
251
+ bundleFilter,
252
+ collateralizationAmount)
253
+ )
254
+ {
255
+ revert ErrorPoolApplicationBundleMismatch(applicationNftId);
256
+ }
257
+
258
+ emit LogPoolVerifiedByPool(address(this), applicationNftId, collateralizationAmount);
259
+ }
260
+
261
+
262
+ function getCollateralizationLevel() public view virtual returns (UFixed collateralizationLevel) {
263
+ return _getPoolStorage()._collateralizationLevel;
264
+ }
265
+
266
+
267
+ function getRetentionLevel() public view virtual returns (UFixed retentionLevel) {
268
+ return _getPoolStorage()._retentionLevel;
269
+ }
270
+
271
+
272
+ function isExternallyManaged() public view virtual returns (bool) {
273
+ return _getPoolStorage()._isExternallyManaged;
274
+ }
275
+
276
+
277
+ function isVerifyingApplications() public view virtual returns (bool isConfirmingApplication) {
278
+ return _getPoolStorage()._isVerifyingApplications;
279
+ }
280
+
281
+
282
+ function getMaxCapitalAmount() public view virtual returns (uint256 maxCapitalAmount) {
283
+ return _getPoolStorage()._maxCapitalAmount;
284
+ }
285
+
286
+
287
+ function isInterceptingBundleTransfers() public view virtual returns (bool) {
288
+ return isNftInterceptor();
289
+ }
290
+
291
+
292
+ function getBundleOwnerRole() public view returns (RoleId bundleOwnerRole) {
293
+ return _getPoolStorage()._bundleOwnerRole;
294
+ }
295
+
296
+
297
+ /// @dev see {IPoolComponent.applicationMatchesBundle}
298
+ /// Override this function to implement any custom application verification
299
+ /// Default implementation always returns true
300
+ function applicationMatchesBundle(
301
+ NftId applicationNftId,
302
+ bytes memory applicationData,
303
+ NftId bundleNftId,
304
+ bytes memory bundleFilter,
305
+ uint256 collateralizationAmount
306
+ )
307
+ public
308
+ view
309
+ virtual override
310
+ returns (bool isMatching)
311
+ {
312
+ return true;
313
+ }
314
+
315
+
316
+ function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
317
+ InstanceReader reader = getInstance().getInstanceReader();
318
+ setupInfo = reader.getPoolSetupInfo(getNftId());
319
+
320
+ // fallback to initial setup info (wallet is always != address(0))
321
+ if(setupInfo.wallet == address(0)) {
322
+ setupInfo = _getInitialSetupInfo();
323
+ }
324
+ }
325
+
326
+ // Internals
327
+
328
+ function _createBundle(
329
+ address bundleOwner,
330
+ Fee memory fee,
331
+ uint256 amount,
332
+ Seconds lifetime,
333
+ bytes memory filter
334
+ )
335
+ internal
336
+ returns(NftId bundleNftId)
337
+ {
338
+ bundleNftId = _getPoolStorage()._bundleService.createBundle(
339
+ bundleOwner,
340
+ fee,
341
+ amount,
342
+ lifetime,
343
+ filter);
344
+
345
+ // TODO add logging
346
+ }
347
+
348
+ // TODO remove function once this is no longer used to produce contract locations on the fly ...
349
+ function getContractLocation(bytes memory name) external pure returns (bytes32 hash) {
350
+ return keccak256(abi.encode(uint256(keccak256(name)) - 1)) & ~bytes32(uint256(0xff));
351
+ }
352
+
353
+
354
+ function _getInitialSetupInfo() internal view returns (ISetup.PoolSetupInfo memory) {
355
+ PoolStorage storage $ = _getPoolStorage();
356
+ return ISetup.PoolSetupInfo(
357
+ getProductNftId(),
358
+ $._tokenHandler,
359
+ $._maxCapitalAmount,
360
+ isNftInterceptor(),
361
+ $._isExternallyManaged,
362
+ $._isVerifyingApplications,
363
+ $._collateralizationLevel,
364
+ $._retentionLevel,
365
+ $._initialPoolFee,
366
+ $._initialStakingFee,
367
+ $._initialPerformanceFee,
368
+ getWallet()
369
+ );
370
+ }
371
+
372
+
373
+ function _getPoolStorage() private pure returns (PoolStorage storage $) {
374
+ assembly {
375
+ $.slot := POOL_STORAGE_LOCATION_V1
376
+ }
28
377
  }
29
- }
378
+ }