@etherisc/gif-next 0.0.2-e922e07-736 → 0.0.2-e964d24-516
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.
- package/README.md +6 -83
 - package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
 - package/artifacts/contracts/{components → distribution}/Distribution.sol/Distribution.json +129 -14
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +780 -0
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
 - package/artifacts/contracts/{components → distribution}/IDistributionComponent.sol/IDistributionComponent.json +203 -14
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service → distribution}/IDistributionService.sol/IDistributionService.json +110 -283
 - package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +68 -54
 - package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
 - package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.json +309 -2078
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +183 -76
 - package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
 - package/artifacts/contracts/instance/Instance.sol/Instance.json +434 -2823
 - package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +493 -129
 - package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
 - package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +406 -192
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +224 -291
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +45 -82
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
 - package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
 - package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +44 -14
 - package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +38 -13
 - package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
 - package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
 - package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
 - package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +291 -189
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
 - package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +231 -165
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
 - package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
 - package/artifacts/contracts/{components → pool}/Pool.sol/Pool.json +160 -204
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1376 -0
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
 - package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service/IClaimService.sol/IClaimService.json → product/IApplicationService.sol/IApplicationService.json} +184 -100
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +743 -0
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +211 -100
 - package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service/IApplicationService.sol/IApplicationService.json → product/IPricingService.sol/IPricingService.json} +120 -166
 - package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
 - package/artifacts/contracts/{components → product}/IProductComponent.sol/IProductComponent.json +210 -21
 - package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +86 -28
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
 - package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
 - package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
 - package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
 - package/artifacts/contracts/{components → product}/Product.sol/Product.json +121 -22
 - package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
 - package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
 - package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -37
 - package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
 - package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
 - package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
 - package/artifacts/contracts/registry/Registry.sol/Registry.json +35 -16
 - package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +4 -4
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +26 -53
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -40
 - package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +30 -18
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
 - package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
 - package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
 - package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
 - package/artifacts/contracts/{components → shared}/Component.sol/Component.json +106 -7
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +114 -35
 - package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
 - package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +196 -7
 - package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
 - package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
 - package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
 - package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
 - package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
 - package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
 - package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
 - package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
 - package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
 - package/artifacts/contracts/shared/IService.sol/IService.json +85 -27
 - package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +8 -21
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
 - package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
 - package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +20 -33
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -21
 - package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
 - package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
 - package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
 - package/artifacts/contracts/shared/Service.sol/Service.json +91 -28
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
 - package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
 - package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
 - package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -0
 - package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +628 -0
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
 - package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
 - package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
 - package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
 - package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
 - package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
 - package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
 - package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
 - package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
 - package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
 - package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
 - package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
 - package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
 - package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
 - package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
 - package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
 - package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
 - package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
 - package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
 - package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
 - package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
 - package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
 - package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
 - package/contracts/{components → distribution}/Distribution.sol +21 -16
 - package/contracts/distribution/DistributionService.sol +348 -0
 - package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +5 -5
 - package/contracts/{components → distribution}/IDistributionComponent.sol +7 -7
 - package/contracts/{instance/service → distribution}/IDistributionService.sol +19 -30
 - package/contracts/instance/BundleManager.sol +13 -12
 - package/contracts/instance/Cloneable.sol +7 -2
 - package/contracts/instance/IInstance.sol +48 -63
 - package/contracts/instance/IInstanceService.sol +31 -17
 - package/contracts/instance/Instance.sol +131 -193
 - package/contracts/instance/InstanceAccessManager.sol +405 -161
 - package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
 - package/contracts/instance/InstanceReader.sol +101 -26
 - package/contracts/instance/InstanceService.sol +173 -354
 - package/contracts/instance/InstanceServiceManager.sol +1 -1
 - package/contracts/instance/InstanceStore.sol +211 -0
 - package/contracts/instance/ObjectManager.sol +9 -11
 - package/contracts/instance/base/IKeyValueStore.sol +5 -5
 - package/contracts/instance/base/ILifecycle.sol +3 -3
 - package/contracts/instance/base/KeyValueStore.sol +18 -41
 - package/contracts/instance/base/Lifecycle.sol +27 -7
 - package/contracts/instance/module/IAccess.sol +23 -16
 - package/contracts/instance/module/IBundle.sol +10 -8
 - package/contracts/instance/module/IComponents.sol +41 -0
 - package/contracts/instance/module/IDistribution.sol +7 -6
 - package/contracts/instance/module/IPolicy.sol +19 -14
 - package/contracts/instance/module/IRisk.sol +1 -1
 - package/contracts/instance/module/ISetup.sol +5 -18
 - package/contracts/instance/module/ITreasury.sol +2 -2
 - package/contracts/pool/BundleService.sol +382 -0
 - package/contracts/{instance/service → pool}/BundleServiceManager.sol +5 -5
 - package/contracts/pool/IBundleService.sol +118 -0
 - package/contracts/{components → pool}/IPoolComponent.sol +19 -56
 - package/contracts/pool/IPoolService.sol +114 -0
 - package/contracts/{components → pool}/Pool.sol +62 -138
 - package/contracts/pool/PoolService.sol +403 -0
 - package/contracts/{instance/service → pool}/PoolServiceManager.sol +5 -5
 - package/contracts/product/ApplicationService.sol +186 -0
 - package/contracts/{instance/service → product}/ApplicationServiceManager.sol +2 -2
 - package/contracts/product/ClaimService.sol +437 -0
 - package/contracts/{instance/service → product}/ClaimServiceManager.sol +2 -2
 - package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
 - package/contracts/product/IClaimService.sol +90 -0
 - package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
 - package/contracts/product/IPricingService.sol +37 -0
 - package/contracts/{components → product}/IProductComponent.sol +11 -10
 - package/contracts/{instance/service → product}/IProductService.sol +10 -10
 - package/contracts/product/PolicyService.sol +376 -0
 - package/contracts/{instance/service → product}/PolicyServiceManager.sol +5 -5
 - package/contracts/product/PricingService.sol +275 -0
 - package/contracts/product/PricingServiceManager.sol +51 -0
 - package/contracts/{components → product}/Product.sol +160 -74
 - package/contracts/product/ProductService.sol +210 -0
 - package/contracts/{instance/service → product}/ProductServiceManager.sol +5 -5
 - package/contracts/registry/ChainNft.sol +8 -0
 - package/contracts/registry/IRegistry.sol +6 -4
 - package/contracts/registry/IRegistryService.sol +6 -7
 - package/contracts/registry/ITransferInterceptor.sol +1 -0
 - package/contracts/registry/Registry.sol +26 -23
 - package/contracts/registry/RegistryAccessManager.sol +1 -1
 - package/contracts/registry/RegistryService.sol +33 -31
 - package/contracts/registry/RegistryServiceManager.sol +0 -2
 - package/contracts/registry/ReleaseManager.sol +24 -22
 - package/contracts/registry/TokenRegistry.sol +2 -2
 - package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
 - package/contracts/{components → shared}/Component.sol +68 -18
 - package/contracts/shared/ComponentService.sol +150 -0
 - package/contracts/{components → shared}/IComponent.sol +28 -6
 - package/contracts/shared/INftOwnable.sol +1 -1
 - package/contracts/shared/IPolicyHolder.sol +24 -10
 - package/contracts/shared/IRegistryLinked.sol +0 -1
 - package/contracts/shared/IService.sol +6 -6
 - package/contracts/shared/IVersionable.sol +1 -1
 - package/contracts/shared/NftOwnable.sol +1 -3
 - package/contracts/shared/PolicyHolder.sol +31 -18
 - package/contracts/shared/ProxyManager.sol +3 -3
 - package/contracts/shared/Registerable.sol +12 -11
 - package/contracts/shared/RegistryLinked.sol +0 -5
 - package/contracts/shared/Service.sol +23 -9
 - package/contracts/shared/TokenHandler.sol +14 -6
 - package/contracts/shared/Versionable.sol +1 -1
 - package/contracts/staking/IStakingService.sol +102 -0
 - package/contracts/staking/StakeingServiceManager.sol +37 -0
 - package/contracts/staking/StakingService.sol +166 -0
 - package/contracts/type/Amount.sol +109 -0
 - package/contracts/{types → type}/Blocknumber.sol +1 -0
 - package/contracts/{types → type}/ClaimId.sol +25 -2
 - package/contracts/{types → type}/Fee.sol +17 -8
 - package/contracts/{types → type}/NftId.sol +8 -0
 - package/contracts/{types → type}/NftIdSet.sol +1 -1
 - package/contracts/{types → type}/ObjectType.sol +10 -5
 - package/contracts/{types → type}/PayoutId.sol +33 -5
 - package/contracts/{types → type}/RoleId.sol +6 -4
 - package/contracts/{types → type}/StateId.sol +7 -2
 - package/contracts/{types → type}/Timestamp.sol +6 -0
 - package/contracts/{types → type}/UFixed.sol +1 -0
 - package/contracts/{types → type}/Version.sol +1 -0
 - package/package.json +1 -1
 - package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
 - package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
 - package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
 - package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
 - package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
 - package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
 - package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
 - package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
 - package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -968
 - package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -665
 - package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1096
 - package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -661
 - package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -754
 - package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -637
 - package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1724
 - package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -801
 - package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +0 -347
 - package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1021
 - package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -689
 - package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -727
 - package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -649
 - package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -777
 - package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -649
 - package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
 - package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
 - package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
 - package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
 - package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
 - package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
 - package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
 - package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
 - package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
 - package/artifacts/contracts/test/TestService.sol/TestService.json +0 -521
 - package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
 - package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
 - package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
 - package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
 - package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
 - package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
 - package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
 - package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
 - package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
 - package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
 - package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
 - package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
 - package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
 - package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
 - package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
 - package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
 - package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
 - package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
 - package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
 - package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
 - package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
 - package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
 - package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
 - package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
 - package/contracts/instance/base/ComponentService.sol +0 -134
 - package/contracts/instance/service/ApplicationService.sol +0 -349
 - package/contracts/instance/service/BundleService.sol +0 -299
 - package/contracts/instance/service/ClaimService.sol +0 -151
 - package/contracts/instance/service/DistributionService.sol +0 -450
 - package/contracts/instance/service/IBundleService.sol +0 -55
 - package/contracts/instance/service/IClaimService.sol +0 -61
 - package/contracts/instance/service/IPoolService.sol +0 -20
 - package/contracts/instance/service/PolicyService.sol +0 -394
 - package/contracts/instance/service/PoolService.sol +0 -109
 - package/contracts/instance/service/ProductService.sol +0 -233
 - package/contracts/shared/ContractDeployerLib.sol +0 -72
 - package/contracts/test/TestFee.sol +0 -25
 - package/contracts/test/TestRegisterable.sol +0 -18
 - package/contracts/test/TestRoleId.sol +0 -14
 - package/contracts/test/TestService.sol +0 -25
 - package/contracts/test/TestToken.sol +0 -26
 - package/contracts/test/TestVersion.sol +0 -44
 - package/contracts/test/TestVersionable.sol +0 -17
 - package/contracts/test/Usdc.sol +0 -26
 - package/contracts/types/ChainId.sol +0 -38
 - package/contracts/types/NumberId.sol +0 -52
 - /package/contracts/{types → type}/AddressSet.sol +0 -0
 - /package/contracts/{types → type}/DistributorType.sol +0 -0
 - /package/contracts/{types → type}/Key32.sol +0 -0
 - /package/contracts/{types → type}/Referral.sol +0 -0
 - /package/contracts/{types → type}/RiskId.sol +0 -0
 - /package/contracts/{types → type}/Seconds.sol +0 -0
 
| 
         @@ -1,13 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            import { 
     | 
| 
       5 
     | 
    
         
            -
            import { 
     | 
| 
       6 
     | 
    
         
            -
            import { 
     | 
| 
       7 
     | 
    
         
            -
            import { 
     | 
| 
       8 
     | 
    
         
            -
            import { 
     | 
| 
       9 
     | 
    
         
            -
            import { 
     | 
| 
       10 
     | 
    
         
            -
            import { 
     | 
| 
      
 4 
     | 
    
         
            +
            import {Amount} from "../type/Amount.sol";
         
     | 
| 
      
 5 
     | 
    
         
            +
            import {Fee} from "../type/Fee.sol";
         
     | 
| 
      
 6 
     | 
    
         
            +
            import {IComponent} from "../shared/IComponent.sol";
         
     | 
| 
      
 7 
     | 
    
         
            +
            import {IComponents} from "../instance/module/IComponents.sol";
         
     | 
| 
      
 8 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
      
 9 
     | 
    
         
            +
            import {RoleId} from "../type/RoleId.sol";
         
     | 
| 
      
 10 
     | 
    
         
            +
            import {Seconds} from "../type/Seconds.sol";
         
     | 
| 
      
 11 
     | 
    
         
            +
            import {UFixed} from "../type/UFixed.sol";
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            /// @dev pool components hold and manage the collateral to cover active policies
         
     | 
| 
       13 
14 
     | 
    
         
             
            /// pools come in different flavors
         
     | 
| 
         @@ -17,21 +18,18 @@ interface IPoolComponent is IComponent { 
     | 
|
| 
       17 
18 
     | 
    
         
             
                error ErrorPoolNotPoolService(address caller);
         
     | 
| 
       18 
19 
     | 
    
         | 
| 
       19 
20 
     | 
    
         
             
                error ErrorPoolApplicationBundleMismatch(NftId applicationNftId);
         
     | 
| 
       20 
     | 
    
         
            -
                error ErrorPoolBundleOwnerRoleAlreadySet();
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                event LogPoolVerifiedByPool(address pool, NftId applicationNftId,  
     | 
| 
       23 
     | 
    
         
            -
                event LogPoolBundleMaxCapitalAmountUpdated(uint256 previousMaxCapitalAmount, uint256 currentMaxCapitalAmount);
         
     | 
| 
       24 
     | 
    
         
            -
                event LogPoolBundleOwnerRoleSet(RoleId bundleOwnerRole);
         
     | 
| 
      
 22 
     | 
    
         
            +
                event LogPoolVerifiedByPool(address pool, NftId applicationNftId, Amount collateralizationAmount);
         
     | 
| 
       25 
23 
     | 
    
         | 
| 
       26 
24 
     | 
    
         
             
                /// @dev increases the staked tokens by the specified amount
         
     | 
| 
       27 
25 
     | 
    
         
             
                /// only the bundle owner may stake tokens
         
     | 
| 
       28 
26 
     | 
    
         
             
                /// bundle MUST be in active or locked state
         
     | 
| 
       29 
     | 
    
         
            -
                function stake(NftId bundleNftId,  
     | 
| 
      
 27 
     | 
    
         
            +
                function stake(NftId bundleNftId, Amount amount) external;
         
     | 
| 
       30 
28 
     | 
    
         | 
| 
       31 
29 
     | 
    
         
             
                /// @dev decreases the staked tokens by the specified amount
         
     | 
| 
       32 
30 
     | 
    
         
             
                /// only the bundle owner may unstake tokens from the bundle
         
     | 
| 
       33 
31 
     | 
    
         
             
                /// bundle MUST be in active, locked or closed state
         
     | 
| 
       34 
     | 
    
         
            -
                function unstake(NftId bundleNftId,  
     | 
| 
      
 32 
     | 
    
         
            +
                function unstake(NftId bundleNftId, Amount amount) external;
         
     | 
| 
       35 
33 
     | 
    
         | 
| 
       36 
34 
     | 
    
         
             
                /// @dev extends the bundle lifetime of the bundle by the specified time
         
     | 
| 
       37 
35 
     | 
    
         
             
                /// only the bundle owner may extend the bundle's lifetime
         
     | 
| 
         @@ -40,7 +38,7 @@ interface IPoolComponent is IComponent { 
     | 
|
| 
       40 
38 
     | 
    
         | 
| 
       41 
39 
     | 
    
         
             
                /// @dev locks the specified bundle
         
     | 
| 
       42 
40 
     | 
    
         
             
                /// a bundle to be locked MUST be in active state
         
     | 
| 
       43 
     | 
    
         
            -
                /// locked bundles may not be used to  
     | 
| 
      
 41 
     | 
    
         
            +
                /// locked bundles may not be used to collateralize any new policy
         
     | 
| 
       44 
42 
     | 
    
         
             
                function lockBundle(NftId bundleNftId) external;
         
     | 
| 
       45 
43 
     | 
    
         | 
| 
       46 
44 
     | 
    
         
             
                /// @dev unlocks the specified bundle
         
     | 
| 
         @@ -64,7 +62,7 @@ interface IPoolComponent is IComponent { 
     | 
|
| 
       64 
62 
     | 
    
         | 
| 
       65 
63 
     | 
    
         
             
                /// @dev sets the maximum overall capital amound held by this pool
         
     | 
| 
       66 
64 
     | 
    
         
             
                /// function may only be called by pool owner
         
     | 
| 
       67 
     | 
    
         
            -
                function setMaxCapitalAmount( 
     | 
| 
      
 65 
     | 
    
         
            +
                function setMaxCapitalAmount(Amount maxCapitalAmount) external;
         
     | 
| 
       68 
66 
     | 
    
         | 
| 
       69 
67 
     | 
    
         
             
                /// @dev sets the required role to create/own bundles
         
     | 
| 
       70 
68 
     | 
    
         
             
                /// may only be called once after setting up a pool
         
     | 
| 
         @@ -91,44 +89,9 @@ interface IPoolComponent is IComponent { 
     | 
|
| 
       91 
89 
     | 
    
         
             
                    bytes memory applicationData,
         
     | 
| 
       92 
90 
     | 
    
         
             
                    NftId bundleNftId, 
         
     | 
| 
       93 
91 
     | 
    
         
             
                    bytes memory bundleFilter,
         
     | 
| 
       94 
     | 
    
         
            -
                     
     | 
| 
      
 92 
     | 
    
         
            +
                    Amount collateralizationAmount
         
     | 
| 
       95 
93 
     | 
    
         
             
                ) external;
         
     | 
| 
       96 
94 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
                /// @dev defines the multiplier to calculate the required collateral to cover a given sum insured amount
         
     | 
| 
       98 
     | 
    
         
            -
                /// default implementation returns 100%
         
     | 
| 
       99 
     | 
    
         
            -
                function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
                /// @dev defines the amount of collateral held in the pool.
         
     | 
| 
       102 
     | 
    
         
            -
                /// if the value is < 100% the pool is required to hold a policy that covers the locally missing collateral
         
     | 
| 
       103 
     | 
    
         
            -
                /// default implementation returns 100%
         
     | 
| 
       104 
     | 
    
         
            -
                function getRetentionLevel() external view returns (UFixed retentionLevel);
         
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
                /// @dev declares if pool relies on external management of collateral (yes/no): 
         
     | 
| 
       107 
     | 
    
         
            -
                /// - yes: underwriting of new policies does not require an actual token balance, instead it is assumed that the pool owner will manage funds externally and inject enough tokens to allow process confirmed payouts
         
     | 
| 
       108 
     | 
    
         
            -
                /// - no: the pool smart contract ensures that the necessary capacity of the pool prior to underwriting.
         
     | 
| 
       109 
     | 
    
         
            -
                /// default implementation returns false (no)
         
     | 
| 
       110 
     | 
    
         
            -
                function isExternallyManaged() external view returns (bool);
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
                /// @dev declares if pool component is actively involved in underwriting (yes/no): 
         
     | 
| 
       113 
     | 
    
         
            -
                /// - yes: verifying pools components actively confirm underwriting applications, ie the pool component logic explicitly needs to confirm the locking of collateral to cover the sum insured of the policy
         
     | 
| 
       114 
     | 
    
         
            -
                /// - no: underwriting a policy does not require any interaction with the pool component if the covering bundle can provide the necessary captial
         
     | 
| 
       115 
     | 
    
         
            -
                /// default implementation returnsfalse (no)
         
     | 
| 
       116 
     | 
    
         
            -
                function isVerifyingApplications() external view returns (bool);
         
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
                /// @dev returns the maximum overall capital amound held by this pool
         
     | 
| 
       119 
     | 
    
         
            -
                function getMaxCapitalAmount() external view returns (uint256 maxCapitalAmount);
         
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
                /// @dev declares if pool intercept transfers of bundle nft ids
         
     | 
| 
       122 
     | 
    
         
            -
                /// - yes: pool may block transfer of bundle ownership or simply updates some bookkeeping related to bundle ownership. callback function is nftTransferFrom
         
     | 
| 
       123 
     | 
    
         
            -
                /// - no: pool is not involved in transfer of bundle ownership
         
     | 
| 
       124 
     | 
    
         
            -
                /// default implementation returns false (no)
         
     | 
| 
       125 
     | 
    
         
            -
                function isInterceptingBundleTransfers() external view returns (bool);
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
                /// @dev returns the required role for bundle owners
         
     | 
| 
       128 
     | 
    
         
            -
                /// default emplementation returns PUBLIC_ROLE
         
     | 
| 
       129 
     | 
    
         
            -
                /// the PUBLIC_ROLE role implies that no specific roole is required for bundle owners
         
     | 
| 
       130 
     | 
    
         
            -
                function getBundleOwnerRole() external view returns (RoleId bundleOwnerRole);
         
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
95 
     | 
    
         
             
                /// @dev returns true iff the application matches with the bundle 
         
     | 
| 
       133 
96 
     | 
    
         
             
                /// this is a callback function that is only called if a pool declares itself as a verifying pool
         
     | 
| 
       134 
97 
     | 
    
         
             
                /// default implementation returns true
         
     | 
| 
         @@ -137,15 +100,15 @@ interface IPoolComponent is IComponent { 
     | 
|
| 
       137 
100 
     | 
    
         
             
                    bytes memory applicationData,
         
     | 
| 
       138 
101 
     | 
    
         
             
                    NftId bundleNftId, 
         
     | 
| 
       139 
102 
     | 
    
         
             
                    bytes memory bundleFilter,
         
     | 
| 
       140 
     | 
    
         
            -
                     
     | 
| 
      
 103 
     | 
    
         
            +
                    Amount collateralizationAmount
         
     | 
| 
       141 
104 
     | 
    
         
             
                )
         
     | 
| 
       142 
105 
     | 
    
         
             
                    external
         
     | 
| 
       143 
106 
     | 
    
         
             
                    view
         
     | 
| 
       144 
107 
     | 
    
         
             
                    returns (bool isMatching);
         
     | 
| 
       145 
108 
     | 
    
         | 
| 
       146 
     | 
    
         
            -
                /// @dev returns  
     | 
| 
       147 
     | 
    
         
            -
                /// when registered with an instance the  
     | 
| 
       148 
     | 
    
         
            -
                /// when not registered the function returns the  
     | 
| 
       149 
     | 
    
         
            -
                function  
     | 
| 
      
 109 
     | 
    
         
            +
                /// @dev returns pool specific infos for this pool
         
     | 
| 
      
 110 
     | 
    
         
            +
                /// when registered with an instance the info is obtained from the data stored in the instance
         
     | 
| 
      
 111 
     | 
    
         
            +
                /// when not registered the function returns the info from the component contract
         
     | 
| 
      
 112 
     | 
    
         
            +
                function getPoolInfo() external view returns (IComponents.PoolInfo memory info);
         
     | 
| 
       150 
113 
     | 
    
         | 
| 
       151 
114 
     | 
    
         
             
            }
         
     | 
| 
         @@ -0,0 +1,114 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
      
 2 
     | 
    
         
            +
            pragma solidity ^0.8.19;
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            import {Amount} from "../type/Amount.sol";
         
     | 
| 
      
 5 
     | 
    
         
            +
            import {Fee} from "../type/Fee.sol";
         
     | 
| 
      
 6 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
      
 7 
     | 
    
         
            +
            import {PayoutId} from "../type/PayoutId.sol";
         
     | 
| 
      
 8 
     | 
    
         
            +
            import {IBundle} from "../instance/module/IBundle.sol";
         
     | 
| 
      
 9 
     | 
    
         
            +
            import {IInstance} from "../instance/IInstance.sol";
         
     | 
| 
      
 10 
     | 
    
         
            +
            import {IPolicy} from "../instance/module/IPolicy.sol";
         
     | 
| 
      
 11 
     | 
    
         
            +
            import {IService} from "../shared/IService.sol";
         
     | 
| 
      
 12 
     | 
    
         
            +
            import {RoleId} from "../type/RoleId.sol";
         
     | 
| 
      
 13 
     | 
    
         
            +
            import {Seconds} from "../type/Seconds.sol";
         
     | 
| 
      
 14 
     | 
    
         
            +
            import {StateId} from "../type/StateId.sol";
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            interface IPoolService is IService {
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                event LogPoolServiceMaxCapitalAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
         
     | 
| 
      
 19 
     | 
    
         
            +
                event LogPoolServiceBundleOwnerRoleSet(NftId poolNftId, RoleId bundleOwnerRole);
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                event LogPoolServiceBundleCreated(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
         
     | 
| 
      
 22 
     | 
    
         
            +
                event LogPoolServiceBundleClosed(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                error ErrorPoolServiceBundleOwnerRoleAlreadySet(NftId poolNftId);
         
     | 
| 
      
 25 
     | 
    
         
            +
                error ErrorPoolServiceBundlePoolMismatch(NftId bundlePoolNftId, NftId productPoolNftId);
         
     | 
| 
      
 26 
     | 
    
         
            +
                error ErrorPoolServiceInvalidTransferAmount(Amount expectedAmount, Amount actualAmount);
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                /// @dev registers a new pool with the registry service
         
     | 
| 
      
 29 
     | 
    
         
            +
                function register(address poolAddress) external returns(NftId);
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                /// @dev defines the required role for bundle owners for the calling pool
         
     | 
| 
      
 32 
     | 
    
         
            +
                /// default implementation returns PUBLIC ROLE
         
     | 
| 
      
 33 
     | 
    
         
            +
                function setBundleOwnerRole(RoleId bundleOwnerRole) external;
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                /// @dev sets the max capital amount for the calling pool
         
     | 
| 
      
 36 
     | 
    
         
            +
                function setMaxCapitalAmount(Amount maxCapitalAmount) external;
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                /// @dev set pool sepecific fees
         
     | 
| 
      
 39 
     | 
    
         
            +
                function setFees(
         
     | 
| 
      
 40 
     | 
    
         
            +
                    Fee memory poolFee,
         
     | 
| 
      
 41 
     | 
    
         
            +
                    Fee memory stakingFee,
         
     | 
| 
      
 42 
     | 
    
         
            +
                    Fee memory performanceFee
         
     | 
| 
      
 43 
     | 
    
         
            +
                ) external;
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                /// @dev locks required collateral to cover the specified application (and turn it into a policy)
         
     | 
| 
      
 47 
     | 
    
         
            +
                /// - retention level == 1: the full collateral amount will be locked by the specified bundle
         
     | 
| 
      
 48 
     | 
    
         
            +
                /// - retention level < 1: a part of the coverage is provided by the specified bundle, the rest by the pool component
         
     | 
| 
      
 49 
     | 
    
         
            +
                /// in which case the pool component might hold a re-insurance policy
         
     | 
| 
      
 50 
     | 
    
         
            +
                /// may only be called by the policy service for unlocked pool components
         
     | 
| 
      
 51 
     | 
    
         
            +
                function lockCollateral(
         
     | 
| 
      
 52 
     | 
    
         
            +
                    IInstance instance, 
         
     | 
| 
      
 53 
     | 
    
         
            +
                    NftId productNftId,
         
     | 
| 
      
 54 
     | 
    
         
            +
                    NftId applicationNftId,
         
     | 
| 
      
 55 
     | 
    
         
            +
                    IPolicy.PolicyInfo memory applicationInfo,
         
     | 
| 
      
 56 
     | 
    
         
            +
                    Amount premiumAmount
         
     | 
| 
      
 57 
     | 
    
         
            +
                ) external;
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                /// @dev releases the remaining collateral linked to the specified policy
         
     | 
| 
      
 61 
     | 
    
         
            +
                /// may only be called by the policy service for unlocked pool components
         
     | 
| 
      
 62 
     | 
    
         
            +
                function releaseCollateral(
         
     | 
| 
      
 63 
     | 
    
         
            +
                    IInstance instance, 
         
     | 
| 
      
 64 
     | 
    
         
            +
                    NftId policyNftId, 
         
     | 
| 
      
 65 
     | 
    
         
            +
                    IPolicy.PolicyInfo memory policyInfo
         
     | 
| 
      
 66 
     | 
    
         
            +
                ) external;
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                /// @dev reduces the locked collateral in the bundle associated with the specified policy
         
     | 
| 
      
 70 
     | 
    
         
            +
                /// every payout of a policy reduces the collateral by the payout amount
         
     | 
| 
      
 71 
     | 
    
         
            +
                /// may only be called by the claim service for unlocked pool components
         
     | 
| 
      
 72 
     | 
    
         
            +
                function reduceCollateral(
         
     | 
| 
      
 73 
     | 
    
         
            +
                    IInstance instance, 
         
     | 
| 
      
 74 
     | 
    
         
            +
                    NftId policyNftId, 
         
     | 
| 
      
 75 
     | 
    
         
            +
                    IPolicy.PolicyInfo memory policyInfo,
         
     | 
| 
      
 76 
     | 
    
         
            +
                    Amount payoutAmount
         
     | 
| 
      
 77 
     | 
    
         
            +
                ) external;
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                /// @dev create a new bundle for the provided parameters
         
     | 
| 
      
 81 
     | 
    
         
            +
                /// staking fees will be deducted by the pool service from the staking amount
         
     | 
| 
      
 82 
     | 
    
         
            +
                /// may only be called by registered and unlocked pool components
         
     | 
| 
      
 83 
     | 
    
         
            +
                function createBundle(
         
     | 
| 
      
 84 
     | 
    
         
            +
                    address owner, // initial bundle owner
         
     | 
| 
      
 85 
     | 
    
         
            +
                    Fee memory fee, // fees deducted from premium that go to bundle owner
         
     | 
| 
      
 86 
     | 
    
         
            +
                    Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
         
     | 
| 
      
 87 
     | 
    
         
            +
                    Seconds lifetime, // initial duration for which new policies are covered
         
     | 
| 
      
 88 
     | 
    
         
            +
                    bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
         
     | 
| 
      
 89 
     | 
    
         
            +
                )
         
     | 
| 
      
 90 
     | 
    
         
            +
                    external 
         
     | 
| 
      
 91 
     | 
    
         
            +
                    returns(NftId bundleNftId); // the nft id of the newly created bundle
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                /// @dev closes the specified bundle
         
     | 
| 
      
 95 
     | 
    
         
            +
                /// only open bundles (active or locked) may be closed
         
     | 
| 
      
 96 
     | 
    
         
            +
                /// to close a bundle it may not have any non-closed polices attached to it
         
     | 
| 
      
 97 
     | 
    
         
            +
                /// bundle fees and remaining capital (after deduction of the performance fee) will be transferred to the bundle owner
         
     | 
| 
      
 98 
     | 
    
         
            +
                /// may only be called by registered and unlocked pool components
         
     | 
| 
      
 99 
     | 
    
         
            +
                function closeBundle(NftId bundleNftId) external;
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                /// @dev processes the sale of a bundle and track the pool fee and bundle fee amounts
         
     | 
| 
      
 102 
     | 
    
         
            +
                function processSale(NftId bundleNftId, IPolicy.Premium memory premium, Amount actualAmountTransferred) external;
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                /// @dev increase stakes for bundle
         
     | 
| 
      
 105 
     | 
    
         
            +
                /// staking fees will be deducted by the pool service from the staking amount
         
     | 
| 
      
 106 
     | 
    
         
            +
                /// may only be called by registered and unlocked pool components
         
     | 
| 
      
 107 
     | 
    
         
            +
                // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                /// @dev decrease stakes for bundle
         
     | 
| 
      
 111 
     | 
    
         
            +
                /// performance fees will be deducted by the pool service from the staking amount
         
     | 
| 
      
 112 
     | 
    
         
            +
                /// may only be called by registered and unlocked pool components
         
     | 
| 
      
 113 
     | 
    
         
            +
                // function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
         
     | 
| 
      
 114 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -1,20 +1,19 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            import { 
     | 
| 
       5 
     | 
    
         
            -
            import { 
     | 
| 
       6 
     | 
    
         
            -
            import { 
     | 
| 
       7 
     | 
    
         
            -
            import { 
     | 
| 
      
 4 
     | 
    
         
            +
            import {Amount, AmountLib} from "../type/Amount.sol";
         
     | 
| 
      
 5 
     | 
    
         
            +
            import {Component} from "../shared/Component.sol";
         
     | 
| 
      
 6 
     | 
    
         
            +
            import {Fee, FeeLib} from "../type/Fee.sol";
         
     | 
| 
      
 7 
     | 
    
         
            +
            import {IBundleService} from "./IBundleService.sol";
         
     | 
| 
       8 
8 
     | 
    
         
             
            import {IPoolComponent} from "./IPoolComponent.sol";
         
     | 
| 
       9 
     | 
    
         
            -
            import {IPoolService} from " 
     | 
| 
       10 
     | 
    
         
            -
            import { 
     | 
| 
       11 
     | 
    
         
            -
            import {NftId, NftIdLib} from "../ 
     | 
| 
       12 
     | 
    
         
            -
            import {POOL} from "../ 
     | 
| 
       13 
     | 
    
         
            -
            import {RoleId, PUBLIC_ROLE} from "../ 
     | 
| 
       14 
     | 
    
         
            -
            import {Seconds} from "../ 
     | 
| 
      
 9 
     | 
    
         
            +
            import {IPoolService} from "./IPoolService.sol";
         
     | 
| 
      
 10 
     | 
    
         
            +
            import {IComponents} from "../instance/module/IComponents.sol";
         
     | 
| 
      
 11 
     | 
    
         
            +
            import {NftId, NftIdLib} from "../type/NftId.sol";
         
     | 
| 
      
 12 
     | 
    
         
            +
            import {BUNDLE, POOL} from "../type/ObjectType.sol";
         
     | 
| 
      
 13 
     | 
    
         
            +
            import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
         
     | 
| 
      
 14 
     | 
    
         
            +
            import {Seconds} from "../type/Seconds.sol";
         
     | 
| 
       15 
15 
     | 
    
         
             
            import {TokenHandler} from "../shared/TokenHandler.sol";
         
     | 
| 
       16 
     | 
    
         
            -
            import {UFixed} from "../ 
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
            import {UFixed, UFixedLib} from "../type/UFixed.sol";
         
     | 
| 
       18 
17 
     | 
    
         | 
| 
       19 
18 
     | 
    
         
             
            abstract contract Pool is
         
     | 
| 
       20 
19 
     | 
    
         
             
                Component, 
         
     | 
| 
         @@ -24,23 +23,6 @@ abstract contract Pool is 
     | 
|
| 
       24 
23 
     | 
    
         
             
                bytes32 public constant POOL_STORAGE_LOCATION_V1 = 0x25e3e51823fbfffb988e0a2744bb93722d9f3e906c07cc0a9e77884c46c58300;
         
     | 
| 
       25 
24 
     | 
    
         | 
| 
       26 
25 
     | 
    
         
             
                struct PoolStorage {
         
     | 
| 
       27 
     | 
    
         
            -
                    UFixed _collateralizationLevel;
         
     | 
| 
       28 
     | 
    
         
            -
                    UFixed _retentionLevel;
         
     | 
| 
       29 
     | 
    
         
            -
                    uint256 _maxCapitalAmount;
         
     | 
| 
       30 
     | 
    
         
            -
                    
         
     | 
| 
       31 
     | 
    
         
            -
                    bool _isExternallyManaged;
         
     | 
| 
       32 
     | 
    
         
            -
                    bool _isVerifyingApplications;
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                    RoleId _bundleOwnerRole;
         
     | 
| 
       35 
     | 
    
         
            -
                    bool _isInterceptingBundleTransfers;
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                    Fee _initialPoolFee;
         
     | 
| 
       38 
     | 
    
         
            -
                    Fee _initialStakingFee;
         
     | 
| 
       39 
     | 
    
         
            -
                    Fee _initialPerformanceFee;
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                    TokenHandler _tokenHandler;
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                    // may be used to interact with instance by derived contracts
         
     | 
| 
       44 
26 
     | 
    
         
             
                    IPoolService _poolService;
         
     | 
| 
       45 
27 
     | 
    
         
             
                    IBundleService _bundleService;
         
     | 
| 
       46 
28 
     | 
    
         
             
                }
         
     | 
| 
         @@ -68,10 +50,6 @@ abstract contract Pool is 
     | 
|
| 
       68 
50 
     | 
    
         
             
                    string memory name,
         
     | 
| 
       69 
51 
     | 
    
         
             
                    address token,
         
     | 
| 
       70 
52 
     | 
    
         
             
                    bool isInterceptingNftTransfers,
         
     | 
| 
       71 
     | 
    
         
            -
                    bool isExternallyManaging,
         
     | 
| 
       72 
     | 
    
         
            -
                    bool isVerifying,
         
     | 
| 
       73 
     | 
    
         
            -
                    UFixed collateralizationLevel,
         
     | 
| 
       74 
     | 
    
         
            -
                    UFixed retentionLevel,
         
     | 
| 
       75 
53 
     | 
    
         
             
                    address initialOwner,
         
     | 
| 
       76 
54 
     | 
    
         
             
                    bytes memory registryData // writeonly data that will saved in the object info record of the registry
         
     | 
| 
       77 
55 
     | 
    
         
             
                )
         
     | 
| 
         @@ -82,19 +60,8 @@ abstract contract Pool is 
     | 
|
| 
       82 
60 
     | 
    
         
             
                    initializeComponent(registry, instanceNftId, name, token, POOL(), isInterceptingNftTransfers, initialOwner, registryData);
         
     | 
| 
       83 
61 
     | 
    
         | 
| 
       84 
62 
     | 
    
         
             
                    PoolStorage storage $ = _getPoolStorage();
         
     | 
| 
       85 
     | 
    
         
            -
                     
     | 
| 
       86 
     | 
    
         
            -
                    $. 
     | 
| 
       87 
     | 
    
         
            -
                    $._maxCapitalAmount = type(uint256).max;
         
     | 
| 
       88 
     | 
    
         
            -
                    $._isExternallyManaged = isExternallyManaging;
         
     | 
| 
       89 
     | 
    
         
            -
                    $._isVerifyingApplications = isVerifying;
         
     | 
| 
       90 
     | 
    
         
            -
                    $._bundleOwnerRole = PUBLIC_ROLE();
         
     | 
| 
       91 
     | 
    
         
            -
                    $._collateralizationLevel = collateralizationLevel;
         
     | 
| 
       92 
     | 
    
         
            -
                    $._retentionLevel = retentionLevel;
         
     | 
| 
       93 
     | 
    
         
            -
                    $._initialPoolFee = FeeLib.zeroFee();
         
     | 
| 
       94 
     | 
    
         
            -
                    $._initialStakingFee = FeeLib.zeroFee();
         
     | 
| 
       95 
     | 
    
         
            -
                    $._initialPerformanceFee = FeeLib.zeroFee();
         
     | 
| 
       96 
     | 
    
         
            -
                    $._poolService = getInstance().getPoolService();
         
     | 
| 
       97 
     | 
    
         
            -
                    $._bundleService = getInstance().getBundleService();
         
     | 
| 
      
 63 
     | 
    
         
            +
                    $._poolService = IPoolService(_getServiceAddress(POOL())); 
         
     | 
| 
      
 64 
     | 
    
         
            +
                    $._bundleService = IBundleService(_getServiceAddress(BUNDLE()));
         
     | 
| 
       98 
65 
     | 
    
         | 
| 
       99 
66 
     | 
    
         
             
                    registerInterface(type(IPoolComponent).interfaceId);
         
     | 
| 
       100 
67 
     | 
    
         
             
                }
         
     | 
| 
         @@ -102,7 +69,7 @@ abstract contract Pool is 
     | 
|
| 
       102 
69 
     | 
    
         | 
| 
       103 
70 
     | 
    
         
             
                function stake(
         
     | 
| 
       104 
71 
     | 
    
         
             
                    NftId bundleNftId, 
         
     | 
| 
       105 
     | 
    
         
            -
                     
     | 
| 
      
 72 
     | 
    
         
            +
                    Amount amount
         
     | 
| 
       106 
73 
     | 
    
         
             
                )
         
     | 
| 
       107 
74 
     | 
    
         
             
                    public
         
     | 
| 
       108 
75 
     | 
    
         
             
                    virtual
         
     | 
| 
         @@ -115,7 +82,7 @@ abstract contract Pool is 
     | 
|
| 
       115 
82 
     | 
    
         | 
| 
       116 
83 
     | 
    
         
             
                function unstake(
         
     | 
| 
       117 
84 
     | 
    
         
             
                    NftId bundleNftId, 
         
     | 
| 
       118 
     | 
    
         
            -
                     
     | 
| 
      
 85 
     | 
    
         
            +
                    Amount amount
         
     | 
| 
       119 
86 
     | 
    
         
             
                )
         
     | 
| 
       120 
87 
     | 
    
         
             
                    public
         
     | 
| 
       121 
88 
     | 
    
         
             
                    virtual
         
     | 
| 
         @@ -142,30 +109,30 @@ abstract contract Pool is 
     | 
|
| 
       142 
109 
     | 
    
         
             
                function lockBundle(NftId bundleNftId)
         
     | 
| 
       143 
110 
     | 
    
         
             
                    public
         
     | 
| 
       144 
111 
     | 
    
         
             
                    virtual
         
     | 
| 
       145 
     | 
    
         
            -
                    restricted()
         
     | 
| 
      
 112 
     | 
    
         
            +
                    //restricted() // TODO consider adding this back
         
     | 
| 
       146 
113 
     | 
    
         
             
                    onlyBundleOwner(bundleNftId)
         
     | 
| 
       147 
114 
     | 
    
         
             
                {
         
     | 
| 
       148 
     | 
    
         
            -
                    _getPoolStorage()._bundleService. 
     | 
| 
      
 115 
     | 
    
         
            +
                    _getPoolStorage()._bundleService.lock(bundleNftId);
         
     | 
| 
       149 
116 
     | 
    
         
             
                }
         
     | 
| 
       150 
117 
     | 
    
         | 
| 
       151 
118 
     | 
    
         | 
| 
       152 
119 
     | 
    
         
             
                function unlockBundle(NftId bundleNftId)
         
     | 
| 
       153 
120 
     | 
    
         
             
                    public
         
     | 
| 
       154 
121 
     | 
    
         
             
                    virtual
         
     | 
| 
       155 
     | 
    
         
            -
                    restricted()
         
     | 
| 
      
 122 
     | 
    
         
            +
                    //restricted()
         
     | 
| 
       156 
123 
     | 
    
         
             
                    onlyBundleOwner(bundleNftId)
         
     | 
| 
       157 
124 
     | 
    
         
             
                {
         
     | 
| 
       158 
     | 
    
         
            -
                    _getPoolStorage()._bundleService. 
     | 
| 
      
 125 
     | 
    
         
            +
                    _getPoolStorage()._bundleService.unlock(bundleNftId);
         
     | 
| 
       159 
126 
     | 
    
         
             
                }
         
     | 
| 
       160 
127 
     | 
    
         | 
| 
       161 
128 
     | 
    
         | 
| 
       162 
129 
     | 
    
         
             
                function close(NftId bundleNftId)
         
     | 
| 
       163 
130 
     | 
    
         
             
                    public
         
     | 
| 
       164 
131 
     | 
    
         
             
                    virtual
         
     | 
| 
       165 
     | 
    
         
            -
                    restricted()
         
     | 
| 
      
 132 
     | 
    
         
            +
                    //restricted()
         
     | 
| 
       166 
133 
     | 
    
         
             
                    onlyBundleOwner(bundleNftId)
         
     | 
| 
       167 
134 
     | 
    
         
             
                {
         
     | 
| 
       168 
     | 
    
         
            -
                     
     | 
| 
      
 135 
     | 
    
         
            +
                    _getPoolStorage()._poolService.closeBundle(bundleNftId);
         
     | 
| 
       169 
136 
     | 
    
         
             
                }
         
     | 
| 
       170 
137 
     | 
    
         | 
| 
       171 
138 
     | 
    
         | 
| 
         @@ -178,23 +145,17 @@ abstract contract Pool is 
     | 
|
| 
       178 
145 
     | 
    
         
             
                    restricted()
         
     | 
| 
       179 
146 
     | 
    
         
             
                    onlyBundleOwner(bundleNftId)
         
     | 
| 
       180 
147 
     | 
    
         
             
                {
         
     | 
| 
       181 
     | 
    
         
            -
                    _getPoolStorage()._bundleService. 
     | 
| 
      
 148 
     | 
    
         
            +
                    _getPoolStorage()._bundleService.setFee(bundleNftId, fee);
         
     | 
| 
       182 
149 
     | 
    
         
             
                }
         
     | 
| 
       183 
150 
     | 
    
         | 
| 
       184 
151 
     | 
    
         | 
| 
       185 
     | 
    
         
            -
                function setMaxCapitalAmount( 
     | 
| 
      
 152 
     | 
    
         
            +
                function setMaxCapitalAmount(Amount maxCapitalAmount)
         
     | 
| 
       186 
153 
     | 
    
         
             
                    public
         
     | 
| 
       187 
154 
     | 
    
         
             
                    virtual
         
     | 
| 
       188 
155 
     | 
    
         
             
                    restricted()
         
     | 
| 
       189 
156 
     | 
    
         
             
                    onlyOwner()
         
     | 
| 
       190 
157 
     | 
    
         
             
                {
         
     | 
| 
       191 
     | 
    
         
            -
                     
     | 
| 
       192 
     | 
    
         
            -
                    // _getPoolStorage()._poolService.setMaxCapitalAmount(...);
         
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
                    uint256 previousMaxCapitalAmount = _getPoolStorage()._maxCapitalAmount;
         
     | 
| 
       195 
     | 
    
         
            -
                    _getPoolStorage()._maxCapitalAmount = maxCapitalAmount;
         
     | 
| 
       196 
     | 
    
         
            -
             
     | 
| 
       197 
     | 
    
         
            -
                    emit LogPoolBundleMaxCapitalAmountUpdated(previousMaxCapitalAmount, maxCapitalAmount);
         
     | 
| 
      
 158 
     | 
    
         
            +
                    _getPoolStorage()._poolService.setMaxCapitalAmount(maxCapitalAmount);
         
     | 
| 
       198 
159 
     | 
    
         
             
                }
         
     | 
| 
       199 
160 
     | 
    
         | 
| 
       200 
161 
     | 
    
         | 
| 
         @@ -204,16 +165,7 @@ abstract contract Pool is 
     | 
|
| 
       204 
165 
     | 
    
         
             
                    restricted()
         
     | 
| 
       205 
166 
     | 
    
         
             
                    onlyOwner()
         
     | 
| 
       206 
167 
     | 
    
         
             
                {
         
     | 
| 
       207 
     | 
    
         
            -
                     
     | 
| 
       208 
     | 
    
         
            -
                    // _getPoolStorage()._poolService.setBundleOwnerRole(...);
         
     | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
       210 
     | 
    
         
            -
                    if(_getPoolStorage()._bundleOwnerRole != PUBLIC_ROLE()) {
         
     | 
| 
       211 
     | 
    
         
            -
                        revert ErrorPoolBundleOwnerRoleAlreadySet();
         
     | 
| 
       212 
     | 
    
         
            -
                    }
         
     | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
       214 
     | 
    
         
            -
                    _getPoolStorage()._bundleOwnerRole = bundleOwnerRole;
         
     | 
| 
       215 
     | 
    
         
            -
             
     | 
| 
       216 
     | 
    
         
            -
                    emit LogPoolBundleOwnerRoleSet(bundleOwnerRole);
         
     | 
| 
      
 168 
     | 
    
         
            +
                    _getPoolStorage()._poolService.setBundleOwnerRole(bundleOwnerRole);
         
     | 
| 
       217 
169 
     | 
    
         
             
                }
         
     | 
| 
       218 
170 
     | 
    
         | 
| 
       219 
171 
     | 
    
         | 
| 
         @@ -237,13 +189,12 @@ abstract contract Pool is 
     | 
|
| 
       237 
189 
     | 
    
         
             
                    bytes memory applicationData,
         
     | 
| 
       238 
190 
     | 
    
         
             
                    NftId bundleNftId, 
         
     | 
| 
       239 
191 
     | 
    
         
             
                    bytes memory bundleFilter,
         
     | 
| 
       240 
     | 
    
         
            -
                     
     | 
| 
      
 192 
     | 
    
         
            +
                    Amount collateralizationAmount
         
     | 
| 
       241 
193 
     | 
    
         
             
                )
         
     | 
| 
       242 
194 
     | 
    
         
             
                    public
         
     | 
| 
       243 
195 
     | 
    
         
             
                    virtual
         
     | 
| 
       244 
196 
     | 
    
         
             
                    restricted()
         
     | 
| 
       245 
197 
     | 
    
         
             
                {
         
     | 
| 
       246 
     | 
    
         
            -
                    // validate application data against bundle filter
         
     | 
| 
       247 
198 
     | 
    
         
             
                    if(!applicationMatchesBundle(
         
     | 
| 
       248 
199 
     | 
    
         
             
                        applicationNftId,
         
     | 
| 
       249 
200 
     | 
    
         
             
                        applicationData, 
         
     | 
| 
         @@ -259,41 +210,6 @@ abstract contract Pool is 
     | 
|
| 
       259 
210 
     | 
    
         
             
                }
         
     | 
| 
       260 
211 
     | 
    
         | 
| 
       261 
212 
     | 
    
         | 
| 
       262 
     | 
    
         
            -
                function getCollateralizationLevel() public view virtual returns (UFixed collateralizationLevel) {
         
     | 
| 
       263 
     | 
    
         
            -
                    return _getPoolStorage()._collateralizationLevel;
         
     | 
| 
       264 
     | 
    
         
            -
                }
         
     | 
| 
       265 
     | 
    
         
            -
             
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
       267 
     | 
    
         
            -
                function getRetentionLevel() public view virtual returns (UFixed retentionLevel) {
         
     | 
| 
       268 
     | 
    
         
            -
                    return _getPoolStorage()._retentionLevel;
         
     | 
| 
       269 
     | 
    
         
            -
                }
         
     | 
| 
       270 
     | 
    
         
            -
             
     | 
| 
       271 
     | 
    
         
            -
             
     | 
| 
       272 
     | 
    
         
            -
                function isExternallyManaged() public view virtual returns (bool) {
         
     | 
| 
       273 
     | 
    
         
            -
                    return _getPoolStorage()._isExternallyManaged;
         
     | 
| 
       274 
     | 
    
         
            -
                }
         
     | 
| 
       275 
     | 
    
         
            -
             
     | 
| 
       276 
     | 
    
         
            -
             
     | 
| 
       277 
     | 
    
         
            -
                function isVerifyingApplications() public view virtual returns (bool isConfirmingApplication) {
         
     | 
| 
       278 
     | 
    
         
            -
                    return _getPoolStorage()._isVerifyingApplications;
         
     | 
| 
       279 
     | 
    
         
            -
                }
         
     | 
| 
       280 
     | 
    
         
            -
             
     | 
| 
       281 
     | 
    
         
            -
             
     | 
| 
       282 
     | 
    
         
            -
                function getMaxCapitalAmount() public view virtual returns (uint256 maxCapitalAmount) {
         
     | 
| 
       283 
     | 
    
         
            -
                    return _getPoolStorage()._maxCapitalAmount;
         
     | 
| 
       284 
     | 
    
         
            -
                }
         
     | 
| 
       285 
     | 
    
         
            -
             
     | 
| 
       286 
     | 
    
         
            -
             
     | 
| 
       287 
     | 
    
         
            -
                function isInterceptingBundleTransfers() public view virtual returns (bool) {
         
     | 
| 
       288 
     | 
    
         
            -
                    return isNftInterceptor();
         
     | 
| 
       289 
     | 
    
         
            -
                }
         
     | 
| 
       290 
     | 
    
         
            -
             
     | 
| 
       291 
     | 
    
         
            -
             
     | 
| 
       292 
     | 
    
         
            -
                function getBundleOwnerRole() public view returns (RoleId bundleOwnerRole) {
         
     | 
| 
       293 
     | 
    
         
            -
                    return _getPoolStorage()._bundleOwnerRole;
         
     | 
| 
       294 
     | 
    
         
            -
                }
         
     | 
| 
       295 
     | 
    
         
            -
             
     | 
| 
       296 
     | 
    
         
            -
             
     | 
| 
       297 
213 
     | 
    
         
             
                /// @dev see {IPoolComponent.applicationMatchesBundle}
         
     | 
| 
       298 
214 
     | 
    
         
             
                /// Override this function to implement any custom application verification 
         
     | 
| 
       299 
215 
     | 
    
         
             
                /// Default implementation always returns true
         
     | 
| 
         @@ -302,7 +218,7 @@ abstract contract Pool is 
     | 
|
| 
       302 
218 
     | 
    
         
             
                    bytes memory applicationData,
         
     | 
| 
       303 
219 
     | 
    
         
             
                    NftId bundleNftId, 
         
     | 
| 
       304 
220 
     | 
    
         
             
                    bytes memory bundleFilter,
         
     | 
| 
       305 
     | 
    
         
            -
                     
     | 
| 
      
 221 
     | 
    
         
            +
                    Amount collateralizationAmount
         
     | 
| 
       306 
222 
     | 
    
         
             
                )
         
     | 
| 
       307 
223 
     | 
    
         
             
                    public
         
     | 
| 
       308 
224 
     | 
    
         
             
                    view
         
     | 
| 
         @@ -313,14 +229,8 @@ abstract contract Pool is 
     | 
|
| 
       313 
229 
     | 
    
         
             
                }
         
     | 
| 
       314 
230 
     | 
    
         | 
| 
       315 
231 
     | 
    
         | 
| 
       316 
     | 
    
         
            -
                function  
     | 
| 
       317 
     | 
    
         
            -
                     
     | 
| 
       318 
     | 
    
         
            -
                    setupInfo = reader.getPoolSetupInfo(getNftId());
         
     | 
| 
       319 
     | 
    
         
            -
             
     | 
| 
       320 
     | 
    
         
            -
                    // fallback to initial setup info (wallet is always != address(0))
         
     | 
| 
       321 
     | 
    
         
            -
                    if(setupInfo.wallet == address(0)) {
         
     | 
| 
       322 
     | 
    
         
            -
                        setupInfo = _getInitialSetupInfo();
         
     | 
| 
       323 
     | 
    
         
            -
                    }
         
     | 
| 
      
 232 
     | 
    
         
            +
                function getPoolInfo() external view returns (IComponents.PoolInfo memory poolInfo) {
         
     | 
| 
      
 233 
     | 
    
         
            +
                    poolInfo = abi.decode(getComponentInfo().data, (IComponents.PoolInfo));
         
     | 
| 
       324 
234 
     | 
    
         
             
                }
         
     | 
| 
       325 
235 
     | 
    
         | 
| 
       326 
236 
     | 
    
         
             
                // Internals
         
     | 
| 
         @@ -328,14 +238,14 @@ abstract contract Pool is 
     | 
|
| 
       328 
238 
     | 
    
         
             
                function _createBundle(
         
     | 
| 
       329 
239 
     | 
    
         
             
                    address bundleOwner,
         
     | 
| 
       330 
240 
     | 
    
         
             
                    Fee memory fee,
         
     | 
| 
       331 
     | 
    
         
            -
                     
     | 
| 
      
 241 
     | 
    
         
            +
                    Amount amount,
         
     | 
| 
       332 
242 
     | 
    
         
             
                    Seconds lifetime, 
         
     | 
| 
       333 
243 
     | 
    
         
             
                    bytes memory filter
         
     | 
| 
       334 
244 
     | 
    
         
             
                )
         
     | 
| 
       335 
245 
     | 
    
         
             
                    internal
         
     | 
| 
       336 
246 
     | 
    
         
             
                    returns(NftId bundleNftId)
         
     | 
| 
       337 
247 
     | 
    
         
             
                {
         
     | 
| 
       338 
     | 
    
         
            -
                    bundleNftId = _getPoolStorage(). 
     | 
| 
      
 248 
     | 
    
         
            +
                    bundleNftId = _getPoolStorage()._poolService.createBundle(
         
     | 
| 
       339 
249 
     | 
    
         
             
                        bundleOwner,
         
     | 
| 
       340 
250 
     | 
    
         
             
                        fee,
         
     | 
| 
       341 
251 
     | 
    
         
             
                        amount,
         
     | 
| 
         @@ -350,23 +260,37 @@ abstract contract Pool is 
     | 
|
| 
       350 
260 
     | 
    
         
             
                    return keccak256(abi.encode(uint256(keccak256(name)) - 1)) & ~bytes32(uint256(0xff));
         
     | 
| 
       351 
261 
     | 
    
         
             
                }
         
     | 
| 
       352 
262 
     | 
    
         | 
| 
       353 
     | 
    
         
            -
             
     | 
| 
       354 
     | 
    
         
            -
                 
     | 
| 
       355 
     | 
    
         
            -
             
     | 
| 
       356 
     | 
    
         
            -
                     
     | 
| 
       357 
     | 
    
         
            -
             
     | 
| 
       358 
     | 
    
         
            -
             
     | 
| 
       359 
     | 
    
         
            -
             
     | 
| 
       360 
     | 
    
         
            -
             
     | 
| 
       361 
     | 
    
         
            -
             
     | 
| 
       362 
     | 
    
         
            -
                         
     | 
| 
       363 
     | 
    
         
            -
                         
     | 
| 
       364 
     | 
    
         
            -
                         
     | 
| 
       365 
     | 
    
         
            -
                         
     | 
| 
       366 
     | 
    
         
            -
                         
     | 
| 
       367 
     | 
    
         
            -
                         
     | 
| 
       368 
     | 
    
         
            -
                         
     | 
| 
       369 
     | 
    
         
            -
             
     | 
| 
      
 263 
     | 
    
         
            +
                /// @dev defines initial pool specification
         
     | 
| 
      
 264 
     | 
    
         
            +
                /// overwrite this function according to your use case
         
     | 
| 
      
 265 
     | 
    
         
            +
                function _getInitialInfo()
         
     | 
| 
      
 266 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 267 
     | 
    
         
            +
                    view 
         
     | 
| 
      
 268 
     | 
    
         
            +
                    virtual override
         
     | 
| 
      
 269 
     | 
    
         
            +
                    returns (IComponents.ComponentInfo memory info)
         
     | 
| 
      
 270 
     | 
    
         
            +
                {
         
     | 
| 
      
 271 
     | 
    
         
            +
                    return IComponents.ComponentInfo(
         
     | 
| 
      
 272 
     | 
    
         
            +
                        getName(),
         
     | 
| 
      
 273 
     | 
    
         
            +
                        getToken(),
         
     | 
| 
      
 274 
     | 
    
         
            +
                        TokenHandler(address(0)), // will be created by GIF service during registration
         
     | 
| 
      
 275 
     | 
    
         
            +
                        address(this), // contract is its own wallet
         
     | 
| 
      
 276 
     | 
    
         
            +
                        AmountLib.zero(), // balance amount
         
     | 
| 
      
 277 
     | 
    
         
            +
                        AmountLib.zero(), // fee amount
         
     | 
| 
      
 278 
     | 
    
         
            +
                        abi.encode(
         
     | 
| 
      
 279 
     | 
    
         
            +
                            IComponents.PoolInfo(
         
     | 
| 
      
 280 
     | 
    
         
            +
                                NftIdLib.zero(), // will be set when GIF registers the related product
         
     | 
| 
      
 281 
     | 
    
         
            +
                                PUBLIC_ROLE(), // bundleOwnerRole
         
     | 
| 
      
 282 
     | 
    
         
            +
                                AmountLib.max(), // maxCapitalAmount,
         
     | 
| 
      
 283 
     | 
    
         
            +
                                AmountLib.zero(), // initial balance amount
         
     | 
| 
      
 284 
     | 
    
         
            +
                                AmountLib.zero(), // initial fee amount
         
     | 
| 
      
 285 
     | 
    
         
            +
                                isNftInterceptor(), // isInterceptingBundleTransfers
         
     | 
| 
      
 286 
     | 
    
         
            +
                                false, // isExternallyManaged,
         
     | 
| 
      
 287 
     | 
    
         
            +
                                false, // isVerifyingApplications,
         
     | 
| 
      
 288 
     | 
    
         
            +
                                UFixedLib.toUFixed(1), // collateralizationLevel,
         
     | 
| 
      
 289 
     | 
    
         
            +
                                UFixedLib.toUFixed(1), // retentionLevel,
         
     | 
| 
      
 290 
     | 
    
         
            +
                                FeeLib.zeroFee(), // initialPoolFee,
         
     | 
| 
      
 291 
     | 
    
         
            +
                                FeeLib.zeroFee(), // initialStakingFee,
         
     | 
| 
      
 292 
     | 
    
         
            +
                                FeeLib.zeroFee() // initialPerformanceFee,
         
     | 
| 
      
 293 
     | 
    
         
            +
                            )));
         
     | 
| 
       370 
294 
     | 
    
         
             
                }
         
     | 
| 
       371 
295 
     | 
    
         | 
| 
       372 
296 
     | 
    
         |