@etherisc/gif-next 0.0.2-f1e0c66-773 → 0.0.2-f1f3b2c-994
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 +7 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +81 -63
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
- 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 +48 -30
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +21 -2
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +72 -9
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +63 -248
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -222
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +134 -286
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +84 -120
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +21 -37
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +49 -62
- 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 +1512 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1999 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -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 +1432 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1192 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1566 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2001 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +10 -99
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +145 -111
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -124
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +39 -146
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +61 -81
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +285 -218
- 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 +45 -4
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- 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 +47 -232
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
- 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 +15 -31
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +15 -216
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +37 -144
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +60 -80
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +51 -274
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +319 -188
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +130 -94
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +149 -23
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -88
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +360 -171
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +41 -270
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +492 -333
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +98 -82
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +36 -162
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +57 -89
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +43 -242
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +263 -181
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +104 -100
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +147 -6
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +282 -119
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +43 -57
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +399 -327
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +104 -100
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +115 -267
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -120
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +43 -242
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -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 +238 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +436 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +261 -143
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -313
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +52 -72
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +46 -5
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +117 -215
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +70 -12
- 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 +15 -205
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +89 -212
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +96 -114
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +5 -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 +15 -20
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +15 -31
- 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/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/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +15 -216
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +41 -0
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +41 -0
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -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 +8 -97
- 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 +5 -112
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +42 -21
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +63 -93
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +100 -256
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +45 -4
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +77 -88
- 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 +31 -138
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +56 -76
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +168 -127
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -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 +32 -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 +2 -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 +2 -2
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +39 -70
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/authorization/AccessAdmin.sol +31 -24
- package/contracts/authorization/Authorization.sol +5 -2
- package/contracts/authorization/IAccessAdmin.sol +3 -2
- package/contracts/authorization/IServiceAuthorization.sol +4 -2
- package/contracts/authorization/ServiceAuthorization.sol +27 -11
- package/contracts/distribution/Distribution.sol +1 -1
- package/contracts/distribution/DistributionService.sol +32 -33
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionService.sol +9 -5
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +75 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
- package/contracts/examples/fire/FireProduct.sol +411 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -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/IInstance.sol +7 -30
- package/contracts/instance/Instance.sol +10 -35
- package/contracts/instance/InstanceAdmin.sol +29 -7
- package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +63 -41
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +11 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +4 -7
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/Oracle.sol +2 -1
- package/contracts/oracle/OracleService.sol +11 -8
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +7 -5
- package/contracts/pool/BasicPoolAuthorization.sol +5 -2
- package/contracts/pool/BundleService.sol +166 -46
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +31 -8
- package/contracts/pool/IPoolComponent.sol +18 -8
- package/contracts/pool/IPoolService.sol +57 -36
- package/contracts/pool/Pool.sol +59 -34
- package/contracts/pool/PoolService.sol +231 -102
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +50 -29
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +1 -0
- package/contracts/product/ClaimService.sol +251 -87
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +31 -7
- package/contracts/product/IPolicyService.sol +34 -34
- package/contracts/product/IPricingService.sol +7 -7
- package/contracts/product/IProductComponent.sol +17 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +379 -192
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +46 -46
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +81 -50
- package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +65 -32
- package/contracts/registry/IRegistry.sol +51 -18
- package/contracts/registry/IRegistryService.sol +0 -9
- package/contracts/registry/Registry.sol +328 -197
- package/contracts/registry/RegistryAdmin.sol +134 -51
- package/contracts/registry/RegistryService.sol +55 -48
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +194 -183
- package/contracts/registry/ServiceAuthorizationV3.sol +8 -10
- package/contracts/shared/Component.sol +25 -29
- package/contracts/shared/ComponentService.sol +20 -30
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +2 -3
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +7 -4
- package/contracts/shared/IInstanceLinkedComponent.sol +8 -15
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +5 -6
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +13 -2
- package/contracts/shared/NftOwnable.sol +5 -5
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +4 -4
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +16 -11
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +2 -1
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +11 -29
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +10 -14
- package/contracts/staking/StakingServiceManager.sol +2 -2
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +15 -0
- 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 +16 -11
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +15 -1
- 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 +4 -0
- package/contracts/upgradeability/ProxyManager.sol +67 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +2 -1
- 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/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
| @@ -27,14 +27,16 @@ contract OracleService is | |
| 27 27 | 
             
                    bytes memory data
         | 
| 28 28 | 
             
                )
         | 
| 29 29 | 
             
                    internal
         | 
| 30 | 
            -
                    initializer
         | 
| 31 30 | 
             
                    virtual override
         | 
| 31 | 
            +
                    initializer()
         | 
| 32 32 | 
             
                {
         | 
| 33 | 
            -
                     | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
                     | 
| 37 | 
            -
             | 
| 33 | 
            +
                    (
         | 
| 34 | 
            +
                        address registryAddress,
         | 
| 35 | 
            +
                        address authority
         | 
| 36 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    _initializeService(registryAddress, authority, owner);
         | 
| 39 | 
            +
                    _registerInterface(type(IOracleService).interfaceId);
         | 
| 38 40 | 
             
                }
         | 
| 39 41 |  | 
| 40 42 | 
             
                function request(
         | 
| @@ -64,6 +66,7 @@ contract OracleService is | |
| 64 66 | 
             
                        ORACLE(), 
         | 
| 65 67 | 
             
                        true); // only active
         | 
| 66 68 |  | 
| 69 | 
            +
                    // TODO move to stronger validation, requester and oracle need to belong to same product cluster
         | 
| 67 70 | 
             
                    // check that requester and oracle share same instance
         | 
| 68 71 | 
             
                    if (componentInfo.parentNftId != oracleInfo.parentNftId) {
         | 
| 69 72 | 
             
                        revert ErrorOracleServiceInstanceMismatch(componentInfo.parentNftId, oracleInfo.parentNftId);
         | 
| @@ -214,7 +217,7 @@ contract OracleService is | |
| 214 217 |  | 
| 215 218 | 
             
                    // call oracle component
         | 
| 216 219 | 
             
                    // TODO add check that oracle is active?
         | 
| 217 | 
            -
                    address oracleAddress = getRegistry(). | 
| 220 | 
            +
                    address oracleAddress = getRegistry().getObjectAddress(request.oracleNftId);
         | 
| 218 221 | 
             
                    IOracleComponent(oracleAddress).cancel(requestId);
         | 
| 219 222 |  | 
| 220 223 | 
             
                    emit LogOracleServiceRequestCancelled(requestId, requesterNftId);
         | 
| @@ -267,7 +270,7 @@ contract OracleService is | |
| 267 270 | 
             
                    returns(IInstance instance)
         | 
| 268 271 | 
             
                {
         | 
| 269 272 | 
             
                    NftId instanceNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
         | 
| 270 | 
            -
                    address instanceAddress = getRegistry(). | 
| 273 | 
            +
                    address instanceAddress = getRegistry().getObjectAddress(instanceNftId);
         | 
| 271 274 | 
             
                    return IInstance(instanceAddress);
         | 
| 272 275 | 
             
                }
         | 
| 273 276 |  | 
| @@ -12,15 +12,15 @@ contract OracleServiceManager is ProxyManager { | |
| 12 12 | 
             
                /// @dev initializes proxy manager with service implementation and deploys instance
         | 
| 13 13 | 
             
                constructor(
         | 
| 14 14 | 
             
                    address authority, 
         | 
| 15 | 
            -
                    address  | 
| 15 | 
            +
                    address registry,
         | 
| 16 16 | 
             
                    bytes32 salt
         | 
| 17 17 | 
             
                ) 
         | 
| 18 | 
            -
                    ProxyManager(registryAddress)
         | 
| 19 18 | 
             
                {
         | 
| 20 | 
            -
                    OracleService  | 
| 21 | 
            -
                    bytes memory data = abi.encode( | 
| 22 | 
            -
                    IVersionable versionable =  | 
| 23 | 
            -
                         | 
| 19 | 
            +
                    OracleService svc = new OracleService{salt: salt}();
         | 
| 20 | 
            +
                    bytes memory data = abi.encode(registry, authority);
         | 
| 21 | 
            +
                    IVersionable versionable = initialize(
         | 
| 22 | 
            +
                        registry,
         | 
| 23 | 
            +
                        address(svc), 
         | 
| 24 24 | 
             
                        data,
         | 
| 25 25 | 
             
                        salt);
         | 
| 26 26 |  | 
| @@ -14,6 +14,7 @@ import {NftId, NftIdLib} from "../type/NftId.sol"; | |
| 14 14 | 
             
            import {BUNDLE, COMPONENT, POOL} from "../type/ObjectType.sol";
         | 
| 15 15 | 
             
            import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
         | 
| 16 16 | 
             
            import {Seconds} from "../type/Seconds.sol";
         | 
| 17 | 
            +
            import {Timestamp} from "../type/Timestamp.sol";
         | 
| 17 18 | 
             
            import {TokenHandler} from "../shared/TokenHandler.sol";
         | 
| 18 19 | 
             
            import {UFixed, UFixedLib} from "../type/UFixed.sol";
         | 
| 19 20 |  | 
| @@ -81,8 +82,9 @@ abstract contract BasicPool is | |
| 81 82 | 
             
                    virtual
         | 
| 82 83 | 
             
                    restricted()
         | 
| 83 84 | 
             
                    onlyBundleOwner(bundleNftId)
         | 
| 85 | 
            +
                    returns(Timestamp newExpiredAt)
         | 
| 84 86 | 
             
                {
         | 
| 85 | 
            -
                    _extend(bundleNftId, lifetimeExtension);
         | 
| 87 | 
            +
                    return _extend(bundleNftId, lifetimeExtension);
         | 
| 86 88 | 
             
                }
         | 
| 87 89 |  | 
| 88 90 |  | 
| @@ -106,13 +108,13 @@ abstract contract BasicPool is | |
| 106 108 | 
             
                }
         | 
| 107 109 |  | 
| 108 110 |  | 
| 109 | 
            -
                function  | 
| 111 | 
            +
                function closeBundle(NftId bundleNftId)
         | 
| 110 112 | 
             
                    public
         | 
| 111 113 | 
             
                    virtual
         | 
| 112 114 | 
             
                    restricted()
         | 
| 113 115 | 
             
                    onlyBundleOwner(bundleNftId)
         | 
| 114 116 | 
             
                {
         | 
| 115 | 
            -
                     | 
| 117 | 
            +
                    _closeBundle(bundleNftId);
         | 
| 116 118 | 
             
                }
         | 
| 117 119 |  | 
| 118 120 |  | 
| @@ -129,13 +131,13 @@ abstract contract BasicPool is | |
| 129 131 | 
             
                }
         | 
| 130 132 |  | 
| 131 133 |  | 
| 132 | 
            -
                function  | 
| 134 | 
            +
                function setMaxBalanceAmount(Amount maxBalanceAmount)
         | 
| 133 135 | 
             
                    public
         | 
| 134 136 | 
             
                    virtual
         | 
| 135 137 | 
             
                    restricted()
         | 
| 136 138 | 
             
                    onlyOwner()
         | 
| 137 139 | 
             
                {
         | 
| 138 | 
            -
                     | 
| 140 | 
            +
                    _setMaxBalanceAmount(maxBalanceAmount);
         | 
| 139 141 | 
             
                }
         | 
| 140 142 |  | 
| 141 143 |  | 
| @@ -40,12 +40,15 @@ contract BasicPoolAuthorization | |
| 40 40 | 
             
                      _authorize(functions, BasicPool.extend.selector, "extend");
         | 
| 41 41 | 
             
                      _authorize(functions, BasicPool.lockBundle.selector, "lockBundle");
         | 
| 42 42 | 
             
                      _authorize(functions, BasicPool.unlockBundle.selector, "unlockBundle");
         | 
| 43 | 
            -
                      _authorize(functions, BasicPool. | 
| 43 | 
            +
                      _authorize(functions, BasicPool.closeBundle.selector, "closeBundle");
         | 
| 44 44 | 
             
                      _authorize(functions, BasicPool.setBundleFee.selector, "setBundleFee");
         | 
| 45 45 |  | 
| 46 | 
            -
                      _authorize(functions, BasicPool. | 
| 46 | 
            +
                      _authorize(functions, BasicPool.setMaxBalanceAmount.selector, "setMaxBalanceAmount");
         | 
| 47 47 | 
             
                      _authorize(functions, BasicPool.setBundleOwnerRole.selector, "setBundleOwnerRole");
         | 
| 48 48 | 
             
                      _authorize(functions, BasicPool.setFees.selector, "setFees");
         | 
| 49 | 
            +
                      _authorize(functions, BasicPool.stake.selector, "stake");
         | 
| 50 | 
            +
                      _authorize(functions, BasicPool.unstake.selector, "unstake");
         | 
| 51 | 
            +
                      _authorize(functions, BasicPool.extend.selector, "extend");
         | 
| 49 52 |  | 
| 50 53 | 
             
                      _authorize(functions, IInstanceLinkedComponent.withdrawFees.selector, "withdrawFees");
         | 
| 51 54 |  | 
| @@ -1,8 +1,6 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 | 
            -
             | 
| 6 4 | 
             
            import {IBundle} from "../instance/module/IBundle.sol";
         | 
| 7 5 | 
             
            import {IBundleService} from "./IBundleService.sol";
         | 
| 8 6 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| @@ -22,7 +20,7 @@ import {NftId, NftIdLib} from "../type/NftId.sol"; | |
| 22 20 | 
             
            import {ObjectType, COMPONENT, POOL, BUNDLE, REGISTRY} from "../type/ObjectType.sol";
         | 
| 23 21 | 
             
            import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../type/StateId.sol";
         | 
| 24 22 | 
             
            import {Seconds} from "../type/Seconds.sol";
         | 
| 25 | 
            -
            import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
         | 
| 23 | 
            +
            import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
         | 
| 26 24 |  | 
| 27 25 | 
             
            string constant BUNDLE_SERVICE_NAME = "BundleService";
         | 
| 28 26 |  | 
| @@ -42,20 +40,20 @@ contract BundleService is | |
| 42 40 | 
             
                    bytes memory data
         | 
| 43 41 | 
             
                )
         | 
| 44 42 | 
             
                    internal
         | 
| 45 | 
            -
                    initializer
         | 
| 46 43 | 
             
                    virtual override
         | 
| 44 | 
            +
                    initializer()
         | 
| 47 45 | 
             
                {
         | 
| 48 | 
            -
                     | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
                     | 
| 52 | 
            -
             | 
| 53 | 
            -
                     | 
| 46 | 
            +
                    (
         | 
| 47 | 
            +
                        address registryAddress,
         | 
| 48 | 
            +
                        address authority
         | 
| 49 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    _initializeService(registryAddress, authority, owner);
         | 
| 54 52 |  | 
| 55 53 | 
             
                    _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 56 54 | 
             
                    _componentService = IComponentService(_getServiceAddress(COMPONENT()));
         | 
| 57 55 |  | 
| 58 | 
            -
                     | 
| 56 | 
            +
                    _registerInterface(type(IBundleService).interfaceId);
         | 
| 59 57 | 
             
                }
         | 
| 60 58 |  | 
| 61 59 |  | 
| @@ -113,25 +111,28 @@ contract BundleService is | |
| 113 111 | 
             
                    InstanceStore instanceStore = instance.getInstanceStore();
         | 
| 114 112 | 
             
                    instanceStore.createBundle(
         | 
| 115 113 | 
             
                        bundleNftId, 
         | 
| 116 | 
            -
                        IBundle.BundleInfo(
         | 
| 117 | 
            -
                            poolNftId,
         | 
| 118 | 
            -
                            bundleFee,
         | 
| 119 | 
            -
                            filter,
         | 
| 120 | 
            -
                             | 
| 121 | 
            -
                            TimestampLib.blockTimestamp().addSeconds(lifetime),
         | 
| 122 | 
            -
                            zeroTimestamp() | 
| 114 | 
            +
                        IBundle.BundleInfo({
         | 
| 115 | 
            +
                            poolNftId: poolNftId,
         | 
| 116 | 
            +
                            fee: bundleFee,
         | 
| 117 | 
            +
                            filter: filter,
         | 
| 118 | 
            +
                            activatedAt: TimestampLib.blockTimestamp(),
         | 
| 119 | 
            +
                            expiredAt: TimestampLib.blockTimestamp().addSeconds(lifetime),
         | 
| 120 | 
            +
                            closedAt: zeroTimestamp()
         | 
| 121 | 
            +
                        })
         | 
| 122 | 
            +
                    );
         | 
| 123 123 |  | 
| 124 | 
            -
                     | 
| 125 | 
            -
             | 
| 126 | 
            -
                         | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 124 | 
            +
                    if (stakingAmount.gtz()) {
         | 
| 125 | 
            +
                        // bundle book keeping
         | 
| 126 | 
            +
                        _componentService.increaseBundleBalance(
         | 
| 127 | 
            +
                            instanceStore, 
         | 
| 128 | 
            +
                            bundleNftId, 
         | 
| 129 | 
            +
                            stakingAmount, 
         | 
| 130 | 
            +
                            AmountLib.zero()); // fee amount
         | 
| 131 | 
            +
                    }
         | 
| 130 132 |  | 
| 131 133 | 
             
                    // put bundle under bundle managemet
         | 
| 132 134 | 
             
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| 133 135 | 
             
                    bundleManager.add(bundleNftId);
         | 
| 134 | 
            -
             | 
| 135 136 | 
             
                    // TODO add logging
         | 
| 136 137 | 
             
                }
         | 
| 137 138 |  | 
| @@ -148,7 +149,7 @@ contract BundleService is | |
| 148 149 | 
             
                    restricted()
         | 
| 149 150 | 
             
                {
         | 
| 150 151 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 151 | 
            -
                    StateId bundleState =  | 
| 152 | 
            +
                    StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
         | 
| 152 153 | 
             
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 153 154 |  | 
| 154 155 | 
             
                    // ensure bundle is active and not yet expired
         | 
| @@ -218,9 +219,9 @@ contract BundleService is | |
| 218 219 | 
             
                    external
         | 
| 219 220 | 
             
                    virtual
         | 
| 220 221 | 
             
                    restricted
         | 
| 222 | 
            +
                    returns (Amount unstakedAmount, Amount feeAmount)
         | 
| 221 223 | 
             
                {
         | 
| 222 | 
            -
                     | 
| 223 | 
            -
                    instance.getInstanceStore().updateBundleState(bundleNftId, CLOSED());
         | 
| 224 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 224 225 |  | 
| 225 226 | 
             
                    // ensure no open policies attached to bundle
         | 
| 226 227 | 
             
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| @@ -229,8 +230,117 @@ contract BundleService is | |
| 229 230 | 
             
                        revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
         | 
| 230 231 | 
             
                    }
         | 
| 231 232 |  | 
| 232 | 
            -
                     | 
| 233 | 
            -
             | 
| 233 | 
            +
                    {
         | 
| 234 | 
            +
                        // update bundle state
         | 
| 235 | 
            +
                        InstanceStore instanceStore = instance.getInstanceStore();
         | 
| 236 | 
            +
                        instanceStore.updateBundleState(bundleNftId, CLOSED());
         | 
| 237 | 
            +
                        bundleManager.lock(bundleNftId);
         | 
| 238 | 
            +
             | 
| 239 | 
            +
                        // decrease bundle counters
         | 
| 240 | 
            +
                        Amount balanceAmountWithFees = instanceReader.getBalanceAmount(bundleNftId);
         | 
| 241 | 
            +
                        feeAmount = instanceReader.getFeeAmount(bundleNftId);
         | 
| 242 | 
            +
                        unstakedAmount = balanceAmountWithFees - feeAmount;
         | 
| 243 | 
            +
                        _componentService.decreaseBundleBalance(instanceStore, bundleNftId, unstakedAmount, feeAmount);
         | 
| 244 | 
            +
                    }
         | 
| 245 | 
            +
                }
         | 
| 246 | 
            +
             | 
| 247 | 
            +
                /// @inheritdoc IBundleService
         | 
| 248 | 
            +
                function stake(
         | 
| 249 | 
            +
                    IInstance instance,
         | 
| 250 | 
            +
                    NftId bundleNftId, 
         | 
| 251 | 
            +
                    Amount amount
         | 
| 252 | 
            +
                ) 
         | 
| 253 | 
            +
                    external 
         | 
| 254 | 
            +
                    virtual
         | 
| 255 | 
            +
                    // TODO: restricted() (once #462 is done)
         | 
| 256 | 
            +
                {
         | 
| 257 | 
            +
                    IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
         | 
| 258 | 
            +
                    StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
         | 
| 259 | 
            +
             | 
| 260 | 
            +
                    if( (bundleState != ACTIVE() && bundleState != PAUSED()) // locked bundles can be staked
         | 
| 261 | 
            +
                        || bundleInfo.expiredAt < TimestampLib.blockTimestamp() 
         | 
| 262 | 
            +
                        || bundleInfo.closedAt.gtz()) {
         | 
| 263 | 
            +
                        revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
         | 
| 264 | 
            +
                    }
         | 
| 265 | 
            +
             | 
| 266 | 
            +
                    _componentService.increaseBundleBalance(
         | 
| 267 | 
            +
                        instance.getInstanceStore(), 
         | 
| 268 | 
            +
                        bundleNftId, 
         | 
| 269 | 
            +
                        amount, 
         | 
| 270 | 
            +
                        AmountLib.zero());
         | 
| 271 | 
            +
                }
         | 
| 272 | 
            +
             | 
| 273 | 
            +
                /// @inheritdoc IBundleService
         | 
| 274 | 
            +
                function unstake(
         | 
| 275 | 
            +
                    IInstance instance, 
         | 
| 276 | 
            +
                    NftId bundleNftId, 
         | 
| 277 | 
            +
                    Amount amount
         | 
| 278 | 
            +
                ) 
         | 
| 279 | 
            +
                    external 
         | 
| 280 | 
            +
                    virtual
         | 
| 281 | 
            +
                    // TODO: restricted() (once #462 is done)
         | 
| 282 | 
            +
                    returns (Amount unstakedAmount)
         | 
| 283 | 
            +
                {
         | 
| 284 | 
            +
                    InstanceStore instanceStore = instance.getInstanceStore();
         | 
| 285 | 
            +
                    (
         | 
| 286 | 
            +
                        Amount balanceAmount,
         | 
| 287 | 
            +
                        Amount lockedAmount,
         | 
| 288 | 
            +
                        Amount feeAmount
         | 
| 289 | 
            +
                    ) = instanceStore.getAmounts(bundleNftId);
         | 
| 290 | 
            +
             | 
| 291 | 
            +
                    Amount unstakedAmount = amount;
         | 
| 292 | 
            +
                    Amount availableAmount = balanceAmount - (lockedAmount + feeAmount);
         | 
| 293 | 
            +
             | 
| 294 | 
            +
                    // if amount is max, then unstake all available 
         | 
| 295 | 
            +
                    if (amount.gte(AmountLib.max())) {
         | 
| 296 | 
            +
                        unstakedAmount = availableAmount;
         | 
| 297 | 
            +
                    }
         | 
| 298 | 
            +
                    
         | 
| 299 | 
            +
                    // ensure unstaked amount does not exceed available amount
         | 
| 300 | 
            +
                    if (unstakedAmount > availableAmount) {
         | 
| 301 | 
            +
                        revert ErrorBundleServiceUnstakeAmountExceedsLimit(amount, availableAmount);
         | 
| 302 | 
            +
                    }
         | 
| 303 | 
            +
             | 
| 304 | 
            +
                    _componentService.decreaseBundleBalance(
         | 
| 305 | 
            +
                        instanceStore, 
         | 
| 306 | 
            +
                        bundleNftId, 
         | 
| 307 | 
            +
                        unstakedAmount, 
         | 
| 308 | 
            +
                        AmountLib.zero());
         | 
| 309 | 
            +
             | 
| 310 | 
            +
                    return unstakedAmount;
         | 
| 311 | 
            +
                }
         | 
| 312 | 
            +
             | 
| 313 | 
            +
                /// @inheritdoc IBundleService
         | 
| 314 | 
            +
                function extend(NftId bundleNftId, Seconds lifetimeExtension) 
         | 
| 315 | 
            +
                    external 
         | 
| 316 | 
            +
                    virtual
         | 
| 317 | 
            +
                    // TODO: restricted() (once #462 is done)
         | 
| 318 | 
            +
                    returns (Timestamp extendedExpiredAt) 
         | 
| 319 | 
            +
                {
         | 
| 320 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 321 | 
            +
                    IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
         | 
| 322 | 
            +
                    StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
         | 
| 323 | 
            +
             | 
| 324 | 
            +
                    // ensure bundle belongs to the pool
         | 
| 325 | 
            +
                    if (bundleInfo.poolNftId != poolNftId) {
         | 
| 326 | 
            +
                        revert ErrorBundleServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
         | 
| 327 | 
            +
                    }
         | 
| 328 | 
            +
             | 
| 329 | 
            +
                    // ensure bundle is active and not yet expired
         | 
| 330 | 
            +
                    if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
         | 
| 331 | 
            +
                        revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
         | 
| 332 | 
            +
                    }
         | 
| 333 | 
            +
             | 
| 334 | 
            +
                    if (lifetimeExtension.eqz()) {
         | 
| 335 | 
            +
                        revert ErrorBundleServiceExtensionLifetimeIsZero();
         | 
| 336 | 
            +
                    }
         | 
| 337 | 
            +
             | 
| 338 | 
            +
                    bundleInfo.expiredAt = bundleInfo.expiredAt.addSeconds(lifetimeExtension);
         | 
| 339 | 
            +
                    instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
         | 
| 340 | 
            +
             | 
| 341 | 
            +
                    emit LogBundleServiceBundleExtended(bundleNftId, lifetimeExtension, bundleInfo.expiredAt);
         | 
| 342 | 
            +
             | 
| 343 | 
            +
                    return bundleInfo.expiredAt;
         | 
| 234 344 | 
             
                }
         | 
| 235 345 |  | 
| 236 346 |  | 
| @@ -257,7 +367,7 @@ contract BundleService is | |
| 257 367 | 
             
                    restricted
         | 
| 258 368 | 
             
                {
         | 
| 259 369 | 
             
                    // ensure policy is closeable
         | 
| 260 | 
            -
                    if (! | 
| 370 | 
            +
                    if (!policyIsCloseable(instance, policyNftId)) {
         | 
| 261 371 | 
             
                        revert ErrorBundleServicePolicyNotCloseable(policyNftId);
         | 
| 262 372 | 
             
                    }
         | 
| 263 373 |  | 
| @@ -289,17 +399,6 @@ contract BundleService is | |
| 289 399 | 
             
                        }
         | 
| 290 400 | 
             
                    }
         | 
| 291 401 |  | 
| 292 | 
            -
                    if (withdrawnAmount.eqz()) {
         | 
| 293 | 
            -
                        revert ErrorBundleServiceFeesWithdrawAmountIsZero();
         | 
| 294 | 
            -
                    }
         | 
| 295 | 
            -
             | 
| 296 | 
            -
                    // check allowance
         | 
| 297 | 
            -
                    IERC20Metadata token = IERC20Metadata(poolInfo.token);
         | 
| 298 | 
            -
                    uint256 tokenAllowance = token.allowance(poolWallet, address(poolInfo.tokenHandler));
         | 
| 299 | 
            -
                    if (tokenAllowance < withdrawnAmount.toInt()) {
         | 
| 300 | 
            -
                        revert ErrorBundleServiceWalletAllowanceTooSmall(poolWallet, address(poolInfo.tokenHandler), tokenAllowance, withdrawnAmount.toInt());
         | 
| 301 | 
            -
                    }
         | 
| 302 | 
            -
             | 
| 303 402 | 
             
                    // decrease fee counters by withdrawnAmount
         | 
| 304 403 | 
             
                    {
         | 
| 305 404 | 
             
                        InstanceStore store = instance.getInstanceStore();
         | 
| @@ -312,13 +411,34 @@ contract BundleService is | |
| 312 411 | 
             
                    // transfer amount to bundle owner
         | 
| 313 412 | 
             
                    {
         | 
| 314 413 | 
             
                        address owner = getRegistry().ownerOf(bundleNftId);
         | 
| 315 | 
            -
                         | 
| 316 | 
            -
                        poolInfo.tokenHandler. | 
| 317 | 
            -
             | 
| 318 | 
            -
                        emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(token), withdrawnAmount);
         | 
| 414 | 
            +
                        emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(poolInfo.token), withdrawnAmount);
         | 
| 415 | 
            +
                        poolInfo.tokenHandler.distributeTokens(poolWallet, owner, withdrawnAmount);
         | 
| 319 416 | 
             
                    }
         | 
| 320 417 | 
             
                }
         | 
| 321 418 |  | 
| 419 | 
            +
                /// @inheritdoc IBundleService
         | 
| 420 | 
            +
                function policyIsCloseable(IInstance instance, NftId policyNftId)
         | 
| 421 | 
            +
                    public
         | 
| 422 | 
            +
                    view
         | 
| 423 | 
            +
                    returns (bool isCloseable)
         | 
| 424 | 
            +
                {
         | 
| 425 | 
            +
                    IPolicy.PolicyInfo memory info = instance.getInstanceReader().getPolicyInfo(policyNftId);
         | 
| 426 | 
            +
                    
         | 
| 427 | 
            +
                    if (info.productNftId.eqz()) { return false; } // not closeable: policy does not exist (or does not belong to this instance)
         | 
| 428 | 
            +
                    if (info.activatedAt.eqz()) { return false; } // not closeable: not yet activated
         | 
| 429 | 
            +
                    if (info.closedAt.gtz()) { return false; } // not closeable: already closed
         | 
| 430 | 
            +
                    if (info.openClaimsCount > 0) { return false; } // not closeable: has open claims
         | 
| 431 | 
            +
             | 
| 432 | 
            +
                    // closeable: if sum of claims matches sum insured a policy may be closed prior to the expiry date
         | 
| 433 | 
            +
                    if (info.claimAmount == info.sumInsuredAmount) { return true; }
         | 
| 434 | 
            +
             | 
| 435 | 
            +
                    // not closeable: not yet expired
         | 
| 436 | 
            +
                    if (TimestampLib.blockTimestamp() < info.expiredAt) { return false; }
         | 
| 437 | 
            +
             | 
| 438 | 
            +
                    // all conditionsl to close the policy are met
         | 
| 439 | 
            +
                    return true; 
         | 
| 440 | 
            +
                }
         | 
| 441 | 
            +
             | 
| 322 442 | 
             
                /// @dev links policy to bundle
         | 
| 323 443 | 
             
                function _linkPolicy(IInstance instance, NftId policyNftId) 
         | 
| 324 444 | 
             
                    internal
         | 
| @@ -12,15 +12,15 @@ contract BundleServiceManager is ProxyManager { | |
| 12 12 | 
             
                /// @dev initializes proxy manager with pool service implementation 
         | 
| 13 13 | 
             
                constructor(
         | 
| 14 14 | 
             
                    address authority, 
         | 
| 15 | 
            -
                    address  | 
| 15 | 
            +
                    address registry,
         | 
| 16 16 | 
             
                    bytes32 salt
         | 
| 17 17 | 
             
                ) 
         | 
| 18 | 
            -
                    ProxyManager(registryAddress)
         | 
| 19 18 | 
             
                {
         | 
| 20 | 
            -
                    BundleService  | 
| 21 | 
            -
                    bytes memory data = abi.encode( | 
| 22 | 
            -
                    IVersionable versionable =  | 
| 23 | 
            -
                         | 
| 19 | 
            +
                    BundleService svc = new BundleService{salt: salt}();
         | 
| 20 | 
            +
                    bytes memory data = abi.encode(registry, authority);
         | 
| 21 | 
            +
                    IVersionable versionable = initialize(
         | 
| 22 | 
            +
                        registry,
         | 
| 23 | 
            +
                        address(svc), 
         | 
| 24 24 | 
             
                        data,
         | 
| 25 25 | 
             
                        salt);
         | 
| 26 26 |  | 
| @@ -26,12 +26,14 @@ interface IBundleService is IService { | |
| 26 26 |  | 
| 27 27 | 
             
                error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
         | 
| 28 28 |  | 
| 29 | 
            -
                // error ErrorBundleServiceBundleNotActive(NftId distributorNftId);
         | 
| 30 29 | 
             
                error ErrorBundleServiceFeesWithdrawAmountExceedsLimit(Amount amount, Amount limit);
         | 
| 31 | 
            -
                 | 
| 32 | 
            -
                error  | 
| 30 | 
            +
                
         | 
| 31 | 
            +
                error ErrorBundleServiceUnstakeAmountExceedsLimit(Amount amount, Amount limit);
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                error ErrorBundleServiceExtensionLifetimeIsZero();
         | 
| 33 34 |  | 
| 34 35 | 
             
                event LogBundleServiceFeesWithdrawn(NftId bundleNftId, address recipient, address tokenAddress, Amount amount);
         | 
| 36 | 
            +
                event LogBundleServiceBundleExtended(NftId bundleNftId, Seconds lifetimeExtension, Timestamp extendedExpiredAt);
         | 
| 35 37 |  | 
| 36 38 | 
             
                /// @dev create a new bundle for the specified attributes
         | 
| 37 39 | 
             
                /// may only be called by pool service
         | 
| @@ -48,11 +50,20 @@ interface IBundleService is IService { | |
| 48 50 | 
             
                    returns(NftId bundleNftId); // the nft id of the newly created bundle
         | 
| 49 51 |  | 
| 50 52 |  | 
| 51 | 
            -
                /// @dev increase bundle stakes by the specified amount
         | 
| 52 | 
            -
                /// may only be called by the  | 
| 53 | 
            -
                 | 
| 53 | 
            +
                /// @dev increase bundle stakes by the specified amount. bundle must not be expired or closed
         | 
| 54 | 
            +
                /// may only be called by the pool service
         | 
| 55 | 
            +
                function stake(IInstance instance, NftId bundleNftId, Amount amount) external;
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                /// @dev decrease bundle stakes by the specified amount
         | 
| 58 | 
            +
                /// may only be called by the pool service
         | 
| 59 | 
            +
                /// @param instance the instance relevant for the bundle
         | 
| 60 | 
            +
                /// @param bundleNftId the bundle nft id
         | 
| 61 | 
            +
                /// @param amount the amount to unstake (set to AmountLib.max() to unstake all available stakes)
         | 
| 62 | 
            +
                /// @return unstakedAmount the effective unstaked amount
         | 
| 63 | 
            +
                function unstake(IInstance instance, NftId bundleNftId, Amount amount) external returns (Amount unstakedAmount);
         | 
| 54 64 |  | 
| 55 | 
            -
                 | 
| 65 | 
            +
                /// @dev extend the lifetime of the bundle by the specified time in seconds
         | 
| 66 | 
            +
                function extend(NftId bundleNftId, Seconds lifetimeExtension) external returns (Timestamp extendedExpiredAt);
         | 
| 56 67 |  | 
| 57 68 | 
             
                /// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
         | 
| 58 69 | 
             
                /// only active bundles may be locked
         | 
| @@ -68,10 +79,12 @@ interface IBundleService is IService { | |
| 68 79 | 
             
                /// only open bundles (active or locked) may be closed
         | 
| 69 80 | 
             
                /// to close a bundle it may not have any non-closed polices attached to it
         | 
| 70 81 | 
             
                /// may only be called by registered and unlocked pool components
         | 
| 82 | 
            +
                /// @return balanceAmount the unstaked amount that was remaining in the bundle
         | 
| 83 | 
            +
                /// @return feeAmount the fee amount that was remaining for the bundle
         | 
| 71 84 | 
             
                function close(
         | 
| 72 85 | 
             
                    IInstance instance, 
         | 
| 73 86 | 
             
                    NftId bundleNftId
         | 
| 74 | 
            -
                ) external;
         | 
| 87 | 
            +
                ) external returns (Amount balanceAmount, Amount feeAmount);
         | 
| 75 88 |  | 
| 76 89 | 
             
                /// @dev set bundle fee to provided value
         | 
| 77 90 | 
             
                /// may only be called by registered and unlocked pool components
         | 
| @@ -111,10 +124,20 @@ interface IBundleService is IService { | |
| 111 124 | 
             
                    NftId policyNftId
         | 
| 112 125 | 
             
                ) external;
         | 
| 113 126 |  | 
| 127 | 
            +
                // FIXME: move to pool service
         | 
| 114 128 | 
             
                /// @dev Withdraw bundle feeds for the given bundle
         | 
| 115 129 | 
             
                /// @param bundleNftId the bundle Nft Id
         | 
| 116 130 | 
             
                /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
         | 
| 117 131 | 
             
                /// @return withdrawnAmount the effective withdrawn amount
         | 
| 118 132 | 
             
                function withdrawBundleFees(NftId bundleNftId, Amount amount) external returns (Amount withdrawnAmount);
         | 
| 119 133 |  | 
| 134 | 
            +
                /// @dev returns true iff policy may be closed
         | 
| 135 | 
            +
                /// a policy can be closed all conditions below are met
         | 
| 136 | 
            +
                /// - policy exists
         | 
| 137 | 
            +
                /// - has been activated
         | 
| 138 | 
            +
                /// - is not yet closed
         | 
| 139 | 
            +
                /// - has no open claims
         | 
| 140 | 
            +
                /// - claim amount matches sum insured amount or is expired
         | 
| 141 | 
            +
                function policyIsCloseable(IInstance instance, NftId policyNftId) external view returns (bool isCloseable);
         | 
| 142 | 
            +
             | 
| 120 143 | 
             
            }
         | 
| @@ -2,6 +2,7 @@ | |
| 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 7 | 
             
            import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
         | 
| 7 8 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| @@ -20,10 +21,10 @@ interface IPoolComponent is IInstanceLinkedComponent { | |
| 20 21 |  | 
| 21 22 | 
             
                event LogPoolVerifiedByPool(address pool, NftId applicationNftId, Amount collateralizationAmount);
         | 
| 22 23 |  | 
| 23 | 
            -
                /// @dev  | 
| 24 | 
            -
                ///  | 
| 25 | 
            -
                ///  | 
| 26 | 
            -
                ///  | 
| 24 | 
            +
                /// @dev This is a callback function that is called by the product service when underwriting a policy.
         | 
| 25 | 
            +
                /// The pool has the option to check the details and object to underwriting by reverting.
         | 
| 26 | 
            +
                /// The function is only called for "active" pools that ask to be involved/notified.
         | 
| 27 | 
            +
                /// The default implementation is empty.
         | 
| 27 28 | 
             
                function verifyApplication(
         | 
| 28 29 | 
             
                    NftId applicationNftId, 
         | 
| 29 30 | 
             
                    bytes memory applicationData,
         | 
| @@ -32,9 +33,9 @@ interface IPoolComponent is IInstanceLinkedComponent { | |
| 32 33 | 
             
                    Amount collateralizationAmount
         | 
| 33 34 | 
             
                ) external;
         | 
| 34 35 |  | 
| 35 | 
            -
                /// @dev  | 
| 36 | 
            -
                ///  | 
| 37 | 
            -
                /// default implementation returns true
         | 
| 36 | 
            +
                /// @dev Returns true iff the application matches with the bundle.
         | 
| 37 | 
            +
                /// This is a callback function that is only called if a pool declares itself as a verifying pool
         | 
| 38 | 
            +
                /// The default implementation returns true.
         | 
| 38 39 | 
             
                function applicationMatchesBundle(
         | 
| 39 40 | 
             
                    NftId applicationNftId, 
         | 
| 40 41 | 
             
                    bytes memory applicationData,
         | 
| @@ -46,13 +47,22 @@ interface IPoolComponent is IInstanceLinkedComponent { | |
| 46 47 | 
             
                    view
         | 
| 47 48 | 
             
                    returns (bool isMatching);
         | 
| 48 49 |  | 
| 50 | 
            +
                /// @dev This is a callback function that is called by the claim service when a claim is confirmed.
         | 
| 51 | 
            +
                /// The pool has the option to implement custom behavirous such as triggering a reinsurance claim or blocking the claim confirmaation.
         | 
| 52 | 
            +
                /// The default implementation is empty.
         | 
| 53 | 
            +
                function processConfirmedClaim(
         | 
| 54 | 
            +
                    NftId policyNftId, 
         | 
| 55 | 
            +
                    ClaimId claimId, 
         | 
| 56 | 
            +
                    Amount amount
         | 
| 57 | 
            +
                ) external;
         | 
| 58 | 
            +
             | 
| 49 59 | 
             
                /// @dev Withdraw bundle feeds for the given bundle
         | 
| 50 60 | 
             
                /// @param bundleNftId the bundle Nft Id
         | 
| 51 61 | 
             
                /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
         | 
| 52 62 | 
             
                /// @return withdrawnAmount the effective withdrawn amount
         | 
| 53 63 | 
             
                function withdrawBundleFees(NftId bundleNftId, Amount amount) external returns (Amount withdrawnAmount);
         | 
| 54 64 |  | 
| 55 | 
            -
                /// @dev  | 
| 65 | 
            +
                /// @dev Returns initial pool specific infos for this pool
         | 
| 56 66 | 
             
                function getInitialPoolInfo() external view returns (IComponents.PoolInfo memory info);
         | 
| 57 67 |  | 
| 58 68 | 
             
            }
         |