@etherisc/gif-next 0.0.2-f36fd21-685 → 0.0.2-f47f21f-178
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 +19 -2
- 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/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 +163 -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 +91 -277
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +174 -292
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +99 -123
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +78 -92
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +78 -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 +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 +2077 -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 +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/IInstance.sol/IInstance.json +53 -31
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +29 -84
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +56 -123
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +166 -139
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +459 -131
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +77 -242
- 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 -233
- 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 +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 +137 -283
- 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 +66 -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 +79 -265
- 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 +109 -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 +359 -194
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +145 -97
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +178 -23
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +88 -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 +99 -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 +136 -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 +310 -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 +124 -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 +433 -327
- 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 +199 -309
- 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 +136 -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 +286 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
- 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 +492 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +283 -143
- 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 +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +129 -221
- 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 +355 -283
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +122 -120
- 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 +321 -19
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +66 -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 +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 +79 -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 +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 +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 +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 +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 +63 -93
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +176 -293
- 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 +169 -128
- 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 +55 -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 +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 +2 -1
- package/contracts/distribution/Distribution.sol +7 -17
- package/contracts/distribution/DistributionService.sol +83 -65
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- 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 +418 -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/IInstance.sol +10 -30
- package/contracts/instance/IInstanceService.sol +0 -20
- package/contracts/instance/Instance.sol +29 -51
- package/contracts/instance/InstanceAdmin.sol +42 -31
- package/contracts/instance/InstanceAuthorizationV3.sol +11 -21
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +65 -97
- 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 +10 -10
- 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/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +6 -16
- package/contracts/oracle/OracleService.sol +47 -34
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +21 -31
- package/contracts/pool/BasicPoolAuthorization.sol +5 -3
- package/contracts/pool/BundleService.sol +213 -61
- 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 +56 -39
- package/contracts/pool/Pool.sol +60 -53
- package/contracts/pool/PoolService.sol +250 -140
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +59 -30
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +7 -6
- package/contracts/product/BasicProductAuthorization.sol +0 -1
- package/contracts/product/ClaimService.sol +313 -118
- 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 +10 -10
- package/contracts/product/IProductComponent.sol +23 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +394 -196
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +54 -54
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +125 -71
- package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +68 -38
- package/contracts/registry/IRegistry.sol +55 -18
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +342 -201
- package/contracts/registry/RegistryAdmin.sol +134 -51
- package/contracts/registry/RegistryService.sol +35 -46
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +204 -188
- package/contracts/registry/ServiceAuthorizationV3.sol +16 -22
- package/contracts/shared/Component.sol +40 -55
- package/contracts/shared/ComponentService.sol +235 -151
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- 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 +25 -13
- package/contracts/shared/IInstanceLinkedComponent.sol +7 -22
- 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/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +72 -31
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +27 -7
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +19 -9
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +20 -18
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +2 -1
- package/contracts/staking/IStakingService.sol +0 -3
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +13 -32
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +11 -29
- 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/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 +4 -0
- package/contracts/upgradeability/ProxyManager.sol +68 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +2 -1
- 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/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/authorization/IModuleAuthorization.sol +0 -21
- package/contracts/authorization/ModuleAuthorization.sol +0 -78
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
| @@ -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";
         | 
| @@ -19,10 +17,10 @@ import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol | |
| 19 17 | 
             
            import {Fee} from "../type/Fee.sol";
         | 
| 20 18 | 
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 21 19 | 
             
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 22 | 
            -
            import {ObjectType, COMPONENT, POOL, BUNDLE, REGISTRY} from "../type/ObjectType.sol";
         | 
| 20 | 
            +
            import {ObjectType, COMPONENT, POOL, BUNDLE, POLICY, 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 |  | 
| @@ -66,6 +64,8 @@ contract BundleService is | |
| 66 64 | 
             
                    external
         | 
| 67 65 | 
             
                    virtual
         | 
| 68 66 | 
             
                {
         | 
| 67 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 68 | 
            +
             | 
| 69 69 | 
             
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 70 70 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 71 71 | 
             
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| @@ -96,6 +96,8 @@ contract BundleService is | |
| 96 96 | 
             
                    restricted
         | 
| 97 97 | 
             
                    returns(NftId bundleNftId)
         | 
| 98 98 | 
             
                {
         | 
| 99 | 
            +
                    _checkNftType(poolNftId, POOL());
         | 
| 100 | 
            +
             | 
| 99 101 | 
             
                    // register bundle with registry
         | 
| 100 102 | 
             
                    bundleNftId = _registryService.registerBundle(
         | 
| 101 103 | 
             
                        IRegistry.ObjectInfo(
         | 
| @@ -113,25 +115,28 @@ contract BundleService is | |
| 113 115 | 
             
                    InstanceStore instanceStore = instance.getInstanceStore();
         | 
| 114 116 | 
             
                    instanceStore.createBundle(
         | 
| 115 117 | 
             
                        bundleNftId, 
         | 
| 116 | 
            -
                        IBundle.BundleInfo(
         | 
| 117 | 
            -
                            poolNftId,
         | 
| 118 | 
            -
                            bundleFee,
         | 
| 119 | 
            -
                            filter,
         | 
| 120 | 
            -
                             | 
| 121 | 
            -
                            TimestampLib.blockTimestamp().addSeconds(lifetime),
         | 
| 122 | 
            -
                            zeroTimestamp() | 
| 118 | 
            +
                        IBundle.BundleInfo({
         | 
| 119 | 
            +
                            poolNftId: poolNftId,
         | 
| 120 | 
            +
                            fee: bundleFee,
         | 
| 121 | 
            +
                            filter: filter,
         | 
| 122 | 
            +
                            activatedAt: TimestampLib.blockTimestamp(),
         | 
| 123 | 
            +
                            expiredAt: TimestampLib.blockTimestamp().addSeconds(lifetime),
         | 
| 124 | 
            +
                            closedAt: zeroTimestamp()
         | 
| 125 | 
            +
                        })
         | 
| 126 | 
            +
                    );
         | 
| 123 127 |  | 
| 124 | 
            -
                     | 
| 125 | 
            -
             | 
| 126 | 
            -
                         | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 128 | 
            +
                    if (stakingAmount.gtz()) {
         | 
| 129 | 
            +
                        // bundle book keeping
         | 
| 130 | 
            +
                        _componentService.increaseBundleBalance(
         | 
| 131 | 
            +
                            instanceStore, 
         | 
| 132 | 
            +
                            bundleNftId, 
         | 
| 133 | 
            +
                            stakingAmount, 
         | 
| 134 | 
            +
                            AmountLib.zero()); // fee amount
         | 
| 135 | 
            +
                    }
         | 
| 130 136 |  | 
| 131 137 | 
             
                    // put bundle under bundle managemet
         | 
| 132 138 | 
             
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| 133 139 | 
             
                    bundleManager.add(bundleNftId);
         | 
| 134 | 
            -
             | 
| 135 140 | 
             
                    // TODO add logging
         | 
| 136 141 | 
             
                }
         | 
| 137 142 |  | 
| @@ -147,26 +152,35 @@ contract BundleService is | |
| 147 152 | 
             
                    virtual
         | 
| 148 153 | 
             
                    restricted()
         | 
| 149 154 | 
             
                {
         | 
| 155 | 
            +
                    _checkNftType(policyNftId, POLICY());
         | 
| 156 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 157 | 
            +
             | 
| 150 158 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 151 | 
            -
                    StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
         | 
| 152 | 
            -
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 153 159 |  | 
| 154 | 
            -
                     | 
| 155 | 
            -
             | 
| 156 | 
            -
                         | 
| 160 | 
            +
                    {
         | 
| 161 | 
            +
                        StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
         | 
| 162 | 
            +
                        IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                        // ensure bundle is active and not yet expired
         | 
| 165 | 
            +
                        if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
         | 
| 166 | 
            +
                            revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
         | 
| 167 | 
            +
                        }
         | 
| 157 168 | 
             
                    }
         | 
| 158 169 |  | 
| 159 | 
            -
                    // ensure bundle capacity is sufficent to collateralize policy
         | 
| 160 170 | 
             
                    InstanceStore instanceStore = instance.getInstanceStore();
         | 
| 161 | 
            -
                    (
         | 
| 162 | 
            -
                        Amount balanceAmount,
         | 
| 163 | 
            -
                        Amount lockedAmount,
         | 
| 164 | 
            -
                        Amount feeAmount
         | 
| 165 | 
            -
                    ) = instanceStore.getAmounts(bundleNftId);
         | 
| 166 171 |  | 
| 167 | 
            -
                     | 
| 168 | 
            -
             | 
| 169 | 
            -
                         | 
| 172 | 
            +
                    {
         | 
| 173 | 
            +
                        // ensure bundle capacity is sufficent to collateralize policy
         | 
| 174 | 
            +
                        (
         | 
| 175 | 
            +
                            Amount balanceAmount,
         | 
| 176 | 
            +
                            Amount lockedAmount,
         | 
| 177 | 
            +
                            Amount feeAmount
         | 
| 178 | 
            +
                        ) = instanceStore.getAmounts(bundleNftId);
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                        Amount capacity = balanceAmount - (lockedAmount + feeAmount);
         | 
| 181 | 
            +
                        if(capacity < collateralAmount) {
         | 
| 182 | 
            +
                            revert ErrorBundleServiceCapacityInsufficient(bundleNftId, capacity, collateralAmount);
         | 
| 183 | 
            +
                        }
         | 
| 170 184 | 
             
                    }
         | 
| 171 185 |  | 
| 172 186 | 
             
                    // updated locked amount
         | 
| @@ -181,6 +195,8 @@ contract BundleService is | |
| 181 195 | 
             
                    external
         | 
| 182 196 | 
             
                    virtual
         | 
| 183 197 | 
             
                {
         | 
| 198 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 199 | 
            +
             | 
| 184 200 | 
             
                    (,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 185 201 |  | 
| 186 202 | 
             
                    // udpate bundle state
         | 
| @@ -198,6 +214,8 @@ contract BundleService is | |
| 198 214 | 
             
                    external
         | 
| 199 215 | 
             
                    virtual
         | 
| 200 216 | 
             
                {
         | 
| 217 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 218 | 
            +
             | 
| 201 219 | 
             
                    (,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 202 220 |  | 
| 203 221 | 
             
                    // udpate bundle state
         | 
| @@ -218,9 +236,11 @@ contract BundleService is | |
| 218 236 | 
             
                    external
         | 
| 219 237 | 
             
                    virtual
         | 
| 220 238 | 
             
                    restricted
         | 
| 239 | 
            +
                    returns (Amount unstakedAmount, Amount feeAmount)
         | 
| 221 240 | 
             
                {
         | 
| 222 | 
            -
                     | 
| 223 | 
            -
             | 
| 241 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 242 | 
            +
             | 
| 243 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 224 244 |  | 
| 225 245 | 
             
                    // ensure no open policies attached to bundle
         | 
| 226 246 | 
             
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| @@ -229,8 +249,121 @@ contract BundleService is | |
| 229 249 | 
             
                        revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
         | 
| 230 250 | 
             
                    }
         | 
| 231 251 |  | 
| 232 | 
            -
                     | 
| 233 | 
            -
             | 
| 252 | 
            +
                    {
         | 
| 253 | 
            +
                        // update bundle state
         | 
| 254 | 
            +
                        InstanceStore instanceStore = instance.getInstanceStore();
         | 
| 255 | 
            +
                        instanceStore.updateBundleState(bundleNftId, CLOSED());
         | 
| 256 | 
            +
                        bundleManager.lock(bundleNftId);
         | 
| 257 | 
            +
             | 
| 258 | 
            +
                        // decrease bundle counters
         | 
| 259 | 
            +
                        Amount balanceAmountWithFees = instanceReader.getBalanceAmount(bundleNftId);
         | 
| 260 | 
            +
                        feeAmount = instanceReader.getFeeAmount(bundleNftId);
         | 
| 261 | 
            +
                        unstakedAmount = balanceAmountWithFees - feeAmount;
         | 
| 262 | 
            +
                        _componentService.decreaseBundleBalance(instanceStore, bundleNftId, unstakedAmount, feeAmount);
         | 
| 263 | 
            +
                    }
         | 
| 264 | 
            +
                }
         | 
| 265 | 
            +
             | 
| 266 | 
            +
                /// @inheritdoc IBundleService
         | 
| 267 | 
            +
                function stake(
         | 
| 268 | 
            +
                    IInstance instance,
         | 
| 269 | 
            +
                    NftId bundleNftId, 
         | 
| 270 | 
            +
                    Amount amount
         | 
| 271 | 
            +
                ) 
         | 
| 272 | 
            +
                    external 
         | 
| 273 | 
            +
                    virtual
         | 
| 274 | 
            +
                    // TODO: restricted() (once #462 is done)
         | 
| 275 | 
            +
                {
         | 
| 276 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 277 | 
            +
             | 
| 278 | 
            +
                    IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
         | 
| 279 | 
            +
                    StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
         | 
| 280 | 
            +
             | 
| 281 | 
            +
                    if( (bundleState != ACTIVE() && bundleState != PAUSED()) // locked bundles can be staked
         | 
| 282 | 
            +
                        || bundleInfo.expiredAt < TimestampLib.blockTimestamp() 
         | 
| 283 | 
            +
                        || bundleInfo.closedAt.gtz()) {
         | 
| 284 | 
            +
                        revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
         | 
| 285 | 
            +
                    }
         | 
| 286 | 
            +
             | 
| 287 | 
            +
                    _componentService.increaseBundleBalance(
         | 
| 288 | 
            +
                        instance.getInstanceStore(), 
         | 
| 289 | 
            +
                        bundleNftId, 
         | 
| 290 | 
            +
                        amount, 
         | 
| 291 | 
            +
                        AmountLib.zero());
         | 
| 292 | 
            +
                }
         | 
| 293 | 
            +
             | 
| 294 | 
            +
                /// @inheritdoc IBundleService
         | 
| 295 | 
            +
                function unstake(
         | 
| 296 | 
            +
                    IInstance instance, 
         | 
| 297 | 
            +
                    NftId bundleNftId, 
         | 
| 298 | 
            +
                    Amount amount
         | 
| 299 | 
            +
                ) 
         | 
| 300 | 
            +
                    external 
         | 
| 301 | 
            +
                    virtual
         | 
| 302 | 
            +
                    // TODO: restricted() (once #462 is done)
         | 
| 303 | 
            +
                    returns (Amount unstakedAmount)
         | 
| 304 | 
            +
                {
         | 
| 305 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 306 | 
            +
             | 
| 307 | 
            +
                    InstanceStore instanceStore = instance.getInstanceStore();
         | 
| 308 | 
            +
                    (
         | 
| 309 | 
            +
                        Amount balanceAmount,
         | 
| 310 | 
            +
                        Amount lockedAmount,
         | 
| 311 | 
            +
                        Amount feeAmount
         | 
| 312 | 
            +
                    ) = instanceStore.getAmounts(bundleNftId);
         | 
| 313 | 
            +
             | 
| 314 | 
            +
                    unstakedAmount = amount;
         | 
| 315 | 
            +
                    Amount availableAmount = balanceAmount - (lockedAmount + feeAmount);
         | 
| 316 | 
            +
             | 
| 317 | 
            +
                    // if amount is max, then unstake all available 
         | 
| 318 | 
            +
                    if (amount.gte(AmountLib.max())) {
         | 
| 319 | 
            +
                        unstakedAmount = availableAmount;
         | 
| 320 | 
            +
                    }
         | 
| 321 | 
            +
                    
         | 
| 322 | 
            +
                    // ensure unstaked amount does not exceed available amount
         | 
| 323 | 
            +
                    if (unstakedAmount > availableAmount) {
         | 
| 324 | 
            +
                        revert ErrorBundleServiceUnstakeAmountExceedsLimit(amount, availableAmount);
         | 
| 325 | 
            +
                    }
         | 
| 326 | 
            +
             | 
| 327 | 
            +
                    _componentService.decreaseBundleBalance(
         | 
| 328 | 
            +
                        instanceStore, 
         | 
| 329 | 
            +
                        bundleNftId, 
         | 
| 330 | 
            +
                        unstakedAmount, 
         | 
| 331 | 
            +
                        AmountLib.zero());
         | 
| 332 | 
            +
                }
         | 
| 333 | 
            +
             | 
| 334 | 
            +
                /// @inheritdoc IBundleService
         | 
| 335 | 
            +
                function extend(NftId bundleNftId, Seconds lifetimeExtension) 
         | 
| 336 | 
            +
                    external 
         | 
| 337 | 
            +
                    virtual
         | 
| 338 | 
            +
                    // TODO: restricted() (once #462 is done)
         | 
| 339 | 
            +
                    returns (Timestamp extendedExpiredAt) 
         | 
| 340 | 
            +
                {
         | 
| 341 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 342 | 
            +
             | 
| 343 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 344 | 
            +
                    IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
         | 
| 345 | 
            +
                    StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
         | 
| 346 | 
            +
             | 
| 347 | 
            +
                    // ensure bundle belongs to the pool
         | 
| 348 | 
            +
                    if (bundleInfo.poolNftId != poolNftId) {
         | 
| 349 | 
            +
                        revert ErrorBundleServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
         | 
| 350 | 
            +
                    }
         | 
| 351 | 
            +
             | 
| 352 | 
            +
                    // ensure bundle is active and not yet expired
         | 
| 353 | 
            +
                    if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
         | 
| 354 | 
            +
                        revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
         | 
| 355 | 
            +
                    }
         | 
| 356 | 
            +
             | 
| 357 | 
            +
                    if (lifetimeExtension.eqz()) {
         | 
| 358 | 
            +
                        revert ErrorBundleServiceExtensionLifetimeIsZero();
         | 
| 359 | 
            +
                    }
         | 
| 360 | 
            +
             | 
| 361 | 
            +
                    bundleInfo.expiredAt = bundleInfo.expiredAt.addSeconds(lifetimeExtension);
         | 
| 362 | 
            +
                    instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
         | 
| 363 | 
            +
             | 
| 364 | 
            +
                    emit LogBundleServiceBundleExtended(bundleNftId, lifetimeExtension, bundleInfo.expiredAt);
         | 
| 365 | 
            +
             | 
| 366 | 
            +
                    return bundleInfo.expiredAt;
         | 
| 234 367 | 
             
                }
         | 
| 235 368 |  | 
| 236 369 |  | 
| @@ -244,6 +377,9 @@ contract BundleService is | |
| 244 377 | 
             
                    virtual
         | 
| 245 378 | 
             
                    restricted()
         | 
| 246 379 | 
             
                {
         | 
| 380 | 
            +
                    _checkNftType(policyNftId, POLICY());
         | 
| 381 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 382 | 
            +
             | 
| 247 383 | 
             
                    instance.getInstanceStore().decreaseLocked(bundleNftId, collateralAmount);
         | 
| 248 384 | 
             
                }
         | 
| 249 385 |  | 
| @@ -256,8 +392,10 @@ contract BundleService is | |
| 256 392 | 
             
                    virtual
         | 
| 257 393 | 
             
                    restricted
         | 
| 258 394 | 
             
                {
         | 
| 395 | 
            +
                    _checkNftType(policyNftId, POLICY());
         | 
| 396 | 
            +
             | 
| 259 397 | 
             
                    // ensure policy is closeable
         | 
| 260 | 
            -
                    if (! | 
| 398 | 
            +
                    if (!policyIsCloseable(instance, policyNftId)) {
         | 
| 261 399 | 
             
                        revert ErrorBundleServicePolicyNotCloseable(policyNftId);
         | 
| 262 400 | 
             
                    }
         | 
| 263 401 |  | 
| @@ -271,13 +409,15 @@ contract BundleService is | |
| 271 409 | 
             
                    // TODO: restricted() (once #462 is done)
         | 
| 272 410 | 
             
                    returns (Amount withdrawnAmount) 
         | 
| 273 411 | 
             
                {
         | 
| 412 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 413 | 
            +
             | 
| 274 414 | 
             
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 275 415 | 
             
                    InstanceReader reader = instance.getInstanceReader();
         | 
| 276 416 |  | 
| 277 417 | 
             
                    IComponents.ComponentInfo memory poolInfo = reader.getComponentInfo(poolNftId);
         | 
| 278 418 | 
             
                    address poolWallet = poolInfo.wallet;
         | 
| 279 419 |  | 
| 280 | 
            -
                    IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
         | 
| 420 | 
            +
                    // IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
         | 
| 281 421 |  | 
| 282 422 | 
             
                    // determine withdrawn amount
         | 
| 283 423 | 
             
                    withdrawnAmount = amount;
         | 
| @@ -289,17 +429,6 @@ contract BundleService is | |
| 289 429 | 
             
                        }
         | 
| 290 430 | 
             
                    }
         | 
| 291 431 |  | 
| 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 432 | 
             
                    // decrease fee counters by withdrawnAmount
         | 
| 304 433 | 
             
                    {
         | 
| 305 434 | 
             
                        InstanceStore store = instance.getInstanceStore();
         | 
| @@ -312,13 +441,36 @@ contract BundleService is | |
| 312 441 | 
             
                    // transfer amount to bundle owner
         | 
| 313 442 | 
             
                    {
         | 
| 314 443 | 
             
                        address owner = getRegistry().ownerOf(bundleNftId);
         | 
| 315 | 
            -
                         | 
| 316 | 
            -
                        poolInfo.tokenHandler. | 
| 317 | 
            -
             | 
| 318 | 
            -
                        emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(token), withdrawnAmount);
         | 
| 444 | 
            +
                        emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(poolInfo.token), withdrawnAmount);
         | 
| 445 | 
            +
                        poolInfo.tokenHandler.distributeTokens(poolWallet, owner, withdrawnAmount);
         | 
| 319 446 | 
             
                    }
         | 
| 320 447 | 
             
                }
         | 
| 321 448 |  | 
| 449 | 
            +
                /// @inheritdoc IBundleService
         | 
| 450 | 
            +
                function policyIsCloseable(IInstance instance, NftId policyNftId)
         | 
| 451 | 
            +
                    public
         | 
| 452 | 
            +
                    view
         | 
| 453 | 
            +
                    returns (bool isCloseable)
         | 
| 454 | 
            +
                {
         | 
| 455 | 
            +
                    _checkNftType(policyNftId, POLICY());
         | 
| 456 | 
            +
             | 
| 457 | 
            +
                    IPolicy.PolicyInfo memory info = instance.getInstanceReader().getPolicyInfo(policyNftId);
         | 
| 458 | 
            +
                    
         | 
| 459 | 
            +
                    if (info.productNftId.eqz()) { return false; } // not closeable: policy does not exist (or does not belong to this instance)
         | 
| 460 | 
            +
                    if (info.activatedAt.eqz()) { return false; } // not closeable: not yet activated
         | 
| 461 | 
            +
                    if (info.closedAt.gtz()) { return false; } // not closeable: already closed
         | 
| 462 | 
            +
                    if (info.openClaimsCount > 0) { return false; } // not closeable: has open claims
         | 
| 463 | 
            +
             | 
| 464 | 
            +
                    // closeable: if sum of claims matches sum insured a policy may be closed prior to the expiry date
         | 
| 465 | 
            +
                    if (info.claimAmount == info.sumInsuredAmount) { return true; }
         | 
| 466 | 
            +
             | 
| 467 | 
            +
                    // not closeable: not yet expired
         | 
| 468 | 
            +
                    if (TimestampLib.blockTimestamp() < info.expiredAt) { return false; }
         | 
| 469 | 
            +
             | 
| 470 | 
            +
                    // all conditionsl to close the policy are met
         | 
| 471 | 
            +
                    return true; 
         | 
| 472 | 
            +
                }
         | 
| 473 | 
            +
             | 
| 322 474 | 
             
                /// @dev links policy to bundle
         | 
| 323 475 | 
             
                function _linkPolicy(IInstance instance, NftId policyNftId) 
         | 
| 324 476 | 
             
                    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 | 
             
            }
         |