@etherisc/gif-next 0.0.2-f18fb8b-243 → 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 +19 -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 +106 -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 +64 -222
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +228 -217
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +93 -101
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +64 -37
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +120 -31
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +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 +4 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +6 -6
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +5 -5
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +17 -106
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +146 -112
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +31 -31
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -129
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +44 -151
- 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 -228
- 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 +4 -0
- package/artifacts/contracts/instance/base/{ObjectManager.sol/ObjectManager.json → ObjectSet.sol/ObjectSet.json} +6 -6
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +74 -229
- 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 +45 -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 +42 -213
- 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 +94 -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 +458 -161
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +154 -86
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +229 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +87 -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 +84 -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 +62 -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 +295 -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 +62 -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 +406 -321
- 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 +118 -265
- 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 +62 -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 +274 -22
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
- 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 +493 -80
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +263 -145
- 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 +4 -0
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1061 -0
- 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 +247 -161
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +105 -95
- 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/IComponentService.sol/IComponentService.json +153 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +34 -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 +4 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +34 -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 +4 -0
- package/artifacts/contracts/shared/{NftIdSetManager.sol/NftIdSetManager.json → NftIdSet.sol/NftIdSet.json} +4 -4
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +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 +73 -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 +176 -130
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +61 -8
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +52 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +586 -0
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
- package/contracts/authorization/AccessAdmin.sol +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/BasicDistribution.sol +4 -15
- package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
- package/contracts/distribution/Distribution.sol +23 -11
- package/contracts/distribution/DistributionService.sol +76 -42
- package/contracts/distribution/DistributionServiceManager.sol +8 -11
- package/contracts/distribution/IDistributionComponent.sol +8 -4
- package/contracts/distribution/IDistributionService.sol +18 -2
- 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/{BundleManager.sol → BundleSet.sol} +23 -23
- package/contracts/instance/IInstance.sol +11 -34
- package/contracts/instance/IInstanceService.sol +5 -5
- package/contracts/instance/Instance.sol +13 -38
- package/contracts/instance/InstanceAdmin.sol +31 -9
- package/contracts/instance/InstanceAuthorizationV3.sol +16 -14
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +71 -49
- package/contracts/instance/InstanceServiceManager.sol +8 -13
- package/contracts/instance/InstanceStore.sol +12 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +5 -5
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +4 -8
- package/contracts/instance/module/IDistribution.sol +0 -1
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/IOracleComponent.sol +2 -1
- package/contracts/oracle/Oracle.sol +17 -7
- package/contracts/oracle/OracleService.sol +11 -8
- package/contracts/oracle/OracleServiceManager.sol +8 -11
- package/contracts/pool/BasicPool.sol +7 -5
- package/contracts/pool/BasicPoolAuthorization.sol +11 -2
- package/contracts/pool/BundleService.sol +221 -56
- package/contracts/pool/BundleServiceManager.sol +8 -11
- package/contracts/pool/IBundleService.sol +42 -5
- package/contracts/pool/IPoolComponent.sol +24 -8
- package/contracts/pool/IPoolService.sol +57 -36
- package/contracts/pool/Pool.sol +72 -30
- package/contracts/pool/PoolService.sol +240 -129
- package/contracts/pool/PoolServiceManager.sol +6 -9
- package/contracts/product/ApplicationService.sol +62 -65
- package/contracts/product/ApplicationServiceManager.sol +6 -6
- package/contracts/product/BasicProduct.sol +3 -32
- package/contracts/product/BasicProductAuthorization.sol +3 -0
- package/contracts/product/ClaimService.sol +254 -115
- package/contracts/product/ClaimServiceManager.sol +6 -6
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +31 -7
- package/contracts/product/IPolicyService.sol +34 -32
- package/contracts/product/IPricingService.sol +7 -7
- package/contracts/product/IProductComponent.sol +18 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +404 -193
- package/contracts/product/PolicyServiceManager.sol +6 -9
- package/contracts/product/PricingService.sol +46 -46
- package/contracts/product/PricingServiceManager.sol +5 -8
- package/contracts/product/Product.sol +90 -50
- package/contracts/product/{ProductService.sol → RiskService.sol} +13 -41
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +65 -32
- package/contracts/registry/IRegistry.sol +65 -19
- package/contracts/registry/IRegistryService.sol +0 -9
- package/contracts/registry/Registry.sol +340 -211
- package/contracts/registry/RegistryAdmin.sol +155 -72
- package/contracts/registry/RegistryService.sol +59 -66
- package/contracts/registry/RegistryServiceManager.sol +4 -4
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +496 -0
- package/contracts/registry/ServiceAuthorizationV3.sol +13 -15
- package/contracts/registry/TokenRegistry.sol +2 -2
- package/contracts/shared/Component.sol +38 -43
- package/contracts/shared/ComponentService.sol +88 -28
- package/contracts/shared/ComponentServiceManager.sol +10 -7
- package/contracts/shared/ComponentVerifyingService.sol +2 -3
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +7 -4
- package/contracts/shared/IComponentService.sol +15 -9
- package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IService.sol +1 -1
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
- package/contracts/shared/InstanceLinkedComponent.sol +26 -6
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +13 -2
- package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
- package/contracts/shared/NftOwnable.sol +7 -7
- package/contracts/shared/PolicyHolder.sol +17 -57
- package/contracts/shared/Registerable.sol +4 -4
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +19 -15
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +3 -3
- package/contracts/staking/IStakingService.sol +12 -5
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +27 -42
- package/contracts/staking/StakingManager.sol +10 -12
- package/contracts/staking/StakingReader.sol +23 -20
- package/contracts/staking/StakingService.sol +10 -14
- package/contracts/staking/StakingServiceManager.sol +4 -4
- package/contracts/staking/StakingStore.sol +12 -22
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +27 -5
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/NftId.sol +1 -0
- package/contracts/type/ObjectType.sol +19 -18
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/Referral.sol +1 -0
- package/contracts/type/RiskId.sol +15 -1
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +33 -10
- package/contracts/type/Version.sol +3 -1
- package/contracts/{shared → upgradeability}/ProxyManager.sol +70 -38
- package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
- package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
- package/package.json +2 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -703
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1159
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
- package/contracts/product/ProductServiceManager.sol +0 -42
- package/contracts/registry/ReleaseManager.sol +0 -487
- package/contracts/shared/InitializableCustom.sol +0 -177
- /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
| @@ -1,12 +1,9 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {IVersionable} from "../ | 
| 5 | 
            -
            import {ProxyManager} from "../ | 
| 4 | 
            +
            import {IVersionable} from "../upgradeability/IVersionable.sol";
         | 
| 5 | 
            +
            import {ProxyManager} from "../upgradeability/ProxyManager.sol";
         | 
| 6 6 | 
             
            import {OracleService} from "./OracleService.sol";
         | 
| 7 | 
            -
            import {Registry} from "../registry/Registry.sol";
         | 
| 8 | 
            -
            import {RegistryService} from "../registry/RegistryService.sol";
         | 
| 9 | 
            -
            import {REGISTRY} from "../type/ObjectType.sol";
         | 
| 10 7 |  | 
| 11 8 | 
             
            contract OracleServiceManager is ProxyManager {
         | 
| 12 9 |  | 
| @@ -15,15 +12,15 @@ contract OracleServiceManager is ProxyManager { | |
| 15 12 | 
             
                /// @dev initializes proxy manager with service implementation and deploys instance
         | 
| 16 13 | 
             
                constructor(
         | 
| 17 14 | 
             
                    address authority, 
         | 
| 18 | 
            -
                    address  | 
| 15 | 
            +
                    address registry,
         | 
| 19 16 | 
             
                    bytes32 salt
         | 
| 20 17 | 
             
                ) 
         | 
| 21 | 
            -
                    ProxyManager(registryAddress)
         | 
| 22 18 | 
             
                {
         | 
| 23 | 
            -
                    OracleService  | 
| 24 | 
            -
                    bytes memory data = abi.encode( | 
| 25 | 
            -
                    IVersionable versionable =  | 
| 26 | 
            -
                         | 
| 19 | 
            +
                    OracleService svc = new OracleService{salt: salt}();
         | 
| 20 | 
            +
                    bytes memory data = abi.encode(registry, authority);
         | 
| 21 | 
            +
                    IVersionable versionable = initialize(
         | 
| 22 | 
            +
                        registry,
         | 
| 23 | 
            +
                        address(svc), 
         | 
| 27 24 | 
             
                        data,
         | 
| 28 25 | 
             
                        salt);
         | 
| 29 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 |  | 
| @@ -4,6 +4,8 @@ pragma solidity ^0.8.20; | |
| 4 4 | 
             
            import {Authorization} from "../authorization/Authorization.sol";
         | 
| 5 5 | 
             
            import {BasicPool} from "./BasicPool.sol"; 
         | 
| 6 6 | 
             
            import {IAccess} from "../authorization/IAccess.sol";
         | 
| 7 | 
            +
            import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
         | 
| 8 | 
            +
            import {IPoolComponent} from "./IPoolComponent.sol";
         | 
| 7 9 | 
             
            import {POOL} from "../type/ObjectType.sol";
         | 
| 8 10 | 
             
            import {PUBLIC_ROLE} from "../../contracts/type/RoleId.sol";
         | 
| 9 11 | 
             
            import {RoleId} from "../type/RoleId.sol";
         | 
| @@ -38,12 +40,19 @@ contract BasicPoolAuthorization | |
| 38 40 | 
             
                      _authorize(functions, BasicPool.extend.selector, "extend");
         | 
| 39 41 | 
             
                      _authorize(functions, BasicPool.lockBundle.selector, "lockBundle");
         | 
| 40 42 | 
             
                      _authorize(functions, BasicPool.unlockBundle.selector, "unlockBundle");
         | 
| 41 | 
            -
                      _authorize(functions, BasicPool. | 
| 43 | 
            +
                      _authorize(functions, BasicPool.closeBundle.selector, "closeBundle");
         | 
| 42 44 | 
             
                      _authorize(functions, BasicPool.setBundleFee.selector, "setBundleFee");
         | 
| 43 45 |  | 
| 44 | 
            -
                      _authorize(functions, BasicPool. | 
| 46 | 
            +
                      _authorize(functions, BasicPool.setMaxBalanceAmount.selector, "setMaxBalanceAmount");
         | 
| 45 47 | 
             
                      _authorize(functions, BasicPool.setBundleOwnerRole.selector, "setBundleOwnerRole");
         | 
| 46 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");
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                      _authorize(functions, IInstanceLinkedComponent.withdrawFees.selector, "withdrawFees");
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                      _authorize(functions, IPoolComponent.withdrawBundleFees.selector, "withdrawBundleFees");
         | 
| 47 56 | 
             
                 }
         | 
| 48 57 | 
             
            }
         | 
| 49 58 |  | 
| @@ -2,36 +2,25 @@ | |
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 4 | 
             
            import {IBundle} from "../instance/module/IBundle.sol";
         | 
| 5 | 
            +
            import {IBundleService} from "./IBundleService.sol";
         | 
| 5 6 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 6 7 | 
             
            import {IComponentService} from "../shared/IComponentService.sol";
         | 
| 7 8 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 9 | 
            +
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 8 10 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 9 11 | 
             
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 10 12 | 
             
            import {IPolicy} from "../instance/module/IPolicy.sol";
         | 
| 11 13 |  | 
| 12 | 
            -
            import { | 
| 13 | 
            -
            import { | 
| 14 | 
            +
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 15 | 
            +
            import {BundleSet} from "../instance/BundleSet.sol";
         | 
| 16 | 
            +
            import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
         | 
| 17 | 
            +
            import {Fee} from "../type/Fee.sol";
         | 
| 18 | 
            +
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 14 19 | 
             
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 15 20 | 
             
            import {ObjectType, COMPONENT, POOL, BUNDLE, REGISTRY} from "../type/ObjectType.sol";
         | 
| 16 | 
            -
            import {POOL_OWNER_ROLE, RoleId} from "../type/RoleId.sol";
         | 
| 17 | 
            -
            import {Pool} from "./Pool.sol";
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 20 | 
            -
            import {Fee, FeeLib} from "../type/Fee.sol";
         | 
| 21 21 | 
             
            import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../type/StateId.sol";
         | 
| 22 22 | 
             
            import {Seconds} from "../type/Seconds.sol";
         | 
| 23 | 
            -
            import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
         | 
| 24 | 
            -
            import {Version, VersionLib} from "../type/Version.sol";
         | 
| 25 | 
            -
            import {Versionable} from "../shared/Versionable.sol";
         | 
| 26 | 
            -
             | 
| 27 | 
            -
            import {IService} from "../shared/IService.sol";
         | 
| 28 | 
            -
            import {Service} from "../shared/Service.sol";
         | 
| 29 | 
            -
            import {BundleManager} from "../instance/BundleManager.sol";
         | 
| 30 | 
            -
            import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
         | 
| 31 | 
            -
            import {IBundleService} from "./IBundleService.sol";
         | 
| 32 | 
            -
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 33 | 
            -
            import {InstanceService} from "../instance/InstanceService.sol";
         | 
| 34 | 
            -
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 23 | 
            +
            import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
         | 
| 35 24 |  | 
| 36 25 | 
             
            string constant BUNDLE_SERVICE_NAME = "BundleService";
         | 
| 37 26 |  | 
| @@ -39,8 +28,7 @@ contract BundleService is | |
| 39 28 | 
             
                ComponentVerifyingService, 
         | 
| 40 29 | 
             
                IBundleService 
         | 
| 41 30 | 
             
            {
         | 
| 42 | 
            -
                 | 
| 43 | 
            -
             | 
| 31 | 
            +
                
         | 
| 44 32 | 
             
                string public constant NAME = "BundleService";
         | 
| 45 33 |  | 
| 46 34 | 
             
                address private _registryAddress;
         | 
| @@ -52,20 +40,20 @@ contract BundleService is | |
| 52 40 | 
             
                    bytes memory data
         | 
| 53 41 | 
             
                )
         | 
| 54 42 | 
             
                    internal
         | 
| 55 | 
            -
                    initializer
         | 
| 56 43 | 
             
                    virtual override
         | 
| 44 | 
            +
                    initializer()
         | 
| 57 45 | 
             
                {
         | 
| 58 | 
            -
                     | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
                     | 
| 62 | 
            -
             | 
| 63 | 
            -
                     | 
| 46 | 
            +
                    (
         | 
| 47 | 
            +
                        address registryAddress,
         | 
| 48 | 
            +
                        address authority
         | 
| 49 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    _initializeService(registryAddress, authority, owner);
         | 
| 64 52 |  | 
| 65 53 | 
             
                    _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 66 54 | 
             
                    _componentService = IComponentService(_getServiceAddress(COMPONENT()));
         | 
| 67 55 |  | 
| 68 | 
            -
                     | 
| 56 | 
            +
                    _registerInterface(type(IBundleService).interfaceId);
         | 
| 69 57 | 
             
                }
         | 
| 70 58 |  | 
| 71 59 |  | 
| @@ -123,25 +111,28 @@ contract BundleService is | |
| 123 111 | 
             
                    InstanceStore instanceStore = instance.getInstanceStore();
         | 
| 124 112 | 
             
                    instanceStore.createBundle(
         | 
| 125 113 | 
             
                        bundleNftId, 
         | 
| 126 | 
            -
                        IBundle.BundleInfo(
         | 
| 127 | 
            -
                            poolNftId,
         | 
| 128 | 
            -
                            bundleFee,
         | 
| 129 | 
            -
                            filter,
         | 
| 130 | 
            -
                             | 
| 131 | 
            -
                            TimestampLib.blockTimestamp().addSeconds(lifetime),
         | 
| 132 | 
            -
                            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 | 
            +
                    );
         | 
| 133 123 |  | 
| 134 | 
            -
                     | 
| 135 | 
            -
             | 
| 136 | 
            -
                         | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 124 | 
            +
                    if (stakingAmount.gtz()) {
         | 
| 125 | 
            +
                        // bundle book keeping
         | 
| 126 | 
            +
                        _componentService.increaseBundleBalance(
         | 
| 127 | 
            +
                            instanceStore, 
         | 
| 128 | 
            +
                            bundleNftId, 
         | 
| 129 | 
            +
                            stakingAmount, 
         | 
| 130 | 
            +
                            AmountLib.zero()); // fee amount
         | 
| 131 | 
            +
                    }
         | 
| 140 132 |  | 
| 141 133 | 
             
                    // put bundle under bundle managemet
         | 
| 142 | 
            -
                     | 
| 134 | 
            +
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| 143 135 | 
             
                    bundleManager.add(bundleNftId);
         | 
| 144 | 
            -
             | 
| 145 136 | 
             
                    // TODO add logging
         | 
| 146 137 | 
             
                }
         | 
| 147 138 |  | 
| @@ -158,7 +149,7 @@ contract BundleService is | |
| 158 149 | 
             
                    restricted()
         | 
| 159 150 | 
             
                {
         | 
| 160 151 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 161 | 
            -
                    StateId bundleState =  | 
| 152 | 
            +
                    StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
         | 
| 162 153 | 
             
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 163 154 |  | 
| 164 155 | 
             
                    // ensure bundle is active and not yet expired
         | 
| @@ -197,7 +188,7 @@ contract BundleService is | |
| 197 188 | 
             
                    instance.getInstanceStore().updateBundleState(bundleNftId, PAUSED());
         | 
| 198 189 |  | 
| 199 190 | 
             
                    // update set of active bundles
         | 
| 200 | 
            -
                     | 
| 191 | 
            +
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| 201 192 | 
             
                    bundleManager.lock(bundleNftId);
         | 
| 202 193 |  | 
| 203 194 | 
             
                    emit LogBundleServiceBundleLocked(bundleNftId);
         | 
| @@ -214,7 +205,7 @@ contract BundleService is | |
| 214 205 | 
             
                    instance.getInstanceStore().updateBundleState(bundleNftId, ACTIVE());
         | 
| 215 206 |  | 
| 216 207 | 
             
                    // update set of active bundles
         | 
| 217 | 
            -
                     | 
| 208 | 
            +
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| 218 209 | 
             
                    bundleManager.unlock(bundleNftId);
         | 
| 219 210 |  | 
| 220 211 | 
             
                    emit LogBundleServiceBundleActivated(bundleNftId);
         | 
| @@ -228,19 +219,128 @@ contract BundleService is | |
| 228 219 | 
             
                    external
         | 
| 229 220 | 
             
                    virtual
         | 
| 230 221 | 
             
                    restricted
         | 
| 222 | 
            +
                    returns (Amount unstakedAmount, Amount feeAmount)
         | 
| 231 223 | 
             
                {
         | 
| 232 | 
            -
                     | 
| 233 | 
            -
                    instance.getInstanceStore().updateBundleState(bundleNftId, CLOSED());
         | 
| 224 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 234 225 |  | 
| 235 226 | 
             
                    // ensure no open policies attached to bundle
         | 
| 236 | 
            -
                     | 
| 227 | 
            +
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| 237 228 | 
             
                    uint256 openPolicies = bundleManager.activePolicies(bundleNftId);
         | 
| 238 229 | 
             
                    if(openPolicies > 0) {
         | 
| 239 230 | 
             
                        revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
         | 
| 240 231 | 
             
                    }
         | 
| 241 232 |  | 
| 242 | 
            -
                     | 
| 243 | 
            -
             | 
| 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;
         | 
| 244 344 | 
             
                }
         | 
| 245 345 |  | 
| 246 346 |  | 
| @@ -267,11 +367,76 @@ contract BundleService is | |
| 267 367 | 
             
                    restricted
         | 
| 268 368 | 
             
                {
         | 
| 269 369 | 
             
                    // ensure policy is closeable
         | 
| 270 | 
            -
                    if (! | 
| 370 | 
            +
                    if (!policyIsCloseable(instance, policyNftId)) {
         | 
| 271 371 | 
             
                        revert ErrorBundleServicePolicyNotCloseable(policyNftId);
         | 
| 272 372 | 
             
                    }
         | 
| 273 373 |  | 
| 274 | 
            -
                    instance. | 
| 374 | 
            +
                    instance.getBundleSet().unlinkPolicy(policyNftId);
         | 
| 375 | 
            +
                }
         | 
| 376 | 
            +
             | 
| 377 | 
            +
                /// @inheritdoc IBundleService
         | 
| 378 | 
            +
                function withdrawBundleFees(NftId bundleNftId, Amount amount) 
         | 
| 379 | 
            +
                    public 
         | 
| 380 | 
            +
                    virtual
         | 
| 381 | 
            +
                    // TODO: restricted() (once #462 is done)
         | 
| 382 | 
            +
                    returns (Amount withdrawnAmount) 
         | 
| 383 | 
            +
                {
         | 
| 384 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 385 | 
            +
                    InstanceReader reader = instance.getInstanceReader();
         | 
| 386 | 
            +
                    
         | 
| 387 | 
            +
                    IComponents.ComponentInfo memory poolInfo = reader.getComponentInfo(poolNftId);
         | 
| 388 | 
            +
                    address poolWallet = poolInfo.wallet;
         | 
| 389 | 
            +
                    
         | 
| 390 | 
            +
                    IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
         | 
| 391 | 
            +
                    
         | 
| 392 | 
            +
                    // determine withdrawn amount
         | 
| 393 | 
            +
                    withdrawnAmount = amount;
         | 
| 394 | 
            +
                    if (withdrawnAmount.gte(AmountLib.max())) {
         | 
| 395 | 
            +
                        withdrawnAmount = reader.getFeeAmount(bundleNftId);
         | 
| 396 | 
            +
                    } else {
         | 
| 397 | 
            +
                        if (withdrawnAmount.gt(reader.getFeeAmount(bundleNftId))) {
         | 
| 398 | 
            +
                            revert ErrorBundleServiceFeesWithdrawAmountExceedsLimit(withdrawnAmount, reader.getFeeAmount(bundleNftId));
         | 
| 399 | 
            +
                        }
         | 
| 400 | 
            +
                    }
         | 
| 401 | 
            +
             | 
| 402 | 
            +
                    // decrease fee counters by withdrawnAmount
         | 
| 403 | 
            +
                    {
         | 
| 404 | 
            +
                        InstanceStore store = instance.getInstanceStore();
         | 
| 405 | 
            +
                        // decrease fee amount of the bundle
         | 
| 406 | 
            +
                        _componentService.decreaseBundleBalance(store, bundleNftId, AmountLib.zero(), withdrawnAmount);
         | 
| 407 | 
            +
                        // decrease pool balance 
         | 
| 408 | 
            +
                        _componentService.decreasePoolBalance(store, poolNftId, withdrawnAmount, AmountLib.zero());
         | 
| 409 | 
            +
                    }
         | 
| 410 | 
            +
             | 
| 411 | 
            +
                    // transfer amount to bundle owner
         | 
| 412 | 
            +
                    {
         | 
| 413 | 
            +
                        address owner = getRegistry().ownerOf(bundleNftId);
         | 
| 414 | 
            +
                        emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(poolInfo.token), withdrawnAmount);
         | 
| 415 | 
            +
                        poolInfo.tokenHandler.distributeTokens(poolWallet, owner, withdrawnAmount);
         | 
| 416 | 
            +
                    }
         | 
| 417 | 
            +
                }
         | 
| 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; 
         | 
| 275 440 | 
             
                }
         | 
| 276 441 |  | 
| 277 442 | 
             
                /// @dev links policy to bundle
         | 
| @@ -283,10 +448,10 @@ contract BundleService is | |
| 283 448 |  | 
| 284 449 | 
             
                    // ensure policy has not yet been activated in a previous tx already
         | 
| 285 450 | 
             
                    if (policyInfo.activatedAt.gtz() && policyInfo.activatedAt < TimestampLib.blockTimestamp()) {
         | 
| 286 | 
            -
                        revert  | 
| 451 | 
            +
                        revert BundleSet.ErrorBundleSetPolicyAlreadyActivated(policyNftId);
         | 
| 287 452 | 
             
                    }
         | 
| 288 453 |  | 
| 289 | 
            -
                     | 
| 454 | 
            +
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| 290 455 | 
             
                    bundleManager.linkPolicy(policyNftId);
         | 
| 291 456 | 
             
                }
         | 
| 292 457 |  | 
| @@ -1,12 +1,9 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {IVersionable} from "../ | 
| 5 | 
            -
            import {ProxyManager} from "../ | 
| 4 | 
            +
            import {IVersionable} from "../upgradeability/IVersionable.sol";
         | 
| 5 | 
            +
            import {ProxyManager} from "../upgradeability/ProxyManager.sol";
         | 
| 6 6 | 
             
            import {BundleService} from "./BundleService.sol";
         | 
| 7 | 
            -
            import {Registry} from "../registry/Registry.sol";
         | 
| 8 | 
            -
            import {RegistryService} from "../registry/RegistryService.sol";
         | 
| 9 | 
            -
            import {ObjectType, REGISTRY} from "../type/ObjectType.sol";
         | 
| 10 7 |  | 
| 11 8 | 
             
            contract BundleServiceManager is ProxyManager {
         | 
| 12 9 |  | 
| @@ -15,15 +12,15 @@ contract BundleServiceManager is ProxyManager { | |
| 15 12 | 
             
                /// @dev initializes proxy manager with pool service implementation 
         | 
| 16 13 | 
             
                constructor(
         | 
| 17 14 | 
             
                    address authority, 
         | 
| 18 | 
            -
                    address  | 
| 15 | 
            +
                    address registry,
         | 
| 19 16 | 
             
                    bytes32 salt
         | 
| 20 17 | 
             
                ) 
         | 
| 21 | 
            -
                    ProxyManager(registryAddress)
         | 
| 22 18 | 
             
                {
         | 
| 23 | 
            -
                    BundleService  | 
| 24 | 
            -
                    bytes memory data = abi.encode( | 
| 25 | 
            -
                    IVersionable versionable =  | 
| 26 | 
            -
                         | 
| 19 | 
            +
                    BundleService svc = new BundleService{salt: salt}();
         | 
| 20 | 
            +
                    bytes memory data = abi.encode(registry, authority);
         | 
| 21 | 
            +
                    IVersionable versionable = initialize(
         | 
| 22 | 
            +
                        registry,
         | 
| 23 | 
            +
                        address(svc), 
         | 
| 27 24 | 
             
                        data,
         | 
| 28 25 | 
             
                        salt);
         | 
| 29 26 |  | 
| @@ -26,6 +26,15 @@ interface IBundleService is IService { | |
| 26 26 |  | 
| 27 27 | 
             
                error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
         | 
| 28 28 |  | 
| 29 | 
            +
                error ErrorBundleServiceFeesWithdrawAmountExceedsLimit(Amount amount, Amount limit);
         | 
| 30 | 
            +
                
         | 
| 31 | 
            +
                error ErrorBundleServiceUnstakeAmountExceedsLimit(Amount amount, Amount limit);
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                error ErrorBundleServiceExtensionLifetimeIsZero();
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                event LogBundleServiceFeesWithdrawn(NftId bundleNftId, address recipient, address tokenAddress, Amount amount);
         | 
| 36 | 
            +
                event LogBundleServiceBundleExtended(NftId bundleNftId, Seconds lifetimeExtension, Timestamp extendedExpiredAt);
         | 
| 37 | 
            +
             | 
| 29 38 | 
             
                /// @dev create a new bundle for the specified attributes
         | 
| 30 39 | 
             
                /// may only be called by pool service
         | 
| 31 40 | 
             
                function create(
         | 
| @@ -41,11 +50,20 @@ interface IBundleService is IService { | |
| 41 50 | 
             
                    returns(NftId bundleNftId); // the nft id of the newly created bundle
         | 
| 42 51 |  | 
| 43 52 |  | 
| 44 | 
            -
                /// @dev increase bundle stakes by the specified amount
         | 
| 45 | 
            -
                /// may only be called by the  | 
| 46 | 
            -
                 | 
| 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);
         | 
| 47 64 |  | 
| 48 | 
            -
                 | 
| 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);
         | 
| 49 67 |  | 
| 50 68 | 
             
                /// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
         | 
| 51 69 | 
             
                /// only active bundles may be locked
         | 
| @@ -61,10 +79,12 @@ interface IBundleService is IService { | |
| 61 79 | 
             
                /// only open bundles (active or locked) may be closed
         | 
| 62 80 | 
             
                /// to close a bundle it may not have any non-closed polices attached to it
         | 
| 63 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
         | 
| 64 84 | 
             
                function close(
         | 
| 65 85 | 
             
                    IInstance instance, 
         | 
| 66 86 | 
             
                    NftId bundleNftId
         | 
| 67 | 
            -
                ) external;
         | 
| 87 | 
            +
                ) external returns (Amount balanceAmount, Amount feeAmount);
         | 
| 68 88 |  | 
| 69 89 | 
             
                /// @dev set bundle fee to provided value
         | 
| 70 90 | 
             
                /// may only be called by registered and unlocked pool components
         | 
| @@ -103,4 +123,21 @@ interface IBundleService is IService { | |
| 103 123 | 
             
                    IInstance instance, 
         | 
| 104 124 | 
             
                    NftId policyNftId
         | 
| 105 125 | 
             
                ) external;
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                // FIXME: move to pool service
         | 
| 128 | 
            +
                /// @dev Withdraw bundle feeds for the given bundle
         | 
| 129 | 
            +
                /// @param bundleNftId the bundle Nft Id
         | 
| 130 | 
            +
                /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
         | 
| 131 | 
            +
                /// @return withdrawnAmount the effective withdrawn amount
         | 
| 132 | 
            +
                function withdrawBundleFees(NftId bundleNftId, Amount amount) external returns (Amount withdrawnAmount);
         | 
| 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 | 
            +
             | 
| 106 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,7 +47,22 @@ interface IPoolComponent is IInstanceLinkedComponent { | |
| 46 47 | 
             
                    view
         | 
| 47 48 | 
             
                    returns (bool isMatching);
         | 
| 48 49 |  | 
| 49 | 
            -
                /// @dev  | 
| 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 | 
            +
             | 
| 59 | 
            +
                /// @dev Withdraw bundle feeds for the given bundle
         | 
| 60 | 
            +
                /// @param bundleNftId the bundle Nft Id
         | 
| 61 | 
            +
                /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
         | 
| 62 | 
            +
                /// @return withdrawnAmount the effective withdrawn amount
         | 
| 63 | 
            +
                function withdrawBundleFees(NftId bundleNftId, Amount amount) external returns (Amount withdrawnAmount);
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                /// @dev Returns initial pool specific infos for this pool
         | 
| 50 66 | 
             
                function getInitialPoolInfo() external view returns (IComponents.PoolInfo memory info);
         | 
| 51 67 |  | 
| 52 68 | 
             
            }
         |