@etherisc/gif-next 0.0.2-29a48ef-239 → 0.0.2-2a59cd5-352

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 (291) hide show
  1. package/README.md +136 -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 +1020 -205
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → components/IComponent.sol/IComponent.json} +171 -191
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +798 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +676 -31
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +661 -5
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +849 -270
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +694 -133
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  33. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  40. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  41. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  42. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  44. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +738 -36
  45. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  46. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +214 -20
  47. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  48. package/artifacts/contracts/instance/Instance.sol/Instance.json +505 -764
  49. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  50. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +211 -144
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  52. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +61 -97
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  54. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +491 -162
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  56. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +178 -76
  57. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  58. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  59. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  60. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/base/ComponentService.sol/ComponentService.json} +321 -9
  61. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  64. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  65. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  66. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  69. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  76. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1117 -0
  77. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  78. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1318 -0
  79. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +586 -0
  81. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +544 -84
  83. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +191 -33
  85. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  86. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +223 -51
  87. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +798 -0
  89. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +229 -19
  91. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +784 -0
  93. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +31 -188
  95. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +33 -244
  97. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1378 -0
  99. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +642 -0
  101. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +268 -282
  103. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +166 -52
  105. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +270 -410
  107. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +166 -80
  109. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  111. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +225 -133
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +185 -77
  115. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  116. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.json +238 -235
  118. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +243 -129
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +181 -97
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +150 -29
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  131. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +37 -0
  133. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  134. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +18 -5
  137. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +69 -0
  139. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  140. package/artifacts/contracts/shared/IService.sol/IService.json +32 -19
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -2
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +156 -11
  145. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  146. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +269 -0
  147. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +156 -6
  149. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +152 -11
  151. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  152. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +105 -0
  153. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  154. package/artifacts/contracts/shared/Service.sol/Service.json +178 -19
  155. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  156. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  157. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  158. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  159. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -2
  160. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  161. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +152 -11
  163. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  165. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestService.sol/TestService.json +196 -37
  167. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -8
  171. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  172. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  173. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  177. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  179. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  180. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  182. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  183. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  184. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  187. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  189. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  191. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  193. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  199. package/contracts/components/Component.sol +236 -0
  200. package/contracts/components/Distribution.sol +209 -64
  201. package/contracts/components/IComponent.sol +50 -0
  202. package/contracts/components/IDistributionComponent.sol +59 -3
  203. package/contracts/components/IPoolComponent.sol +54 -29
  204. package/contracts/components/IProductComponent.sol +7 -3
  205. package/contracts/components/Pool.sol +152 -145
  206. package/contracts/components/Product.sol +104 -115
  207. package/contracts/instance/BundleManager.sol +125 -0
  208. package/contracts/instance/Cloneable.sol +46 -0
  209. package/contracts/instance/IInstance.sol +41 -9
  210. package/contracts/instance/IInstanceService.sol +33 -4
  211. package/contracts/instance/Instance.sol +92 -254
  212. package/contracts/instance/InstanceAccessManager.sol +87 -78
  213. package/contracts/instance/InstanceReader.sol +3 -25
  214. package/contracts/instance/InstanceService.sol +350 -106
  215. package/contracts/instance/InstanceServiceManager.sol +5 -8
  216. package/contracts/instance/ObjectManager.sol +84 -0
  217. package/contracts/instance/base/ComponentService.sol +134 -0
  218. package/contracts/instance/module/IAccess.sol +27 -18
  219. package/contracts/instance/module/ISetup.sol +5 -5
  220. package/contracts/instance/service/ApplicationService.sol +268 -0
  221. package/contracts/instance/service/BundleService.sol +298 -0
  222. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  223. package/contracts/instance/service/DistributionService.sol +221 -27
  224. package/contracts/instance/service/DistributionServiceManager.sol +6 -9
  225. package/contracts/instance/service/IApplicationService.sol +82 -0
  226. package/contracts/instance/service/IBundleService.sol +54 -0
  227. package/contracts/instance/service/IDistributionService.sol +53 -0
  228. package/contracts/instance/service/IPolicyService.sol +88 -0
  229. package/contracts/instance/service/IPoolService.sol +3 -26
  230. package/contracts/instance/service/IProductService.sol +2 -72
  231. package/contracts/instance/service/PolicyService.sol +524 -0
  232. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  233. package/contracts/instance/service/PoolService.sol +37 -132
  234. package/contracts/instance/service/PoolServiceManager.sol +5 -8
  235. package/contracts/instance/service/ProductService.sol +123 -451
  236. package/contracts/registry/ChainNft.sol +1 -1
  237. package/contracts/registry/IRegistry.sol +37 -19
  238. package/contracts/registry/IRegistryService.sol +30 -13
  239. package/contracts/registry/Registry.sol +233 -217
  240. package/contracts/registry/RegistryAccessManager.sol +216 -0
  241. package/contracts/registry/RegistryService.sol +81 -162
  242. package/contracts/registry/RegistryServiceManager.sol +18 -36
  243. package/contracts/registry/ReleaseManager.sol +331 -0
  244. package/contracts/registry/TokenRegistry.sol +11 -9
  245. package/contracts/shared/ERC165.sol +12 -11
  246. package/contracts/shared/INftOwnable.sol +12 -6
  247. package/contracts/shared/IPolicyHolder.sol +26 -0
  248. package/contracts/shared/IRegisterable.sol +4 -6
  249. package/contracts/shared/IRegistryLinked.sol +15 -0
  250. package/contracts/shared/IService.sol +2 -1
  251. package/contracts/shared/IVersionable.sol +2 -2
  252. package/contracts/shared/NftOwnable.sol +113 -57
  253. package/contracts/shared/PolicyHolder.sol +81 -0
  254. package/contracts/shared/ProxyManager.sol +6 -5
  255. package/contracts/shared/Registerable.sol +15 -24
  256. package/contracts/shared/RegistryLinked.sol +64 -0
  257. package/contracts/shared/Service.sol +18 -13
  258. package/contracts/shared/Versionable.sol +3 -2
  259. package/contracts/test/TestRegisterable.sol +1 -1
  260. package/contracts/test/TestService.sol +4 -3
  261. package/contracts/types/DistributorType.sol +2 -2
  262. package/contracts/types/NftIdSet.sol +26 -24
  263. package/contracts/types/ObjectType.sol +6 -2
  264. package/contracts/types/RoleId.sol +10 -10
  265. package/package.json +3 -3
  266. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  267. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  268. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  269. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  270. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  271. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  272. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  273. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  274. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  275. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  276. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  277. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  278. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  279. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  280. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  281. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  282. package/contracts/components/BaseComponent.sol +0 -91
  283. package/contracts/components/IBaseComponent.sol +0 -25
  284. package/contracts/instance/AccessManagedSimple.sol +0 -115
  285. package/contracts/instance/AccessManagerSimple.sol +0 -692
  286. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  287. package/contracts/instance/base/ComponentServiceBase.sol +0 -134
  288. package/contracts/instance/base/IInstanceBase.sol +0 -23
  289. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  290. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  291. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -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/Referral.sol";
6
- import {NftId} from "../types/NftId.sol";
5
+ import {IComponent} from "./IComponent.sol";
7
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 {
8
14
 
9
- interface IDistributionComponent {
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,6 +82,16 @@ interface IDistributionComponent {
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
 
@@ -1,52 +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
9
 
8
- interface IPoolComponent {
10
+ /// @dev pool components hold and manage the collateral to cover active policies
11
+ /// pools come in different flavors
12
+ interface IPoolComponent is IComponent {
9
13
 
10
14
  event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
11
15
 
16
+ error ErrorPoolNotPoolService(address service);
17
+
18
+ function getSetupInfo() external view returns (ISetup.PoolSetupInfo memory setupInfo);
19
+
12
20
  function setFees(
13
21
  Fee memory poolFee,
14
22
  Fee memory stakingFee,
15
23
  Fee memory performanceFee
16
24
  ) external;
17
25
 
18
- /**
19
- * @dev creates a new bundle for this pool.
20
- */
21
- function createBundle(
22
- Fee memory fee,
23
- uint256 initialAmount,
24
- uint256 lifetime,
25
- bytes memory filter
26
- ) external returns(NftId bundleNftId);
27
-
26
+ /// @dev sets an additional bundle fee, this fee is added on top of the poolFee and deducted from the premium amounts.
27
+ /// via these fees individual bundler owner may earn income per policy in the context of peer to peer pools
28
28
  function setBundleFee(
29
- NftId policyNftId,
29
+ NftId bundleNftId,
30
30
  Fee memory fee
31
31
  ) external;
32
32
 
33
- /**
34
- * @dev this is a callback function that is called by the product service when underwriting a policy.
35
- * the pool has the option to check the details and object to underwriting by reverting.
36
- * the function is only called for "active" pools that ask to be involved/notified
37
- * by product related state changes.
38
- */
39
- function underwrite(
40
- 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,
41
39
  bytes memory policyData,
42
40
  bytes memory bundleFilter,
43
41
  uint256 collateralizationAmount
44
42
  ) external;
45
43
 
46
- /**
47
- * @dev returns true iff the policy application data in policyData matches
48
- * with the bundle filter criteria encoded in bundleFilter.
49
- */
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
50
79
  function policyMatchesBundle(
51
80
  bytes memory policyData,
52
81
  bytes memory bundleFilter
@@ -55,8 +84,4 @@ interface IPoolComponent {
55
84
  view
56
85
  returns (bool isMatching);
57
86
 
58
- function isConfirmingApplication() external view returns (bool isConfirmingApplication);
59
-
60
- function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
61
-
62
87
  }
@@ -2,11 +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
8
  import {ReferralId} from "../types/Referral.sol";
7
9
  import {RiskId} from "../types/RiskId.sol";
8
10
 
9
- interface IProductComponent {
11
+ interface IProductComponent is IComponent {
12
+
13
+ function getSetupInfo() external view returns (ISetup.ProductSetupInfo memory setupInfo);
10
14
 
11
15
  function setFees(
12
16
  Fee memory productFee,
@@ -18,8 +22,8 @@ interface IProductComponent {
18
22
  RiskId riskId,
19
23
  uint256 lifetime,
20
24
  bytes memory applicationData,
21
- ReferralId referralId,
22
- NftId bundleNftId
25
+ NftId bundleNftId,
26
+ ReferralId referralId
23
27
  ) external view returns (uint256 premiumAmount);
24
28
 
25
29
  function calculateNetPremium(
@@ -1,138 +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, zeroNftId, NftIdLib} 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
12
  import {TokenHandler} from "../shared/TokenHandler.sol";
13
13
  import {ISetup} from "../instance/module/ISetup.sol";
14
14
 
15
- import {IRegistry} from "../registry/IRegistry.sol";
16
-
17
- // import {IPool} from "../instance/module/pool/IPoolModule.sol";
18
- import {ITreasury} from "../instance/module/ITreasury.sol";
19
15
  import {ISetup} from "../instance/module/ISetup.sol";
20
16
  import {InstanceReader} from "../instance/InstanceReader.sol";
21
17
 
22
- import {IRegisterable} from "../shared/IRegisterable.sol";
23
- import {Registerable} from "../shared/Registerable.sol";
24
18
 
25
- contract Pool is BaseComponent, IPoolComponent {
26
- using NftIdLib for NftId;
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;
27
25
 
28
- bool internal _isConfirmingApplication;
29
- UFixed internal _collateralizationLevel;
26
+ struct PoolStorage {
27
+ UFixed _collateralizationLevel;
28
+ UFixed _retentionLevel;
30
29
 
31
- Fee internal _initialPoolFee;
32
- Fee internal _initialStakingFee;
33
- Fee internal _initialPerformanceFee;
30
+ bool _isExternallyManaged;
31
+ bool _isInterceptingBundleTransfers;
32
+ bool _isVerifyingApplications;
34
33
 
35
- TokenHandler internal _tokenHandler;
34
+ Fee _initialPoolFee;
35
+ Fee _initialStakingFee;
36
+ Fee _initialPerformanceFee;
36
37
 
37
- // may be used to interact with instance by derived contracts
38
- IPoolService internal _poolService;
38
+ TokenHandler _tokenHandler;
39
39
 
40
- // only relevant to protect callback functions for "active" pools
41
- IProductService private _productService;
40
+ // may be used to interact with instance by derived contracts
41
+ IPoolService _poolService;
42
+ IBundleService _bundleService;
43
+ }
42
44
 
43
45
  modifier onlyPoolService() {
44
- require(
45
- msg.sender == address(_poolService),
46
- "ERROR:POL-001:NOT_POOL_SERVICE");
46
+ if(msg.sender != address(_getPoolStorage()._poolService)) {
47
+ revert ErrorPoolNotPoolService(msg.sender);
48
+ }
47
49
  _;
48
50
  }
49
51
 
50
- modifier onlyProductService() {
51
- require(
52
- msg.sender == address(_productService),
53
- "ERROR:POL-002:NOT_PRODUCT_SERVICE");
54
- _;
55
- }
56
52
 
57
- constructor(
53
+ function initializePool(
58
54
  address registry,
59
55
  NftId instanceNftId,
56
+ string memory name,
60
57
  // TODO refactor into tokenNftId
61
58
  address token,
62
- bool isInterceptor,
63
- bool isConfirmingApplication,
59
+ bool isInterceptingNftTransfers,
60
+ bool isExternallyManaging,
61
+ bool isVerifying,
64
62
  UFixed collateralizationLevel,
65
- Fee memory poolFee,
66
- Fee memory stakingFee,
67
- Fee memory performanceFee,
68
- address initialOwner
63
+ UFixed retentionLevel,
64
+ address initialOwner,
65
+ bytes memory data
69
66
  )
70
- BaseComponent(registry, instanceNftId, token, POOL(), isInterceptor, initialOwner)
67
+ public
68
+ virtual
69
+ onlyInitializing()
71
70
  {
72
- _isConfirmingApplication = isConfirmingApplication;
73
- // TODO add validation
74
- _collateralizationLevel = collateralizationLevel;
75
- _initialPoolFee = poolFee;
76
- _initialStakingFee = stakingFee;
77
- _initialPerformanceFee = performanceFee;
78
-
79
- _tokenHandler = new TokenHandler(token);
80
-
81
- _poolService = _instance.getPoolService();
82
- _productService = _instance.getProductService();
71
+ initializeComponent(registry, instanceNftId, name, token, POOL(), isInterceptingNftTransfers, initialOwner, data);
83
72
 
84
- _registerInterface(type(IPoolComponent).interfaceId);
85
- }
86
-
87
- function createBundle(
88
- Fee memory fee,
89
- uint256 initialAmount,
90
- uint256 lifetime,
91
- bytes memory filter
92
- )
93
- external
94
- virtual override
95
- returns(NftId bundleNftId)
96
- {
97
- address owner = msg.sender;
98
- bundleNftId = _poolService.createBundle(
99
- owner,
100
- fee,
101
- initialAmount,
102
- lifetime,
103
- filter
104
- );
105
-
106
- // 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);
107
87
  }
108
88
 
109
89
  /**
110
- * @dev see {IPool.underwrite}.
90
+ * @dev see {IPool.verifyApplication}.
111
91
  * Default implementation that only writes a {LogUnderwrittenByPool} entry.
112
92
  */
113
- function underwrite(
114
- NftId policyNftId,
115
- bytes memory policyData,
93
+ function verifyApplication(
94
+ NftId applicationNftId,
95
+ bytes memory applicationData,
116
96
  bytes memory bundleFilter,
117
97
  uint256 collateralizationAmount
118
98
  )
119
99
  external
120
- onlyProductService
100
+ restricted()
121
101
  virtual override
122
102
  {
123
- _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));
124
109
  }
125
110
 
126
- /**
127
- * @dev see {IPoolComponent.policyMatchesBundle}.
128
- * Default implementation always returns true
129
- */
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
130
139
  function policyMatchesBundle(
131
140
  bytes memory, // policyData
132
141
  bytes memory // bundleFilter
133
142
  )
134
143
  public
135
- view
144
+ pure
136
145
  virtual override
137
146
  returns (bool isMatching)
138
147
  {
@@ -140,14 +149,6 @@ contract Pool is BaseComponent, IPoolComponent {
140
149
  }
141
150
 
142
151
 
143
- function isConfirmingApplication() external view override returns (bool isConfirmingApplication) {
144
- return _isConfirmingApplication;
145
- }
146
-
147
- function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
148
- return _collateralizationLevel;
149
- }
150
-
151
152
  function setFees(
152
153
  Fee memory poolFee,
153
154
  Fee memory stakingFee,
@@ -155,9 +156,10 @@ contract Pool is BaseComponent, IPoolComponent {
155
156
  )
156
157
  external
157
158
  onlyOwner
159
+ restricted()
158
160
  override
159
161
  {
160
- _poolService.setFees(poolFee, stakingFee, performanceFee);
162
+ _getPoolStorage()._poolService.setFees(poolFee, stakingFee, performanceFee);
161
163
  }
162
164
 
163
165
  function setBundleFee(
@@ -168,80 +170,85 @@ contract Pool is BaseComponent, IPoolComponent {
168
170
  override
169
171
  // TODO add onlyBundleOwner
170
172
  {
171
- _poolService.setBundleFee(bundleNftId, fee);
173
+ _getPoolStorage()._bundleService.setBundleFee(bundleNftId, fee);
172
174
  }
173
175
 
174
- function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
175
- InstanceReader reader = _instance.getInstanceReader();
176
- return reader.getPoolSetupInfo(getNftId());
176
+ function lockBundle(
177
+ NftId bundleNftId
178
+ )
179
+ external
180
+ override
181
+ // TODO add onlyBundleOwner
182
+ {
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
- ) = super.getInitialInfo();
192
-
193
- return (
194
- info,
195
- abi.encode(
196
- ISetup.PoolSetupInfo(
197
- _productNftId,
198
- _tokenHandler,
199
- _collateralizationLevel,
200
- _initialPoolFee,
201
- _initialStakingFee,
202
- _initialPerformanceFee,
203
- false,
204
- _isConfirmingApplication,
205
- _wallet
206
- )
207
- )
208
- );
193
+ _getPoolStorage()._bundleService.unlockBundle(bundleNftId);
209
194
  }
210
195
 
211
- // Internals
196
+ function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
197
+ InstanceReader reader = getInstance().getInstanceReader();
198
+ setupInfo = reader.getPoolSetupInfo(getNftId());
212
199
 
213
- function _underwrite(
214
- NftId policyNftId,
215
- bytes memory policyData,
216
- bytes memory bundleFilter,
217
- uint256 collateralizationAmount
218
- )
219
- internal
220
- {
221
- require(
222
- policyMatchesBundle(policyData, bundleFilter),
223
- "ERROR:POL-020:POLICY_BUNDLE_MISMATCH"
224
- );
200
+ // fallback to initial setup info (wallet is always != address(0))
201
+ if(setupInfo.wallet == address(0)) {
202
+ setupInfo = _getInitialSetupInfo();
203
+ }
204
+ }
225
205
 
226
- 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
+ );
227
221
  }
228
222
 
223
+ // Internals
224
+
229
225
  function _createBundle(
230
226
  address bundleOwner,
231
227
  Fee memory fee,
232
228
  uint256 amount,
233
229
  uint256 lifetime,
234
- bytes calldata filter
230
+ bytes memory filter
235
231
  )
236
232
  internal
237
233
  returns(NftId bundleNftId)
238
234
  {
239
- bundleNftId = _poolService.createBundle(
235
+ bundleNftId = _getPoolStorage()._bundleService.createBundle(
240
236
  bundleOwner,
241
237
  fee,
242
238
  amount,
243
239
  lifetime,
244
- filter
245
- );
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
+ }
246
253
  }
247
254
  }