@etherisc/gif-next 0.0.2-ca9d515-311 → 0.0.2-cbfb727-329

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 (508) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1376 -0
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +780 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +1000 -0
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +840 -0
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +73 -83
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +283 -1354
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +314 -183
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +367 -2999
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +602 -194
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +426 -279
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +443 -503
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +278 -174
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
  32. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  33. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +6 -1
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  36. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  37. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +44 -14
  38. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  39. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +38 -13
  40. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
  42. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  43. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
  44. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  46. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  47. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  52. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  53. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  54. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  55. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  56. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  57. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +329 -263
  58. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  59. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1095 -0
  60. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  61. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  62. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  63. package/artifacts/contracts/pool/Pool.sol/Pool.json +1407 -0
  64. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  65. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  66. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
  68. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  69. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  70. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
  72. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  73. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1376 -0
  74. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
  76. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  77. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → product/IApplicationService.sol/IApplicationService.json} +231 -204
  78. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +743 -0
  80. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  81. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +277 -290
  82. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  83. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IPricingService.sol/IPricingService.json} +254 -243
  84. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  85. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +861 -0
  86. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  87. package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +85 -179
  88. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  90. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  92. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  93. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  94. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  96. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  97. package/artifacts/contracts/product/Product.sol/Product.json +1198 -0
  98. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  99. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  100. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +244 -133
  106. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +147 -236
  108. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  110. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/Registry.sol/Registry.json +261 -239
  112. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  113. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  114. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +195 -338
  116. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +286 -146
  118. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  120. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +132 -57
  122. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  123. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  124. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  125. package/artifacts/contracts/shared/Component.sol/Component.json +873 -0
  126. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  127. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +631 -0
  128. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  130. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  131. package/artifacts/contracts/{components/BaseComponent.sol/BaseComponent.json → shared/IComponent.sol/IComponent.json} +257 -74
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
  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 +1 -1
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -34
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  139. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  140. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  141. package/artifacts/contracts/shared/IService.sol/IService.json +84 -178
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +109 -29
  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 +1 -1
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +285 -65
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -53
  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 +1 -1
  155. package/artifacts/contracts/shared/Service.sol/Service.json +185 -165
  156. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  158. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  160. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  162. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  163. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → staking/IStakingService.sol/IStakingService.json} +209 -207
  164. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  165. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +628 -0
  166. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  167. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
  168. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  169. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  170. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  171. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  172. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  173. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  174. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  175. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  176. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  177. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  178. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  179. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  180. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  181. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  182. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  183. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
  184. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  185. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  186. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  187. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  188. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  190. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  191. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  192. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  194. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  196. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  197. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -0
  198. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  200. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  201. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +39 -8
  202. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  203. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  204. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  205. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  206. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  207. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  208. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  209. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  210. package/contracts/distribution/Distribution.sol +285 -0
  211. package/contracts/distribution/DistributionService.sol +348 -0
  212. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +11 -14
  213. package/contracts/distribution/IDistributionComponent.sol +71 -0
  214. package/contracts/distribution/IDistributionService.sol +87 -0
  215. package/contracts/instance/BundleManager.sol +22 -25
  216. package/contracts/instance/IInstance.sol +56 -39
  217. package/contracts/instance/IInstanceService.sol +55 -14
  218. package/contracts/instance/Instance.sol +145 -381
  219. package/contracts/instance/InstanceAccessManager.sol +431 -178
  220. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  221. package/contracts/instance/InstanceReader.sol +102 -49
  222. package/contracts/instance/InstanceService.sol +241 -194
  223. package/contracts/instance/InstanceServiceManager.sol +6 -9
  224. package/contracts/instance/InstanceStore.sol +211 -0
  225. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +8 -3
  226. package/contracts/instance/base/IKeyValueStore.sol +5 -5
  227. package/contracts/instance/base/ILifecycle.sol +3 -3
  228. package/contracts/instance/base/KeyValueStore.sol +22 -42
  229. package/contracts/instance/base/Lifecycle.sol +27 -7
  230. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +16 -35
  231. package/contracts/instance/module/IAccess.sol +37 -21
  232. package/contracts/instance/module/IBundle.sol +11 -8
  233. package/contracts/instance/module/IComponents.sol +41 -0
  234. package/contracts/instance/module/IDistribution.sol +7 -4
  235. package/contracts/instance/module/IPolicy.sol +47 -15
  236. package/contracts/instance/module/IRisk.sol +1 -1
  237. package/contracts/instance/module/ISetup.sol +9 -22
  238. package/contracts/instance/module/ITreasury.sol +2 -2
  239. package/contracts/pool/BundleService.sol +382 -0
  240. package/contracts/{instance/service → pool}/BundleServiceManager.sol +10 -13
  241. package/contracts/pool/IBundleService.sol +118 -0
  242. package/contracts/pool/IPoolComponent.sol +114 -0
  243. package/contracts/pool/IPoolService.sol +114 -0
  244. package/contracts/pool/Pool.sol +302 -0
  245. package/contracts/pool/PoolService.sol +403 -0
  246. package/contracts/{instance/service → pool}/PoolServiceManager.sol +10 -13
  247. package/contracts/product/ApplicationService.sol +186 -0
  248. package/contracts/product/ApplicationServiceManager.sol +35 -0
  249. package/contracts/product/ClaimService.sol +437 -0
  250. package/contracts/product/ClaimServiceManager.sol +35 -0
  251. package/contracts/product/IApplicationService.sol +62 -0
  252. package/contracts/product/IClaimService.sol +90 -0
  253. package/contracts/product/IPolicyService.sol +80 -0
  254. package/contracts/product/IPricingService.sol +37 -0
  255. package/contracts/product/IProductComponent.sol +41 -0
  256. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  257. package/contracts/product/PolicyService.sol +376 -0
  258. package/contracts/{instance/service → product}/PolicyServiceManager.sol +7 -7
  259. package/contracts/product/PricingService.sol +275 -0
  260. package/contracts/product/PricingServiceManager.sol +51 -0
  261. package/contracts/product/Product.sol +375 -0
  262. package/contracts/product/ProductService.sol +210 -0
  263. package/contracts/{instance/service → product}/ProductServiceManager.sol +7 -7
  264. package/contracts/registry/ChainNft.sol +9 -1
  265. package/contracts/registry/IRegistry.sol +42 -22
  266. package/contracts/registry/IRegistryService.sol +32 -16
  267. package/contracts/registry/ITransferInterceptor.sol +1 -0
  268. package/contracts/registry/Registry.sol +243 -224
  269. package/contracts/registry/RegistryAccessManager.sol +216 -0
  270. package/contracts/registry/RegistryService.sol +109 -182
  271. package/contracts/registry/RegistryServiceManager.sol +21 -41
  272. package/contracts/registry/ReleaseManager.sol +324 -0
  273. package/contracts/registry/TokenRegistry.sol +22 -17
  274. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  275. package/contracts/shared/Component.sol +271 -0
  276. package/contracts/shared/ComponentService.sol +150 -0
  277. package/contracts/shared/ERC165.sol +14 -12
  278. package/contracts/shared/IComponent.sol +90 -0
  279. package/contracts/shared/INftOwnable.sol +12 -11
  280. package/contracts/shared/IPolicyHolder.sol +40 -0
  281. package/contracts/shared/IRegisterable.sol +4 -6
  282. package/contracts/shared/IRegistryLinked.sol +11 -0
  283. package/contracts/shared/IService.sol +7 -4
  284. package/contracts/shared/IVersionable.sol +5 -48
  285. package/contracts/shared/NftOwnable.sol +64 -80
  286. package/contracts/shared/PolicyHolder.sol +94 -0
  287. package/contracts/shared/ProxyManager.sol +100 -25
  288. package/contracts/shared/Registerable.sol +26 -41
  289. package/contracts/shared/RegistryLinked.sol +43 -0
  290. package/contracts/shared/Service.sol +41 -24
  291. package/contracts/shared/TokenHandler.sol +14 -6
  292. package/contracts/shared/Versionable.sol +4 -92
  293. package/contracts/staking/IStakingService.sol +102 -0
  294. package/contracts/staking/StakeingServiceManager.sol +37 -0
  295. package/contracts/staking/StakingService.sol +166 -0
  296. package/contracts/type/Amount.sol +109 -0
  297. package/contracts/{types → type}/Blocknumber.sol +1 -0
  298. package/contracts/type/ClaimId.sol +75 -0
  299. package/contracts/{types → type}/DistributorType.sol +2 -2
  300. package/contracts/{types → type}/Fee.sol +17 -8
  301. package/contracts/{types → type}/NftId.sol +8 -0
  302. package/contracts/{types → type}/NftIdSet.sol +1 -1
  303. package/contracts/{types → type}/ObjectType.sol +16 -7
  304. package/contracts/type/PayoutId.sol +82 -0
  305. package/contracts/{types → type}/Referral.sol +4 -0
  306. package/contracts/{types → type}/RoleId.sol +26 -21
  307. package/contracts/type/Seconds.sol +54 -0
  308. package/contracts/{types → type}/StateId.sol +7 -2
  309. package/contracts/{types → type}/Timestamp.sol +18 -13
  310. package/contracts/{types → type}/UFixed.sol +1 -0
  311. package/contracts/{types → type}/Version.sol +1 -0
  312. package/package.json +3 -3
  313. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  314. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  315. package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -744
  316. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  317. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -368
  318. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  319. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -152
  320. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  321. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -275
  322. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  323. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -157
  324. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  325. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -939
  326. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  327. package/artifacts/contracts/components/Product.sol/Product.json +0 -855
  328. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  330. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  332. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  334. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  336. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  338. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  340. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  342. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  344. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  346. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  348. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  351. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  352. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  353. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  354. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  355. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  356. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  357. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  358. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  359. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  360. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  361. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  362. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  363. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  364. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  365. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  366. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  367. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  368. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  369. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  370. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  371. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  372. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  373. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  374. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  375. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  376. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  377. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +0 -285
  378. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  379. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  380. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  381. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  382. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -923
  383. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  384. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -440
  385. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  386. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  387. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  388. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -684
  389. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  390. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -428
  391. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  392. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  393. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  394. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +0 -446
  395. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  396. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  397. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  398. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  399. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -984
  400. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  401. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -464
  402. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  403. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -718
  404. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  405. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -428
  406. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  407. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -768
  408. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  409. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -420
  410. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  411. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  412. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  413. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  414. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  415. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  416. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  417. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -305
  418. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  419. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  420. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  421. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -600
  422. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  423. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  424. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  425. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  426. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  427. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -286
  428. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  429. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  430. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  431. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  432. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  433. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  434. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  435. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  436. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  437. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  438. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  439. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  440. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  441. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  442. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  443. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  444. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  445. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -123
  446. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  447. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  448. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  449. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  450. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  451. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  452. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  453. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  454. package/contracts/components/BaseComponent.sol +0 -132
  455. package/contracts/components/Distribution.sol +0 -163
  456. package/contracts/components/IBaseComponent.sol +0 -31
  457. package/contracts/components/IDistributionComponent.sol +0 -44
  458. package/contracts/components/IPoolComponent.sol +0 -66
  459. package/contracts/components/IProductComponent.sol +0 -35
  460. package/contracts/components/Pool.sol +0 -271
  461. package/contracts/components/Product.sol +0 -292
  462. package/contracts/experiment/cloning/Cloner.sol +0 -47
  463. package/contracts/experiment/errors/Require.sol +0 -38
  464. package/contracts/experiment/errors/Revert.sol +0 -44
  465. package/contracts/experiment/inheritance/A.sol +0 -53
  466. package/contracts/experiment/inheritance/B.sol +0 -28
  467. package/contracts/experiment/inheritance/C.sol +0 -34
  468. package/contracts/experiment/inheritance/IA.sol +0 -13
  469. package/contracts/experiment/inheritance/IB.sol +0 -10
  470. package/contracts/experiment/inheritance/IC.sol +0 -12
  471. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  472. package/contracts/experiment/statemachine/ISM.sol +0 -25
  473. package/contracts/experiment/statemachine/SM.sol +0 -57
  474. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  475. package/contracts/experiment/types/TypeA.sol +0 -47
  476. package/contracts/experiment/types/TypeB.sol +0 -29
  477. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  478. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  479. package/contracts/instance/IInstanceBase.sol +0 -26
  480. package/contracts/instance/InstanceBase.sol +0 -41
  481. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  482. package/contracts/instance/base/IInstanceBase.sol +0 -23
  483. package/contracts/instance/service/BundleService.sol +0 -260
  484. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  485. package/contracts/instance/service/DistributionService.sol +0 -118
  486. package/contracts/instance/service/IBundleService.sol +0 -45
  487. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  488. package/contracts/instance/service/IDistributionService.sol +0 -12
  489. package/contracts/instance/service/IPolicyService.sol +0 -87
  490. package/contracts/instance/service/IPoolService.sol +0 -20
  491. package/contracts/instance/service/PolicyService.sol +0 -508
  492. package/contracts/instance/service/PoolService.sol +0 -124
  493. package/contracts/instance/service/ProductService.sol +0 -173
  494. package/contracts/shared/ContractDeployerLib.sol +0 -72
  495. package/contracts/shared/RegisterableUpgradable.sol +0 -16
  496. package/contracts/test/TestFee.sol +0 -25
  497. package/contracts/test/TestRegisterable.sol +0 -18
  498. package/contracts/test/TestRoleId.sol +0 -14
  499. package/contracts/test/TestService.sol +0 -24
  500. package/contracts/test/TestToken.sol +0 -26
  501. package/contracts/test/TestVersion.sol +0 -44
  502. package/contracts/test/TestVersionable.sol +0 -17
  503. package/contracts/test/Usdc.sol +0 -26
  504. package/contracts/types/ChainId.sol +0 -38
  505. package/contracts/types/NumberId.sol +0 -52
  506. /package/contracts/{types → type}/AddressSet.sol +0 -0
  507. /package/contracts/{types → type}/Key32.sol +0 -0
  508. /package/contracts/{types → type}/RiskId.sol +0 -0
@@ -0,0 +1,41 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {Amount} from "../../type/Amount.sol";
7
+ import {Fee} from "../../type/Fee.sol";
8
+ import {NftId} from "../../type/NftId.sol";
9
+ import {RoleId} from "../../type/RoleId.sol";
10
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
11
+ import {UFixed} from "../../type/UFixed.sol";
12
+
13
+ interface IComponents {
14
+
15
+ struct ComponentInfo {
16
+ string name; // component name (needs to be unique per instance)
17
+ IERC20Metadata token;
18
+ TokenHandler tokenHandler;
19
+ address wallet;
20
+ Amount balanceAmount; // calculated balance (may not necessarily match withg wallet balance)
21
+ Amount feeAmount; // accumulated fees belonging to component owner
22
+ bytes data; // will hold component type specific additional info (eg encoded pool info)
23
+ }
24
+
25
+ struct PoolInfo {
26
+ NftId productNftId; // the nft of the product this pool is linked to
27
+ RoleId bundleOwnerRole; // the required role for bundle owners
28
+ // TODO maxCapitalAmount -> maxBalanceAmount
29
+ Amount maxCapitalAmount; // max capital amount allowed for pool
30
+ Amount balanceAmount; // current pool balance (accounting view)
31
+ Amount feeAmount; // accumulated fee amount
32
+ bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
33
+ bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
34
+ bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
35
+ UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
36
+ UFixed retentionLevel; // amount of collateral held in pool (default 100%)
37
+ Fee poolFee; // pool fee on net premium
38
+ Fee stakingFee; // pool fee on staked capital from investor
39
+ Fee performanceFee; // pool fee on profits from capital investors
40
+ }
41
+ }
@@ -1,10 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {DistributorType} from "../../types/DistributorType.sol";
5
- import {NftId} from "../../types/NftId.sol";
6
- import {Timestamp} from "../../types/Timestamp.sol";
7
- import {UFixed} from "../../types/UFixed.sol";
4
+ import {Amount} from "../../type/Amount.sol";
5
+ import {DistributorType} from "../../type/DistributorType.sol";
6
+ import {NftId} from "../../type/NftId.sol";
7
+ import {Timestamp} from "../../type/Timestamp.sol";
8
+ import {UFixed} from "../../type/UFixed.sol";
8
9
 
9
10
  interface IDistribution {
10
11
 
@@ -24,6 +25,8 @@ interface IDistribution {
24
25
  DistributorType distributorType;
25
26
  bool active;
26
27
  bytes data;
28
+ Amount commissionAmount;
29
+ uint32 numPoliciesSold;
27
30
  }
28
31
 
29
32
  struct ReferralInfo {
@@ -1,27 +1,56 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../../types/NftId.sol";
5
- import {NumberId} from "../../types/NumberId.sol";
6
- import {ReferralId} from "../../types/Referral.sol";
7
- import {RiskId} from "../../types/RiskId.sol";
8
- import {Timestamp} from "../../types/Timestamp.sol";
4
+ import {Amount} from "../../type/Amount.sol";
5
+ import {NftId} from "../../type/NftId.sol";
6
+ import {ClaimId} from "../../type/ClaimId.sol";
7
+ import {ReferralId} from "../../type/Referral.sol";
8
+ import {RiskId} from "../../type/RiskId.sol";
9
+ import {Seconds} from "../../type/Seconds.sol";
10
+ import {Timestamp} from "../../type/Timestamp.sol";
9
11
 
10
12
  interface IPolicy {
13
+
14
+ struct Premium {
15
+ // this is the net premium calculated by the product
16
+ uint256 netPremiumAmount;
17
+ // fullPremium = netPremium + all fixed amounts + all variable amounts (excl commission and minDistribtuionOwnerFee variable part)
18
+ uint256 fullPremiumAmount;
19
+ // premium = fullPremium - discount
20
+ uint256 premiumAmount;
21
+ uint256 productFeeFixAmount;
22
+ uint256 poolFeeFixAmount;
23
+ uint256 bundleFeeFixAmount;
24
+ uint256 distributionFeeFixAmount;
25
+ uint256 productFeeVarAmount;
26
+ uint256 poolFeeVarAmount;
27
+ uint256 bundleFeeVarAmount;
28
+ uint256 distributionFeeVarAmount;
29
+ uint256 distributionOwnerFeeFixAmount;
30
+ // this is the remaining amount when the commission and discount are subtracted from the distribution fee variable part (must be at least the minDistributionOwnerFee)
31
+ uint256 distributionOwnerFeeVarAmount;
32
+ // this value is based on distributor type referenced in the referral
33
+ uint256 commissionAmount;
34
+ // this is based on referral used
35
+ uint256 discountAmount;
36
+ }
37
+
38
+ /// @dev policy data for the full policy lifecycle
11
39
  struct PolicyInfo {
12
40
  NftId productNftId;
13
41
  NftId bundleNftId;
14
42
  ReferralId referralId;
15
43
  RiskId riskId;
16
- uint256 sumInsuredAmount;
17
- uint256 premiumAmount;
18
- uint256 premiumPaidAmount;
19
- uint256 lifetime;
44
+ Amount sumInsuredAmount;
45
+ Amount premiumAmount;
46
+ Amount premiumPaidAmount; // when lower than premium amount: max payout decreased accordingly
47
+ Seconds lifetime;
20
48
  bytes applicationData;
21
49
  bytes policyData;
22
50
  uint16 claimsCount;
23
51
  uint16 openClaimsCount;
24
- uint256 payoutAmount;
52
+ Amount claimAmount; // sum of confirmed claim amounts (max = sum insured amount)
53
+ Amount payoutAmount; // sum of payouts (max = sum confirmed claim amountst)
25
54
  Timestamp activatedAt; // time of underwriting
26
55
  Timestamp expiredAt; // no new claims (activatedAt + lifetime)
27
56
  Timestamp closedAt; // no locked capital (or declinedAt)
@@ -29,16 +58,19 @@ interface IPolicy {
29
58
 
30
59
  // claimId neeeds to be encoded policyNftId:claimId combination
31
60
  struct ClaimInfo {
32
- uint256 claimAmount;
33
- uint256 paidAmount;
61
+ Amount claimAmount;
62
+ Amount paidAmount;
63
+ uint8 payoutsCount;
64
+ uint8 openPayoutsCount;
34
65
  bytes data;
35
- Timestamp closedAt; // payoment of confirmed claim amount (or declinedAt)
66
+ // TODO consider to add processData that may include information supporting confirm or decline
67
+ Timestamp closedAt; // payment of confirmed claim amount (or declinedAt)
36
68
  }
37
69
 
38
70
  // claimId neeeds to be encoded policyNftId:claimId combination
39
71
  struct PayoutInfo {
40
- NumberId claimId;
41
- uint256 amount;
72
+ ClaimId claimId;
73
+ Amount amount;
42
74
  bytes data;
43
75
  Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
44
76
  }
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../../types/NftId.sol";
4
+ import {NftId} from "../../type/NftId.sol";
5
5
 
6
6
  interface IRisk {
7
7
  struct RiskInfo {
@@ -3,23 +3,21 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
- import {Fee} from "../../types/Fee.sol";
7
- import {NftId} from "../../types/NftId.sol";
8
- import {UFixed} from "../../types/UFixed.sol";
6
+ import {Fee} from "../../type/Fee.sol";
7
+ import {NftId} from "../../type/NftId.sol";
8
+ import {RoleId} from "../../type/RoleId.sol";
9
9
  import {TokenHandler} from "../../shared/TokenHandler.sol";
10
+ import {UFixed} from "../../type/UFixed.sol";
10
11
 
11
12
  interface ISetup {
13
+
12
14
  struct ProductSetupInfo {
13
15
  IERC20Metadata token;
14
16
  TokenHandler tokenHandler;
15
17
  NftId distributionNftId;
16
18
  NftId poolNftId;
17
- Fee distributionFee; // default distribution fee (no referral id)
18
19
  Fee productFee; // product fee on net premium
19
- Fee processingFee; // product fee on payout amounts
20
- Fee poolFee; // pool fee on net premium
21
- Fee stakingFee; // pool fee on staked capital from investor
22
- Fee performanceFee; // pool fee on profits from capital investors
20
+ Fee processingFee; // product fee on payout amounts
23
21
  bool isIntercepting; // intercepts nft transfers (for products)
24
22
  address wallet;
25
23
  }
@@ -27,20 +25,9 @@ interface ISetup {
27
25
  struct DistributionSetupInfo {
28
26
  NftId productNftId;
29
27
  TokenHandler tokenHandler;
30
- Fee distributionFee; // default distribution fee (no referral id)
31
- bool isIntercepting; // intercepts nft transfers (for distributors)
32
- address wallet;
33
- }
34
-
35
- struct PoolSetupInfo {
36
- NftId productNftId;
37
- TokenHandler tokenHandler;
38
- UFixed collateralizationLevel;
39
- Fee poolFee; // pool fee on net premium
40
- Fee stakingFee; // pool fee on staked capital from investor
41
- Fee performanceFee; // pool fee on profits from capital investors
42
- bool isIntercepting; // intercepts nft transfers (for bundles)
43
- bool isConfirmingApplication; // confirms applications before they are underwritten
28
+ Fee minDistributionOwnerFee;
29
+ Fee distributionFee; // recalculated whenever any fee on the product/pool/dist/disttype is changed
44
30
  address wallet;
31
+ uint256 sumDistributionOwnerFees;
45
32
  }
46
33
  }
@@ -3,8 +3,8 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
- import {Fee} from "../../types/Fee.sol";
7
- import {NftId} from "../../types/NftId.sol";
6
+ import {Fee} from "../../type/Fee.sol";
7
+ import {NftId} from "../../type/NftId.sol";
8
8
  import {TokenHandler} from "../../shared/TokenHandler.sol";
9
9
 
10
10
  interface ITreasury {
@@ -0,0 +1,382 @@
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 "../instance/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 "../instance/module/ISetup.sol";
10
+ import {IPolicy} from "../instance/module/IPolicy.sol";
11
+
12
+ import {IVersionable} from "../shared/IVersionable.sol";
13
+ import {INftOwnable} from "../shared/INftOwnable.sol";
14
+ import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
15
+ import {ObjectType, POOL, BUNDLE} from "../type/ObjectType.sol";
16
+ import {POOL_OWNER_ROLE, RoleId} from "../type/RoleId.sol";
17
+ import {Pool} from "./Pool.sol";
18
+
19
+ import {Amount, AmountLib} from "../type/Amount.sol";
20
+ import {Fee, FeeLib} from "../type/Fee.sol";
21
+ import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../type/StateId.sol";
22
+ import {Seconds} from "../type/Seconds.sol";
23
+ import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
24
+ import {Version, VersionLib} from "../type/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 "../instance/BundleManager.sol";
30
+ import {ComponentService} from "../shared/ComponentService.sol";
31
+ import {IBundleService} from "./IBundleService.sol";
32
+ import {IRegistryService} from "../registry/IRegistryService.sol";
33
+ import {InstanceService} from "../instance/InstanceService.sol";
34
+ import {InstanceReader} from "../instance/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.getInstanceStore().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.getInstanceStore().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,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
171
+ InstanceReader instanceReader = instance.getInstanceReader();
172
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
173
+ if(bundleInfo.poolNftId.eqz()) {
174
+ revert ErrorBundleServiceBundleUnknown(bundleNftId);
175
+ }
176
+
177
+ if(bundleInfo.poolNftId != poolNftId) {
178
+ revert ErrorBundleServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
179
+ }
180
+
181
+ bundleInfo.fee = fee;
182
+ instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
183
+ }
184
+
185
+
186
+ // the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
187
+ function lockCollateral(
188
+ IInstance instance,
189
+ NftId policyNftId,
190
+ NftId bundleNftId,
191
+ Amount collateralAmount, // required amount to collateralize policy
192
+ Amount premiumAmount // premium part that reaches bundle for this policy
193
+ )
194
+ external
195
+ onlyService // TODO replace with restricted + appropriate granting
196
+ {
197
+ InstanceReader instanceReader = instance.getInstanceReader();
198
+ StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
199
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
200
+
201
+ // ensure bundle is active and not yet expired
202
+ if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
203
+ revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
204
+ }
205
+
206
+ // ensure bundle capacity is sufficent to collateralize policy
207
+ Amount capacity = bundleInfo.capitalAmount + premiumAmount - bundleInfo.lockedAmount;
208
+ if(capacity < collateralAmount) {
209
+ revert ErrorBundleServiceCapacityInsufficient(bundleNftId, capacity, collateralAmount);
210
+ }
211
+
212
+ // TODO add more validation
213
+
214
+ // updated locked amount
215
+ bundleInfo.lockedAmount = bundleInfo.lockedAmount + collateralAmount;
216
+
217
+ // update capital and fees when premiums are involved
218
+ _updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
219
+
220
+ // link policy to bundle in bundle manger
221
+ _linkPolicy(instance, policyNftId);
222
+ }
223
+
224
+
225
+ function _updateBundleWithPremium(
226
+ IInstance instance,
227
+ NftId bundleNftId,
228
+ IBundle.BundleInfo memory bundleInfo,
229
+ Amount premiumAmount
230
+ )
231
+ internal
232
+ {
233
+ // update bundle capital and fee amounts
234
+ if(premiumAmount.gtz()) {
235
+ // calculate fees and net premium amounts
236
+ (
237
+ ,
238
+ Amount netPremiumAmount
239
+ ) = FeeLib.calculateFee(bundleInfo.fee, premiumAmount);
240
+
241
+ // update bundle info with additional capital
242
+ bundleInfo.capitalAmount = bundleInfo.capitalAmount + netPremiumAmount;
243
+ }
244
+
245
+ // save updated bundle info
246
+ instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
247
+ }
248
+
249
+ function updateBundleFees(
250
+ IInstance instance,
251
+ NftId bundleNftId,
252
+ Amount feeAmount
253
+ )
254
+ external
255
+ {
256
+ IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
257
+ bundleInfo.feeAmount = bundleInfo.feeAmount.add(feeAmount);
258
+ instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
259
+ }
260
+
261
+ function lock(NftId bundleNftId)
262
+ external
263
+ virtual
264
+ {
265
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
266
+
267
+ // udpate bundle state
268
+ instance.getInstanceStore().updateBundleState(bundleNftId, PAUSED());
269
+
270
+ // update set of active bundles
271
+ BundleManager bundleManager = instance.getBundleManager();
272
+ bundleManager.lock(bundleNftId);
273
+
274
+ emit LogBundleServiceBundleLocked(bundleNftId);
275
+ }
276
+
277
+
278
+ function unlock(NftId bundleNftId)
279
+ external
280
+ virtual
281
+ {
282
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
283
+
284
+ // udpate bundle state
285
+ instance.getInstanceStore().updateBundleState(bundleNftId, ACTIVE());
286
+
287
+ // update set of active bundles
288
+ BundleManager bundleManager = instance.getBundleManager();
289
+ bundleManager.unlock(bundleNftId);
290
+
291
+ emit LogBundleServiceBundleActivated(bundleNftId);
292
+ }
293
+
294
+
295
+ function close(
296
+ IInstance instance,
297
+ NftId bundleNftId
298
+ )
299
+ external
300
+ virtual
301
+ // TODO add restricted and autz for pool service
302
+ {
303
+ // udpate bundle state
304
+ instance.getInstanceStore().updateBundleState(bundleNftId, CLOSED());
305
+
306
+ // ensure no open policies attached to bundle
307
+ BundleManager bundleManager = instance.getBundleManager();
308
+ uint256 openPolicies = bundleManager.activePolicies(bundleNftId);
309
+ if(openPolicies > 0) {
310
+ revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
311
+ }
312
+
313
+ // update set of active bundles
314
+ bundleManager.lock(bundleNftId);
315
+ }
316
+
317
+
318
+ function increaseBalance(
319
+ IInstance instance,
320
+ NftId bundleNftId,
321
+ Amount premiumAmount
322
+ )
323
+ external
324
+ onlyService
325
+ {
326
+ InstanceReader instanceReader = instance.getInstanceReader();
327
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
328
+
329
+ // update capital and fees when premiums are involved
330
+ _updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
331
+
332
+ // TODO add logging (?)
333
+ }
334
+
335
+ function releaseCollateral(IInstance instance,
336
+ NftId policyNftId,
337
+ NftId bundleNftId,
338
+ Amount collateralAmount
339
+ )
340
+ external
341
+ onlyService
342
+ {
343
+ InstanceReader instanceReader = instance.getInstanceReader();
344
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
345
+
346
+ // reduce locked amount by released collateral amount
347
+ bundleInfo.lockedAmount = bundleInfo.lockedAmount - collateralAmount;
348
+ instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
349
+ }
350
+
351
+ /// @dev links policy to bundle
352
+ function _linkPolicy(IInstance instance, NftId policyNftId)
353
+ internal
354
+ {
355
+ InstanceReader instanceReader = instance.getInstanceReader();
356
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
357
+
358
+ // ensure policy has not yet been activated in a previous tx already
359
+ if (policyInfo.activatedAt.gtz() && policyInfo.activatedAt < TimestampLib.blockTimestamp()) {
360
+ revert BundleManager.ErrorBundleManagerPolicyAlreadyActivated(policyNftId);
361
+ }
362
+
363
+ BundleManager bundleManager = instance.getBundleManager();
364
+ bundleManager.linkPolicy(policyNftId);
365
+ }
366
+
367
+ /// @dev unlinks policy from bundle
368
+ function unlinkPolicy(
369
+ IInstance instance,
370
+ NftId policyNftId
371
+ )
372
+ external
373
+ virtual
374
+ {
375
+ // ensure policy is closeable
376
+ if (!instance.getInstanceReader().policyIsCloseable(policyNftId)) {
377
+ revert ErrorBundleServicePolicyNotCloseable(policyNftId);
378
+ }
379
+
380
+ instance.getBundleManager().unlinkPolicy(policyNftId);
381
+ }
382
+ }
@@ -1,12 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../../shared/IVersionable.sol";
5
- import {ProxyManager} from "../../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../shared/ProxyManager.sol";
6
6
  import {BundleService} from "./BundleService.sol";
7
- import {Registry} from "../../registry/Registry.sol";
8
- import {RegistryService} from "../../registry/RegistryService.sol";
9
- import {VersionLib} from "../../types/Version.sol";
7
+ import {Registry} from "../registry/Registry.sol";
8
+ import {RegistryService} from "../registry/RegistryService.sol";
9
+ import {ObjectType, REGISTRY} from "../type/ObjectType.sol";
10
10
 
11
11
  contract BundleServiceManager is ProxyManager {
12
12
 
@@ -16,7 +16,7 @@ contract BundleServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  BundleService bundleSrv = new BundleService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -26,10 +26,10 @@ contract BundleServiceManager is ProxyManager {
26
26
 
27
27
  _bundleService = BundleService(address(versionable));
28
28
 
29
- Registry registry = Registry(registryAddress);
30
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
- RegistryService registryService = RegistryService(registryServiceAddress);
32
- // TODO this must have a role or own nft to register service
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
33
  //registryService.registerService(_poolService);
34
34
 
35
35
  // TODO no nft to link yet
@@ -37,9 +37,6 @@ contract BundleServiceManager is ProxyManager {
37
37
  //_linkToNftOwnable(
38
38
  // address(registryAddress),
39
39
  // address(_poolService));
40
-
41
- // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
43
40
  }
44
41
 
45
42
  //--- view functions ----------------------------------------------------//