@etherisc/gif-next 0.0.2-f36fd21-685 → 0.0.2-f3b4c66-505
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 +46 -8
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +203 -77
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +233 -5
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +200 -16
- 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 +142 -44
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +107 -15
- 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/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 +165 -391
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +206 -27
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +103 -321
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +378 -355
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +133 -119
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +115 -143
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +248 -122
- 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 +1475 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +589 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2032 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +589 -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 +1523 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1195 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1655 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2432 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +589 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +158 -57
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +105 -103
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +194 -154
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +446 -143
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +150 -90
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1031 -298
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +131 -266
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +102 -92
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +668 -511
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
- 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 +16 -5
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
- 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 +114 -340
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +180 -29
- 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 +102 -130
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +69 -11
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +90 -308
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +153 -190
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +122 -88
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +119 -387
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +206 -27
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +275 -314
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +122 -108
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +172 -97
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +124 -219
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +464 -312
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +109 -394
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +456 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +653 -532
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +163 -97
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +194 -178
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +100 -90
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +243 -400
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +206 -27
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +415 -234
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +140 -114
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +136 -9
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +308 -16
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +354 -106
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +157 -83
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +235 -202
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +88 -8
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +441 -304
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +293 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +141 -99
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +247 -313
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +120 -122
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +241 -398
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +688 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +736 -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 +334 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +144 -41
- package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
- package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
- 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 +540 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +349 -167
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +109 -292
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +94 -80
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1849 -0
- 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 +420 -246
- 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 +4 -4
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +76 -265
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +501 -626
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +136 -128
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +57 -111
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +541 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +89 -88
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +446 -276
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +102 -130
- 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 +148 -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 +55 -2
- 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 +89 -307
- 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 +122 -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 +57 -111
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +585 -12
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +134 -125
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +77 -16
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +76 -106
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +210 -366
- 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 +122 -95
- 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 +122 -164
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +99 -85
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +149 -108
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +55 -24
- 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 +33 -9
- 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 +3 -3
- 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/Key32Set.sol/LibKey32Set.dbg.json +4 -0
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
- 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 +125 -7
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +79 -15
- 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/SelectorLib.json +21 -2
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
- 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/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +16 -3
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +47 -2
- 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 +71 -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/accounting/AccountingService.sol +262 -0
- package/contracts/accounting/AccountingServiceManager.sol +38 -0
- package/contracts/accounting/IAccountingService.sol +45 -0
- package/contracts/authorization/AccessAdmin.sol +232 -134
- package/contracts/authorization/AccessManagerCloneable.sol +136 -3
- package/contracts/authorization/Authorization.sol +321 -202
- package/contracts/authorization/IAccess.sol +1 -0
- package/contracts/authorization/IAccessAdmin.sol +17 -10
- package/contracts/authorization/IAuthorization.sol +27 -7
- package/contracts/authorization/IServiceAuthorization.sol +3 -1
- package/contracts/authorization/ServiceAuthorization.sol +26 -10
- package/contracts/distribution/BasicDistribution.sol +15 -12
- package/contracts/distribution/BasicDistributionAuthorization.sol +22 -9
- package/contracts/distribution/Distribution.sol +42 -48
- package/contracts/distribution/DistributionService.sol +152 -104
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +31 -25
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +90 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
- package/contracts/examples/fire/FireProduct.sol +437 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +85 -0
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +106 -0
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +377 -0
- package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
- package/contracts/instance/BundleSet.sol +42 -38
- package/contracts/instance/IInstance.sol +21 -37
- package/contracts/instance/IInstanceService.sol +9 -29
- package/contracts/instance/Instance.sol +59 -66
- package/contracts/instance/InstanceAdmin.sol +256 -85
- package/contracts/instance/InstanceAuthorizationV3.sol +56 -47
- package/contracts/instance/InstanceReader.sol +288 -43
- package/contracts/instance/InstanceService.sol +125 -164
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +23 -2
- package/contracts/instance/RiskSet.sol +118 -0
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +11 -4
- package/contracts/instance/base/ObjectSet.sol +31 -33
- package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +14 -14
- package/contracts/instance/module/IDistribution.sol +5 -2
- package/contracts/instance/module/IPolicy.sol +26 -25
- package/contracts/instance/module/IRisk.sol +3 -0
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/BasicOracle.sol +0 -1
- package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +7 -17
- package/contracts/oracle/OracleService.sol +113 -81
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +38 -27
- package/contracts/pool/BasicPoolAuthorization.sol +32 -11
- package/contracts/pool/BundleService.sol +179 -125
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +29 -34
- package/contracts/pool/IPoolComponent.sol +19 -15
- package/contracts/pool/IPoolService.sol +90 -75
- package/contracts/pool/Pool.sol +145 -128
- package/contracts/pool/PoolLib.sol +216 -0
- package/contracts/pool/PoolService.sol +540 -217
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +87 -43
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +11 -12
- package/contracts/product/BasicProductAuthorization.sol +24 -11
- package/contracts/product/ClaimService.sol +368 -153
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +9 -2
- package/contracts/product/IClaimService.sol +44 -8
- package/contracts/product/IPolicyService.sol +53 -38
- package/contracts/product/IPricingService.sol +11 -10
- package/contracts/product/IProductComponent.sol +27 -5
- package/contracts/product/{IProductService.sol → IRiskService.sol} +8 -8
- package/contracts/product/PolicyService.sol +464 -281
- package/contracts/product/PolicyServiceLib.sol +65 -0
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +71 -62
- package/contracts/product/PricingServiceManager.sol +4 -4
- package/contracts/product/Product.sol +162 -94
- package/contracts/product/RiskService.sol +154 -0
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +72 -40
- package/contracts/registry/IRegistry.sol +60 -28
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/IRelease.sol +26 -0
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +357 -203
- package/contracts/registry/RegistryAdmin.sol +171 -182
- package/contracts/registry/RegistryService.sol +37 -48
- package/contracts/registry/RegistryServiceManager.sol +3 -3
- package/contracts/registry/ReleaseAdmin.sol +245 -0
- package/contracts/registry/ReleaseLifecycle.sol +8 -3
- package/contracts/registry/ReleaseRegistry.sol +258 -232
- package/contracts/registry/ServiceAuthorizationV3.sol +99 -52
- package/contracts/registry/TokenRegistry.sol +6 -8
- package/contracts/shared/Component.sol +74 -127
- package/contracts/shared/ComponentService.sol +426 -385
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +28 -17
- package/contracts/shared/ContractLib.sol +253 -0
- package/contracts/shared/IComponent.sol +8 -17
- package/contracts/shared/IComponentService.sol +41 -37
- package/contracts/shared/IInstanceLinkedComponent.sol +6 -32
- 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 +23 -1
- package/contracts/shared/IService.sol +3 -5
- package/contracts/shared/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +73 -48
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +29 -9
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +55 -21
- package/contracts/shared/RegistryLinked.sol +9 -14
- package/contracts/shared/Service.sol +15 -32
- package/contracts/shared/TokenHandler.sol +309 -26
- package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
- package/contracts/staking/IStaking.sol +7 -9
- package/contracts/staking/IStakingService.sol +8 -3
- package/contracts/staking/StakeManagerLib.sol +19 -26
- package/contracts/staking/Staking.sol +71 -61
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +13 -6
- package/contracts/staking/StakingService.sol +54 -35
- package/contracts/staking/StakingServiceManager.sol +6 -5
- 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/Key32.sol +2 -2
- package/contracts/type/Key32Set.sol +62 -0
- package/contracts/type/NftId.sol +7 -0
- package/contracts/type/ObjectType.sol +52 -20
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +38 -6
- package/contracts/type/RoleId.sol +23 -15
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/Selector.sol +5 -0
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +10 -5
- package/contracts/type/UFixed.sol +13 -119
- package/contracts/type/Version.sol +15 -5
- package/contracts/upgradeability/ProxyManager.sol +68 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +5 -4
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
- 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/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
- package/contracts/authorization/IModuleAuthorization.sol +0 -21
- package/contracts/authorization/ModuleAuthorization.sol +0 -78
- package/contracts/instance/module/IAccess.sol +0 -46
- package/contracts/product/ProductService.sol +0 -99
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
| @@ -1,8 +1,7 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import { | 
| 5 | 
            -
             | 
| 4 | 
            +
            import {IAccountingService} from "../accounting/IAccountingService.sol";
         | 
| 6 5 | 
             
            import {IBundle} from "../instance/module/IBundle.sol";
         | 
| 7 6 | 
             
            import {IBundleService} from "./IBundleService.sol";
         | 
| 8 7 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| @@ -11,7 +10,6 @@ import {IRegistry} from "../registry/IRegistry.sol"; | |
| 11 10 | 
             
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 12 11 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 13 12 | 
             
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 14 | 
            -
            import {IPolicy} from "../instance/module/IPolicy.sol";
         | 
| 15 13 |  | 
| 16 14 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 17 15 | 
             
            import {BundleSet} from "../instance/BundleSet.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, ACCOUNTING, 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 |  | 
| @@ -35,6 +33,7 @@ contract BundleService is | |
| 35 33 |  | 
| 36 34 | 
             
                address private _registryAddress;
         | 
| 37 35 | 
             
                IRegistryService private _registryService;
         | 
| 36 | 
            +
                IAccountingService private _accountingService;
         | 
| 38 37 | 
             
                IComponentService private _componentService;
         | 
| 39 38 |  | 
| 40 39 | 
             
                function _initialize(
         | 
| @@ -42,20 +41,21 @@ contract BundleService is | |
| 42 41 | 
             
                    bytes memory data
         | 
| 43 42 | 
             
                )
         | 
| 44 43 | 
             
                    internal
         | 
| 45 | 
            -
                    initializer
         | 
| 46 44 | 
             
                    virtual override
         | 
| 45 | 
            +
                    initializer()
         | 
| 47 46 | 
             
                {
         | 
| 48 | 
            -
                     | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
                     | 
| 52 | 
            -
             | 
| 53 | 
            -
                     | 
| 47 | 
            +
                    (
         | 
| 48 | 
            +
                        address authority,
         | 
| 49 | 
            +
                        address registry
         | 
| 50 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    __Service_init(authority, registry, owner);
         | 
| 54 53 |  | 
| 55 54 | 
             
                    _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 55 | 
            +
                    _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
         | 
| 56 56 | 
             
                    _componentService = IComponentService(_getServiceAddress(COMPONENT()));
         | 
| 57 57 |  | 
| 58 | 
            -
                     | 
| 58 | 
            +
                    _registerInterface(type(IBundleService).interfaceId);
         | 
| 59 59 | 
             
                }
         | 
| 60 60 |  | 
| 61 61 |  | 
| @@ -65,7 +65,10 @@ contract BundleService is | |
| 65 65 | 
             
                )
         | 
| 66 66 | 
             
                    external
         | 
| 67 67 | 
             
                    virtual
         | 
| 68 | 
            +
                    restricted()
         | 
| 68 69 | 
             
                {
         | 
| 70 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 71 | 
            +
             | 
| 69 72 | 
             
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 70 73 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 71 74 | 
             
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| @@ -83,19 +86,18 @@ contract BundleService is | |
| 83 86 |  | 
| 84 87 |  | 
| 85 88 | 
             
                function create(
         | 
| 86 | 
            -
                    IInstance instance,
         | 
| 87 | 
            -
                    NftId poolNftId,
         | 
| 88 89 | 
             
                    address owner, 
         | 
| 89 90 | 
             
                    Fee memory bundleFee, 
         | 
| 90 | 
            -
                    Amount stakingAmount, 
         | 
| 91 91 | 
             
                    Seconds lifetime, 
         | 
| 92 92 | 
             
                    bytes calldata filter
         | 
| 93 93 | 
             
                )
         | 
| 94 94 | 
             
                    external
         | 
| 95 | 
            -
                     | 
| 96 | 
            -
                    restricted
         | 
| 95 | 
            +
                    virtual
         | 
| 96 | 
            +
                    restricted()
         | 
| 97 97 | 
             
                    returns(NftId bundleNftId)
         | 
| 98 98 | 
             
                {
         | 
| 99 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 100 | 
            +
             | 
| 99 101 | 
             
                    // register bundle with registry
         | 
| 100 102 | 
             
                    bundleNftId = _registryService.registerBundle(
         | 
| 101 103 | 
             
                        IRegistry.ObjectInfo(
         | 
| @@ -113,26 +115,21 @@ 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() | 
| 123 | 
            -
             | 
| 124 | 
            -
                     | 
| 125 | 
            -
                    _componentService.increaseBundleBalance(
         | 
| 126 | 
            -
                        instanceStore, 
         | 
| 127 | 
            -
                        bundleNftId, 
         | 
| 128 | 
            -
                        stakingAmount, 
         | 
| 129 | 
            -
                        AmountLib.zero()); // fee amount
         | 
| 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 | 
            +
                    );
         | 
| 130 127 |  | 
| 131 128 | 
             
                    // put bundle under bundle managemet
         | 
| 132 129 | 
             
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| 133 130 | 
             
                    bundleManager.add(bundleNftId);
         | 
| 134 131 |  | 
| 135 | 
            -
                     | 
| 132 | 
            +
                    emit LogBundleServiceBundleCreated(bundleNftId, poolNftId);
         | 
| 136 133 | 
             
                }
         | 
| 137 134 |  | 
| 138 135 |  | 
| @@ -147,45 +144,58 @@ contract BundleService is | |
| 147 144 | 
             
                    virtual
         | 
| 148 145 | 
             
                    restricted()
         | 
| 149 146 | 
             
                {
         | 
| 147 | 
            +
                    // checks
         | 
| 148 | 
            +
                    _checkNftType(policyNftId, POLICY());
         | 
| 149 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 150 | 
            +
             | 
| 150 151 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 151 | 
            -
                    StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
         | 
| 152 | 
            -
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 153 152 |  | 
| 154 | 
            -
                     | 
| 155 | 
            -
             | 
| 156 | 
            -
                         | 
| 153 | 
            +
                    {
         | 
| 154 | 
            +
                        StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
         | 
| 155 | 
            +
                        IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                        // ensure bundle is active and not yet expired
         | 
| 158 | 
            +
                        if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
         | 
| 159 | 
            +
                            revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
         | 
| 160 | 
            +
                        }
         | 
| 157 161 | 
             
                    }
         | 
| 158 162 |  | 
| 159 | 
            -
                    // ensure bundle capacity is sufficent to collateralize policy
         | 
| 160 163 | 
             
                    InstanceStore instanceStore = instance.getInstanceStore();
         | 
| 161 | 
            -
                    (
         | 
| 162 | 
            -
                        Amount balanceAmount,
         | 
| 163 | 
            -
                        Amount lockedAmount,
         | 
| 164 | 
            -
                        Amount feeAmount
         | 
| 165 | 
            -
                    ) = instanceStore.getAmounts(bundleNftId);
         | 
| 166 164 |  | 
| 167 | 
            -
                     | 
| 168 | 
            -
             | 
| 169 | 
            -
                         | 
| 165 | 
            +
                    {
         | 
| 166 | 
            +
                        // ensure bundle capacity is sufficent to collateralize policy
         | 
| 167 | 
            +
                        (
         | 
| 168 | 
            +
                            Amount balanceAmount,
         | 
| 169 | 
            +
                            Amount lockedAmount,
         | 
| 170 | 
            +
                            Amount feeAmount
         | 
| 171 | 
            +
                        ) = instanceStore.getAmounts(bundleNftId);
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                        Amount capacity = balanceAmount - (lockedAmount + feeAmount);
         | 
| 174 | 
            +
                        if(capacity < collateralAmount) {
         | 
| 175 | 
            +
                            revert ErrorBundleServiceCapacityInsufficient(bundleNftId, capacity, collateralAmount);
         | 
| 176 | 
            +
                        }
         | 
| 170 177 | 
             
                    }
         | 
| 171 178 |  | 
| 179 | 
            +
                    // effects
         | 
| 172 180 | 
             
                    // updated locked amount
         | 
| 173 181 | 
             
                    instanceStore.increaseLocked(bundleNftId, collateralAmount);
         | 
| 174 | 
            -
                    
         | 
| 175 | 
            -
                    // link policy to bundle in bundle manger
         | 
| 176 | 
            -
                    _linkPolicy(instance, policyNftId);
         | 
| 177 182 | 
             
                }
         | 
| 178 183 |  | 
| 179 184 |  | 
| 180 185 | 
             
                function lock(NftId bundleNftId) 
         | 
| 181 186 | 
             
                    external
         | 
| 182 187 | 
             
                    virtual
         | 
| 188 | 
            +
                    restricted()
         | 
| 183 189 | 
             
                {
         | 
| 190 | 
            +
                    // checks
         | 
| 191 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 192 | 
            +
             | 
| 184 193 | 
             
                    (,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 185 194 |  | 
| 186 195 | 
             
                    // udpate bundle state
         | 
| 187 196 | 
             
                    instance.getInstanceStore().updateBundleState(bundleNftId, PAUSED());
         | 
| 188 197 |  | 
| 198 | 
            +
                    // effects
         | 
| 189 199 | 
             
                    // update set of active bundles
         | 
| 190 200 | 
             
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| 191 201 | 
             
                    bundleManager.lock(bundleNftId);
         | 
| @@ -197,9 +207,14 @@ contract BundleService is | |
| 197 207 | 
             
                function unlock(NftId bundleNftId) 
         | 
| 198 208 | 
             
                    external
         | 
| 199 209 | 
             
                    virtual
         | 
| 210 | 
            +
                    restricted()
         | 
| 200 211 | 
             
                {
         | 
| 212 | 
            +
                    // checks
         | 
| 213 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 214 | 
            +
             | 
| 201 215 | 
             
                    (,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 202 216 |  | 
| 217 | 
            +
                    // effects
         | 
| 203 218 | 
             
                    // udpate bundle state
         | 
| 204 219 | 
             
                    instance.getInstanceStore().updateBundleState(bundleNftId, ACTIVE());
         | 
| 205 220 |  | 
| @@ -217,10 +232,13 @@ contract BundleService is | |
| 217 232 | 
             
                ) 
         | 
| 218 233 | 
             
                    external
         | 
| 219 234 | 
             
                    virtual
         | 
| 220 | 
            -
                    restricted
         | 
| 235 | 
            +
                    restricted()
         | 
| 236 | 
            +
                    returns (Amount unstakedAmount, Amount feeAmount)
         | 
| 221 237 | 
             
                {
         | 
| 222 | 
            -
                    //  | 
| 223 | 
            -
                     | 
| 238 | 
            +
                    // checks
         | 
| 239 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 240 | 
            +
             | 
| 241 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 224 242 |  | 
| 225 243 | 
             
                    // ensure no open policies attached to bundle
         | 
| 226 244 | 
             
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| @@ -229,112 +247,148 @@ contract BundleService is | |
| 229 247 | 
             
                        revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
         | 
| 230 248 | 
             
                    }
         | 
| 231 249 |  | 
| 232 | 
            -
                    //  | 
| 233 | 
            -
                     | 
| 250 | 
            +
                    // effects
         | 
| 251 | 
            +
                    {
         | 
| 252 | 
            +
                        // update bundle state
         | 
| 253 | 
            +
                        InstanceStore instanceStore = instance.getInstanceStore();
         | 
| 254 | 
            +
                        instanceStore.updateBundleState(bundleNftId, CLOSED());
         | 
| 255 | 
            +
                        bundleManager.lock(bundleNftId);
         | 
| 256 | 
            +
             | 
| 257 | 
            +
                        // decrease bundle counters
         | 
| 258 | 
            +
                        Amount balanceAmountWithFees = instanceReader.getBalanceAmount(bundleNftId);
         | 
| 259 | 
            +
                        feeAmount = instanceReader.getFeeAmount(bundleNftId);
         | 
| 260 | 
            +
                        unstakedAmount = balanceAmountWithFees - feeAmount;
         | 
| 261 | 
            +
                        _accountingService.decreaseBundleBalance(instanceStore, bundleNftId, unstakedAmount, feeAmount);
         | 
| 262 | 
            +
                    }
         | 
| 234 263 | 
             
                }
         | 
| 235 264 |  | 
| 236 | 
            -
             | 
| 237 | 
            -
                function  | 
| 238 | 
            -
                     | 
| 239 | 
            -
                     | 
| 265 | 
            +
                /// @inheritdoc IBundleService
         | 
| 266 | 
            +
                function stake(
         | 
| 267 | 
            +
                    InstanceReader instanceReader,
         | 
| 268 | 
            +
                    InstanceStore instanceStore,
         | 
| 240 269 | 
             
                    NftId bundleNftId, 
         | 
| 241 | 
            -
                    Amount  | 
| 270 | 
            +
                    Amount amount
         | 
| 242 271 | 
             
                ) 
         | 
| 243 | 
            -
                    external
         | 
| 272 | 
            +
                    external 
         | 
| 244 273 | 
             
                    virtual
         | 
| 245 274 | 
             
                    restricted()
         | 
| 246 275 | 
             
                {
         | 
| 247 | 
            -
                     | 
| 276 | 
            +
                    // checks
         | 
| 277 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 278 | 
            +
             | 
| 279 | 
            +
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 280 | 
            +
                    StateId bundleState = instanceReader.getBundleState(bundleNftId);
         | 
| 281 | 
            +
             | 
| 282 | 
            +
                    if( (bundleState != ACTIVE() && bundleState != PAUSED()) // locked bundles can be staked
         | 
| 283 | 
            +
                        || bundleInfo.expiredAt < TimestampLib.blockTimestamp() 
         | 
| 284 | 
            +
                        || bundleInfo.closedAt.gtz()) {
         | 
| 285 | 
            +
                        revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
         | 
| 286 | 
            +
                    }
         | 
| 287 | 
            +
             | 
| 288 | 
            +
                    // effects
         | 
| 289 | 
            +
                    _accountingService.increaseBundleBalance(
         | 
| 290 | 
            +
                        instanceStore, 
         | 
| 291 | 
            +
                        bundleNftId, 
         | 
| 292 | 
            +
                        amount, 
         | 
| 293 | 
            +
                        AmountLib.zero());
         | 
| 248 294 | 
             
                }
         | 
| 249 295 |  | 
| 250 | 
            -
                /// @ | 
| 251 | 
            -
                function  | 
| 252 | 
            -
                     | 
| 253 | 
            -
                    NftId  | 
| 296 | 
            +
                /// @inheritdoc IBundleService
         | 
| 297 | 
            +
                function unstake(
         | 
| 298 | 
            +
                    InstanceStore instanceStore,
         | 
| 299 | 
            +
                    NftId bundleNftId, 
         | 
| 300 | 
            +
                    Amount amount
         | 
| 254 301 | 
             
                ) 
         | 
| 255 | 
            -
                    external
         | 
| 302 | 
            +
                    external 
         | 
| 256 303 | 
             
                    virtual
         | 
| 257 | 
            -
                    restricted
         | 
| 304 | 
            +
                    restricted()
         | 
| 305 | 
            +
                    returns (Amount unstakedAmount)
         | 
| 258 306 | 
             
                {
         | 
| 259 | 
            -
                    //  | 
| 260 | 
            -
                     | 
| 261 | 
            -
             | 
| 307 | 
            +
                    // checks
         | 
| 308 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 309 | 
            +
             | 
| 310 | 
            +
                    (
         | 
| 311 | 
            +
                        Amount balanceAmount,
         | 
| 312 | 
            +
                        Amount lockedAmount,
         | 
| 313 | 
            +
                        Amount feeAmount
         | 
| 314 | 
            +
                    ) = instanceStore.getAmounts(bundleNftId);
         | 
| 315 | 
            +
             | 
| 316 | 
            +
                    unstakedAmount = amount;
         | 
| 317 | 
            +
                    Amount availableAmount = balanceAmount - (lockedAmount + feeAmount);
         | 
| 318 | 
            +
             | 
| 319 | 
            +
                    // if amount is max, then unstake all available 
         | 
| 320 | 
            +
                    if (amount.gte(AmountLib.max())) {
         | 
| 321 | 
            +
                        unstakedAmount = availableAmount;
         | 
| 322 | 
            +
                    }
         | 
| 323 | 
            +
                    
         | 
| 324 | 
            +
                    // ensure unstaked amount does not exceed available amount
         | 
| 325 | 
            +
                    if (unstakedAmount > availableAmount) {
         | 
| 326 | 
            +
                        revert ErrorBundleServiceUnstakeAmountExceedsLimit(amount, availableAmount);
         | 
| 262 327 | 
             
                    }
         | 
| 263 328 |  | 
| 264 | 
            -
                     | 
| 329 | 
            +
                    // effects
         | 
| 330 | 
            +
                    _accountingService.decreaseBundleBalance(
         | 
| 331 | 
            +
                        instanceStore, 
         | 
| 332 | 
            +
                        bundleNftId, 
         | 
| 333 | 
            +
                        unstakedAmount, 
         | 
| 334 | 
            +
                        AmountLib.zero());
         | 
| 265 335 | 
             
                }
         | 
| 266 336 |  | 
| 267 337 | 
             
                /// @inheritdoc IBundleService
         | 
| 268 | 
            -
                function  | 
| 269 | 
            -
                     | 
| 338 | 
            +
                function extend(NftId bundleNftId, Seconds lifetimeExtension) 
         | 
| 339 | 
            +
                    external 
         | 
| 270 340 | 
             
                    virtual
         | 
| 271 | 
            -
                     | 
| 272 | 
            -
                    returns ( | 
| 341 | 
            +
                    restricted()
         | 
| 342 | 
            +
                    returns (Timestamp extendedExpiredAt) 
         | 
| 273 343 | 
             
                {
         | 
| 344 | 
            +
                    // checks
         | 
| 345 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 346 | 
            +
             | 
| 274 347 | 
             
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 275 | 
            -
                     | 
| 276 | 
            -
                    
         | 
| 277 | 
            -
                    IComponents.ComponentInfo memory poolInfo = reader.getComponentInfo(poolNftId);
         | 
| 278 | 
            -
                    address poolWallet = poolInfo.wallet;
         | 
| 279 | 
            -
                    
         | 
| 280 | 
            -
                    IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
         | 
| 281 | 
            -
                    
         | 
| 282 | 
            -
                    // determine withdrawn amount
         | 
| 283 | 
            -
                    withdrawnAmount = amount;
         | 
| 284 | 
            -
                    if (withdrawnAmount.gte(AmountLib.max())) {
         | 
| 285 | 
            -
                        withdrawnAmount = reader.getFeeAmount(bundleNftId);
         | 
| 286 | 
            -
                    } else {
         | 
| 287 | 
            -
                        if (withdrawnAmount.gt(reader.getFeeAmount(bundleNftId))) {
         | 
| 288 | 
            -
                            revert ErrorBundleServiceFeesWithdrawAmountExceedsLimit(withdrawnAmount, reader.getFeeAmount(bundleNftId));
         | 
| 289 | 
            -
                        }
         | 
| 290 | 
            -
                    }
         | 
| 348 | 
            +
                    IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
         | 
| 349 | 
            +
                    StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
         | 
| 291 350 |  | 
| 292 | 
            -
                     | 
| 293 | 
            -
             | 
| 351 | 
            +
                    // ensure bundle belongs to the pool
         | 
| 352 | 
            +
                    if (bundleInfo.poolNftId != poolNftId) {
         | 
| 353 | 
            +
                        revert ErrorBundleServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
         | 
| 294 354 | 
             
                    }
         | 
| 295 355 |  | 
| 296 | 
            -
                    //  | 
| 297 | 
            -
                     | 
| 298 | 
            -
             | 
| 299 | 
            -
                    if (tokenAllowance < withdrawnAmount.toInt()) {
         | 
| 300 | 
            -
                        revert ErrorBundleServiceWalletAllowanceTooSmall(poolWallet, address(poolInfo.tokenHandler), tokenAllowance, withdrawnAmount.toInt());
         | 
| 356 | 
            +
                    // ensure bundle is active and not yet expired
         | 
| 357 | 
            +
                    if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
         | 
| 358 | 
            +
                        revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
         | 
| 301 359 | 
             
                    }
         | 
| 302 360 |  | 
| 303 | 
            -
                     | 
| 304 | 
            -
             | 
| 305 | 
            -
                        InstanceStore store = instance.getInstanceStore();
         | 
| 306 | 
            -
                        // decrease fee amount of the bundle
         | 
| 307 | 
            -
                        _componentService.decreaseBundleBalance(store, bundleNftId, AmountLib.zero(), withdrawnAmount);
         | 
| 308 | 
            -
                        // decrease pool balance 
         | 
| 309 | 
            -
                        _componentService.decreasePoolBalance(store, poolNftId, withdrawnAmount, AmountLib.zero());
         | 
| 361 | 
            +
                    if (lifetimeExtension.eqz()) {
         | 
| 362 | 
            +
                        revert ErrorBundleServiceExtensionLifetimeIsZero();
         | 
| 310 363 | 
             
                    }
         | 
| 311 364 |  | 
| 312 | 
            -
                    //  | 
| 313 | 
            -
                     | 
| 314 | 
            -
             | 
| 315 | 
            -
                        // TODO: centralize token handling (issue #471)
         | 
| 316 | 
            -
                        poolInfo.tokenHandler.transfer(poolWallet, owner, withdrawnAmount);
         | 
| 365 | 
            +
                    // effects
         | 
| 366 | 
            +
                    bundleInfo.expiredAt = bundleInfo.expiredAt.addSeconds(lifetimeExtension);
         | 
| 367 | 
            +
                    extendedExpiredAt = bundleInfo.expiredAt;
         | 
| 317 368 |  | 
| 318 | 
            -
             | 
| 319 | 
            -
             | 
| 369 | 
            +
                    instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
         | 
| 370 | 
            +
             | 
| 371 | 
            +
                    emit LogBundleServiceBundleExtended(bundleNftId, lifetimeExtension, extendedExpiredAt);
         | 
| 320 372 | 
             
                }
         | 
| 321 373 |  | 
| 322 | 
            -
             | 
| 323 | 
            -
                function  | 
| 324 | 
            -
                     | 
| 374 | 
            +
             | 
| 375 | 
            +
                function releaseCollateral(
         | 
| 376 | 
            +
                    InstanceStore instanceStore,
         | 
| 377 | 
            +
                    NftId policyNftId, 
         | 
| 378 | 
            +
                    NftId bundleNftId, 
         | 
| 379 | 
            +
                    Amount collateralAmount
         | 
| 380 | 
            +
                ) 
         | 
| 381 | 
            +
                    external
         | 
| 382 | 
            +
                    virtual
         | 
| 383 | 
            +
                    restricted()
         | 
| 325 384 | 
             
                {
         | 
| 326 | 
            -
                     | 
| 327 | 
            -
                     | 
| 385 | 
            +
                    _checkNftType(policyNftId, POLICY());
         | 
| 386 | 
            +
                    _checkNftType(bundleNftId, BUNDLE());
         | 
| 328 387 |  | 
| 329 | 
            -
                     | 
| 330 | 
            -
                    if (policyInfo.activatedAt.gtz() && policyInfo.activatedAt < TimestampLib.blockTimestamp()) {
         | 
| 331 | 
            -
                        revert BundleSet.ErrorBundleSetPolicyAlreadyActivated(policyNftId);
         | 
| 332 | 
            -
                    }
         | 
| 333 | 
            -
                    
         | 
| 334 | 
            -
                    BundleSet bundleManager = instance.getBundleSet();
         | 
| 335 | 
            -
                    bundleManager.linkPolicy(policyNftId);
         | 
| 388 | 
            +
                    instanceStore.decreaseLocked(bundleNftId, collateralAmount);
         | 
| 336 389 | 
             
                }
         | 
| 337 390 |  | 
| 391 | 
            +
             | 
| 338 392 | 
             
                function _getDomain() internal pure override returns(ObjectType) {
         | 
| 339 393 | 
             
                    return BUNDLE();
         | 
| 340 394 | 
             
                }
         | 
| @@ -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(authority, registry);
         | 
| 21 | 
            +
                    IVersionable versionable = initialize(
         | 
| 22 | 
            +
                        registry,
         | 
| 23 | 
            +
                        address(svc), 
         | 
| 24 24 | 
             
                        data,
         | 
| 25 25 | 
             
                        salt);
         | 
| 26 26 |  | 
| @@ -1,18 +1,21 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            +
            import {IService} from "../shared/IService.sol";
         | 
| 5 | 
            +
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 6 | 
            +
             | 
| 4 7 | 
             
            import {Amount} from "../type/Amount.sol";
         | 
| 5 8 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 6 9 | 
             
            import {Fee} from "../type/Fee.sol";
         | 
| 7 | 
            -
            import { | 
| 8 | 
            -
            import { | 
| 9 | 
            -
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 10 | 
            +
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 11 | 
            +
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 10 12 | 
             
            import {Seconds} from "../type/Seconds.sol";
         | 
| 11 13 | 
             
            import {StateId} from "../type/StateId.sol";
         | 
| 12 14 | 
             
            import {Timestamp} from "../type/Timestamp.sol";
         | 
| 13 15 |  | 
| 14 16 | 
             
            interface IBundleService is IService {
         | 
| 15 17 |  | 
| 18 | 
            +
                event LogBundleServiceBundleCreated(NftId bundleNftId, NftId poolNftId);
         | 
| 16 19 | 
             
                event LogBundleServiceBundleActivated(NftId bundleNftId);
         | 
| 17 20 | 
             
                event LogBundleServiceBundleLocked(NftId bundleNftId);
         | 
| 18 21 |  | 
| @@ -25,22 +28,17 @@ interface IBundleService is IService { | |
| 25 28 | 
             
                error ErrorBundleServiceBundlePoolMismatch(NftId bundleNftId, NftId expectedPool, NftId actualPool);
         | 
| 26 29 |  | 
| 27 30 | 
             
                error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
         | 
| 31 | 
            +
                
         | 
| 32 | 
            +
                error ErrorBundleServiceUnstakeAmountExceedsLimit(Amount amount, Amount limit);
         | 
| 28 33 |  | 
| 29 | 
            -
                 | 
| 30 | 
            -
                error ErrorBundleServiceFeesWithdrawAmountExceedsLimit(Amount amount, Amount limit);
         | 
| 31 | 
            -
                error ErrorBundleServiceFeesWithdrawAmountIsZero();
         | 
| 32 | 
            -
                error ErrorBundleServiceWalletAllowanceTooSmall(address wallet, address tokenHandler, uint256 allowance, uint256 amount);
         | 
| 34 | 
            +
                error ErrorBundleServiceExtensionLifetimeIsZero();
         | 
| 33 35 |  | 
| 34 | 
            -
                event  | 
| 36 | 
            +
                event LogBundleServiceBundleExtended(NftId bundleNftId, Seconds lifetimeExtension, Timestamp extendedExpiredAt);
         | 
| 35 37 |  | 
| 36 | 
            -
                /// @dev  | 
| 37 | 
            -
                /// may only be called by pool service
         | 
| 38 | 
            +
                /// @dev Create a new bundle for the specified attributes.
         | 
| 38 39 | 
             
                function create(
         | 
| 39 | 
            -
                    IInstance instance, // instance relevant for bundle
         | 
| 40 | 
            -
                    NftId poolNftId, // the pool the bundle will be linked to
         | 
| 41 40 | 
             
                    address owner, // initial bundle owner
         | 
| 42 41 | 
             
                    Fee memory fee, // fees deducted from premium that go to bundle owner
         | 
| 43 | 
            -
                    Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
         | 
| 44 42 | 
             
                    Seconds lifetime, // initial duration for which new policies are covered
         | 
| 45 43 | 
             
                    bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
         | 
| 46 44 | 
             
                )
         | 
| @@ -48,11 +46,21 @@ interface IBundleService is IService { | |
| 48 46 | 
             
                    returns(NftId bundleNftId); // the nft id of the newly created bundle
         | 
| 49 47 |  | 
| 50 48 |  | 
| 51 | 
            -
                /// @dev increase bundle stakes by the specified amount
         | 
| 52 | 
            -
                /// may only be called by the  | 
| 53 | 
            -
                 | 
| 49 | 
            +
                /// @dev increase bundle stakes by the specified amount. bundle must not be expired or closed
         | 
| 50 | 
            +
                /// may only be called by the pool service
         | 
| 51 | 
            +
                function stake(
         | 
| 52 | 
            +
                    InstanceReader instanceReader,
         | 
| 53 | 
            +
                    InstanceStore instanceStore,
         | 
| 54 | 
            +
                    NftId bundleNftId, 
         | 
| 55 | 
            +
                    Amount amount
         | 
| 56 | 
            +
                ) external;
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                /// @dev decrease bundle stakes by the specified amount
         | 
| 59 | 
            +
                /// may only be called by the pool service
         | 
| 60 | 
            +
                function unstake(InstanceStore instanceStore, NftId bundleNftId, Amount amount) external returns (Amount unstakedAmount);
         | 
| 54 61 |  | 
| 55 | 
            -
                 | 
| 62 | 
            +
                /// @dev extend the lifetime of the bundle by the specified time in seconds
         | 
| 63 | 
            +
                function extend(NftId bundleNftId, Seconds lifetimeExtension) external returns (Timestamp extendedExpiredAt);
         | 
| 56 64 |  | 
| 57 65 | 
             
                /// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
         | 
| 58 66 | 
             
                /// only active bundles may be locked
         | 
| @@ -68,10 +76,12 @@ interface IBundleService is IService { | |
| 68 76 | 
             
                /// only open bundles (active or locked) may be closed
         | 
| 69 77 | 
             
                /// to close a bundle it may not have any non-closed polices attached to it
         | 
| 70 78 | 
             
                /// may only be called by registered and unlocked pool components
         | 
| 79 | 
            +
                /// @return balanceAmount the unstaked amount that was remaining in the bundle
         | 
| 80 | 
            +
                /// @return feeAmount the fee amount that was remaining for the bundle
         | 
| 71 81 | 
             
                function close(
         | 
| 72 82 | 
             
                    IInstance instance, 
         | 
| 73 83 | 
             
                    NftId bundleNftId
         | 
| 74 | 
            -
                ) external;
         | 
| 84 | 
            +
                ) external returns (Amount balanceAmount, Amount feeAmount);
         | 
| 75 85 |  | 
| 76 86 | 
             
                /// @dev set bundle fee to provided value
         | 
| 77 87 | 
             
                /// may only be called by registered and unlocked pool components
         | 
| @@ -97,24 +107,9 @@ interface IBundleService is IService { | |
| 97 107 | 
             
                /// @dev releases the specified collateral in the bundle
         | 
| 98 108 | 
             
                /// may only be called by pool service
         | 
| 99 109 | 
             
                function releaseCollateral(
         | 
| 100 | 
            -
                     | 
| 110 | 
            +
                    InstanceStore instanceStore, 
         | 
| 101 111 | 
             
                    NftId policyNftId, 
         | 
| 102 112 | 
             
                    NftId bundleNftId, 
         | 
| 103 113 | 
             
                    Amount collateralAmount
         | 
| 104 114 | 
             
                ) external;
         | 
| 105 | 
            -
             | 
| 106 | 
            -
                /// @dev unlink policy from bundle
         | 
| 107 | 
            -
                /// policy may only be unlinked if policy is closeable
         | 
| 108 | 
            -
                /// may only be called by pool service
         | 
| 109 | 
            -
                function unlinkPolicy(
         | 
| 110 | 
            -
                    IInstance instance, 
         | 
| 111 | 
            -
                    NftId policyNftId
         | 
| 112 | 
            -
                ) external;
         | 
| 113 | 
            -
             | 
| 114 | 
            -
                /// @dev Withdraw bundle feeds for the given bundle
         | 
| 115 | 
            -
                /// @param bundleNftId the bundle Nft Id
         | 
| 116 | 
            -
                /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
         | 
| 117 | 
            -
                /// @return withdrawnAmount the effective withdrawn amount
         | 
| 118 | 
            -
                function withdrawBundleFees(NftId bundleNftId, Amount amount) external returns (Amount withdrawnAmount);
         | 
| 119 | 
            -
             | 
| 120 115 | 
             
            }
         | 
| @@ -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,21 +21,19 @@ 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 | 
            -
                    bytes memory applicationData,
         | 
| 30 30 | 
             
                    NftId bundleNftId, 
         | 
| 31 | 
            -
                    bytes memory bundleFilter,
         | 
| 32 31 | 
             
                    Amount collateralizationAmount
         | 
| 33 32 | 
             
                ) external;
         | 
| 34 33 |  | 
| 35 | 
            -
                /// @dev  | 
| 36 | 
            -
                ///  | 
| 37 | 
            -
                /// default implementation returns true
         | 
| 34 | 
            +
                /// @dev Returns true iff the application matches with the bundle.
         | 
| 35 | 
            +
                /// This is a callback function that is only called if a pool declares itself as a verifying pool
         | 
| 36 | 
            +
                /// The default implementation returns true.
         | 
| 38 37 | 
             
                function applicationMatchesBundle(
         | 
| 39 38 | 
             
                    NftId applicationNftId, 
         | 
| 40 39 | 
             
                    bytes memory applicationData,
         | 
| @@ -46,13 +45,18 @@ interface IPoolComponent is IInstanceLinkedComponent { | |
| 46 45 | 
             
                    view
         | 
| 47 46 | 
             
                    returns (bool isMatching);
         | 
| 48 47 |  | 
| 49 | 
            -
                /// @dev Withdraw bundle feeds for the given bundle
         | 
| 50 | 
            -
                /// @param bundleNftId the bundle Nft Id
         | 
| 51 | 
            -
                /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
         | 
| 52 | 
            -
                /// @return withdrawnAmount the effective withdrawn amount
         | 
| 53 | 
            -
                function withdrawBundleFees(NftId bundleNftId, Amount amount) external returns (Amount withdrawnAmount);
         | 
| 54 48 |  | 
| 55 | 
            -
                /// @dev  | 
| 49 | 
            +
                /// @dev This is a callback function that is called by the claim service when a claim is confirmed.
         | 
| 50 | 
            +
                /// The pool has the option to implement custom behavirous such as triggering a reinsurance claim or blocking the claim confirmaation.
         | 
| 51 | 
            +
                /// The default implementation is empty.
         | 
| 52 | 
            +
                function processConfirmedClaim(
         | 
| 53 | 
            +
                    NftId policyNftId, 
         | 
| 54 | 
            +
                    ClaimId claimId, 
         | 
| 55 | 
            +
                    Amount amount
         | 
| 56 | 
            +
                ) external;
         | 
| 57 | 
            +
             | 
| 58 | 
            +
             | 
| 59 | 
            +
                /// @dev Returns initial pool specific infos for this pool
         | 
| 56 60 | 
             
                function getInitialPoolInfo() external view returns (IComponents.PoolInfo memory info);
         | 
| 57 61 |  | 
| 58 62 | 
             
            }
         |