@etherisc/gif-next 0.0.2-f30e0eb-805 → 0.0.2-f398177-971
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 +6 -83
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +47 -6
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +70 -13
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +137 -6
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +144 -13
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +161 -20
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +151 -20
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +71 -20
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +62 -21
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +310 -2004
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +101 -52
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +425 -2757
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +95 -58
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +348 -58
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +153 -207
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +38 -83
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +113 -34
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +8 -8
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +6 -6
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +6 -6
- 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/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +186 -236
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +38 -55
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +377 -182
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -39
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +713 -83
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +147 -32
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +266 -442
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +82 -107
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +111 -174
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +233 -128
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +385 -51
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +109 -282
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +210 -99
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +682 -33
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +510 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +85 -27
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +420 -160
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +104 -53
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +880 -82
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +90 -39
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +1004 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +688 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +144 -57
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +28 -37
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -37
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +22 -49
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +21 -34
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +10 -23
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +85 -27
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -19
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +14 -27
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +6 -19
- 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 +91 -28
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +6 -19
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +106 -39
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +74 -19
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +17 -4
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/components/Component.sol +25 -4
- package/contracts/components/Distribution.sol +11 -6
- package/contracts/components/IComponent.sol +19 -3
- package/contracts/components/IPoolComponent.sol +8 -7
- package/contracts/components/IProductComponent.sol +5 -4
- package/contracts/components/Pool.sol +17 -14
- package/contracts/components/Product.sol +144 -62
- package/contracts/instance/BundleManager.sol +3 -4
- package/contracts/instance/IInstance.sol +32 -53
- package/contracts/instance/IInstanceService.sol +15 -14
- package/contracts/instance/Instance.sol +107 -205
- package/contracts/instance/InstanceAccessManager.sol +44 -25
- package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
- package/contracts/instance/InstanceReader.sol +85 -7
- package/contracts/instance/InstanceService.sol +102 -289
- package/contracts/instance/InstanceStore.sol +212 -0
- package/contracts/instance/ObjectManager.sol +1 -1
- package/contracts/instance/base/ComponentService.sol +53 -39
- package/contracts/instance/base/KeyValueStore.sol +8 -34
- package/contracts/instance/base/Lifecycle.sol +15 -4
- package/contracts/instance/module/IAccess.sol +2 -2
- package/contracts/instance/module/IBundle.sol +6 -4
- package/contracts/instance/module/IComponents.sol +7 -1
- package/contracts/instance/module/IDistribution.sol +3 -2
- package/contracts/instance/module/IPolicy.sol +13 -8
- package/contracts/instance/service/ApplicationService.sol +62 -226
- package/contracts/instance/service/BundleService.sol +172 -126
- package/contracts/instance/service/ClaimService.sol +318 -32
- package/contracts/instance/service/DistributionService.sol +71 -190
- package/contracts/instance/service/IApplicationService.sol +8 -28
- package/contracts/instance/service/IBundleService.sol +82 -26
- package/contracts/instance/service/IClaimService.sol +52 -23
- package/contracts/instance/service/IDistributionService.sol +11 -22
- package/contracts/instance/service/IPolicyService.sol +24 -16
- package/contracts/instance/service/IPoolService.sol +82 -3
- package/contracts/instance/service/IPricingService.sol +37 -0
- package/contracts/instance/service/PolicyService.sol +152 -179
- package/contracts/instance/service/PoolService.sol +239 -56
- package/contracts/instance/service/PricingService.sol +275 -0
- package/contracts/instance/service/PricingServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +27 -58
- package/contracts/registry/IRegistryService.sol +2 -3
- package/contracts/registry/RegistryService.sol +24 -21
- package/contracts/registry/ReleaseManager.sol +20 -18
- package/contracts/shared/IPolicyHolder.sol +23 -9
- package/contracts/shared/IRegistryLinked.sol +0 -1
- package/contracts/shared/IService.sol +6 -6
- package/contracts/shared/NftOwnable.sol +0 -2
- package/contracts/shared/PolicyHolder.sol +30 -17
- package/contracts/shared/Registerable.sol +10 -9
- package/contracts/shared/RegistryLinked.sol +0 -5
- package/contracts/shared/Service.sol +21 -7
- package/contracts/shared/TokenHandler.sol +4 -2
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +109 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/Fee.sol +16 -8
- package/contracts/types/ObjectType.sol +9 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/StateId.sol +6 -2
- package/contracts/types/Timestamp.sol +5 -0
- package/package.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
- /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
| @@ -16,6 +16,7 @@ import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol"; | |
| 16 16 | 
             
            import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
         | 
| 17 17 | 
             
            import {Pool} from "../../components/Pool.sol";
         | 
| 18 18 |  | 
| 19 | 
            +
            import {Amount, AmountLib} from "../../types/Amount.sol";
         | 
| 19 20 | 
             
            import {Fee, FeeLib} from "../../types/Fee.sol";
         | 
| 20 21 | 
             
            import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../../types/StateId.sol";
         | 
| 21 22 | 
             
            import {Seconds} from "../../types/Seconds.sol";
         | 
| @@ -57,41 +58,73 @@ contract BundleService is | |
| 57 58 | 
             
                    (registryAddress, initialOwner) = abi.decode(data, (address, address));
         | 
| 58 59 | 
             
                    // TODO while PoolService is not deployed in PoolServiceManager constructor
         | 
| 59 60 | 
             
                    //      owner is PoolServiceManager deployer
         | 
| 60 | 
            -
                    initializeService(registryAddress, owner);
         | 
| 61 | 
            +
                    initializeService(registryAddress, address(0), owner);
         | 
| 61 62 | 
             
                    registerInterface(type(IBundleService).interfaceId);
         | 
| 62 63 | 
             
                }
         | 
| 63 64 |  | 
| 64 | 
            -
                function getDomain() public pure override | 
| 65 | 
            +
                function getDomain() public pure override returns(ObjectType) {
         | 
| 65 66 | 
             
                    return BUNDLE();
         | 
| 66 67 | 
             
                }
         | 
| 67 68 |  | 
| 69 | 
            +
                // TODO staking/unstaking as well as collateralize need to go to pool service
         | 
| 70 | 
            +
                // it will also be the pool service that is updating the pool info data
         | 
| 71 | 
            +
                // collateralize -> potentially accumulate pool fees
         | 
| 72 | 
            +
                // collateralize: additional reason to move to pool, pool might has retential level < 1 ...
         | 
| 73 | 
            +
                // staking -> potentially accumulate staking fees
         | 
| 74 | 
            +
                // unstaking -> potentially accumulate performance fees
         | 
| 75 | 
            +
                function _updatePoolWithStakes(
         | 
| 76 | 
            +
                    IInstance instance,
         | 
| 77 | 
            +
                    NftId poolNftId,
         | 
| 78 | 
            +
                    Amount stakingAmount
         | 
| 79 | 
            +
                )
         | 
| 80 | 
            +
                    internal
         | 
| 81 | 
            +
                    returns (
         | 
| 82 | 
            +
                        TokenHandler tokenHandler,
         | 
| 83 | 
            +
                        address wallet,
         | 
| 84 | 
            +
                        Amount netStakingAmount
         | 
| 85 | 
            +
                    )
         | 
| 86 | 
            +
                {
         | 
| 87 | 
            +
                    if(stakingAmount.gtz()) {
         | 
| 88 | 
            +
                        InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 89 | 
            +
                        IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                        tokenHandler = componentInfo.tokenHandler;
         | 
| 92 | 
            +
                        wallet = componentInfo.wallet;
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                        IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
         | 
| 95 | 
            +
                        Amount poolFeeAmount;
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                        // calculate pool fee and net staking amount
         | 
| 98 | 
            +
                        (poolFeeAmount, netStakingAmount) = FeeLib.calculateFee(poolInfo.stakingFee, stakingAmount);
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                        // update pool balance and fee amount
         | 
| 101 | 
            +
                        poolInfo.balanceAmount = poolInfo.balanceAmount + netStakingAmount;
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                        if(poolFeeAmount.gtz()) {
         | 
| 104 | 
            +
                            poolInfo.feeAmount = poolInfo.feeAmount + poolFeeAmount;
         | 
| 105 | 
            +
                        }
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                        // save updated pool info
         | 
| 108 | 
            +
                        componentInfo.data = abi.encode(poolInfo);
         | 
| 109 | 
            +
                        instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
         | 
| 110 | 
            +
                    }
         | 
| 111 | 
            +
                }
         | 
| 112 | 
            +
             | 
| 113 | 
            +
             | 
| 68 114 | 
             
                function create(
         | 
| 115 | 
            +
                    IInstance instance,
         | 
| 116 | 
            +
                    NftId poolNftId,
         | 
| 69 117 | 
             
                    address owner, 
         | 
| 70 | 
            -
                    Fee memory  | 
| 71 | 
            -
                     | 
| 118 | 
            +
                    Fee memory bundleFee, 
         | 
| 119 | 
            +
                    Amount stakingAmount, 
         | 
| 72 120 | 
             
                    Seconds lifetime, 
         | 
| 73 121 | 
             
                    bytes calldata filter
         | 
| 74 122 | 
             
                )
         | 
| 75 123 | 
             
                    external
         | 
| 76 124 | 
             
                    override
         | 
| 125 | 
            +
                    // TODO add restricted and add authz for pool service
         | 
| 77 126 | 
             
                    returns(NftId bundleNftId)
         | 
| 78 127 | 
             
                {
         | 
| 79 | 
            -
                    (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 80 | 
            -
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 81 | 
            -
                    NftId poolNftId = info.nftId;
         | 
| 82 | 
            -
             | 
| 83 | 
            -
                    IBundle.BundleInfo  memory bundleInfo = IBundle.BundleInfo(
         | 
| 84 | 
            -
                        poolNftId,
         | 
| 85 | 
            -
                        fee,
         | 
| 86 | 
            -
                        filter,
         | 
| 87 | 
            -
                        stakingAmount,
         | 
| 88 | 
            -
                        0,
         | 
| 89 | 
            -
                        stakingAmount,
         | 
| 90 | 
            -
                        lifetime,
         | 
| 91 | 
            -
                        zeroTimestamp(),
         | 
| 92 | 
            -
                        zeroTimestamp()
         | 
| 93 | 
            -
                    );
         | 
| 94 | 
            -
             | 
| 95 128 | 
             
                    // register bundle with registry
         | 
| 96 129 | 
             
                    bundleNftId = getRegistryService().registerBundle(
         | 
| 97 130 | 
             
                        IRegistry.ObjectInfo(
         | 
| @@ -101,25 +134,32 @@ contract BundleService is | |
| 101 134 | 
             
                            false, // intercepting property for bundles is defined on pool
         | 
| 102 135 | 
             
                            address(0),
         | 
| 103 136 | 
             
                            owner,
         | 
| 104 | 
            -
                             | 
| 137 | 
            +
                            "" // bundle data to be stored in registry
         | 
| 105 138 | 
             
                        )
         | 
| 106 139 | 
             
                    );
         | 
| 107 140 |  | 
| 108 141 | 
             
                    // create bundle info in instance
         | 
| 109 | 
            -
                    instance.createBundle( | 
| 110 | 
            -
             | 
| 142 | 
            +
                    instance.getInstanceStore().createBundle(
         | 
| 143 | 
            +
                        bundleNftId, 
         | 
| 144 | 
            +
                        IBundle.BundleInfo(
         | 
| 145 | 
            +
                            poolNftId,
         | 
| 146 | 
            +
                            bundleFee,
         | 
| 147 | 
            +
                            filter,
         | 
| 148 | 
            +
                            stakingAmount,
         | 
| 149 | 
            +
                            AmountLib.zero(),
         | 
| 150 | 
            +
                            AmountLib.zero(),
         | 
| 151 | 
            +
                            lifetime,
         | 
| 152 | 
            +
                            TimestampLib.blockTimestamp().addSeconds(lifetime),
         | 
| 153 | 
            +
                            zeroTimestamp()));
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                    // put bundle under bundle managemet
         | 
| 111 156 | 
             
                    BundleManager bundleManager = instance.getBundleManager();
         | 
| 112 157 | 
             
                    bundleManager.add(bundleNftId);
         | 
| 113 | 
            -
                    
         | 
| 114 | 
            -
                    _processStakingByTreasury(
         | 
| 115 | 
            -
                        instanceReader,
         | 
| 116 | 
            -
                        poolNftId,
         | 
| 117 | 
            -
                        bundleNftId,
         | 
| 118 | 
            -
                        stakingAmount);
         | 
| 119 158 |  | 
| 120 159 | 
             
                    // TODO add logging
         | 
| 121 160 | 
             
                }
         | 
| 122 161 |  | 
| 162 | 
            +
             | 
| 123 163 | 
             
                function setFee(
         | 
| 124 164 | 
             
                    NftId bundleNftId,
         | 
| 125 165 | 
             
                    Fee memory fee
         | 
| @@ -127,56 +167,105 @@ contract BundleService is | |
| 127 167 | 
             
                    external
         | 
| 128 168 | 
             
                    override
         | 
| 129 169 | 
             
                {
         | 
| 130 | 
            -
                    ( | 
| 170 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
         | 
| 131 171 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 132 | 
            -
                    NftId poolNftId = info.nftId;
         | 
| 133 | 
            -
             | 
| 134 172 | 
             
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 135 | 
            -
                     | 
| 136 | 
            -
             | 
| 173 | 
            +
                    if(bundleInfo.poolNftId.eqz()) {
         | 
| 174 | 
            +
                        revert ErrorBundleServiceBundleUnknown(bundleNftId);
         | 
| 175 | 
            +
                    }
         | 
| 137 176 |  | 
| 138 | 
            -
                    bundleInfo. | 
| 177 | 
            +
                    if(bundleInfo.poolNftId != poolNftId) {
         | 
| 178 | 
            +
                        revert ErrorBundleServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
         | 
| 179 | 
            +
                    }
         | 
| 139 180 |  | 
| 140 | 
            -
                     | 
| 181 | 
            +
                    bundleInfo.fee = fee;
         | 
| 182 | 
            +
                    instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
         | 
| 141 183 | 
             
                }
         | 
| 142 184 |  | 
| 143 185 |  | 
| 186 | 
            +
                // the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
         | 
| 144 187 | 
             
                function lockCollateral(
         | 
| 145 188 | 
             
                    IInstance instance,
         | 
| 146 189 | 
             
                    NftId policyNftId, 
         | 
| 147 190 | 
             
                    NftId bundleNftId, 
         | 
| 148 | 
            -
                     | 
| 149 | 
            -
                     | 
| 191 | 
            +
                    Amount collateralAmount, // required amount to collateralize policy
         | 
| 192 | 
            +
                    Amount premiumAmount // premium part that reaches bundle for this policy
         | 
| 150 193 | 
             
                ) 
         | 
| 151 194 | 
             
                    external
         | 
| 152 | 
            -
                    onlyService
         | 
| 153 | 
            -
                    returns (
         | 
| 154 | 
            -
                        IBundle.BundleInfo memory bundleInfo
         | 
| 155 | 
            -
                    )
         | 
| 195 | 
            +
                    onlyService // TODO replace with restricted + appropriate granting
         | 
| 156 196 | 
             
                {
         | 
| 157 197 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 158 | 
            -
                     | 
| 198 | 
            +
                    StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
         | 
| 199 | 
            +
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 200 | 
            +
             | 
| 201 | 
            +
                    // ensure bundle is active and not yet expired
         | 
| 202 | 
            +
                    if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
         | 
| 203 | 
            +
                        revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
         | 
| 204 | 
            +
                    }
         | 
| 159 205 |  | 
| 160 | 
            -
                    //  | 
| 206 | 
            +
                    // ensure bundle capacity is sufficent to collateralize policy
         | 
| 207 | 
            +
                    Amount capacity = bundleInfo.capitalAmount + premiumAmount - bundleInfo.lockedAmount;
         | 
| 208 | 
            +
                    if(capacity < collateralAmount) {
         | 
| 209 | 
            +
                        revert ErrorBundleServiceCapacityInsufficient(bundleNftId, capacity, collateralAmount);
         | 
| 210 | 
            +
                    }
         | 
| 161 211 |  | 
| 162 | 
            -
                    //  | 
| 163 | 
            -
                     | 
| 164 | 
            -
                     | 
| 212 | 
            +
                    // TODO add more validation
         | 
| 213 | 
            +
                    
         | 
| 214 | 
            +
                    // updated locked amount
         | 
| 215 | 
            +
                    bundleInfo.lockedAmount = bundleInfo.lockedAmount + collateralAmount;
         | 
| 165 216 |  | 
| 166 | 
            -
                     | 
| 217 | 
            +
                    // update capital and fees when premiums are involved
         | 
| 218 | 
            +
                    _updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
         | 
| 167 219 |  | 
| 168 | 
            -
                     | 
| 220 | 
            +
                    // link policy to bundle in bundle manger
         | 
| 221 | 
            +
                    _linkPolicy(instance, policyNftId);
         | 
| 169 222 | 
             
                }
         | 
| 170 223 |  | 
| 171 224 |  | 
| 225 | 
            +
                function _updateBundleWithPremium(
         | 
| 226 | 
            +
                    IInstance instance,
         | 
| 227 | 
            +
                    NftId bundleNftId,
         | 
| 228 | 
            +
                    IBundle.BundleInfo memory bundleInfo,
         | 
| 229 | 
            +
                    Amount premiumAmount
         | 
| 230 | 
            +
                )
         | 
| 231 | 
            +
                    internal
         | 
| 232 | 
            +
                {
         | 
| 233 | 
            +
                    // update bundle capital and fee amounts
         | 
| 234 | 
            +
                    if(premiumAmount.gtz()) {
         | 
| 235 | 
            +
                        // calculate fees and net premium amounts
         | 
| 236 | 
            +
                        (
         | 
| 237 | 
            +
                            , 
         | 
| 238 | 
            +
                            Amount netPremiumAmount
         | 
| 239 | 
            +
                        ) = FeeLib.calculateFee(bundleInfo.fee, premiumAmount);
         | 
| 240 | 
            +
             | 
| 241 | 
            +
                        // update bundle info with additional capital
         | 
| 242 | 
            +
                        bundleInfo.capitalAmount = bundleInfo.capitalAmount + netPremiumAmount;
         | 
| 243 | 
            +
                    }
         | 
| 244 | 
            +
             | 
| 245 | 
            +
                    // save updated bundle info
         | 
| 246 | 
            +
                    instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
         | 
| 247 | 
            +
                }
         | 
| 248 | 
            +
             | 
| 249 | 
            +
                function updateBundleFees(
         | 
| 250 | 
            +
                    IInstance instance,
         | 
| 251 | 
            +
                    NftId bundleNftId,
         | 
| 252 | 
            +
                    Amount feeAmount
         | 
| 253 | 
            +
                )
         | 
| 254 | 
            +
                    external
         | 
| 255 | 
            +
                {
         | 
| 256 | 
            +
                    IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
         | 
| 257 | 
            +
                    bundleInfo.feeAmount = bundleInfo.feeAmount.add(feeAmount);
         | 
| 258 | 
            +
                    instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
         | 
| 259 | 
            +
                }
         | 
| 260 | 
            +
             | 
| 172 261 | 
             
                function lock(NftId bundleNftId) 
         | 
| 173 262 | 
             
                    external
         | 
| 174 263 | 
             
                    virtual
         | 
| 175 264 | 
             
                {
         | 
| 176 | 
            -
                    ( | 
| 265 | 
            +
                    (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
         | 
| 177 266 |  | 
| 178 267 | 
             
                    // udpate bundle state
         | 
| 179 | 
            -
                    instance.updateBundleState(bundleNftId, PAUSED());
         | 
| 268 | 
            +
                    instance.getInstanceStore().updateBundleState(bundleNftId, PAUSED());
         | 
| 180 269 |  | 
| 181 270 | 
             
                    // update set of active bundles
         | 
| 182 271 | 
             
                    BundleManager bundleManager = instance.getBundleManager();
         | 
| @@ -190,10 +279,10 @@ contract BundleService is | |
| 190 279 | 
             
                    external
         | 
| 191 280 | 
             
                    virtual
         | 
| 192 281 | 
             
                {
         | 
| 193 | 
            -
                    ( | 
| 282 | 
            +
                    (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
         | 
| 194 283 |  | 
| 195 284 | 
             
                    // udpate bundle state
         | 
| 196 | 
            -
                    instance.updateBundleState(bundleNftId, ACTIVE());
         | 
| 285 | 
            +
                    instance.getInstanceStore().updateBundleState(bundleNftId, ACTIVE());
         | 
| 197 286 |  | 
| 198 287 | 
             
                    // update set of active bundles
         | 
| 199 288 | 
             
                    BundleManager bundleManager = instance.getBundleManager();
         | 
| @@ -203,14 +292,16 @@ contract BundleService is | |
| 203 292 | 
             
                }
         | 
| 204 293 |  | 
| 205 294 |  | 
| 206 | 
            -
                function close( | 
| 295 | 
            +
                function close(
         | 
| 296 | 
            +
                    IInstance instance,
         | 
| 297 | 
            +
                    NftId bundleNftId
         | 
| 298 | 
            +
                ) 
         | 
| 207 299 | 
             
                    external
         | 
| 208 300 | 
             
                    virtual
         | 
| 301 | 
            +
                    // TODO add restricted and autz for pool service
         | 
| 209 302 | 
             
                {
         | 
| 210 | 
            -
                    (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 211 | 
            -
             | 
| 212 303 | 
             
                    // udpate bundle state
         | 
| 213 | 
            -
                    instance.updateBundleState(bundleNftId, CLOSED());
         | 
| 304 | 
            +
                    instance.getInstanceStore().updateBundleState(bundleNftId, CLOSED());
         | 
| 214 305 |  | 
| 215 306 | 
             
                    // ensure no open policies attached to bundle
         | 
| 216 307 | 
             
                    BundleManager bundleManager = instance.getBundleManager();
         | 
| @@ -221,14 +312,13 @@ contract BundleService is | |
| 221 312 |  | 
| 222 313 | 
             
                    // update set of active bundles
         | 
| 223 314 | 
             
                    bundleManager.lock(bundleNftId);
         | 
| 224 | 
            -
             | 
| 225 | 
            -
                    emit LogBundleServiceBundleClosed(bundleNftId);
         | 
| 226 315 | 
             
                }
         | 
| 227 316 |  | 
| 228 317 |  | 
| 229 | 
            -
                function increaseBalance( | 
| 318 | 
            +
                function increaseBalance(
         | 
| 319 | 
            +
                    IInstance instance,
         | 
| 230 320 | 
             
                    NftId bundleNftId, 
         | 
| 231 | 
            -
                     | 
| 321 | 
            +
                    Amount premiumAmount
         | 
| 232 322 | 
             
                ) 
         | 
| 233 323 | 
             
                    external
         | 
| 234 324 | 
             
                    onlyService 
         | 
| @@ -236,15 +326,16 @@ contract BundleService is | |
| 236 326 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 237 327 | 
             
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 238 328 |  | 
| 239 | 
            -
                     | 
| 329 | 
            +
                    // update capital and fees when premiums are involved
         | 
| 330 | 
            +
                    _updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
         | 
| 240 331 |  | 
| 241 | 
            -
                     | 
| 332 | 
            +
                    // TODO add logging (?)
         | 
| 242 333 | 
             
                }
         | 
| 243 334 |  | 
| 244 | 
            -
                function  | 
| 335 | 
            +
                function releaseCollateral(IInstance instance,
         | 
| 245 336 | 
             
                    NftId policyNftId, 
         | 
| 246 337 | 
             
                    NftId bundleNftId, 
         | 
| 247 | 
            -
                     | 
| 338 | 
            +
                    Amount collateralAmount
         | 
| 248 339 | 
             
                ) 
         | 
| 249 340 | 
             
                    external
         | 
| 250 341 | 
             
                    onlyService 
         | 
| @@ -252,24 +343,20 @@ contract BundleService is | |
| 252 343 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 253 344 | 
             
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 254 345 |  | 
| 255 | 
            -
                    //  | 
| 256 | 
            -
                    bundleInfo.lockedAmount  | 
| 257 | 
            -
             | 
| 258 | 
            -
                    instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
         | 
| 259 | 
            -
                    
         | 
| 260 | 
            -
                    unlinkPolicy(instance, policyNftId);
         | 
| 346 | 
            +
                    // reduce locked amount by released collateral amount
         | 
| 347 | 
            +
                    bundleInfo.lockedAmount = bundleInfo.lockedAmount - collateralAmount;
         | 
| 348 | 
            +
                    instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
         | 
| 261 349 | 
             
                }
         | 
| 262 350 |  | 
| 263 351 | 
             
                /// @dev links policy to bundle
         | 
| 264 | 
            -
                function  | 
| 352 | 
            +
                function _linkPolicy(IInstance instance, NftId policyNftId) 
         | 
| 265 353 | 
             
                    internal
         | 
| 266 | 
            -
                    onlyService 
         | 
| 267 354 | 
             
                {
         | 
| 268 355 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 269 356 | 
             
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         | 
| 270 357 |  | 
| 271 | 
            -
                    // ensure policy has not yet been activated
         | 
| 272 | 
            -
                    if (policyInfo.activatedAt.gtz()) {
         | 
| 358 | 
            +
                    // ensure policy has not yet been activated in a previous tx already
         | 
| 359 | 
            +
                    if (policyInfo.activatedAt.gtz() && policyInfo.activatedAt < TimestampLib.blockTimestamp()) {
         | 
| 273 360 | 
             
                        revert BundleManager.ErrorBundleManagerPolicyAlreadyActivated(policyNftId);
         | 
| 274 361 | 
             
                    }
         | 
| 275 362 |  | 
| @@ -277,60 +364,19 @@ contract BundleService is | |
| 277 364 | 
             
                    bundleManager.linkPolicy(policyNftId);
         | 
| 278 365 | 
             
                }
         | 
| 279 366 |  | 
| 280 | 
            -
             | 
| 281 | 
            -
                function unlinkPolicy( | 
| 282 | 
            -
                     | 
| 283 | 
            -
                     | 
| 367 | 
            +
                /// @dev unlinks policy from bundle
         | 
| 368 | 
            +
                function unlinkPolicy(
         | 
| 369 | 
            +
                    IInstance instance, 
         | 
| 370 | 
            +
                    NftId policyNftId
         | 
| 371 | 
            +
                ) 
         | 
| 372 | 
            +
                    external
         | 
| 373 | 
            +
                    virtual
         | 
| 284 374 | 
             
                {
         | 
| 285 | 
            -
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 286 | 
            -
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         | 
| 287 | 
            -
             | 
| 288 | 
            -
                    // ensure policy has no open claims
         | 
| 289 | 
            -
                    if (policyInfo.openClaimsCount > 0) {
         | 
| 290 | 
            -
                        revert BundleManager.ErrorBundleManagerPolicyWithOpenClaims(
         | 
| 291 | 
            -
                            policyNftId, 
         | 
| 292 | 
            -
                            policyInfo.openClaimsCount);
         | 
| 293 | 
            -
                    }
         | 
| 294 | 
            -
             | 
| 295 375 | 
             
                    // ensure policy is closeable
         | 
| 296 | 
            -
                    if ( | 
| 297 | 
            -
                         | 
| 298 | 
            -
                    {
         | 
| 299 | 
            -
                        revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
         | 
| 376 | 
            +
                    if (!instance.getInstanceReader().policyIsCloseable(policyNftId)) {
         | 
| 377 | 
            +
                        revert ErrorBundleServicePolicyNotCloseable(policyNftId);
         | 
| 300 378 | 
             
                    }
         | 
| 301 | 
            -
                    
         | 
| 302 | 
            -
                    BundleManager bundleManager = instance.getBundleManager();
         | 
| 303 | 
            -
                    bundleManager.unlinkPolicy(policyNftId);
         | 
| 304 | 
            -
                }
         | 
| 305 379 |  | 
| 306 | 
            -
             | 
| 307 | 
            -
                    InstanceReader instanceReader,
         | 
| 308 | 
            -
                    NftId poolNftId,
         | 
| 309 | 
            -
                    NftId bundleNftId,
         | 
| 310 | 
            -
                    uint256 stakingAmount
         | 
| 311 | 
            -
                )
         | 
| 312 | 
            -
                    internal
         | 
| 313 | 
            -
                {
         | 
| 314 | 
            -
                    // process token transfer(s)
         | 
| 315 | 
            -
                    if(stakingAmount > 0) {
         | 
| 316 | 
            -
                        IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 317 | 
            -
                        IComponents.PoolInfo memory poolInfo = abi.decode(
         | 
| 318 | 
            -
                            componentInfo.data, (IComponents.PoolInfo));
         | 
| 319 | 
            -
             | 
| 320 | 
            -
                        TokenHandler tokenHandler = componentInfo.tokenHandler;
         | 
| 321 | 
            -
                        address bundleOwner = getRegistry().ownerOf(bundleNftId);
         | 
| 322 | 
            -
                        Fee memory stakingFee = poolInfo.stakingFee;
         | 
| 323 | 
            -
             | 
| 324 | 
            -
                        tokenHandler.transfer(
         | 
| 325 | 
            -
                            bundleOwner,
         | 
| 326 | 
            -
                            componentInfo.wallet,
         | 
| 327 | 
            -
                            stakingAmount
         | 
| 328 | 
            -
                        );
         | 
| 329 | 
            -
             | 
| 330 | 
            -
                        if (! FeeLib.feeIsZero(stakingFee)) {
         | 
| 331 | 
            -
                            (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
         | 
| 332 | 
            -
                            // TODO: track staking fees in pool's state (issue #177)
         | 
| 333 | 
            -
                        }
         | 
| 334 | 
            -
                    }
         | 
| 380 | 
            +
                    instance.getBundleManager().unlinkPolicy(policyNftId);
         | 
| 335 381 | 
             
                }
         | 
| 336 382 | 
             
            }
         |