@etherisc/gif-next 0.0.2-fe77319 → 0.0.2-ff8087d-237

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 (422) hide show
  1. package/README.md +359 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +727 -33
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1376 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +636 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +1000 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +1095 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +861 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1281 -69
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +1064 -79
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +190 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2365 -529
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +600 -0
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +2965 -581
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1330 -0
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1569 -0
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1099 -0
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +724 -0
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +631 -0
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  44. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +532 -0
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +194 -0
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  51. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
  52. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  54. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IComponents.sol/IComponents.json} +2 -2
  56. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  58. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  59. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  60. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  62. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  63. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  64. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  65. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  66. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1124 -0
  68. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +688 -0
  70. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1283 -0
  72. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  74. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1384 -0
  76. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +752 -0
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1847 -0
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +816 -0
  82. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +619 -0
  84. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +730 -0
  86. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +743 -0
  88. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +1059 -0
  90. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +651 -0
  92. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +1077 -0
  94. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +442 -0
  96. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1281 -0
  98. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1622 -0
  102. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +708 -0
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +864 -0
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
  109. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +784 -0
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +559 -74
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +858 -0
  114. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  115. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +52 -0
  116. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.json +646 -77
  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 +4 -0
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1150 -0
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +657 -0
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +485 -0
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  129. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +125 -0
  134. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +175 -0
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  139. package/artifacts/contracts/{instance/access/IAccess.sol/IAccessCheckRole.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +11 -11
  140. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  141. package/artifacts/contracts/shared/IService.sol/IService.json +327 -0
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +238 -0
  146. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +569 -0
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +339 -0
  152. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  154. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  155. package/artifacts/contracts/shared/Service.sol/Service.json +488 -0
  156. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +114 -0
  158. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  160. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
  162. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  164. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +370 -0
  166. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  168. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestService.sol/TestService.json +588 -0
  170. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +104 -0
  176. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  177. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  178. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  179. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  180. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
  182. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  184. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
  186. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
  188. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  190. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/Fee.sol/FeeLib.json +312 -0
  192. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  193. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  194. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +166 -0
  196. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  197. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  198. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  200. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  202. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  204. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +142 -0
  206. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  208. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  210. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  212. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  214. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +280 -0
  216. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  218. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  219. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  220. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  222. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  224. package/contracts/components/Component.sol +250 -40
  225. package/contracts/components/Distribution.sol +285 -0
  226. package/contracts/components/IComponent.sol +90 -0
  227. package/contracts/components/IDistributionComponent.sol +71 -0
  228. package/contracts/components/IPoolComponent.sol +114 -0
  229. package/contracts/components/IProductComponent.sol +41 -0
  230. package/contracts/components/Pool.sol +291 -18
  231. package/contracts/components/Product.sol +340 -33
  232. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  233. package/contracts/instance/BundleManager.sol +126 -0
  234. package/contracts/instance/Cloneable.sol +51 -0
  235. package/contracts/instance/IInstance.sol +99 -15
  236. package/contracts/instance/IInstanceService.sol +63 -0
  237. package/contracts/instance/Instance.sol +297 -42
  238. package/contracts/instance/InstanceAccessManager.sol +527 -0
  239. package/contracts/instance/InstanceReader.sol +366 -0
  240. package/contracts/instance/InstanceService.sol +484 -0
  241. package/contracts/instance/InstanceServiceManager.sol +54 -0
  242. package/contracts/instance/ObjectManager.sol +82 -0
  243. package/contracts/instance/base/ComponentService.sol +130 -0
  244. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  245. package/contracts/instance/base/ILifecycle.sol +30 -0
  246. package/contracts/instance/base/KeyValueStore.sol +149 -0
  247. package/contracts/instance/base/Lifecycle.sol +120 -0
  248. package/contracts/instance/module/IAccess.sol +54 -0
  249. package/contracts/instance/module/IBundle.sol +23 -0
  250. package/contracts/instance/module/IComponents.sol +41 -0
  251. package/contracts/instance/module/IDistribution.sol +42 -0
  252. package/contracts/instance/module/IPolicy.sol +77 -0
  253. package/contracts/instance/module/IRisk.sol +11 -0
  254. package/contracts/instance/module/ISetup.sol +33 -0
  255. package/contracts/instance/module/ITreasury.sol +23 -0
  256. package/contracts/instance/service/ApplicationService.sol +356 -0
  257. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  258. package/contracts/instance/service/BundleService.sol +385 -0
  259. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  260. package/contracts/instance/service/ClaimService.sol +443 -0
  261. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  262. package/contracts/instance/service/DistributionService.sol +432 -0
  263. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  264. package/contracts/instance/service/IApplicationService.sol +79 -0
  265. package/contracts/instance/service/IBundleService.sol +118 -0
  266. package/contracts/instance/service/IClaimService.sol +90 -0
  267. package/contracts/instance/service/IDistributionService.sol +101 -0
  268. package/contracts/instance/service/IPolicyService.sol +80 -0
  269. package/contracts/instance/service/IPoolService.sol +114 -0
  270. package/contracts/instance/service/IProductService.sol +40 -0
  271. package/contracts/instance/service/PolicyService.sol +372 -0
  272. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  273. package/contracts/instance/service/PoolService.sol +403 -0
  274. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  275. package/contracts/instance/service/ProductService.sol +210 -0
  276. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  277. package/contracts/registry/ChainNft.sol +210 -0
  278. package/contracts/registry/IRegistry.sol +87 -52
  279. package/contracts/registry/IRegistryService.sol +66 -0
  280. package/contracts/registry/ITransferInterceptor.sol +7 -0
  281. package/contracts/registry/Registry.sol +399 -129
  282. package/contracts/registry/RegistryAccessManager.sol +216 -0
  283. package/contracts/registry/RegistryService.sol +282 -0
  284. package/contracts/registry/RegistryServiceManager.sol +62 -0
  285. package/contracts/registry/ReleaseManager.sol +324 -0
  286. package/contracts/registry/TokenRegistry.sol +116 -0
  287. package/contracts/shared/ContractDeployerLib.sol +72 -0
  288. package/contracts/shared/ERC165.sol +27 -0
  289. package/contracts/shared/INftOwnable.sol +23 -0
  290. package/contracts/shared/IPolicyHolder.sol +40 -0
  291. package/contracts/shared/IRegisterable.sol +15 -0
  292. package/contracts/shared/IRegistryLinked.sol +11 -0
  293. package/contracts/shared/IService.sol +18 -0
  294. package/contracts/shared/IVersionable.sol +53 -0
  295. package/contracts/shared/NftOwnable.sol +118 -0
  296. package/contracts/shared/PolicyHolder.sol +94 -0
  297. package/contracts/shared/ProxyManager.sol +169 -0
  298. package/contracts/shared/Registerable.sol +75 -0
  299. package/contracts/shared/RegistryLinked.sol +43 -0
  300. package/contracts/shared/Service.sol +72 -0
  301. package/contracts/shared/TokenHandler.sol +35 -0
  302. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  303. package/contracts/shared/Versionable.sol +59 -0
  304. package/contracts/test/TestFee.sol +25 -0
  305. package/contracts/test/TestRegisterable.sol +18 -0
  306. package/contracts/test/TestRoleId.sol +14 -0
  307. package/contracts/test/TestService.sol +25 -0
  308. package/contracts/test/TestToken.sol +26 -0
  309. package/contracts/test/TestVersion.sol +44 -0
  310. package/contracts/test/TestVersionable.sol +17 -0
  311. package/contracts/test/Usdc.sol +26 -0
  312. package/contracts/types/AddressSet.sol +58 -0
  313. package/contracts/types/Amount.sol +109 -0
  314. package/contracts/types/Blocknumber.sol +119 -0
  315. package/contracts/types/ChainId.sol +38 -0
  316. package/contracts/types/ClaimId.sol +75 -0
  317. package/contracts/types/DistributorType.sol +55 -0
  318. package/contracts/types/Fee.sol +65 -0
  319. package/contracts/types/Key32.sol +50 -0
  320. package/contracts/types/NftId.sol +80 -0
  321. package/contracts/types/NftIdSet.sol +62 -0
  322. package/contracts/types/NumberId.sol +52 -0
  323. package/contracts/types/ObjectType.sol +157 -0
  324. package/contracts/types/PayoutId.sol +82 -0
  325. package/contracts/types/Referral.sol +89 -0
  326. package/contracts/types/RiskId.sol +43 -0
  327. package/contracts/types/RoleId.sol +97 -0
  328. package/contracts/types/Seconds.sol +54 -0
  329. package/contracts/types/StateId.sol +110 -0
  330. package/contracts/types/Timestamp.sol +132 -0
  331. package/contracts/types/UFixed.sol +326 -0
  332. package/contracts/types/Version.sol +108 -0
  333. package/package.json +21 -6
  334. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  335. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  336. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  337. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  338. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  339. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  340. package/artifacts/contracts/experiment/A.sol/A.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/A.sol/A.json +0 -128
  342. package/artifacts/contracts/experiment/A.sol/AShared.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/A.sol/AShared.json +0 -42
  344. package/artifacts/contracts/experiment/B.sol/B.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/B.sol/B.json +0 -76
  346. package/artifacts/contracts/experiment/C.sol/C.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/C.sol/C.json +0 -89
  348. package/artifacts/contracts/experiment/IA.sol/IA.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/IA.sol/IA.json +0 -128
  350. package/artifacts/contracts/experiment/IA.sol/ISharedA.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/IA.sol/ISharedA.json +0 -37
  352. package/artifacts/contracts/experiment/IB.sol/IB.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/IB.sol/IB.json +0 -50
  354. package/artifacts/contracts/experiment/IC.sol/IC.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/IC.sol/IC.json +0 -63
  356. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  357. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  358. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  359. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  360. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  361. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  362. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  363. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  364. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  365. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  366. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  367. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
  368. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  369. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  370. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  371. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  372. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  373. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  374. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  375. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  376. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  377. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  378. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  379. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  380. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  381. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  382. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  383. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  385. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  386. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  387. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  388. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  389. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  390. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  391. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  392. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  393. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  394. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
  395. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  396. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  397. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  398. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  399. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  400. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  401. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  402. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  403. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  404. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  405. package/contracts/components/IPool.sol +0 -9
  406. package/contracts/components/IProduct.sol +0 -11
  407. package/contracts/experiment/A.sol +0 -56
  408. package/contracts/experiment/B.sol +0 -23
  409. package/contracts/experiment/C.sol +0 -28
  410. package/contracts/experiment/IA.sol +0 -18
  411. package/contracts/experiment/IB.sol +0 -9
  412. package/contracts/experiment/IC.sol +0 -11
  413. package/contracts/instance/access/Access.sol +0 -218
  414. package/contracts/instance/access/IAccess.sol +0 -83
  415. package/contracts/instance/component/ComponentModule.sol +0 -259
  416. package/contracts/instance/component/IComponent.sol +0 -94
  417. package/contracts/instance/policy/IPolicy.sol +0 -66
  418. package/contracts/instance/policy/PolicyModule.sol +0 -106
  419. package/contracts/instance/pool/IPoolModule.sol +0 -40
  420. package/contracts/instance/pool/PoolModule.sol +0 -83
  421. package/contracts/instance/product/IProductService.sol +0 -45
  422. package/contracts/instance/product/ProductService.sol +0 -105
@@ -0,0 +1,385 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IBundle} from "../../instance/module/IBundle.sol";
5
+ import {IComponents} from "../module/IComponents.sol";
6
+ import {IRegistry} from "../../registry/IRegistry.sol";
7
+ import {IInstance} from "../../instance/IInstance.sol";
8
+ import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
+ import {ISetup} from "../module/ISetup.sol";
10
+ import {IPolicy} from "../module/IPolicy.sol";
11
+
12
+ import {IVersionable} from "../../shared/IVersionable.sol";
13
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
14
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
15
+ import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
16
+ import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
17
+ import {Pool} from "../../components/Pool.sol";
18
+
19
+ import {Amount, AmountLib} from "../../types/Amount.sol";
20
+ import {Fee, FeeLib} from "../../types/Fee.sol";
21
+ import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../../types/StateId.sol";
22
+ import {Seconds} from "../../types/Seconds.sol";
23
+ import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
24
+ import {Version, VersionLib} from "../../types/Version.sol";
25
+ import {Versionable} from "../../shared/Versionable.sol";
26
+
27
+ import {IService} from "../../shared/IService.sol";
28
+ import {Service} from "../../shared/Service.sol";
29
+ import {BundleManager} from "../BundleManager.sol";
30
+ import {ComponentService} from "../base/ComponentService.sol";
31
+ import {IBundleService} from "./IBundleService.sol";
32
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
33
+ import {InstanceService} from "../InstanceService.sol";
34
+ import {InstanceReader} from "../InstanceReader.sol";
35
+
36
+ string constant BUNDLE_SERVICE_NAME = "BundleService";
37
+
38
+ contract BundleService is
39
+ ComponentService,
40
+ IBundleService
41
+ {
42
+ using NftIdLib for NftId;
43
+
44
+ string public constant NAME = "BundleService";
45
+
46
+ address internal _registryAddress;
47
+
48
+ function _initialize(
49
+ address owner,
50
+ bytes memory data
51
+ )
52
+ internal
53
+ initializer
54
+ virtual override
55
+ {
56
+ address registryAddress;
57
+ address initialOwner;
58
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
59
+ // TODO while PoolService is not deployed in PoolServiceManager constructor
60
+ // owner is PoolServiceManager deployer
61
+ initializeService(registryAddress, address(0), owner);
62
+ registerInterface(type(IBundleService).interfaceId);
63
+ }
64
+
65
+ function getDomain() public pure override returns(ObjectType) {
66
+ return BUNDLE();
67
+ }
68
+
69
+ // TODO staking/unstaking as well as collateralize need to go to pool service
70
+ // it will also be the pool service that is updating the pool info data
71
+ // collateralize -> potentially accumulate pool fees
72
+ // collateralize: additional reason to move to pool, pool might has retential level < 1 ...
73
+ // staking -> potentially accumulate staking fees
74
+ // unstaking -> potentially accumulate performance fees
75
+ function _updatePoolWithStakes(
76
+ IInstance instance,
77
+ NftId poolNftId,
78
+ Amount stakingAmount
79
+ )
80
+ internal
81
+ returns (
82
+ TokenHandler tokenHandler,
83
+ address wallet,
84
+ Amount netStakingAmount
85
+ )
86
+ {
87
+ if(stakingAmount.gtz()) {
88
+ InstanceReader instanceReader = instance.getInstanceReader();
89
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
90
+
91
+ tokenHandler = componentInfo.tokenHandler;
92
+ wallet = componentInfo.wallet;
93
+
94
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
95
+ Amount poolFeeAmount;
96
+
97
+ // calculate pool fee and net staking amount
98
+ (poolFeeAmount, netStakingAmount) = FeeLib.calculateFee(poolInfo.stakingFee, stakingAmount);
99
+
100
+ // update pool balance and fee amount
101
+ poolInfo.balanceAmount = poolInfo.balanceAmount + netStakingAmount;
102
+
103
+ if(poolFeeAmount.gtz()) {
104
+ poolInfo.feeAmount = poolInfo.feeAmount + poolFeeAmount;
105
+ }
106
+
107
+ // save updated pool info
108
+ componentInfo.data = abi.encode(poolInfo);
109
+ instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
110
+ }
111
+ }
112
+
113
+
114
+ function create(
115
+ IInstance instance,
116
+ NftId poolNftId,
117
+ address owner,
118
+ Fee memory bundleFee,
119
+ Amount stakingAmount,
120
+ Seconds lifetime,
121
+ bytes calldata filter
122
+ )
123
+ external
124
+ override
125
+ // TODO add restricted and add authz for pool service
126
+ returns(NftId bundleNftId)
127
+ {
128
+ // register bundle with registry
129
+ bundleNftId = getRegistryService().registerBundle(
130
+ IRegistry.ObjectInfo(
131
+ zeroNftId(),
132
+ poolNftId,
133
+ BUNDLE(),
134
+ false, // intercepting property for bundles is defined on pool
135
+ address(0),
136
+ owner,
137
+ "" // bundle data to be stored in registry
138
+ )
139
+ );
140
+
141
+ // create bundle info in instance
142
+ instance.createBundle(
143
+ bundleNftId,
144
+ IBundle.BundleInfo(
145
+ poolNftId,
146
+ bundleFee,
147
+ filter,
148
+ stakingAmount,
149
+ AmountLib.zero(),
150
+ AmountLib.zero(),
151
+ lifetime,
152
+ TimestampLib.blockTimestamp().addSeconds(lifetime),
153
+ zeroTimestamp()));
154
+
155
+ // put bundle under bundle managemet
156
+ BundleManager bundleManager = instance.getBundleManager();
157
+ bundleManager.add(bundleNftId);
158
+
159
+ // TODO add logging
160
+ }
161
+
162
+
163
+ function setFee(
164
+ NftId bundleNftId,
165
+ Fee memory fee
166
+ )
167
+ external
168
+ override
169
+ {
170
+ (NftId poolNftId, IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
171
+ InstanceReader instanceReader = instance.getInstanceReader();
172
+
173
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
174
+ if(bundleInfo.poolNftId.eqz()) {
175
+ revert ErrorBundleServiceBundleUnknown(bundleNftId);
176
+ }
177
+
178
+ if(bundleInfo.poolNftId != poolNftId) {
179
+ revert ErrorBundleServiceBundlePoolMismatch(poolNftId, bundleInfo.poolNftId );
180
+ }
181
+
182
+ bundleInfo.fee = fee;
183
+
184
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
185
+ }
186
+
187
+
188
+ // the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
189
+ function lockCollateral(
190
+ IInstance instance,
191
+ NftId policyNftId,
192
+ NftId bundleNftId,
193
+ Amount collateralAmount, // required amount to collateralize policy
194
+ Amount premiumAmount // premium part that reaches bundle for this policy
195
+ )
196
+ external
197
+ onlyService // TODO replace with restricted + appropriate granting
198
+ {
199
+ InstanceReader instanceReader = instance.getInstanceReader();
200
+ StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
201
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
202
+
203
+ // ensure bundle is active and not yet expired
204
+ if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
205
+ revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
206
+ }
207
+
208
+ // ensure bundle capacity is sufficent to collateralize policy
209
+ Amount capacity = bundleInfo.capitalAmount + premiumAmount - bundleInfo.lockedAmount;
210
+ if(capacity < collateralAmount) {
211
+ revert ErrorBundleServiceCapacityInsufficient(bundleNftId, capacity, collateralAmount);
212
+ }
213
+
214
+ // TODO add more validation
215
+
216
+ // updated locked amount
217
+ bundleInfo.lockedAmount = bundleInfo.lockedAmount + collateralAmount;
218
+
219
+ // update capital and fees when premiums are involved
220
+ _updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
221
+
222
+ // link policy to bundle in bundle manger
223
+ _linkPolicy(instance, policyNftId);
224
+ }
225
+
226
+
227
+ function _updateBundleWithPremium(
228
+ IInstance instance,
229
+ NftId bundleNftId,
230
+ IBundle.BundleInfo memory bundleInfo,
231
+ Amount premiumAmount
232
+ )
233
+ internal
234
+ {
235
+ // update bundle capital and fee amounts
236
+ if(premiumAmount.gtz()) {
237
+ // calculate fees and net premium amounts
238
+ (
239
+ ,
240
+ Amount netPremiumAmount
241
+ ) = FeeLib.calculateFee(bundleInfo.fee, premiumAmount);
242
+
243
+ // update bundle info with additional capital
244
+ bundleInfo.capitalAmount = bundleInfo.capitalAmount + netPremiumAmount;
245
+ }
246
+
247
+ // save updated bundle info
248
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
249
+ }
250
+
251
+ function updateBundleFees(
252
+ IInstance instance,
253
+ NftId bundleNftId,
254
+ Amount feeAmount
255
+ )
256
+ external
257
+ {
258
+ IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
259
+ bundleInfo.feeAmount = bundleInfo.feeAmount.add(feeAmount);
260
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
261
+ }
262
+
263
+
264
+ function lock(NftId bundleNftId)
265
+ external
266
+ virtual
267
+ {
268
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
269
+
270
+ // udpate bundle state
271
+ instance.updateBundleState(bundleNftId, PAUSED());
272
+
273
+ // update set of active bundles
274
+ BundleManager bundleManager = instance.getBundleManager();
275
+ bundleManager.lock(bundleNftId);
276
+
277
+ emit LogBundleServiceBundleLocked(bundleNftId);
278
+ }
279
+
280
+
281
+ function unlock(NftId bundleNftId)
282
+ external
283
+ virtual
284
+ {
285
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
286
+
287
+ // udpate bundle state
288
+ instance.updateBundleState(bundleNftId, ACTIVE());
289
+
290
+ // update set of active bundles
291
+ BundleManager bundleManager = instance.getBundleManager();
292
+ bundleManager.unlock(bundleNftId);
293
+
294
+ emit LogBundleServiceBundleActivated(bundleNftId);
295
+ }
296
+
297
+
298
+ function close(
299
+ IInstance instance,
300
+ NftId bundleNftId
301
+ )
302
+ external
303
+ virtual
304
+ // TODO add restricted and autz for pool service
305
+ {
306
+ // udpate bundle state
307
+ instance.updateBundleState(bundleNftId, CLOSED());
308
+
309
+ // ensure no open policies attached to bundle
310
+ BundleManager bundleManager = instance.getBundleManager();
311
+ uint256 openPolicies = bundleManager.activePolicies(bundleNftId);
312
+ if(openPolicies > 0) {
313
+ revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
314
+ }
315
+
316
+ // update set of active bundles
317
+ bundleManager.lock(bundleNftId);
318
+ }
319
+
320
+
321
+ function increaseBalance(
322
+ IInstance instance,
323
+ NftId bundleNftId,
324
+ Amount premiumAmount
325
+ )
326
+ external
327
+ onlyService
328
+ {
329
+ InstanceReader instanceReader = instance.getInstanceReader();
330
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
331
+
332
+ // update capital and fees when premiums are involved
333
+ _updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
334
+
335
+ // TODO add logging (?)
336
+ }
337
+
338
+ function releaseCollateral(IInstance instance,
339
+ NftId policyNftId,
340
+ NftId bundleNftId,
341
+ Amount collateralAmount
342
+ )
343
+ external
344
+ onlyService
345
+ {
346
+ InstanceReader instanceReader = instance.getInstanceReader();
347
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
348
+
349
+ // reduce locked amount by released collateral amount
350
+ bundleInfo.lockedAmount = bundleInfo.lockedAmount - collateralAmount;
351
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
352
+ }
353
+
354
+ /// @dev links policy to bundle
355
+ function _linkPolicy(IInstance instance, NftId policyNftId)
356
+ internal
357
+ {
358
+ InstanceReader instanceReader = instance.getInstanceReader();
359
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
360
+
361
+ // ensure policy has not yet been activated in a previous tx already
362
+ if (policyInfo.activatedAt.gtz() && policyInfo.activatedAt < TimestampLib.blockTimestamp()) {
363
+ revert BundleManager.ErrorBundleManagerPolicyAlreadyActivated(policyNftId);
364
+ }
365
+
366
+ BundleManager bundleManager = instance.getBundleManager();
367
+ bundleManager.linkPolicy(policyNftId);
368
+ }
369
+
370
+ /// @dev unlinks policy from bundle
371
+ function unlinkPolicy(
372
+ IInstance instance,
373
+ NftId policyNftId
374
+ )
375
+ external
376
+ virtual
377
+ {
378
+ // ensure policy is closeable
379
+ if (!instance.getInstanceReader().policyIsCloseable(policyNftId)) {
380
+ revert ErrorBundleServicePolicyNotCloseable(policyNftId);
381
+ }
382
+
383
+ instance.getBundleManager().unlinkPolicy(policyNftId);
384
+ }
385
+ }
@@ -0,0 +1,51 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {BundleService} from "./BundleService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {ObjectType, REGISTRY} from "../../types/ObjectType.sol";
10
+
11
+ contract BundleServiceManager is ProxyManager {
12
+
13
+ BundleService private _bundleService;
14
+
15
+ /// @dev initializes proxy manager with pool service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager(registryAddress)
20
+ {
21
+ BundleService bundleSrv = new BundleService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(bundleSrv),
25
+ data);
26
+
27
+ _bundleService = BundleService(address(versionable));
28
+
29
+ // TODO `this` must have a role or own nft to register service
30
+ //Registry registry = Registry(registryAddress);
31
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _bundleService.getMajorVersion());
32
+ //RegistryService registryService = RegistryService(registryServiceAddress);
33
+ //registryService.registerService(_poolService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_poolService));
40
+ }
41
+
42
+ //--- view functions ----------------------------------------------------//
43
+ function getBundleService()
44
+ external
45
+ view
46
+ returns (BundleService)
47
+ {
48
+ return _bundleService;
49
+ }
50
+
51
+ }