@etherisc/gif-next 0.0.2-e83e4a5-207 → 0.0.2-e876b87-961
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 +32 -3
 - package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
 - package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
 - package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
 - package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +2 -2
 - package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
 - package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -32
 - package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
 - package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
 - package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
 - package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
 - package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
 - package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
 - package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +206 -309
 - package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
 - package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
 - package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +134 -277
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +284 -223
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +116 -104
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +121 -92
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +149 -31
 - package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
 - package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1538 -0
 - package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
 - package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2072 -0
 - package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
 - package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1471 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1231 -0
 - package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1592 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2095 -0
 - package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
 - package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.json +59 -37
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +34 -89
 - package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
 - package/artifacts/contracts/instance/Instance.sol/Instance.json +63 -130
 - package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +167 -140
 - package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +58 -98
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +459 -136
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +82 -247
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -87
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +330 -243
 - package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
 - package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
 - package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
 - package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
 - package/artifacts/contracts/instance/base/{ObjectManager.sol/ObjectManager.json → ObjectSet.sol/ObjectSet.json} +6 -6
 - package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
 - 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/mock/Dip.sol/Dip.dbg.json +1 -1
 - package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
 - package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
 - package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +164 -280
 - package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
 - package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +96 -80
 - package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
 - package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
 - package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +106 -262
 - package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
 - package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +91 -159
 - package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +75 -83
 - package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
 - package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +152 -330
 - package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +82 -22
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.json +498 -167
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +169 -89
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +258 -1
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +131 -130
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +384 -179
 - package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
 - package/artifacts/contracts/pool/Pool.sol/Pool.json +142 -313
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.json +506 -334
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +111 -87
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +76 -168
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +72 -92
 - package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
 - package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +155 -281
 - package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +303 -187
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +119 -103
 - package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
 - package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +34 -0
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +176 -6
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +323 -118
 - package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
 - package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
 - package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
 - package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +143 -97
 - package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
 - package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +444 -325
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +119 -103
 - package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
 - package/artifacts/contracts/product/PricingService.sol/PricingService.json +202 -307
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +96 -120
 - package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
 - package/artifacts/contracts/product/Product.sol/Product.json +155 -281
 - package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
 - package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
 - package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -0
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +322 -22
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +42 -146
 - package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
 - package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
 - package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
 - package/artifacts/contracts/registry/Registry.sol/Registry.json +549 -80
 - package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +285 -145
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +78 -284
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -75
 - package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
 - package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
 - package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
 - package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1067 -0
 - package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
 - package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
 - package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
 - package/artifacts/contracts/shared/Component.sol/Component.json +65 -236
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +546 -248
 - package/artifacts/contracts/shared/ComponentServiceHelperLib.sol/ComponentServiceHelperLib.dbg.json +4 -0
 - package/artifacts/contracts/shared/ComponentServiceHelperLib.sol/ComponentServiceHelperLib.json +206 -0
 - package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +136 -110
 - package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
 - package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
 - package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
 - package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponent.sol/IComponent.json +55 -54
 - package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +499 -19
 - package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +85 -80
 - package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
 - package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
 - package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
 - package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
 - package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
 - package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
 - package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
 - package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
 - package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
 - package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
 - package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
 - package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
 - package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
 - package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
 - package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +98 -265
 - package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
 - package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
 - package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
 - package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
 - package/artifacts/contracts/shared/{NftIdSetManager.sol/NftIdSetManager.json → NftIdSet.sol/NftIdSet.json} +4 -4
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
 - 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 +47 -112
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +407 -11
 - package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
 - package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +132 -0
 - package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
 - package/artifacts/contracts/staking/IStaking.sol/IStaking.json +82 -55
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
 - package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
 - package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
 - package/artifacts/contracts/staking/Staking.sol/Staking.json +174 -291
 - package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
 - package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +106 -91
 - package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.json +71 -165
 - package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +71 -79
 - package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +177 -131
 - package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
 - package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
 - package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
 - package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Amount.sol/AmountLib.json +61 -8
 - package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
 - package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
 - package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
 - package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
 - package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
 - package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
 - package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
 - package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
 - package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
 - package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
 - package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
 - package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
 - package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
 - package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
 - package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
 - package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
 - package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
 - package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
 - package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
 - package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
 - package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
 - package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
 - package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +52 -2
 - package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
 - package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
 - package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
 - package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
 - package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
 - package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +602 -0
 - package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
 - package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
 - package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
 - package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
 - package/contracts/authorization/AccessAdmin.sol +64 -59
 - package/contracts/authorization/Authorization.sol +111 -40
 - package/contracts/authorization/IAccess.sol +1 -0
 - package/contracts/authorization/IAccessAdmin.sol +4 -3
 - package/contracts/authorization/IAuthorization.sol +13 -7
 - package/contracts/authorization/IServiceAuthorization.sol +3 -1
 - package/contracts/authorization/ReleaseAccessManager.sol +38 -0
 - package/contracts/authorization/ServiceAuthorization.sol +26 -10
 - package/contracts/distribution/BasicDistribution.sol +6 -16
 - package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
 - package/contracts/distribution/Distribution.sol +28 -26
 - package/contracts/distribution/DistributionService.sol +128 -75
 - package/contracts/distribution/DistributionServiceManager.sol +8 -11
 - package/contracts/distribution/IDistributionComponent.sol +9 -5
 - package/contracts/distribution/IDistributionService.sol +18 -2
 - package/contracts/examples/fire/DamageLevel.sol +59 -0
 - package/contracts/examples/fire/FirePool.sol +73 -0
 - package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
 - package/contracts/examples/fire/FireProduct.sol +415 -0
 - package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
 - package/contracts/examples/fire/FireUSD.sol +26 -0
 - package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
 - package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
 - package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
 - package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
 - package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
 - package/contracts/instance/IInstance.sol +14 -34
 - package/contracts/instance/IInstanceService.sol +5 -25
 - package/contracts/instance/Instance.sol +32 -54
 - package/contracts/instance/InstanceAdmin.sol +47 -34
 - package/contracts/instance/InstanceAuthorizationV3.sol +24 -32
 - package/contracts/instance/InstanceReader.sol +115 -25
 - package/contracts/instance/InstanceService.sol +75 -105
 - package/contracts/instance/InstanceServiceManager.sol +8 -13
 - package/contracts/instance/InstanceStore.sol +12 -1
 - package/contracts/instance/base/ObjectLifecycle.sol +9 -4
 - package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +5 -5
 - package/contracts/instance/module/IBundle.sol +1 -1
 - package/contracts/instance/module/IComponents.sol +10 -11
 - package/contracts/instance/module/IDistribution.sol +0 -1
 - package/contracts/instance/module/IPolicy.sol +24 -24
 - package/contracts/mock/Dip.sol +1 -1
 - package/contracts/oracle/BasicOracle.sol +0 -1
 - package/contracts/oracle/IOracleComponent.sol +2 -1
 - package/contracts/oracle/IOracleService.sol +2 -1
 - package/contracts/oracle/Oracle.sol +21 -22
 - package/contracts/oracle/OracleService.sol +47 -34
 - package/contracts/oracle/OracleServiceManager.sol +8 -11
 - package/contracts/pool/BasicPool.sol +21 -31
 - package/contracts/pool/BasicPoolAuthorization.sol +11 -3
 - package/contracts/pool/BundleService.sol +267 -70
 - package/contracts/pool/BundleServiceManager.sol +8 -11
 - package/contracts/pool/IBundleService.sol +42 -5
 - package/contracts/pool/IPoolComponent.sol +24 -8
 - package/contracts/pool/IPoolService.sol +56 -39
 - package/contracts/pool/Pool.sol +73 -49
 - package/contracts/pool/PoolService.sol +256 -164
 - package/contracts/pool/PoolServiceManager.sol +6 -9
 - package/contracts/product/ApplicationService.sol +70 -65
 - package/contracts/product/ApplicationServiceManager.sol +6 -6
 - package/contracts/product/BasicProduct.sol +9 -38
 - package/contracts/product/BasicProductAuthorization.sol +2 -0
 - package/contracts/product/ClaimService.sol +316 -146
 - package/contracts/product/ClaimServiceManager.sol +6 -6
 - package/contracts/product/IApplicationService.sol +1 -0
 - package/contracts/product/IClaimService.sol +31 -7
 - package/contracts/product/IPolicyService.sol +34 -32
 - package/contracts/product/IPricingService.sol +10 -10
 - package/contracts/product/IProductComponent.sol +24 -4
 - package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
 - package/contracts/product/PolicyService.sol +419 -203
 - package/contracts/product/PolicyServiceManager.sol +6 -9
 - package/contracts/product/PricingService.sol +54 -54
 - package/contracts/product/PricingServiceManager.sol +5 -8
 - package/contracts/product/Product.sol +134 -71
 - package/contracts/product/{ProductService.sol → RiskService.sol} +13 -41
 - package/contracts/product/RiskServiceManager.sol +39 -0
 - package/contracts/registry/ChainNft.sol +68 -38
 - package/contracts/registry/IRegistry.sol +69 -19
 - package/contracts/registry/IRegistryService.sol +3 -10
 - package/contracts/registry/ITransferInterceptor.sol +1 -2
 - package/contracts/registry/Registry.sol +354 -215
 - package/contracts/registry/RegistryAdmin.sol +155 -72
 - package/contracts/registry/RegistryService.sol +39 -64
 - package/contracts/registry/RegistryServiceManager.sol +4 -4
 - package/contracts/registry/ReleaseLifecycle.sol +6 -3
 - package/contracts/registry/ReleaseRegistry.sol +501 -0
 - package/contracts/registry/ServiceAuthorizationV3.sol +16 -22
 - package/contracts/registry/TokenRegistry.sol +2 -2
 - package/contracts/shared/Component.sol +52 -62
 - package/contracts/shared/ComponentService.sol +299 -179
 - package/contracts/shared/ComponentServiceHelperLib.sol +118 -0
 - package/contracts/shared/ComponentServiceManager.sol +10 -7
 - package/contracts/shared/ComponentVerifyingService.sol +23 -14
 - package/contracts/shared/ContractLib.sol +38 -0
 - package/contracts/shared/IComponent.sol +10 -6
 - package/contracts/shared/IComponentService.sol +39 -20
 - package/contracts/shared/IInstanceLinkedComponent.sol +8 -17
 - package/contracts/shared/ILifecycle.sol +3 -1
 - package/contracts/shared/INftOwnable.sol +2 -0
 - package/contracts/shared/IPolicyHolder.sol +12 -22
 - package/contracts/shared/IRegisterable.sol +11 -0
 - package/contracts/shared/IService.sol +1 -1
 - package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
 - package/contracts/shared/InstanceLinkedComponent.sol +85 -23
 - package/contracts/shared/KeyValueStore.sol +1 -1
 - package/contracts/shared/Lifecycle.sol +15 -4
 - package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
 - package/contracts/shared/NftOwnable.sol +29 -9
 - package/contracts/shared/PolicyHolder.sol +17 -57
 - package/contracts/shared/Registerable.sol +19 -9
 - package/contracts/shared/RegistryLinked.sol +3 -2
 - package/contracts/shared/Service.sol +23 -22
 - package/contracts/shared/TokenHandler.sol +144 -19
 - package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
 - package/contracts/staking/IStaking.sol +3 -3
 - package/contracts/staking/IStakingService.sol +12 -8
 - package/contracts/staking/StakeManagerLib.sol +18 -25
 - package/contracts/staking/Staking.sol +29 -45
 - package/contracts/staking/StakingManager.sol +10 -12
 - package/contracts/staking/StakingReader.sol +23 -20
 - package/contracts/staking/StakingService.sol +25 -29
 - package/contracts/staking/StakingServiceManager.sol +4 -4
 - package/contracts/staking/StakingStore.sol +12 -22
 - package/contracts/staking/TargetManagerLib.sol +7 -3
 - package/contracts/type/Amount.sol +27 -5
 - package/contracts/type/Blocknumber.sol +7 -1
 - package/contracts/type/ClaimId.sol +6 -1
 - package/contracts/type/NftId.sol +1 -0
 - package/contracts/type/ObjectType.sol +19 -18
 - package/contracts/type/PayoutId.sol +10 -10
 - package/contracts/type/Referral.sol +1 -0
 - package/contracts/type/RiskId.sol +15 -1
 - package/contracts/type/RoleId.sol +0 -12
 - package/contracts/type/Seconds.sol +21 -1
 - package/contracts/type/StateId.sol +15 -1
 - package/contracts/type/Timestamp.sol +11 -1
 - package/contracts/type/UFixed.sol +33 -10
 - package/contracts/type/Version.sol +3 -1
 - package/contracts/{shared → upgradeability}/ProxyManager.sol +71 -38
 - package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
 - package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
 - package/package.json +4 -3
 - package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
 - package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
 - package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
 - package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
 - package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -703
 - package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
 - package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
 - package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
 - package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
 - package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
 - package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
 - package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1159
 - package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
 - package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
 - package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
 - package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
 - package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
 - package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
 - package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
 - package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
 - package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
 - package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
 - package/contracts/authorization/IModuleAuthorization.sol +0 -21
 - package/contracts/authorization/ModuleAuthorization.sol +0 -78
 - package/contracts/product/ProductServiceManager.sol +0 -42
 - package/contracts/registry/ReleaseManager.sol +0 -487
 - package/contracts/shared/InitializableCustom.sol +0 -177
 - /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
 
| 
         @@ -2,14 +2,15 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            import {Amount} from "../type/Amount.sol";
         
     | 
| 
      
 5 
     | 
    
         
            +
            import {ClaimId} from "../type/ClaimId.sol";
         
     | 
| 
       5 
6 
     | 
    
         
             
            import {Fee} from "../type/Fee.sol";
         
     | 
| 
       6 
     | 
    
         
            -
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
       7 
     | 
    
         
            -
            import {PayoutId} from "../type/PayoutId.sol";
         
     | 
| 
       8 
7 
     | 
    
         
             
            import {IBundle} from "../instance/module/IBundle.sol";
         
     | 
| 
       9 
8 
     | 
    
         
             
            import {IInstance} from "../instance/IInstance.sol";
         
     | 
| 
       10 
9 
     | 
    
         
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         
     | 
| 
       11 
10 
     | 
    
         
             
            import {IPolicy} from "../instance/module/IPolicy.sol";
         
     | 
| 
       12 
11 
     | 
    
         
             
            import {IService} from "../shared/IService.sol";
         
     | 
| 
      
 12 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
      
 13 
     | 
    
         
            +
            import {PayoutId} from "../type/PayoutId.sol";
         
     | 
| 
       13 
14 
     | 
    
         
             
            import {RoleId} from "../type/RoleId.sol";
         
     | 
| 
       14 
15 
     | 
    
         
             
            import {Seconds} from "../type/Seconds.sol";
         
     | 
| 
       15 
16 
     | 
    
         
             
            import {StateId} from "../type/StateId.sol";
         
     | 
| 
         @@ -17,29 +18,25 @@ import {UFixed} from "../type/UFixed.sol"; 
     | 
|
| 
       17 
18 
     | 
    
         | 
| 
       18 
19 
     | 
    
         
             
            interface IPoolService is IService {
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                event  
     | 
| 
      
 21 
     | 
    
         
            +
                event LogPoolServiceMaxBalanceAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
         
     | 
| 
       21 
22 
     | 
    
         
             
                event LogPoolServiceBundleOwnerRoleSet(NftId poolNftId, RoleId bundleOwnerRole);
         
     | 
| 
       22 
23 
     | 
    
         | 
| 
       23 
24 
     | 
    
         
             
                event LogPoolServiceBundleCreated(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
         
     | 
| 
       24 
25 
     | 
    
         
             
                event LogPoolServiceBundleClosed(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
         
     | 
| 
       25 
26 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
                 
     | 
| 
       27 
     | 
    
         
            -
                 
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                /// @dev defines the required role for bundle owners for the calling pool
         
     | 
| 
       30 
     | 
    
         
            -
                /// default implementation returns PUBLIC ROLE
         
     | 
| 
       31 
     | 
    
         
            -
                function setBundleOwnerRole(RoleId bundleOwnerRole) external;
         
     | 
| 
      
 27 
     | 
    
         
            +
                event LogPoolServiceBundleStaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount, Amount netAmount);
         
     | 
| 
      
 28 
     | 
    
         
            +
                event LogPoolServiceBundleUnstaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount);
         
     | 
| 
       32 
29 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                 
     | 
| 
       34 
     | 
    
         
            -
                function setMaxCapitalAmount(Amount maxCapitalAmount) external;
         
     | 
| 
      
 30 
     | 
    
         
            +
                event LogPoolServiceProcessFundedClaim(NftId policyNftId, ClaimId claimId, Amount availableAmount);
         
     | 
| 
       35 
31 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                 
     | 
| 
       37 
     | 
    
         
            -
                 
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                ) external;
         
     | 
| 
      
 32 
     | 
    
         
            +
                error ErrorPoolServicePolicyPoolMismatch(NftId policyNftId, NftId productNftId, NftId expectedProductNftId);
         
     | 
| 
      
 33 
     | 
    
         
            +
                error ErrorPoolServiceBundleOwnerRoleAlreadySet(NftId poolNftId);
         
     | 
| 
      
 34 
     | 
    
         
            +
                error ErrorPoolServiceInvalidTransferAmount(Amount expectedAmount, Amount actualAmount);
         
     | 
| 
      
 35 
     | 
    
         
            +
                error ErrorPoolServiceBundlePoolMismatch(NftId bundleNftId, NftId poolNftId);
         
     | 
| 
      
 36 
     | 
    
         
            +
                error ErrorPoolServiceMaxBalanceAmountExceeded(NftId poolNftId, Amount maxBalanceAmount, Amount currentBalanceAmount, Amount transferAmount);
         
     | 
| 
       42 
37 
     | 
    
         | 
| 
      
 38 
     | 
    
         
            +
                /// @dev sets the max balance amount for the calling pool
         
     | 
| 
      
 39 
     | 
    
         
            +
                function setMaxBalanceAmount(Amount maxBalanceAmount) external;
         
     | 
| 
       43 
40 
     | 
    
         | 
| 
       44 
41 
     | 
    
         
             
                /// @dev locks required collateral to cover the specified application (and turn it into a policy)
         
     | 
| 
       45 
42 
     | 
    
         
             
                /// - retention level == 1: the full collateral amount will be locked by the specified bundle
         
     | 
| 
         @@ -71,10 +68,10 @@ interface IPoolService is IService { 
     | 
|
| 
       71 
68 
     | 
    
         
             
                ) external;
         
     | 
| 
       72 
69 
     | 
    
         | 
| 
       73 
70 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                /// @dev reduces the locked collateral in the bundle associated with the specified policy
         
     | 
| 
      
 71 
     | 
    
         
            +
                /// @dev reduces the locked collateral in the bundle associated with the specified policy and updates pool/bundle counters
         
     | 
| 
       75 
72 
     | 
    
         
             
                /// every payout of a policy reduces the collateral by the payout amount
         
     | 
| 
       76 
73 
     | 
    
         
             
                /// may only be called by the claim service for unlocked pool components
         
     | 
| 
       77 
     | 
    
         
            -
                function  
     | 
| 
      
 74 
     | 
    
         
            +
                function processPayout(
         
     | 
| 
       78 
75 
     | 
    
         
             
                    IInstance instance, 
         
     | 
| 
       79 
76 
     | 
    
         
             
                    address token,
         
     | 
| 
       80 
77 
     | 
    
         
             
                    NftId policyNftId, 
         
     | 
| 
         @@ -83,13 +80,11 @@ interface IPoolService is IService { 
     | 
|
| 
       83 
80 
     | 
    
         
             
                ) external;
         
     | 
| 
       84 
81 
     | 
    
         | 
| 
       85 
82 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
                /// @dev create a new bundle  
     | 
| 
       87 
     | 
    
         
            -
                ///  
     | 
| 
       88 
     | 
    
         
            -
                /// may only be called by registered and unlocked pool components
         
     | 
| 
      
 83 
     | 
    
         
            +
                /// @dev create a new empty bundle with the provided parameters
         
     | 
| 
      
 84 
     | 
    
         
            +
                /// may only be called by registered and unlocked pool components.
         
     | 
| 
       89 
85 
     | 
    
         
             
                function createBundle(
         
     | 
| 
       90 
86 
     | 
    
         
             
                    address owner, // initial bundle owner
         
     | 
| 
       91 
87 
     | 
    
         
             
                    Fee memory fee, // fees deducted from premium that go to bundle owner
         
     | 
| 
       92 
     | 
    
         
            -
                    Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
         
     | 
| 
       93 
88 
     | 
    
         
             
                    Seconds lifetime, // initial duration for which new policies are covered
         
     | 
| 
       94 
89 
     | 
    
         
             
                    bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
         
     | 
| 
       95 
90 
     | 
    
         
             
                )
         
     | 
| 
         @@ -97,6 +92,18 @@ interface IPoolService is IService { 
     | 
|
| 
       97 
92 
     | 
    
         
             
                    returns(NftId bundleNftId); // the nft id of the newly created bundle
         
     | 
| 
       98 
93 
     | 
    
         | 
| 
       99 
94 
     | 
    
         | 
| 
      
 95 
     | 
    
         
            +
                /// @dev increase stakes for bundle
         
     | 
| 
      
 96 
     | 
    
         
            +
                /// staking fees will be deducted by the pool service from the staking amount
         
     | 
| 
      
 97 
     | 
    
         
            +
                /// may only be called by registered and unlocked pool components
         
     | 
| 
      
 98 
     | 
    
         
            +
                function stake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                /// @dev decrease stakes for bundle
         
     | 
| 
      
 102 
     | 
    
         
            +
                /// performance fees will be deducted by the pool service from the staking amount
         
     | 
| 
      
 103 
     | 
    
         
            +
                /// may only be called by registered and unlocked pool components
         
     | 
| 
      
 104 
     | 
    
         
            +
                function unstake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
       100 
107 
     | 
    
         
             
                /// @dev closes the specified bundle
         
     | 
| 
       101 
108 
     | 
    
         
             
                /// only open bundles (active or locked) may be closed
         
     | 
| 
       102 
109 
     | 
    
         
             
                /// to close a bundle it may not have any non-closed polices attached to it
         
     | 
| 
         @@ -105,22 +112,30 @@ interface IPoolService is IService { 
     | 
|
| 
       105 
112 
     | 
    
         
             
                function closeBundle(NftId bundleNftId) external;
         
     | 
| 
       106 
113 
     | 
    
         | 
| 
       107 
114 
     | 
    
         | 
| 
       108 
     | 
    
         
            -
                /// @dev  
     | 
| 
       109 
     | 
    
         
            -
                function  
     | 
| 
      
 115 
     | 
    
         
            +
                /// @dev Informs product about available funds to process a confirmed claim.
         
     | 
| 
      
 116 
     | 
    
         
            +
                /// The function triggers a callback to the product component when the product's property isProcessingFundedClaims is set.
         
     | 
| 
      
 117 
     | 
    
         
            +
                function processFundedClaim(NftId policyNftId, ClaimId claimId, Amount availableAmount) external;
         
     | 
| 
       110 
118 
     | 
    
         | 
| 
       111 
     | 
    
         
            -
                /// @dev increase stakes for bundle
         
     | 
| 
       112 
     | 
    
         
            -
                /// staking fees will be deducted by the pool service from the staking amount
         
     | 
| 
       113 
     | 
    
         
            -
                /// may only be called by registered and unlocked pool components
         
     | 
| 
       114 
     | 
    
         
            -
                // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
         
     | 
| 
       115 
119 
     | 
    
         | 
| 
      
 120 
     | 
    
         
            +
                /// @dev Fund the specified pool wallet with the provided amount.
         
     | 
| 
      
 121 
     | 
    
         
            +
                /// This function will collect the amount from the sender address and transfers it to the pool wallet.
         
     | 
| 
      
 122 
     | 
    
         
            +
                /// The function will not update balance amounts managed by the framework.
         
     | 
| 
      
 123 
     | 
    
         
            +
                /// Only available for externally managed pools.
         
     | 
| 
      
 124 
     | 
    
         
            +
                function fundPoolWallet(NftId poolNftId, Amount amount) external;
         
     | 
| 
       116 
125 
     | 
    
         | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
                ///  
     | 
| 
       119 
     | 
    
         
            -
                ///  
     | 
| 
       120 
     | 
    
         
            -
                 
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                /// @dev Defund the specified pool wallet with the provided amount.
         
     | 
| 
      
 128 
     | 
    
         
            +
                /// This function will transfer the amount from the pool wallet to the sender address.
         
     | 
| 
      
 129 
     | 
    
         
            +
                /// The function will not update balance amounts managed by the framework.
         
     | 
| 
      
 130 
     | 
    
         
            +
                /// Only available for externally managed pools.
         
     | 
| 
      
 131 
     | 
    
         
            +
                function defundPoolWallet(NftId poolNftId, Amount amount) external;
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                /// @dev processes the sale of a bundle and track the pool fee and bundle fee amounts
         
     | 
| 
      
 135 
     | 
    
         
            +
                function processSale(NftId bundleNftId, IPolicy.PremiumInfo memory premium) external;
         
     | 
| 
       121 
136 
     | 
    
         | 
| 
       122 
137 
     | 
    
         | 
| 
       123 
     | 
    
         
            -
                /// @dev  
     | 
| 
      
 138 
     | 
    
         
            +
                /// @dev Calulate required collateral for the provided parameters.
         
     | 
| 
       124 
139 
     | 
    
         
             
                function calculateRequiredCollateral(
         
     | 
| 
       125 
140 
     | 
    
         
             
                    InstanceReader instanceReader,
         
     | 
| 
       126 
141 
     | 
    
         
             
                    NftId productNftId, 
         
     | 
| 
         @@ -129,12 +144,14 @@ interface IPoolService is IService { 
     | 
|
| 
       129 
144 
     | 
    
         
             
                    external
         
     | 
| 
       130 
145 
     | 
    
         
             
                    view 
         
     | 
| 
       131 
146 
     | 
    
         
             
                    returns(
         
     | 
| 
       132 
     | 
    
         
            -
                        Amount  
     | 
| 
       133 
     | 
    
         
            -
                        Amount  
     | 
| 
      
 147 
     | 
    
         
            +
                        Amount totalCollateralAmount,
         
     | 
| 
      
 148 
     | 
    
         
            +
                        Amount localCollateralAmount
         
     | 
| 
       134 
149 
     | 
    
         
             
                    );
         
     | 
| 
       135 
150 
     | 
    
         | 
| 
       136 
151 
     | 
    
         | 
| 
       137 
     | 
    
         
            -
                /// @dev calulate required collateral for the provided parameters
         
     | 
| 
      
 152 
     | 
    
         
            +
                /// @dev calulate required collateral for the provided parameters.
         
     | 
| 
      
 153 
     | 
    
         
            +
                /// Collateralization is applied to sum insured.
         
     | 
| 
      
 154 
     | 
    
         
            +
                /// Retention level defines the fraction of the collateral that is required locally.
         
     | 
| 
       138 
155 
     | 
    
         
             
                function calculateRequiredCollateral(
         
     | 
| 
       139 
156 
     | 
    
         
             
                    UFixed collateralizationLevel, 
         
     | 
| 
       140 
157 
     | 
    
         
             
                    UFixed retentionLevel, 
         
     | 
| 
         @@ -143,8 +160,8 @@ interface IPoolService is IService { 
     | 
|
| 
       143 
160 
     | 
    
         
             
                    external
         
     | 
| 
       144 
161 
     | 
    
         
             
                    pure 
         
     | 
| 
       145 
162 
     | 
    
         
             
                    returns(
         
     | 
| 
       146 
     | 
    
         
            -
                        Amount  
     | 
| 
       147 
     | 
    
         
            -
                        Amount  
     | 
| 
      
 163 
     | 
    
         
            +
                        Amount totalCollateralAmount,
         
     | 
| 
      
 164 
     | 
    
         
            +
                        Amount localCollateralAmount
         
     | 
| 
       148 
165 
     | 
    
         
             
                    );
         
     | 
| 
       149 
166 
     | 
    
         | 
| 
       150 
167 
     | 
    
         
             
            }
         
     | 
    
        package/contracts/pool/Pool.sol
    CHANGED
    
    | 
         @@ -2,7 +2,8 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         
     | 
| 
       5 
     | 
    
         
            -
            import {BUNDLE, COMPONENT, POOL} from "../type/ObjectType.sol";
         
     | 
| 
      
 5 
     | 
    
         
            +
            import {BUNDLE, COMPONENT, POLICY, POOL} from "../type/ObjectType.sol";
         
     | 
| 
      
 6 
     | 
    
         
            +
            import {ClaimId} from "../type/ClaimId.sol";
         
     | 
| 
       6 
7 
     | 
    
         
             
            import {IBundleService} from "./IBundleService.sol";
         
     | 
| 
       7 
8 
     | 
    
         
             
            import {IAuthorization} from "../authorization/IAuthorization.sol";
         
     | 
| 
       8 
9 
     | 
    
         
             
            import {IPoolComponent} from "./IPoolComponent.sol";
         
     | 
| 
         @@ -10,12 +11,12 @@ import {IPoolService} from "./IPoolService.sol"; 
     | 
|
| 
       10 
11 
     | 
    
         
             
            import {IComponents} from "../instance/module/IComponents.sol";
         
     | 
| 
       11 
12 
     | 
    
         
             
            import {IComponentService} from "../shared/IComponentService.sol";
         
     | 
| 
       12 
13 
     | 
    
         
             
            import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
         
     | 
| 
       13 
     | 
    
         
            -
            import {Fee 
     | 
| 
       14 
     | 
    
         
            -
            import {NftId 
     | 
| 
      
 14 
     | 
    
         
            +
            import {Fee} from "../type/Fee.sol";
         
     | 
| 
      
 15 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
       15 
16 
     | 
    
         
             
            import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
         
     | 
| 
       16 
17 
     | 
    
         
             
            import {Seconds} from "../type/Seconds.sol";
         
     | 
| 
       17 
     | 
    
         
            -
            import { 
     | 
| 
       18 
     | 
    
         
            -
            import { 
     | 
| 
      
 18 
     | 
    
         
            +
            import {Timestamp} from "../type/Timestamp.sol";
         
     | 
| 
      
 19 
     | 
    
         
            +
            import {UFixedLib} from "../type/UFixed.sol";
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
21 
     | 
    
         
             
            abstract contract Pool is
         
     | 
| 
       21 
22 
     | 
    
         
             
                InstanceLinkedComponent, 
         
     | 
| 
         @@ -50,6 +51,7 @@ abstract contract Pool is 
     | 
|
| 
       50 
51 
     | 
    
         
             
                    public
         
     | 
| 
       51 
52 
     | 
    
         
             
                    virtual
         
     | 
| 
       52 
53 
     | 
    
         
             
                    restricted()
         
     | 
| 
      
 54 
     | 
    
         
            +
                    onlyNftOfType(applicationNftId, POLICY())
         
     | 
| 
       53 
55 
     | 
    
         
             
                {
         
     | 
| 
       54 
56 
     | 
    
         
             
                    if(!applicationMatchesBundle(
         
     | 
| 
       55 
57 
     | 
    
         
             
                        applicationNftId,
         
     | 
| 
         @@ -66,6 +68,21 @@ abstract contract Pool is 
     | 
|
| 
       66 
68 
     | 
    
         
             
                }
         
     | 
| 
       67 
69 
     | 
    
         | 
| 
       68 
70 
     | 
    
         | 
| 
      
 71 
     | 
    
         
            +
                /// @dev see {IPoolComponent.processConfirmedClaim}
         
     | 
| 
      
 72 
     | 
    
         
            +
                function processConfirmedClaim(
         
     | 
| 
      
 73 
     | 
    
         
            +
                    NftId policyNftId, 
         
     | 
| 
      
 74 
     | 
    
         
            +
                    ClaimId claimId, 
         
     | 
| 
      
 75 
     | 
    
         
            +
                    Amount amount
         
     | 
| 
      
 76 
     | 
    
         
            +
                )
         
     | 
| 
      
 77 
     | 
    
         
            +
                    public
         
     | 
| 
      
 78 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 79 
     | 
    
         
            +
                    restricted()
         
     | 
| 
      
 80 
     | 
    
         
            +
                    onlyNftOfType(policyNftId, POLICY())
         
     | 
| 
      
 81 
     | 
    
         
            +
                {
         
     | 
| 
      
 82 
     | 
    
         
            +
                    // default implementation is empty
         
     | 
| 
      
 83 
     | 
    
         
            +
                }
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
       69 
86 
     | 
    
         
             
                /// @dev see {IPoolComponent.applicationMatchesBundle}
         
     | 
| 
       70 
87 
     | 
    
         
             
                /// Override this function to implement any custom application verification 
         
     | 
| 
       71 
88 
     | 
    
         
             
                /// Default implementation always returns true
         
     | 
| 
         @@ -79,18 +96,23 @@ abstract contract Pool is 
     | 
|
| 
       79 
96 
     | 
    
         
             
                    public
         
     | 
| 
       80 
97 
     | 
    
         
             
                    virtual
         
     | 
| 
       81 
98 
     | 
    
         
             
                    view
         
     | 
| 
      
 99 
     | 
    
         
            +
                    onlyNftOfType(applicationNftId, POLICY())
         
     | 
| 
      
 100 
     | 
    
         
            +
                    onlyNftOfType(bundleNftId, BUNDLE())
         
     | 
| 
       82 
101 
     | 
    
         
             
                    returns (bool isMatching)
         
     | 
| 
       83 
102 
     | 
    
         
             
                {
         
     | 
| 
       84 
103 
     | 
    
         
             
                    return true;
         
     | 
| 
       85 
104 
     | 
    
         
             
                }
         
     | 
| 
       86 
105 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                function  
     | 
| 
       89 
     | 
    
         
            -
                    external
         
     | 
| 
      
 106 
     | 
    
         
            +
                /// @inheritdoc IPoolComponent
         
     | 
| 
      
 107 
     | 
    
         
            +
                function withdrawBundleFees(NftId bundleNftId, Amount amount) 
         
     | 
| 
      
 108 
     | 
    
         
            +
                    external 
         
     | 
| 
       90 
109 
     | 
    
         
             
                    virtual
         
     | 
| 
       91 
     | 
    
         
            -
                     
     | 
| 
      
 110 
     | 
    
         
            +
                    restricted()
         
     | 
| 
      
 111 
     | 
    
         
            +
                    onlyBundleOwner(bundleNftId)
         
     | 
| 
      
 112 
     | 
    
         
            +
                    onlyNftOfType(bundleNftId, BUNDLE())
         
     | 
| 
      
 113 
     | 
    
         
            +
                    returns (Amount withdrawnAmount) 
         
     | 
| 
       92 
114 
     | 
    
         
             
                {
         
     | 
| 
       93 
     | 
    
         
            -
                     
     | 
| 
      
 115 
     | 
    
         
            +
                    return _withdrawBundleFees(bundleNftId, amount);
         
     | 
| 
       94 
116 
     | 
    
         
             
                }
         
     | 
| 
       95 
117 
     | 
    
         | 
| 
       96 
118 
     | 
    
         | 
| 
         @@ -100,32 +122,28 @@ abstract contract Pool is 
     | 
|
| 
       100 
122 
     | 
    
         
             
                    view 
         
     | 
| 
       101 
123 
     | 
    
         
             
                    returns (IComponents.PoolInfo memory poolInfo)
         
     | 
| 
       102 
124 
     | 
    
         
             
                {
         
     | 
| 
       103 
     | 
    
         
            -
                    return IComponents.PoolInfo(
         
     | 
| 
       104 
     | 
    
         
            -
                         
     | 
| 
       105 
     | 
    
         
            -
                        PUBLIC_ROLE(),  
     | 
| 
       106 
     | 
    
         
            -
                         
     | 
| 
       107 
     | 
    
         
            -
                         
     | 
| 
       108 
     | 
    
         
            -
                        false, 
     | 
| 
       109 
     | 
    
         
            -
                        false, 
     | 
| 
       110 
     | 
    
         
            -
                        UFixedLib.toUFixed(1), 
     | 
| 
       111 
     | 
    
         
            -
                        UFixedLib.toUFixed(1) 
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
                        FeeLib.zero(), // initialStakingFee,
         
     | 
| 
       114 
     | 
    
         
            -
                        FeeLib.zero() // initialPerformanceFee,
         
     | 
| 
       115 
     | 
    
         
            -
                    );
         
     | 
| 
      
 125 
     | 
    
         
            +
                    return IComponents.PoolInfo({
         
     | 
| 
      
 126 
     | 
    
         
            +
                        maxBalanceAmount: AmountLib.max(),
         
     | 
| 
      
 127 
     | 
    
         
            +
                        bundleOwnerRole: PUBLIC_ROLE(), 
         
     | 
| 
      
 128 
     | 
    
         
            +
                        isInterceptingBundleTransfers: isNftInterceptor(),
         
     | 
| 
      
 129 
     | 
    
         
            +
                        isProcessingConfirmedClaims: false,
         
     | 
| 
      
 130 
     | 
    
         
            +
                        isExternallyManaged: false,
         
     | 
| 
      
 131 
     | 
    
         
            +
                        isVerifyingApplications: false,
         
     | 
| 
      
 132 
     | 
    
         
            +
                        collateralizationLevel: UFixedLib.toUFixed(1),
         
     | 
| 
      
 133 
     | 
    
         
            +
                        retentionLevel: UFixedLib.toUFixed(1)
         
     | 
| 
      
 134 
     | 
    
         
            +
                    });
         
     | 
| 
       116 
135 
     | 
    
         
             
                }
         
     | 
| 
       117 
136 
     | 
    
         | 
| 
       118 
137 
     | 
    
         
             
                // Internals
         
     | 
| 
       119 
138 
     | 
    
         | 
| 
       120 
139 
     | 
    
         
             
                function _initializePool(
         
     | 
| 
       121 
140 
     | 
    
         
             
                    address registry,
         
     | 
| 
       122 
     | 
    
         
            -
                    NftId  
     | 
| 
      
 141 
     | 
    
         
            +
                    NftId productNftId,
         
     | 
| 
       123 
142 
     | 
    
         
             
                    string memory name,
         
     | 
| 
       124 
143 
     | 
    
         
             
                    address token,
         
     | 
| 
       125 
144 
     | 
    
         
             
                    IAuthorization authorization,
         
     | 
| 
       126 
145 
     | 
    
         
             
                    bool isInterceptingNftTransfers,
         
     | 
| 
       127 
146 
     | 
    
         
             
                    address initialOwner,
         
     | 
| 
       128 
     | 
    
         
            -
                    bytes memory registryData, // writeonly data that will saved in the object info record of the registry
         
     | 
| 
       129 
147 
     | 
    
         
             
                    bytes memory componentData // component specifidc data 
         
     | 
| 
       130 
148 
     | 
    
         
             
                )
         
     | 
| 
       131 
149 
     | 
    
         
             
                    internal
         
     | 
| 
         @@ -134,14 +152,13 @@ abstract contract Pool is 
     | 
|
| 
       134 
152 
     | 
    
         
             
                {
         
     | 
| 
       135 
153 
     | 
    
         
             
                    _initializeInstanceLinkedComponent(
         
     | 
| 
       136 
154 
     | 
    
         
             
                        registry, 
         
     | 
| 
       137 
     | 
    
         
            -
                         
     | 
| 
      
 155 
     | 
    
         
            +
                        productNftId,  
         
     | 
| 
       138 
156 
     | 
    
         
             
                        name, 
         
     | 
| 
       139 
157 
     | 
    
         
             
                        token, 
         
     | 
| 
       140 
158 
     | 
    
         
             
                        POOL(), 
         
     | 
| 
       141 
159 
     | 
    
         
             
                        authorization, 
         
     | 
| 
       142 
160 
     | 
    
         
             
                        isInterceptingNftTransfers, 
         
     | 
| 
       143 
161 
     | 
    
         
             
                        initialOwner, 
         
     | 
| 
       144 
     | 
    
         
            -
                        registryData, 
         
     | 
| 
       145 
162 
     | 
    
         
             
                        componentData);
         
     | 
| 
       146 
163 
     | 
    
         | 
| 
       147 
164 
     | 
    
         
             
                    PoolStorage storage $ = _getPoolStorage();
         
     | 
| 
         @@ -149,7 +166,7 @@ abstract contract Pool is 
     | 
|
| 
       149 
166 
     | 
    
         
             
                    $._bundleService = IBundleService(_getServiceAddress(BUNDLE()));
         
     | 
| 
       150 
167 
     | 
    
         
             
                    $._componentService = IComponentService(_getServiceAddress(COMPONENT())); 
         
     | 
| 
       151 
168 
     | 
    
         | 
| 
       152 
     | 
    
         
            -
                     
     | 
| 
      
 169 
     | 
    
         
            +
                    _registerInterface(type(IPoolComponent).interfaceId);
         
     | 
| 
       153 
170 
     | 
    
         
             
                }
         
     | 
| 
       154 
171 
     | 
    
         | 
| 
       155 
172 
     | 
    
         
             
                /// @dev increases the staked tokens by the specified amount
         
     | 
| 
         @@ -160,8 +177,9 @@ abstract contract Pool is 
     | 
|
| 
       160 
177 
     | 
    
         
             
                )
         
     | 
| 
       161 
178 
     | 
    
         
             
                    internal
         
     | 
| 
       162 
179 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 180 
     | 
    
         
            +
                    returns(Amount) 
         
     | 
| 
       163 
181 
     | 
    
         
             
                {
         
     | 
| 
       164 
     | 
    
         
            -
                     
     | 
| 
      
 182 
     | 
    
         
            +
                    return _getPoolStorage()._poolService.stake(bundleNftId, amount);
         
     | 
| 
       165 
183 
     | 
    
         
             
                }
         
     | 
| 
       166 
184 
     | 
    
         | 
| 
       167 
185 
     | 
    
         | 
| 
         @@ -173,8 +191,9 @@ abstract contract Pool is 
     | 
|
| 
       173 
191 
     | 
    
         
             
                )
         
     | 
| 
       174 
192 
     | 
    
         
             
                    internal
         
     | 
| 
       175 
193 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 194 
     | 
    
         
            +
                    returns(Amount netAmount) 
         
     | 
| 
       176 
195 
     | 
    
         
             
                {
         
     | 
| 
       177 
     | 
    
         
            -
                     
     | 
| 
      
 196 
     | 
    
         
            +
                    return _getPoolStorage()._poolService.unstake(bundleNftId, amount);
         
     | 
| 
       178 
197 
     | 
    
         
             
                }
         
     | 
| 
       179 
198 
     | 
    
         | 
| 
       180 
199 
     | 
    
         | 
| 
         @@ -186,8 +205,9 @@ abstract contract Pool is 
     | 
|
| 
       186 
205 
     | 
    
         
             
                )
         
     | 
| 
       187 
206 
     | 
    
         
             
                    internal
         
     | 
| 
       188 
207 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 208 
     | 
    
         
            +
                    returns (Timestamp extendedExpiredAt) 
         
     | 
| 
       189 
209 
     | 
    
         
             
                {
         
     | 
| 
       190 
     | 
    
         
            -
                     
     | 
| 
      
 210 
     | 
    
         
            +
                    return _getPoolStorage()._bundleService.extend(bundleNftId, lifetimeExtension);
         
     | 
| 
       191 
211 
     | 
    
         
             
                }
         
     | 
| 
       192 
212 
     | 
    
         | 
| 
       193 
213 
     | 
    
         | 
| 
         @@ -217,7 +237,7 @@ abstract contract Pool is 
     | 
|
| 
       217 
237 
     | 
    
         
             
                /// To close a bundle all all linked policies MUST be in closed state as well.
         
     | 
| 
       218 
238 
     | 
    
         
             
                /// Closing a bundle finalizes the bundle bookkeeping including overall profit calculation.
         
     | 
| 
       219 
239 
     | 
    
         
             
                /// Once a bundle is closed this action cannot be reversed.
         
     | 
| 
       220 
     | 
    
         
            -
                function  
     | 
| 
      
 240 
     | 
    
         
            +
                function _closeBundle(NftId bundleNftId)
         
     | 
| 
       221 
241 
     | 
    
         
             
                    internal
         
     | 
| 
       222 
242 
     | 
    
         
             
                    virtual
         
     | 
| 
       223 
243 
     | 
    
         
             
                {
         
     | 
| 
         @@ -239,23 +259,13 @@ abstract contract Pool is 
     | 
|
| 
       239 
259 
     | 
    
         
             
                }
         
     | 
| 
       240 
260 
     | 
    
         | 
| 
       241 
261 
     | 
    
         | 
| 
       242 
     | 
    
         
            -
                /// @dev Sets the maximum  
     | 
| 
      
 262 
     | 
    
         
            +
                /// @dev Sets the maximum balance amound held by this pool.
         
     | 
| 
       243 
263 
     | 
    
         
             
                /// Function may only be called by pool owner.
         
     | 
| 
       244 
     | 
    
         
            -
                function  
     | 
| 
      
 264 
     | 
    
         
            +
                function _setMaxBalanceAmount(Amount maxBalanceAmount)
         
     | 
| 
       245 
265 
     | 
    
         
             
                    internal
         
     | 
| 
       246 
266 
     | 
    
         
             
                    virtual
         
     | 
| 
       247 
267 
     | 
    
         
             
                {
         
     | 
| 
       248 
     | 
    
         
            -
                    _getPoolStorage()._poolService. 
     | 
| 
       249 
     | 
    
         
            -
                }
         
     | 
| 
       250 
     | 
    
         
            -
             
     | 
| 
       251 
     | 
    
         
            -
                /// @dev Sets the required role to create/own bundles.
         
     | 
| 
       252 
     | 
    
         
            -
                /// May only be called once after setting up a pool.
         
     | 
| 
       253 
     | 
    
         
            -
                /// May only be called by pool owner.
         
     | 
| 
       254 
     | 
    
         
            -
                function _setBundleOwnerRole(RoleId bundleOwnerRole)
         
     | 
| 
       255 
     | 
    
         
            -
                    internal
         
     | 
| 
       256 
     | 
    
         
            -
                    virtual
         
     | 
| 
       257 
     | 
    
         
            -
                {
         
     | 
| 
       258 
     | 
    
         
            -
                    _getPoolStorage()._poolService.setBundleOwnerRole(bundleOwnerRole);
         
     | 
| 
      
 268 
     | 
    
         
            +
                    _getPoolStorage()._poolService.setMaxBalanceAmount(maxBalanceAmount);
         
     | 
| 
       259 
269 
     | 
    
         
             
                }
         
     | 
| 
       260 
270 
     | 
    
         | 
| 
       261 
271 
     | 
    
         | 
| 
         @@ -275,11 +285,10 @@ abstract contract Pool is 
     | 
|
| 
       275 
285 
     | 
    
         
             
                    _getPoolStorage()._componentService.setPoolFees(poolFee, stakingFee, performanceFee);
         
     | 
| 
       276 
286 
     | 
    
         
             
                }
         
     | 
| 
       277 
287 
     | 
    
         | 
| 
       278 
     | 
    
         
            -
                /// @dev Creates a new bundle using the provided parameter values.
         
     | 
| 
      
 288 
     | 
    
         
            +
                /// @dev Creates a new empty bundle using the provided parameter values.
         
     | 
| 
       279 
289 
     | 
    
         
             
                function _createBundle(
         
     | 
| 
       280 
290 
     | 
    
         
             
                    address bundleOwner,
         
     | 
| 
       281 
291 
     | 
    
         
             
                    Fee memory fee,
         
     | 
| 
       282 
     | 
    
         
            -
                    Amount amount,
         
     | 
| 
       283 
292 
     | 
    
         
             
                    Seconds lifetime, 
         
     | 
| 
       284 
293 
     | 
    
         
             
                    bytes memory filter
         
     | 
| 
       285 
294 
     | 
    
         
             
                )
         
     | 
| 
         @@ -289,19 +298,34 @@ abstract contract Pool is 
     | 
|
| 
       289 
298 
     | 
    
         
             
                    bundleNftId = _getPoolStorage()._poolService.createBundle(
         
     | 
| 
       290 
299 
     | 
    
         
             
                        bundleOwner,
         
     | 
| 
       291 
300 
     | 
    
         
             
                        fee,
         
     | 
| 
       292 
     | 
    
         
            -
                        amount,
         
     | 
| 
       293 
301 
     | 
    
         
             
                        lifetime,
         
     | 
| 
       294 
302 
     | 
    
         
             
                        filter);
         
     | 
| 
       295 
303 
     | 
    
         | 
| 
       296 
304 
     | 
    
         
             
                    // TODO add logging
         
     | 
| 
       297 
305 
     | 
    
         
             
                }
         
     | 
| 
       298 
306 
     | 
    
         | 
| 
       299 
     | 
    
         
            -
             
     | 
| 
       300 
307 
     | 
    
         
             
                // TODO remove function once this is no longer used to produce contract locations on the fly ...
         
     | 
| 
       301 
308 
     | 
    
         
             
                function getContractLocation(bytes memory name) external pure returns (bytes32 hash) {
         
     | 
| 
       302 
309 
     | 
    
         
             
                    return keccak256(abi.encode(uint256(keccak256(name)) - 1)) & ~bytes32(uint256(0xff));
         
     | 
| 
       303 
310 
     | 
    
         
             
                }
         
     | 
| 
       304 
311 
     | 
    
         | 
| 
      
 312 
     | 
    
         
            +
                function _withdrawBundleFees(NftId bundleNftId, Amount amount) 
         
     | 
| 
      
 313 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 314 
     | 
    
         
            +
                    returns (Amount withdrawnAmount) 
         
     | 
| 
      
 315 
     | 
    
         
            +
                {
         
     | 
| 
      
 316 
     | 
    
         
            +
                    return _getPoolStorage()._bundleService.withdrawBundleFees(bundleNftId, amount);
         
     | 
| 
      
 317 
     | 
    
         
            +
                }
         
     | 
| 
      
 318 
     | 
    
         
            +
             
     | 
| 
      
 319 
     | 
    
         
            +
                function _processFundedClaim(
         
     | 
| 
      
 320 
     | 
    
         
            +
                    NftId policyNftId, 
         
     | 
| 
      
 321 
     | 
    
         
            +
                    ClaimId claimId, 
         
     | 
| 
      
 322 
     | 
    
         
            +
                    Amount availableAmount
         
     | 
| 
      
 323 
     | 
    
         
            +
                )
         
     | 
| 
      
 324 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 325 
     | 
    
         
            +
                {
         
     | 
| 
      
 326 
     | 
    
         
            +
                    _getPoolStorage()._poolService.processFundedClaim(
         
     | 
| 
      
 327 
     | 
    
         
            +
                        policyNftId, claimId, availableAmount);
         
     | 
| 
      
 328 
     | 
    
         
            +
                }
         
     | 
| 
       305 
329 
     | 
    
         | 
| 
       306 
330 
     | 
    
         
             
                function _getPoolStorage() private pure returns (PoolStorage storage $) {
         
     | 
| 
       307 
331 
     | 
    
         
             
                    assembly {
         
     |