@etherisc/gif-next 0.0.2-743affe-003 → 0.0.2-770fd3b-604

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/README.md +243 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +897 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1140 -152
  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} +291 -228
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +616 -9
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +533 -113
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +485 -45
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1035 -271
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +919 -131
  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 +1389 -1174
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{base/ServiceBase.sol/ServiceBase.json → IInstanceService.sol/IInstanceService.json} +336 -42
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +2037 -1293
  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 +1260 -0
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +610 -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 +754 -0
  66. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  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 +37 -245
  71. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  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/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  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 +1117 -0
  89. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1318 -0
  91. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +586 -0
  93. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +694 -44
  95. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +602 -0
  97. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/{base/ComponentServiceBase.sol/ComponentServiceBase.json → service/IApplicationService.sol/IApplicationService.json} +293 -48
  99. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +798 -0
  101. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +309 -22
  103. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +784 -0
  105. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +114 -86
  107. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +108 -233
  109. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  110. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1378 -0
  111. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  112. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +642 -0
  113. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +414 -106
  115. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  116. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +574 -0
  117. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  118. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +398 -355
  119. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  120. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +574 -0
  121. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  122. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
  123. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  124. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +231 -65
  125. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  126. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +384 -53
  127. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  128. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  129. package/artifacts/contracts/registry/Registry.sol/Registry.json +210 -206
  130. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  131. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  132. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  133. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +615 -125
  134. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  135. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +601 -0
  136. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  137. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  138. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  139. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +531 -0
  140. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  141. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  142. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  143. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  144. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +164 -0
  146. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  147. package/artifacts/contracts/{instance/module/component/IComponent.sol/IComponentModule.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +69 -57
  148. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  149. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +98 -8
  150. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  151. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +69 -0
  152. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  153. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → shared/IService.sol/IService.json} +103 -58
  154. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  155. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -2
  156. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +303 -0
  158. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  159. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +269 -0
  160. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  161. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +245 -56
  162. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  163. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +266 -11
  164. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  165. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +105 -0
  166. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  167. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/Service.sol/Service.json} +249 -78
  168. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  169. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  170. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  171. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  172. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  173. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -2
  174. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  176. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  177. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +266 -11
  178. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  179. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  180. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  181. package/artifacts/contracts/test/TestService.sol/TestService.json +320 -33
  182. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  183. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  184. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  185. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  186. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  187. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +24 -8
  188. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  189. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  190. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  191. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  194. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  195. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  197. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  198. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  199. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  201. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  202. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  203. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  204. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  205. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  207. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  209. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  210. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  211. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  213. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  215. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  216. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  217. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  218. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  219. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  220. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  221. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  222. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  223. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  224. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  225. package/contracts/components/Component.sol +236 -0
  226. package/contracts/components/Distribution.sol +204 -61
  227. package/contracts/components/IComponent.sol +50 -0
  228. package/contracts/components/IDistributionComponent.sol +59 -6
  229. package/contracts/components/IPoolComponent.sol +54 -32
  230. package/contracts/components/IProductComponent.sol +8 -8
  231. package/contracts/components/Pool.sol +155 -147
  232. package/contracts/components/Product.sol +117 -138
  233. package/contracts/experiment/cloning/Cloner.sol +47 -0
  234. package/contracts/instance/BundleManager.sol +125 -0
  235. package/contracts/instance/Cloneable.sol +46 -0
  236. package/contracts/instance/IInstance.sol +78 -46
  237. package/contracts/instance/IInstanceService.sol +59 -0
  238. package/contracts/instance/Instance.sol +263 -67
  239. package/contracts/instance/InstanceAccessManager.sol +297 -0
  240. package/contracts/instance/InstanceReader.sol +293 -0
  241. package/contracts/instance/InstanceService.sol +433 -0
  242. package/contracts/instance/InstanceServiceManager.sol +54 -0
  243. package/contracts/instance/ObjectManager.sol +84 -0
  244. package/contracts/instance/base/ComponentService.sol +134 -0
  245. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  246. package/contracts/instance/base/ILifecycle.sol +3 -3
  247. package/contracts/instance/base/KeyValueStore.sol +49 -38
  248. package/contracts/instance/base/Lifecycle.sol +1 -1
  249. package/contracts/instance/module/IAccess.sol +47 -0
  250. package/contracts/instance/module/IBundle.sol +20 -0
  251. package/contracts/instance/module/IDistribution.sol +39 -0
  252. package/contracts/instance/module/IPolicy.sol +45 -0
  253. package/contracts/instance/module/IRisk.sol +11 -0
  254. package/contracts/instance/module/ISetup.sol +47 -0
  255. package/contracts/instance/module/ITreasury.sol +23 -0
  256. package/contracts/instance/service/ApplicationService.sol +268 -0
  257. package/contracts/instance/service/BundleService.sol +298 -0
  258. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  259. package/contracts/instance/service/DistributionService.sol +241 -21
  260. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  261. package/contracts/instance/service/IApplicationService.sol +82 -0
  262. package/contracts/instance/service/IBundleService.sol +54 -0
  263. package/contracts/instance/service/IDistributionService.sol +54 -1
  264. package/contracts/instance/service/IPolicyService.sol +88 -0
  265. package/contracts/instance/service/IPoolService.sol +7 -24
  266. package/contracts/instance/service/IProductService.sol +9 -76
  267. package/contracts/instance/service/PolicyService.sol +524 -0
  268. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  269. package/contracts/instance/service/PoolService.sol +77 -117
  270. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  271. package/contracts/instance/service/ProductService.sol +157 -433
  272. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  273. package/contracts/registry/ChainNft.sol +41 -26
  274. package/contracts/registry/IRegistry.sol +55 -31
  275. package/contracts/registry/IRegistryService.sol +52 -16
  276. package/contracts/registry/Registry.sol +274 -317
  277. package/contracts/registry/RegistryAccessManager.sol +216 -0
  278. package/contracts/registry/RegistryService.sol +138 -260
  279. package/contracts/registry/RegistryServiceManager.sol +62 -0
  280. package/contracts/registry/ReleaseManager.sol +332 -0
  281. package/contracts/registry/TokenRegistry.sol +113 -0
  282. package/contracts/shared/ContractDeployerLib.sol +72 -0
  283. package/contracts/shared/ERC165.sol +14 -9
  284. package/contracts/shared/INftOwnable.sol +28 -0
  285. package/contracts/shared/IPolicyHolder.sol +26 -0
  286. package/contracts/shared/IRegisterable.sol +5 -12
  287. package/contracts/shared/IRegistryLinked.sol +15 -0
  288. package/contracts/shared/IService.sol +16 -0
  289. package/contracts/shared/IVersionable.sol +2 -2
  290. package/contracts/shared/NftOwnable.sol +190 -0
  291. package/contracts/shared/PolicyHolder.sol +81 -0
  292. package/contracts/shared/ProxyManager.sol +21 -41
  293. package/contracts/shared/Registerable.sol +24 -60
  294. package/contracts/shared/RegistryLinked.sol +64 -0
  295. package/contracts/shared/Service.sol +60 -0
  296. package/contracts/shared/TokenHandler.sol +27 -0
  297. package/contracts/shared/UpgradableProxyWithAdmin.sol +2 -2
  298. package/contracts/shared/Versionable.sol +6 -5
  299. package/contracts/test/TestFee.sol +2 -2
  300. package/contracts/test/TestRegisterable.sol +1 -1
  301. package/contracts/test/TestRoleId.sol +1 -1
  302. package/contracts/test/TestService.sol +6 -7
  303. package/contracts/types/DistributorType.sol +55 -0
  304. package/contracts/types/Fee.sol +3 -3
  305. package/contracts/types/Key32.sol +8 -3
  306. package/contracts/types/NftIdSet.sol +26 -24
  307. package/contracts/types/NumberId.sol +52 -0
  308. package/contracts/types/ObjectType.sol +40 -15
  309. package/contracts/types/Referral.sol +85 -0
  310. package/contracts/types/RoleId.sol +61 -9
  311. package/contracts/types/StateId.sol +5 -1
  312. package/contracts/types/Timestamp.sol +7 -3
  313. package/contracts/types/UFixed.sol +128 -12
  314. package/contracts/types/Version.sol +4 -1
  315. package/package.json +6 -5
  316. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  317. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -213
  318. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  319. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -177
  320. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  321. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  322. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  323. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  324. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  325. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  326. package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -344
  327. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  328. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  329. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  330. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  332. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  334. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  336. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  338. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  339. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  341. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
  343. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  344. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  345. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  347. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  348. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  349. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  350. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  351. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  352. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  353. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  354. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  355. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  356. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  357. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  358. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  359. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  360. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  361. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  362. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  363. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  364. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  365. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  366. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  367. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  368. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  369. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  370. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  371. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  372. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  373. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  374. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  375. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -690
  376. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  377. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  378. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  379. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  380. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.dbg.json +0 -4
  381. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.json +0 -344
  382. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  383. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  384. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  385. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -445
  386. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  387. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -602
  388. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  389. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -632
  390. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  391. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  392. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  393. package/contracts/components/BaseComponent.sol +0 -79
  394. package/contracts/components/IBaseComponent.sol +0 -19
  395. package/contracts/instance/IInstanceLinked.sol +0 -8
  396. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  397. package/contracts/instance/base/IInstanceBase.sol +0 -23
  398. package/contracts/instance/base/IService.sol +0 -15
  399. package/contracts/instance/base/InstanceBase.sol +0 -89
  400. package/contracts/instance/base/ModuleBase.sol +0 -57
  401. package/contracts/instance/base/ServiceBase.sol +0 -43
  402. package/contracts/instance/module/access/Access.sol +0 -149
  403. package/contracts/instance/module/access/IAccess.sol +0 -53
  404. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  405. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  406. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  407. package/contracts/instance/module/component/IComponent.sol +0 -28
  408. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  409. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  410. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  411. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  412. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  413. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  414. package/contracts/instance/module/risk/IRisk.sol +0 -26
  415. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  416. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  417. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  418. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  419. package/contracts/instance/service/ComponentOwnerService.sol +0 -272
  420. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  421. package/contracts/registry/IChainNft.sol +0 -22
  422. package/contracts/registry/IRegistryLinked.sol +0 -8
  423. package/contracts/registry/RegistryInstaller.sol +0 -100
  424. package/contracts/shared/IOwnable.sol +0 -6
  425. package/contracts/test/TestDistribution.sol +0 -22
  426. package/contracts/test/TestPool.sol +0 -27
  427. package/contracts/test/TestProduct.sol +0 -74
  428. package/contracts/types/ReferralId.sol +0 -48
@@ -2,16 +2,62 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {Fee} from "../types/Fee.sol";
5
- import {ReferralId} from "../types/ReferralId.sol";
5
+ import {IComponent} from "./IComponent.sol";
6
+ import {ISetup} from "../instance/module/ISetup.sol";
7
+ import {ReferralId, ReferralStatus} from "../types/Referral.sol";
6
8
  import {NftId} from "../types/NftId.sol";
7
- import {IBaseComponent} from "./IBaseComponent.sol";
9
+ import {DistributorType} from "../types/DistributorType.sol";
10
+ import {UFixed} from "../types/UFixed.sol";
11
+ import {Timestamp} from "../types/Timestamp.sol";
8
12
 
9
- interface IDistributionComponent is IBaseComponent {
13
+ interface IDistributionComponent is IComponent {
14
+
15
+ event LogDistributorUpdated(address to, address caller);
16
+
17
+ function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
10
18
 
11
19
  function setFees(
12
20
  Fee memory distributionFee
13
21
  ) external;
14
22
 
23
+ function createDistributorType(
24
+ string memory name,
25
+ UFixed minDiscountPercentage,
26
+ UFixed maxDiscountPercentage,
27
+ UFixed commissionPercentage,
28
+ uint32 maxReferralCount,
29
+ uint32 maxReferralLifetime,
30
+ bool allowSelfReferrals,
31
+ bool allowRenewals,
32
+ bytes memory data
33
+ ) external returns (DistributorType distributorType);
34
+
35
+ function createDistributor(
36
+ address distributor,
37
+ DistributorType distributorType,
38
+ bytes memory data
39
+ ) external returns(NftId distributorNftId);
40
+
41
+ function updateDistributorType(
42
+ NftId distributorNftId,
43
+ DistributorType distributorType,
44
+ bytes memory data
45
+ ) external;
46
+
47
+ /**
48
+ * @dev lets distributors create referral codes.
49
+ * referral codes need to be unique
50
+ * distributor is identified via msg.sender.
51
+ */
52
+ function createReferral(
53
+ NftId distributorNftId,
54
+ string memory code,
55
+ UFixed discountPercentage,
56
+ uint32 maxReferrals,
57
+ Timestamp expiryAt,
58
+ bytes memory data
59
+ ) external returns (ReferralId referralId);
60
+
15
61
  function calculateFeeAmount(
16
62
  ReferralId referralId,
17
63
  uint256 netPremiumAmount
@@ -36,12 +82,19 @@ interface IDistributionComponent is IBaseComponent {
36
82
  uint256 feeAmount
37
83
  ) external;
38
84
 
85
+ function getDiscountPercentage(
86
+ string memory referralCode
87
+ ) external view returns (UFixed discountPercentage, ReferralStatus status);
88
+
89
+ function getDistributionFee() external view returns (Fee memory distibutionFee);
90
+
91
+ function getReferralId(
92
+ string memory referralCode
93
+ ) external returns (ReferralId referralId);
94
+
39
95
  /// @dev returns true iff the referral id is valid
40
96
  function referralIsValid(ReferralId referralId) external view returns (bool isValid);
41
97
 
42
- /// @dev default distribution fee, ie when not using any valid referralId
43
- function getDistributionFee() external view returns (Fee memory distributionFee);
44
-
45
98
  /// @dev returns true iff the component needs to be called when selling/renewing policis
46
99
  function isVerifying() external view returns (bool verifying);
47
100
  }
@@ -1,53 +1,81 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
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
 
16
+ error ErrorPoolNotPoolService(address service);
17
+
18
+ function getSetupInfo() external view returns (ISetup.PoolSetupInfo memory setupInfo);
19
+
13
20
  function setFees(
14
21
  Fee memory poolFee,
15
22
  Fee memory stakingFee,
16
23
  Fee memory performanceFee
17
24
  ) external;
18
25
 
19
- /**
20
- * @dev creates a new bundle for this pool.
21
- */
22
- function createBundle(
23
- Fee memory fee,
24
- uint256 initialAmount,
25
- uint256 lifetime,
26
- bytes memory filter
27
- ) external returns(NftId bundleNftId);
28
-
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
29
28
  function setBundleFee(
30
- NftId policyNftId,
29
+ NftId bundleNftId,
31
30
  Fee memory fee
32
31
  ) external;
33
32
 
34
- /**
35
- * @dev this is a callback function that is called by the product service when underwriting a policy.
36
- * the pool has the option to check the details and object to underwriting by reverting.
37
- * the function is only called for "active" pools that ask to be involved/notified
38
- * by product related state changes.
39
- */
40
- function underwrite(
41
- NftId policyNftId,
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,
42
39
  bytes memory policyData,
43
40
  bytes memory bundleFilter,
44
41
  uint256 collateralizationAmount
45
42
  ) external;
46
43
 
47
- /**
48
- * @dev returns true iff the policy application data in policyData matches
49
- * with the bundle filter criteria encoded in bundleFilter.
50
- */
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
51
79
  function policyMatchesBundle(
52
80
  bytes memory policyData,
53
81
  bytes memory bundleFilter
@@ -56,10 +84,4 @@ interface IPoolComponent is IBaseComponent {
56
84
  view
57
85
  returns (bool isMatching);
58
86
 
59
- function isVerifying() external view returns (bool verifying);
60
-
61
- function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
62
-
63
- function getFees() external view returns (Fee memory poolFee, Fee memory stakingFee, Fee memory performanceFee);
64
-
65
87
  }
@@ -2,13 +2,15 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Fee} from "../types/Fee.sol";
5
+ import {IComponent} from "./IComponent.sol";
6
+ import {ISetup} from "../instance/module/ISetup.sol";
5
7
  import {NftId} from "../types/NftId.sol";
6
- import {ReferralId} from "../types/ReferralId.sol";
8
+ import {ReferralId} from "../types/Referral.sol";
7
9
  import {RiskId} from "../types/RiskId.sol";
8
10
 
9
- import {IBaseComponent} from "./IBaseComponent.sol";
11
+ interface IProductComponent is IComponent {
10
12
 
11
- interface IProductComponent is IBaseComponent {
13
+ function getSetupInfo() external view returns (ISetup.ProductSetupInfo memory setupInfo);
12
14
 
13
15
  function setFees(
14
16
  Fee memory productFee,
@@ -20,8 +22,8 @@ interface IProductComponent is IBaseComponent {
20
22
  RiskId riskId,
21
23
  uint256 lifetime,
22
24
  bytes memory applicationData,
23
- ReferralId referralId,
24
- NftId bundleNftId
25
+ NftId bundleNftId,
26
+ ReferralId referralId
25
27
  ) external view returns (uint256 premiumAmount);
26
28
 
27
29
  function calculateNetPremium(
@@ -31,9 +33,7 @@ interface IProductComponent is IBaseComponent {
31
33
  bytes memory applicationData
32
34
  ) external view returns (uint256 netPremiumAmount);
33
35
 
34
- function getProductFee() external view returns (Fee memory productFee);
35
- function getProcessingFee() external view returns (Fee memory processingFee);
36
-
36
+
37
37
  function getPoolNftId() external view returns (NftId poolNftId);
38
38
  function getDistributionNftId() external view returns (NftId distributionNftId);
39
39
  }
@@ -1,128 +1,147 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
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
- import {IRegistry} from "../registry/IRegistry.sol";
14
- import {IPool} from "../instance/module/pool/IPoolModule.sol";
15
- import {ITreasury} from "../instance/module/treasury/ITreasury.sol";
15
+ import {ISetup} from "../instance/module/ISetup.sol";
16
+ import {InstanceReader} from "../instance/InstanceReader.sol";
16
17
 
17
- import {IRegisterable} from "../shared/IRegisterable.sol";
18
- import {Registerable} from "../shared/Registerable.sol";
19
18
 
20
- contract Pool is BaseComponent, IPoolComponent {
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;
21
25
 
22
- bool internal _isVerifying;
23
- UFixed internal _collateralizationLevel;
26
+ struct PoolStorage {
27
+ UFixed _collateralizationLevel;
28
+ UFixed _retentionLevel;
24
29
 
25
- Fee internal _initialPoolFee;
26
- Fee internal _initialStakingFee;
27
- Fee internal _initialPerformanceFee;
30
+ bool _isExternallyManaged;
31
+ bool _isInterceptingBundleTransfers;
32
+ bool _isVerifyingApplications;
28
33
 
29
- // may be used to interact with instance by derived contracts
30
- IPoolService internal _poolService;
34
+ Fee _initialPoolFee;
35
+ Fee _initialStakingFee;
36
+ Fee _initialPerformanceFee;
31
37
 
32
- // only relevant to protect callback functions for "active" pools
33
- IProductService private _productService;
38
+ TokenHandler _tokenHandler;
34
39
 
35
- modifier onlyPoolService() {
36
- require(
37
- msg.sender == address(_poolService),
38
- "ERROR:POL-001:NOT_POOL_SERVICE");
39
- _;
40
+ // may be used to interact with instance by derived contracts
41
+ IPoolService _poolService;
42
+ IBundleService _bundleService;
40
43
  }
41
44
 
42
- modifier onlyProductService() {
43
- require(
44
- msg.sender == address(_productService),
45
- "ERROR:POL-002:NOT_PRODUCT_SERVICE");
45
+ modifier onlyPoolService() {
46
+ if(msg.sender != address(_getPoolStorage()._poolService)) {
47
+ revert ErrorPoolNotPoolService(msg.sender);
48
+ }
46
49
  _;
47
50
  }
48
51
 
49
- constructor(
52
+
53
+ function initializePool(
50
54
  address registry,
51
55
  NftId instanceNftId,
56
+ string memory name,
52
57
  // TODO refactor into tokenNftId
53
58
  address token,
54
- bool isInterceptor,
55
- bool verifying,
59
+ bool isInterceptingNftTransfers,
60
+ bool isExternallyManaging,
61
+ bool isVerifying,
56
62
  UFixed collateralizationLevel,
57
- Fee memory poolFee,
58
- Fee memory stakingFee,
59
- Fee memory performanceFee,
60
- address initialOwner
63
+ UFixed retentionLevel,
64
+ address initialOwner,
65
+ bytes memory data
61
66
  )
62
- BaseComponent(registry, instanceNftId, token, POOL(), isInterceptor, initialOwner)
63
- {
64
- _isVerifying = verifying;
65
- // TODO add validation
66
- _collateralizationLevel = collateralizationLevel;
67
- _initialPoolFee = poolFee;
68
- _initialStakingFee = stakingFee;
69
- _initialPerformanceFee = performanceFee;
70
-
71
- _poolService = _instance.getPoolService();
72
- _productService = _instance.getProductService();
73
-
74
- _registerInterface(type(IPoolComponent).interfaceId);
75
- }
76
-
77
- function createBundle(
78
- Fee memory fee,
79
- uint256 initialAmount,
80
- uint256 lifetime,
81
- bytes memory filter
82
- )
83
- external
84
- virtual override
85
- returns(NftId bundleNftId)
67
+ public
68
+ virtual
69
+ onlyInitializing()
86
70
  {
87
- address owner = msg.sender;
88
- bundleNftId = _poolService.createBundle(
89
- owner,
90
- fee,
91
- initialAmount,
92
- lifetime,
93
- filter
94
- );
71
+ initializeComponent(registry, instanceNftId, name, token, POOL(), isInterceptingNftTransfers, initialOwner, data);
95
72
 
96
- // 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);
97
87
  }
98
88
 
99
89
  /**
100
- * @dev see {IPool.underwrite}.
90
+ * @dev see {IPool.verifyApplication}.
101
91
  * Default implementation that only writes a {LogUnderwrittenByPool} entry.
102
92
  */
103
- function underwrite(
104
- NftId policyNftId,
105
- bytes memory policyData,
93
+ function verifyApplication(
94
+ NftId applicationNftId,
95
+ bytes memory applicationData,
106
96
  bytes memory bundleFilter,
107
97
  uint256 collateralizationAmount
108
98
  )
109
99
  external
110
- onlyProductService
100
+ restricted()
111
101
  virtual override
112
102
  {
113
- _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));
114
109
  }
115
110
 
116
- /**
117
- * @dev see {IPoolComponent.policyMatchesBundle}.
118
- * Default implementation always returns true
119
- */
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
120
139
  function policyMatchesBundle(
121
140
  bytes memory, // policyData
122
141
  bytes memory // bundleFilter
123
142
  )
124
143
  public
125
- view
144
+ pure
126
145
  virtual override
127
146
  returns (bool isMatching)
128
147
  {
@@ -130,14 +149,6 @@ contract Pool is BaseComponent, IPoolComponent {
130
149
  }
131
150
 
132
151
 
133
- function isVerifying() external view override returns (bool verifying) {
134
- return _isVerifying;
135
- }
136
-
137
- function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
138
- return _collateralizationLevel;
139
- }
140
-
141
152
  function setFees(
142
153
  Fee memory poolFee,
143
154
  Fee memory stakingFee,
@@ -145,9 +156,10 @@ contract Pool is BaseComponent, IPoolComponent {
145
156
  )
146
157
  external
147
158
  onlyOwner
159
+ restricted()
148
160
  override
149
161
  {
150
- _poolService.setFees(poolFee, stakingFee, performanceFee);
162
+ _getPoolStorage()._poolService.setFees(poolFee, stakingFee, performanceFee);
151
163
  }
152
164
 
153
165
  function setBundleFee(
@@ -158,89 +170,85 @@ contract Pool is BaseComponent, IPoolComponent {
158
170
  override
159
171
  // TODO add onlyBundleOwner
160
172
  {
161
- _poolService.setBundleFee(bundleNftId, fee);
173
+ _getPoolStorage()._bundleService.setBundleFee(bundleNftId, fee);
162
174
  }
163
- // TODO delete, call instance instead
164
- function getFees()
175
+
176
+ function lockBundle(
177
+ NftId bundleNftId
178
+ )
165
179
  external
166
- view
167
180
  override
168
- returns (Fee memory, Fee memory, Fee memory)
181
+ // TODO add onlyBundleOwner
169
182
  {
170
- NftId productNftId = _instance.getProductNftId(getNftId());
171
- //if (_instance.hasTreasuryInfo(productNftId)) {
172
- ITreasury.TreasuryInfo memory info = _instance.getTreasuryInfo(productNftId);
173
- return (info.poolFee, info.stakingFee, info.performanceFee);
174
- //} else {
175
- // return (_initialPoolFee, _initialStakingFee, _initialPerformanceFee);
176
- //}
183
+ _getPoolStorage()._bundleService.lockBundle(bundleNftId);
177
184
  }
178
185
 
179
- // from IRegisterable
180
-
181
- // TODO used only once, occupies space
182
- // TODO do not use super
183
- function getInitialInfo()
184
- public
185
- view
186
- override (IRegisterable, Registerable)
187
- returns (IRegistry.ObjectInfo memory, bytes memory)
186
+ function unlockBundle(
187
+ NftId bundleNftId
188
+ )
189
+ external
190
+ override
191
+ // TODO add onlyBundleOwner
188
192
  {
189
- (
190
- IRegistry.ObjectInfo memory info,
191
- bytes memory data
192
- ) = super.getInitialInfo();
193
-
194
- return (
195
- info,
196
- abi.encode(
197
- IPool.PoolInfo(
198
- _isVerifying,
199
- _collateralizationLevel
200
- ),
201
- _wallet,
202
- _token,
203
- _initialPoolFee,
204
- _initialStakingFee,
205
- _initialPerformanceFee
206
- )
207
- );
193
+ _getPoolStorage()._bundleService.unlockBundle(bundleNftId);
208
194
  }
209
195
 
210
- // Internals
196
+ function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
197
+ InstanceReader reader = getInstance().getInstanceReader();
198
+ setupInfo = reader.getPoolSetupInfo(getNftId());
211
199
 
212
- function _underwrite(
213
- NftId policyNftId,
214
- bytes memory policyData,
215
- bytes memory bundleFilter,
216
- uint256 collateralizationAmount
217
- )
218
- internal
219
- {
220
- require(
221
- policyMatchesBundle(policyData, bundleFilter),
222
- "ERROR:POL-020:POLICY_BUNDLE_MISMATCH"
223
- );
200
+ // fallback to initial setup info (wallet is always != address(0))
201
+ if(setupInfo.wallet == address(0)) {
202
+ setupInfo = _getInitialSetupInfo();
203
+ }
204
+ }
224
205
 
225
- emit LogUnderwrittenByPool(policyNftId, collateralizationAmount, address(this));
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
+ );
226
221
  }
227
222
 
223
+ // Internals
224
+
228
225
  function _createBundle(
229
226
  address bundleOwner,
230
227
  Fee memory fee,
231
228
  uint256 amount,
232
229
  uint256 lifetime,
233
- bytes calldata filter
230
+ bytes memory filter
234
231
  )
235
232
  internal
236
233
  returns(NftId bundleNftId)
237
234
  {
238
- bundleNftId = _poolService.createBundle(
235
+ bundleNftId = _getPoolStorage()._bundleService.createBundle(
239
236
  bundleOwner,
240
237
  fee,
241
238
  amount,
242
239
  lifetime,
243
- filter
244
- );
240
+ filter);
241
+
242
+ // TODO add logging
243
+ }
244
+
245
+ function getContractLocation(bytes memory name) external pure returns (bytes32 hash) {
246
+ return keccak256(abi.encode(uint256(keccak256(name)) - 1)) & ~bytes32(uint256(0xff));
247
+ }
248
+
249
+ function _getPoolStorage() private pure returns (PoolStorage storage $) {
250
+ assembly {
251
+ $.slot := POOL_STORAGE_LOCATION_V1
252
+ }
245
253
  }
246
254
  }