@etherisc/gif-next 0.0.2-a7954cc-097 → 0.0.2-a81f316-187

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 (378) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +842 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +879 -209
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +213 -90
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +846 -57
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +712 -178
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +524 -132
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +15 -15
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -79
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1334 -460
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +261 -198
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +1049 -808
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +462 -179
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +251 -270
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +511 -334
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +370 -89
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -40
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +237 -162
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +58 -75
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1060 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +681 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +614 -293
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +370 -77
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1040 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +685 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1276 -195
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -71
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +627 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +283 -266
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +314 -178
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +787 -143
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +511 -238
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +476 -131
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +73 -159
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +828 -310
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +364 -87
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +821 -311
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +317 -76
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +271 -208
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +309 -76
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +117 -5
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +104 -214
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +131 -27
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +18 -18
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +214 -251
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -81
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +81 -68
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +151 -50
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +73 -159
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +179 -151
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  153. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  155. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  157. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  159. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestService.sol/TestService.json +197 -201
  161. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  166. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/Amount.sol/AmountLib.json +185 -0
  170. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  172. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  174. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
  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/Fee.sol/FeeLib.json +40 -9
  179. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  181. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  183. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  184. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  185. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  188. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  190. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  192. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  194. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  196. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  198. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  200. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  202. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  204. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  208. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  210. package/contracts/components/Component.sol +253 -0
  211. package/contracts/components/Distribution.sol +203 -82
  212. package/contracts/components/IComponent.sol +76 -0
  213. package/contracts/components/IDistributionComponent.sol +44 -17
  214. package/contracts/components/IPoolComponent.sol +88 -41
  215. package/contracts/components/IProductComponent.sol +10 -5
  216. package/contracts/components/Pool.sol +216 -185
  217. package/contracts/components/Product.sol +244 -165
  218. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
  219. package/contracts/instance/BundleManager.sol +17 -20
  220. package/contracts/instance/Cloneable.sol +7 -2
  221. package/contracts/instance/IInstance.sol +65 -25
  222. package/contracts/instance/IInstanceService.sol +36 -8
  223. package/contracts/instance/Instance.sol +151 -117
  224. package/contracts/instance/InstanceAccessManager.sol +389 -165
  225. package/contracts/instance/InstanceReader.sol +38 -36
  226. package/contracts/instance/InstanceService.sol +281 -153
  227. package/contracts/instance/InstanceServiceManager.sol +1 -1
  228. package/contracts/instance/ObjectManager.sol +10 -29
  229. package/contracts/instance/base/ComponentService.sol +121 -0
  230. package/contracts/instance/base/KeyValueStore.sol +13 -5
  231. package/contracts/instance/base/Lifecycle.sol +23 -6
  232. package/contracts/instance/module/IAccess.sol +22 -16
  233. package/contracts/instance/module/IBundle.sol +8 -5
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +2 -0
  236. package/contracts/instance/module/IPolicy.sol +41 -9
  237. package/contracts/instance/module/ISetup.sol +7 -20
  238. package/contracts/instance/service/ApplicationService.sol +355 -0
  239. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  240. package/contracts/instance/service/BundleService.sol +245 -69
  241. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  242. package/contracts/instance/service/ClaimService.sol +239 -0
  243. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  244. package/contracts/instance/service/DistributionService.sol +359 -41
  245. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  246. package/contracts/instance/service/IApplicationService.sol +78 -0
  247. package/contracts/instance/service/IBundleService.sol +70 -19
  248. package/contracts/instance/service/IClaimService.sol +92 -0
  249. package/contracts/instance/service/IDistributionService.sol +87 -0
  250. package/contracts/instance/service/IPolicyService.sol +103 -53
  251. package/contracts/instance/service/IPoolService.sol +82 -3
  252. package/contracts/instance/service/PolicyService.sol +383 -345
  253. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  254. package/contracts/instance/service/PoolService.sol +221 -42
  255. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  256. package/contracts/instance/service/ProductService.sol +90 -50
  257. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  258. package/contracts/registry/ChainNft.sol +8 -0
  259. package/contracts/registry/IRegistry.sol +18 -8
  260. package/contracts/registry/IRegistryService.sol +23 -13
  261. package/contracts/registry/ITransferInterceptor.sol +1 -0
  262. package/contracts/registry/Registry.sol +142 -71
  263. package/contracts/registry/RegistryAccessManager.sol +31 -25
  264. package/contracts/registry/RegistryService.sol +93 -134
  265. package/contracts/registry/RegistryServiceManager.sol +13 -13
  266. package/contracts/registry/ReleaseManager.sol +103 -127
  267. package/contracts/registry/TokenRegistry.sol +19 -13
  268. package/contracts/shared/ERC165.sol +14 -12
  269. package/contracts/shared/INftOwnable.sol +11 -10
  270. package/contracts/shared/IPolicyHolder.sol +26 -0
  271. package/contracts/shared/IRegisterable.sol +4 -6
  272. package/contracts/shared/IRegistryLinked.sol +12 -0
  273. package/contracts/shared/IService.sol +4 -4
  274. package/contracts/shared/IVersionable.sol +4 -47
  275. package/contracts/shared/NftOwnable.sol +66 -80
  276. package/contracts/shared/PolicyHolder.sol +81 -0
  277. package/contracts/shared/ProxyManager.sol +100 -25
  278. package/contracts/shared/Registerable.sol +16 -32
  279. package/contracts/shared/RegistryLinked.sol +48 -0
  280. package/contracts/shared/Service.sol +36 -22
  281. package/contracts/shared/TokenHandler.sol +11 -5
  282. package/contracts/shared/Versionable.sol +4 -92
  283. package/contracts/test/TestRegisterable.sol +1 -1
  284. package/contracts/test/TestService.sol +1 -1
  285. package/contracts/types/Amount.sol +65 -0
  286. package/contracts/types/Blocknumber.sol +1 -0
  287. package/contracts/types/ClaimId.sol +75 -0
  288. package/contracts/types/DistributorType.sol +2 -2
  289. package/contracts/types/Fee.sol +13 -5
  290. package/contracts/types/NftId.sol +8 -0
  291. package/contracts/types/ObjectType.sol +11 -6
  292. package/contracts/types/PayoutId.sol +82 -0
  293. package/contracts/types/Referral.sol +4 -0
  294. package/contracts/types/RoleId.sol +18 -11
  295. package/contracts/types/Seconds.sol +54 -0
  296. package/contracts/types/StateId.sol +7 -2
  297. package/contracts/types/Timestamp.sol +18 -13
  298. package/contracts/types/UFixed.sol +1 -0
  299. package/contracts/types/Version.sol +1 -0
  300. package/package.json +3 -3
  301. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  302. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -397
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  306. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  308. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  310. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  312. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  314. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  316. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  318. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  320. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  322. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  324. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  326. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  329. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  331. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  333. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  335. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  337. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  339. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  341. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  343. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  344. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  345. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  346. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  347. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  348. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  349. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  350. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  351. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
  352. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  353. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  354. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  355. package/contracts/components/BaseComponent.sol +0 -159
  356. package/contracts/components/IBaseComponent.sol +0 -34
  357. package/contracts/experiment/cloning/Cloner.sol +0 -47
  358. package/contracts/experiment/errors/Require.sol +0 -38
  359. package/contracts/experiment/errors/Revert.sol +0 -44
  360. package/contracts/experiment/inheritance/A.sol +0 -53
  361. package/contracts/experiment/inheritance/B.sol +0 -28
  362. package/contracts/experiment/inheritance/C.sol +0 -34
  363. package/contracts/experiment/inheritance/IA.sol +0 -13
  364. package/contracts/experiment/inheritance/IB.sol +0 -10
  365. package/contracts/experiment/inheritance/IC.sol +0 -12
  366. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  367. package/contracts/experiment/statemachine/ISM.sol +0 -25
  368. package/contracts/experiment/statemachine/SM.sol +0 -57
  369. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  370. package/contracts/experiment/types/TypeA.sol +0 -47
  371. package/contracts/experiment/types/TypeB.sol +0 -29
  372. package/contracts/instance/IInstanceBase.sol +0 -26
  373. package/contracts/instance/InstanceBase.sol +0 -41
  374. package/contracts/instance/base/ComponentServiceBase.sol +0 -82
  375. package/contracts/instance/base/IInstanceBase.sol +0 -23
  376. package/contracts/instance/service/ComponentOwnerService.sol +0 -315
  377. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  378. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -16,7 +16,7 @@ contract PolicyServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  PolicyService svc = new PolicyService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -39,7 +39,7 @@ contract PolicyServiceManager is ProxyManager {
39
39
  // address(_productService));
40
40
 
41
41
  // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
42
+ // _isDeployed = true;
43
43
  }
44
44
 
45
45
  //--- view functions ----------------------------------------------------//
@@ -6,40 +6,46 @@ import {IRegistry} from "../../registry/IRegistry.sol";
6
6
  import {IInstance} from "../../instance/IInstance.sol";
7
7
  import {IBundle} from "../../instance/module/IBundle.sol";
8
8
  import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
- import {ISetup} from "../module/ISetup.sol";
9
+ import {IComponents} from "../module/IComponents.sol";
10
10
  import {IPolicy} from "../module/IPolicy.sol";
11
11
 
12
12
  import {IVersionable} from "../../shared/IVersionable.sol";
13
13
  import {Versionable} from "../../shared/Versionable.sol";
14
14
  import {INftOwnable} from "../../shared/INftOwnable.sol";
15
15
 
16
+ import {Amount} from "../../types/Amount.sol";
17
+ import {Fee, FeeLib} from "../../types/Fee.sol";
16
18
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
17
19
  import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
18
- import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
20
+ import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../../types/RoleId.sol";
19
21
  import {Fee, FeeLib} from "../../types/Fee.sol";
20
22
  import {Version, VersionLib} from "../../types/Version.sol";
21
23
  import {KEEP_STATE, StateId} from "../../types/StateId.sol";
24
+ import {Seconds} from "../../types/Seconds.sol";
22
25
  import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
26
+ import {Version, VersionLib} from "../../types/Version.sol";
23
27
 
24
28
  import {IService} from "../../shared/IService.sol";
25
29
  import {Service} from "../../shared/Service.sol";
26
30
  import {BundleManager} from "../BundleManager.sol";
27
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
31
+ import {ComponentService} from "../base/ComponentService.sol";
32
+ import {IBundleService} from "./IBundleService.sol";
28
33
  import {IPoolService} from "./IPoolService.sol";
29
34
  import {IRegistryService} from "../../registry/IRegistryService.sol";
30
35
  import {InstanceService} from "../InstanceService.sol";
31
36
  import {InstanceReader} from "../InstanceReader.sol";
32
- import {IBaseComponent} from "../../components/IBaseComponent.sol";
37
+ import {IComponent} from "../../components/IComponent.sol";
38
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
33
39
 
34
40
  string constant POOL_SERVICE_NAME = "PoolService";
35
41
 
36
42
  contract PoolService is
37
- ComponentServiceBase,
43
+ ComponentService,
38
44
  IPoolService
39
45
  {
40
46
  using NftIdLib for NftId;
41
47
 
42
- address internal _registryAddress;
48
+ IBundleService internal _bundleService;
43
49
 
44
50
  function _initialize(
45
51
  address owner,
@@ -54,12 +60,14 @@ contract PoolService is
54
60
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
55
61
  // TODO while PoolService is not deployed in PoolServiceManager constructor
56
62
  // owner is PoolServiceManager deployer
57
- _initializeService(registryAddress, owner);
63
+ initializeService(registryAddress, address(0), owner);
58
64
 
59
- _registerInterface(type(IPoolService).interfaceId);
65
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart()));
66
+
67
+ registerInterface(type(IPoolService).interfaceId);
60
68
  }
61
69
 
62
- function getDomain() public pure override(Service, IService) returns(ObjectType) {
70
+ function getDomain() public pure override returns(ObjectType) {
63
71
  return POOL();
64
72
  }
65
73
 
@@ -67,58 +75,229 @@ contract PoolService is
67
75
  external
68
76
  returns(NftId poolNftId)
69
77
  {
70
- address poolOwner = msg.sender;
71
- IBaseComponent pool = IBaseComponent(poolAddress);
78
+ (
79
+ IComponent component,
80
+ address owner,
81
+ IInstance instance,
82
+ NftId instanceNftId
83
+ ) = _checkComponentForRegistration(
84
+ poolAddress,
85
+ POOL(),
86
+ POOL_OWNER_ROLE());
72
87
 
73
- IRegistry.ObjectInfo memory info;
74
- bytes memory data;
75
- (info, data) = getRegistryService().registerPool(pool, poolOwner);
88
+ IPoolComponent pool = IPoolComponent(poolAddress);
89
+ IRegistry.ObjectInfo memory registryInfo = getRegistryService().registerPool(pool, owner);
90
+ pool.linkToRegisteredNftId();
91
+ poolNftId = registryInfo.nftId;
76
92
 
77
- IInstance instance = _getInstance(info.parentNftId);
93
+ // amend component info with pool specific token handler
94
+ IComponents.ComponentInfo memory componentInfo = pool.getComponentInfo();
95
+ componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
78
96
 
79
- bool hasRole = getInstanceService().hasRole(
80
- poolOwner,
81
- POOL_OWNER_ROLE(),
82
- address(instance));
97
+ // save amended component info with instance
98
+ instance.createPoolSetup(poolNftId, componentInfo);
83
99
 
84
- if(!hasRole) {
85
- revert ExpectedRoleMissing(POOL_OWNER_ROLE(), poolOwner);
86
- }
100
+ bytes4[][] memory selectors = new bytes4[][](2);
101
+ selectors[0] = new bytes4[](1);
102
+ selectors[1] = new bytes4[](1);
103
+
104
+ selectors[0][0] = IPoolComponent.setFees.selector;
105
+ selectors[1][0] = IPoolComponent.verifyApplication.selector;
106
+
107
+ RoleId[] memory roles = new RoleId[](2);
108
+ roles[0] = POOL_OWNER_ROLE();
109
+ roles[1] = POLICY_SERVICE_ROLE();
110
+
111
+ getInstanceService().createGifTarget(
112
+ instanceNftId,
113
+ poolAddress,
114
+ pool.getName(),
115
+ selectors,
116
+ roles);
117
+ }
87
118
 
88
- poolNftId = info.nftId;
89
- ISetup.PoolSetupInfo memory initialSetup = _decodeAndVerifyPoolSetup(data);
90
- instance.createPoolSetup(poolNftId, initialSetup);
91
119
 
92
- getInstanceService().createTarget(_getInstanceNftId(info), poolAddress, pool.getName());
120
+ function setMaxCapitalAmount(uint256 maxCapitalAmount)
121
+ external
122
+ virtual
123
+ {
124
+ (NftId poolNftId, IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
125
+ InstanceReader instanceReader = instance.getInstanceReader();
126
+
127
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
128
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
129
+ uint256 previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
130
+
131
+ poolInfo.maxCapitalAmount = maxCapitalAmount;
132
+ componentInfo.data = abi.encode(poolInfo);
133
+ instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
134
+
135
+ emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
93
136
  }
94
137
 
95
- function _decodeAndVerifyPoolSetup(bytes memory data) internal returns(ISetup.PoolSetupInfo memory setup)
138
+ function setBundleOwnerRole(RoleId bundleOwnerRole)
139
+ external
140
+ virtual
96
141
  {
97
- setup = abi.decode(
98
- data,
99
- (ISetup.PoolSetupInfo)
100
- );
142
+ (NftId poolNftId, IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
143
+ InstanceReader instanceReader = instance.getInstanceReader();
101
144
 
102
- // TODO add checks if applicable
145
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
146
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
147
+
148
+ // bundle owner role may only be set once per pool
149
+ if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
150
+ revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
151
+ }
152
+
153
+ poolInfo.bundleOwnerRole = bundleOwnerRole;
154
+ componentInfo.data = abi.encode(poolInfo);
155
+ instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
156
+
157
+ emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
103
158
  }
104
159
 
160
+
105
161
  function setFees(
106
162
  Fee memory poolFee,
107
163
  Fee memory stakingFee,
108
164
  Fee memory performanceFee
109
165
  )
110
166
  external
111
- override
167
+ virtual
168
+ {
169
+ (NftId poolNftId, IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
170
+ InstanceReader instanceReader = instance.getInstanceReader();
171
+
172
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
173
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
174
+
175
+ poolInfo.poolFee = poolFee;
176
+ poolInfo.stakingFee = stakingFee;
177
+ poolInfo.performanceFee = performanceFee;
178
+ componentInfo.data = abi.encode(poolInfo);
179
+ instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
180
+
181
+ // TODO add logging
182
+ }
183
+
184
+
185
+ function createBundle(
186
+ address owner, // initial bundle owner
187
+ Fee memory fee, // fees deducted from premium that go to bundle owner
188
+ Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
189
+ Seconds lifetime, // initial duration for which new policies are covered
190
+ bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
191
+ )
192
+ external
193
+ virtual
194
+ returns(NftId bundleNftId)
195
+ {
196
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
197
+ InstanceReader instanceReader = instance.getInstanceReader();
198
+
199
+ // TODO add implementation that takes care of staking fees
200
+ Amount stakingAfterFeesAmount = stakingAmount;
201
+
202
+ bundleNftId = _bundleService.create(
203
+ instance,
204
+ poolNftId,
205
+ owner,
206
+ fee,
207
+ stakingAfterFeesAmount,
208
+ lifetime,
209
+ filter);
210
+
211
+ emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
212
+ }
213
+
214
+
215
+ function closeBundle(NftId bundleNftId)
216
+ external
217
+ virtual
218
+ {
219
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
220
+
221
+ // TODO book keeping for pool collateral released outside of retention level
222
+
223
+ // releasing collateral in bundle
224
+ _bundleService.close(instance, bundleNftId);
225
+
226
+ // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
227
+
228
+ emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
229
+ }
230
+
231
+
232
+ function lockCollateral(
233
+ IInstance instance,
234
+ NftId productNftId,
235
+ NftId applicationNftId,
236
+ IPolicy.PolicyInfo memory applicationInfo,
237
+ uint256 premiumAmount // premium amount after product and distribution fees
238
+ )
239
+ external
240
+ virtual
241
+ // TODO add restricted and granting for policy service
112
242
  {
113
- (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
114
243
  InstanceReader instanceReader = instance.getInstanceReader();
115
- NftId poolNftId = poolInfo.nftId;
116
-
117
- ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
118
- poolSetupInfo.poolFee = poolFee;
119
- poolSetupInfo.stakingFee = stakingFee;
120
- poolSetupInfo.performanceFee = performanceFee;
121
-
122
- instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
244
+ NftId poolNftId = instanceReader.getProductSetupInfo(productNftId).poolNftId;
245
+ NftId bundleNftId = applicationInfo.bundleNftId;
246
+
247
+ // TODO move this check to application creation and don't repeat this here
248
+ // ensure that pool for bundle from application matches with pool for product of application
249
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
250
+ if(bundleInfo.poolNftId != poolNftId) {
251
+ revert ErrorPoolServiceBundlePoolMismatch(bundleInfo.poolNftId, poolNftId);
252
+ }
253
+
254
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
255
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
256
+
257
+ // TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
258
+ uint256 collateralAmount = applicationInfo.sumInsuredAmount;
259
+
260
+ // TODO add correct net premium calculation (pool fee might be > 0)
261
+ uint256 premiumAfterPoolFeeAmount = premiumAmount;
262
+
263
+ // lock collateral amount from involvedd bundle
264
+ _bundleService.lockCollateral(
265
+ instance,
266
+ applicationNftId,
267
+ bundleNftId,
268
+ collateralAmount,
269
+ premiumAfterPoolFeeAmount);
270
+
271
+ // also verify/confirm application by pool if necessary
272
+ if(poolInfo.isVerifyingApplications) {
273
+ address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
274
+ IPoolComponent(poolAddress).verifyApplication(
275
+ applicationNftId,
276
+ applicationInfo.applicationData,
277
+ bundleNftId,
278
+ bundleInfo.filter,
279
+ collateralAmount);
280
+ }
281
+ }
282
+
283
+
284
+ /// @dev releases the remaining collateral linked to the specified policy
285
+ /// may only be called by the policy service for unlocked pool components
286
+ function releaseCollateral(
287
+ IInstance instance,
288
+ NftId policyNftId,
289
+ IPolicy.PolicyInfo memory policyInfo
290
+ )
291
+ external
292
+ virtual
293
+ // TODO add restricted and granting for policy service
294
+ {
295
+ // release collateral from involved bundle
296
+ _bundleService.releaseCollateral(
297
+ instance,
298
+ policyNftId,
299
+ policyInfo.bundleNftId,
300
+ policyInfo.sumInsuredAmount);
123
301
  }
302
+
124
303
  }
@@ -16,7 +16,7 @@ contract PoolServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  PoolService poolSrv = new PoolService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -4,7 +4,7 @@ pragma solidity ^0.8.19;
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
5
  import {IProductComponent} from "../../components/IProductComponent.sol";
6
6
  import {Product} from "../../components/Product.sol";
7
- import {IBaseComponent} from "../../components/IBaseComponent.sol";
7
+ import {IComponent} from "../../components/IComponent.sol";
8
8
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
9
9
  import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
10
10
  import {IInstance} from "../IInstance.sol";
@@ -24,7 +24,7 @@ import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
24
24
  import {UFixed, UFixedLib} from "../../types/UFixed.sol";
25
25
  import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
26
26
  import {ObjectType, PRODUCT, POOL, POLICY} from "../../types/ObjectType.sol";
27
- import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
27
+ import {APPLIED, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
28
28
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
29
29
  import {Fee, FeeLib} from "../../types/Fee.sol";
30
30
  import {ReferralId} from "../../types/Referral.sol";
@@ -35,13 +35,13 @@ import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
35
35
 
36
36
  import {IService} from "../../shared/IService.sol";
37
37
  import {Service} from "../../shared/Service.sol";
38
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
38
+ import {ComponentService} from "../base/ComponentService.sol";
39
39
  import {IProductService} from "./IProductService.sol";
40
40
  import {InstanceReader} from "../InstanceReader.sol";
41
41
  import {IPoolService} from "./PoolService.sol";
42
42
 
43
43
  // TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
44
- contract ProductService is ComponentServiceBase, IProductService {
44
+ contract ProductService is ComponentService, IProductService {
45
45
  using NftIdLib for NftId;
46
46
 
47
47
  IPoolService internal _poolService;
@@ -60,54 +60,93 @@ contract ProductService is ComponentServiceBase, IProductService {
60
60
  address initialOwner;
61
61
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
62
62
 
63
- _initializeService(registryAddress, owner);
63
+ initializeService(registryAddress, address(0), owner);
64
64
 
65
- _poolService = IPoolService(_registry.getServiceAddress(POOL(), getMajorVersion()));
65
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
66
66
 
67
- _registerInterface(type(IProductService).interfaceId);
67
+ registerInterface(type(IProductService).interfaceId);
68
68
  }
69
69
 
70
70
 
71
- function getDomain() public pure override(IService, Service) returns(ObjectType) {
72
- return PRODUCT();
73
- }
74
-
75
71
  function register(address productAddress)
76
72
  external
77
73
  returns(NftId productNftId)
78
74
  {
79
- address productOwner = msg.sender;
80
- IBaseComponent product = IBaseComponent(productAddress);
81
-
82
- IRegistry.ObjectInfo memory info;
83
- bytes memory data;
84
- (info, data) = getRegistryService().registerProduct(product, productOwner);
85
-
86
- IInstance instance = _getInstance(info.parentNftId);
87
- bool hasRole = getInstanceService().hasRole(
88
- productOwner,
89
- PRODUCT_OWNER_ROLE(),
90
- address(instance));
75
+ (
76
+ IComponent component,
77
+ address owner,
78
+ IInstance instance,
79
+ NftId instanceNftId
80
+ ) = _checkComponentForRegistration(
81
+ productAddress,
82
+ PRODUCT(),
83
+ PRODUCT_OWNER_ROLE());
84
+
85
+ IProductComponent product = IProductComponent(productAddress);
86
+ IRegistry.ObjectInfo memory productInfo = getRegistryService().registerProduct(product, owner);
87
+ productNftId = productInfo.nftId;
88
+ _createProductSetup(
89
+ instance,
90
+ product,
91
+ productNftId);
92
+ }
91
93
 
92
- if(!hasRole) {
93
- revert ExpectedRoleMissing(PRODUCT_OWNER_ROLE(), productOwner);
94
- }
95
94
 
96
- productNftId = info.nftId;
97
- ISetup.ProductSetupInfo memory initialSetup = _decodeAndVerifyProductSetup(data);
98
- instance.createProductSetup(productNftId, initialSetup);
95
+ function _createProductSetup(
96
+ IInstance instance,
97
+ IProductComponent product,
98
+ NftId productNftId
99
+ )
100
+ internal
101
+ returns (string memory name)
102
+ {
103
+ // wire distribution and pool components to product component
104
+ ISetup.ProductSetupInfo memory setup = product.getSetupInfo();
105
+ IComponent distribution = IComponent(getRegistry().getObjectInfo(setup.distributionNftId).objectAddress);
106
+ IComponent pool = IComponent(getRegistry().getObjectInfo(setup.poolNftId).objectAddress);
107
+
108
+ distribution.setProductNftId(productNftId);
109
+ pool.setProductNftId(productNftId);
110
+ product.setProductNftId(productNftId);
111
+ product.linkToRegisteredNftId();
112
+
113
+ // create product setup in instance
114
+ instance.createProductSetup(productNftId, product.getSetupInfo());
115
+
116
+ bytes4[][] memory selectors = new bytes4[][](1);
117
+ selectors[0] = new bytes4[](1);
118
+ selectors[0][0] = IProductComponent.setFees.selector;
119
+
120
+ RoleId[] memory roles = new RoleId[](1);
121
+ roles[0] = PRODUCT_OWNER_ROLE();
122
+
123
+ // create target for instane access manager
124
+ getInstanceService().createGifTarget(
125
+ getRegistry().getNftId(address(instance)),
126
+ address(product),
127
+ product.getName(),
128
+ selectors,
129
+ roles);
130
+ }
99
131
 
100
- getInstanceService().createTarget(_getInstanceNftId(info), productAddress, product.getName());
132
+ function getDomain() public pure override returns(ObjectType) {
133
+ return PRODUCT();
101
134
  }
102
135
 
103
- function _decodeAndVerifyProductSetup(bytes memory data) internal returns(ISetup.ProductSetupInfo memory setup)
136
+
137
+ function _decodeAndVerifyProductData(bytes memory data)
138
+ internal
139
+ returns(string memory name, ISetup.ProductSetupInfo memory setup)
104
140
  {
105
- setup = abi.decode(
141
+ (name, setup) = abi.decode(
106
142
  data,
107
- (ISetup.ProductSetupInfo)
143
+ (string, ISetup.ProductSetupInfo)
108
144
  );
109
145
 
110
- // TODO add checks if applicable
146
+ // TODO add checks
147
+ // if(wallet == address(0)) {
148
+ // revert WalletIsZero();
149
+ // }
111
150
  }
112
151
 
113
152
  function setFees(
@@ -118,13 +157,9 @@ contract ProductService is ComponentServiceBase, IProductService {
118
157
  {
119
158
  // TODO check args
120
159
 
121
- (
122
- IRegistry.ObjectInfo memory productInfo,
123
- IInstance instance
124
- ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
125
-
160
+ (NftId productNftId, IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
126
161
  InstanceReader instanceReader = instance.getInstanceReader();
127
- NftId productNftId = productInfo.nftId;
162
+
128
163
  ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
129
164
 
130
165
  productSetupInfo.productFee = productFee;
@@ -136,13 +171,13 @@ contract ProductService is ComponentServiceBase, IProductService {
136
171
  function createRisk(
137
172
  RiskId riskId,
138
173
  bytes memory data
139
- ) external override {
140
- (
141
- IRegistry.ObjectInfo memory productInfo,
142
- IInstance instance
143
- ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
144
- NftId productNftId = productInfo.nftId;
174
+ )
175
+ external
176
+ override
177
+ {
178
+ (NftId productNftId, IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
145
179
  IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
180
+
146
181
  instance.createRisk(
147
182
  riskId,
148
183
  riskInfo
@@ -152,9 +187,12 @@ contract ProductService is ComponentServiceBase, IProductService {
152
187
  function updateRisk(
153
188
  RiskId riskId,
154
189
  bytes memory data
155
- ) external {
156
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
190
+ )
191
+ external
192
+ {
193
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
157
194
  InstanceReader instanceReader = instance.getInstanceReader();
195
+
158
196
  IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
159
197
  riskInfo.data = data;
160
198
  instance.updateRisk(riskId, riskInfo, KEEP_STATE());
@@ -163,8 +201,10 @@ contract ProductService is ComponentServiceBase, IProductService {
163
201
  function updateRiskState(
164
202
  RiskId riskId,
165
203
  StateId state
166
- ) external {
167
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
204
+ )
205
+ external
206
+ {
207
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
168
208
  instance.updateRiskState(riskId, state);
169
209
  }
170
210
  }
@@ -16,7 +16,7 @@ contract ProductServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  ProductService svc = new ProductService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -39,7 +39,7 @@ contract ProductServiceManager is ProxyManager {
39
39
  // address(_productService));
40
40
 
41
41
  // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
42
+ // _isDeployed = true;
43
43
  }
44
44
 
45
45
  //--- view functions ----------------------------------------------------//
@@ -95,6 +95,10 @@ contract ChainNft is ERC721Enumerable {
95
95
 
96
96
  _totalMinted++;
97
97
  _safeMint(to, tokenId);
98
+
99
+ if(interceptor != address(0)) {
100
+ ITransferInterceptor(interceptor).nftMint(to, tokenId);
101
+ }
98
102
  }
99
103
 
100
104
 
@@ -195,6 +199,10 @@ contract ChainNft is ERC721Enumerable {
195
199
  _chainIdDigits;
196
200
  }
197
201
 
202
+ function getNextTokenId() external view returns (uint256) {
203
+ return calculateTokenId(_idNext);
204
+ }
205
+
198
206
  function _getNextTokenId() private returns (uint256 id) {
199
207
  id = calculateTokenId(_idNext);
200
208
  _idNext++;