@etherisc/gif-next 0.0.2-f29e479-370 → 0.0.2-f2df3e2-873
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 +78 -89
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +139 -140
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +156 -64
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +181 -112
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +353 -176
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -138
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +299 -245
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +83 -162
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +527 -400
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +175 -51
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +500 -612
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -126
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +253 -236
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +305 -211
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +71 -23
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +86 -31
- 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 +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- 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 +291 -100
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +46 -22
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +422 -252
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +78 -14
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +373 -87
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +55 -7
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +579 -123
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +71 -47
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +200 -46
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +241 -188
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +251 -58
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +444 -25
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +430 -76
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +511 -14
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +544 -153
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +51 -27
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +562 -52
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +24 -12
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +115 -52
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -24
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
- 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 +18 -37
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
- 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 +2 -2
- 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/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +80 -14
- 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 +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +3 -3
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +87 -16
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- 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 +3 -3
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +102 -27
- 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/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
- 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 +185 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- 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 +40 -9
- 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 +17 -4
- 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 +23 -4
- 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 +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
- 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 +38 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/Component.sol +99 -87
- package/contracts/components/Distribution.sol +18 -21
- package/contracts/components/IComponent.sol +40 -18
- package/contracts/components/IDistributionComponent.sol +1 -22
- package/contracts/components/IPoolComponent.sol +73 -47
- package/contracts/components/IProductComponent.sol +3 -2
- package/contracts/components/Pool.sol +178 -130
- package/contracts/components/Product.sol +157 -71
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +10 -9
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +37 -27
- package/contracts/instance/IInstanceService.sol +18 -9
- package/contracts/instance/Instance.sol +117 -98
- package/contracts/instance/InstanceAccessManager.sol +388 -158
- package/contracts/instance/InstanceReader.sol +36 -12
- package/contracts/instance/InstanceService.sol +193 -191
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +13 -5
- package/contracts/instance/base/Lifecycle.sol +23 -6
- package/contracts/instance/module/IAccess.sol +21 -14
- package/contracts/instance/module/IBundle.sol +8 -5
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +2 -1
- package/contracts/instance/module/IPolicy.sol +37 -7
- package/contracts/instance/module/ISetup.sol +7 -22
- package/contracts/instance/service/ApplicationService.sol +137 -50
- package/contracts/instance/service/BundleService.sol +221 -83
- package/contracts/instance/service/ClaimService.sol +114 -26
- package/contracts/instance/service/DistributionService.sol +174 -118
- package/contracts/instance/service/IApplicationService.sol +9 -13
- package/contracts/instance/service/IBundleService.sol +68 -26
- package/contracts/instance/service/IClaimService.sol +46 -15
- package/contracts/instance/service/IDistributionService.sol +20 -4
- package/contracts/instance/service/IPolicyService.sol +69 -21
- package/contracts/instance/service/IPoolService.sol +82 -3
- package/contracts/instance/service/PolicyService.sol +297 -232
- package/contracts/instance/service/PoolService.sol +214 -20
- package/contracts/instance/service/ProductService.sol +31 -54
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +2 -0
- package/contracts/registry/IRegistryService.sol +4 -3
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +23 -20
- package/contracts/registry/RegistryService.sol +15 -16
- package/contracts/registry/ReleaseManager.sol +20 -18
- package/contracts/shared/IService.sol +4 -6
- package/contracts/shared/Registerable.sol +2 -2
- package/contracts/shared/Service.sol +21 -7
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +65 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +6 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +13 -6
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +7 -2
- package/contracts/types/Timestamp.sol +18 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +1 -1
| @@ -1,25 +1,28 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.19;
         | 
| 3 3 |  | 
| 4 | 
            -
            import { | 
| 4 | 
            +
            import {IBundle} from "../../instance/module/IBundle.sol";
         | 
| 5 | 
            +
            import {IComponents} from "../module/IComponents.sol";
         | 
| 5 6 | 
             
            import {IRegistry} from "../../registry/IRegistry.sol";
         | 
| 6 7 | 
             
            import {IInstance} from "../../instance/IInstance.sol";
         | 
| 7 | 
            -
            import {IBundle} from "../../instance/module/IBundle.sol";
         | 
| 8 8 | 
             
            import {TokenHandler} from "../../instance/module/ITreasury.sol";
         | 
| 9 9 | 
             
            import {ISetup} from "../module/ISetup.sol";
         | 
| 10 10 | 
             
            import {IPolicy} from "../module/IPolicy.sol";
         | 
| 11 11 |  | 
| 12 12 | 
             
            import {IVersionable} from "../../shared/IVersionable.sol";
         | 
| 13 | 
            -
            import {Versionable} from "../../shared/Versionable.sol";
         | 
| 14 13 | 
             
            import {INftOwnable} from "../../shared/INftOwnable.sol";
         | 
| 15 | 
            -
             | 
| 16 14 | 
             
            import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
         | 
| 17 15 | 
             
            import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
         | 
| 18 16 | 
             
            import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
         | 
| 17 | 
            +
            import {Pool} from "../../components/Pool.sol";
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            import {Amount, AmountLib} from "../../types/Amount.sol";
         | 
| 19 20 | 
             
            import {Fee, FeeLib} from "../../types/Fee.sol";
         | 
| 20 | 
            -
            import { | 
| 21 | 
            -
            import { | 
| 21 | 
            +
            import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../../types/StateId.sol";
         | 
| 22 | 
            +
            import {Seconds} from "../../types/Seconds.sol";
         | 
| 22 23 | 
             
            import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
         | 
| 24 | 
            +
            import {Version, VersionLib} from "../../types/Version.sol";
         | 
| 25 | 
            +
            import {Versionable} from "../../shared/Versionable.sol";
         | 
| 23 26 |  | 
| 24 27 | 
             
            import {IService} from "../../shared/IService.sol";
         | 
| 25 28 | 
             
            import {Service} from "../../shared/Service.sol";
         | 
| @@ -55,38 +58,85 @@ contract BundleService is | |
| 55 58 | 
             
                    (registryAddress, initialOwner) = abi.decode(data, (address, address));
         | 
| 56 59 | 
             
                    // TODO while PoolService is not deployed in PoolServiceManager constructor
         | 
| 57 60 | 
             
                    //      owner is PoolServiceManager deployer
         | 
| 58 | 
            -
                    initializeService(registryAddress, owner);
         | 
| 61 | 
            +
                    initializeService(registryAddress, address(0), owner);
         | 
| 59 62 | 
             
                    registerInterface(type(IBundleService).interfaceId);
         | 
| 60 63 | 
             
                }
         | 
| 61 64 |  | 
| 62 | 
            -
                function getDomain() public pure override | 
| 65 | 
            +
                function getDomain() public pure override returns(ObjectType) {
         | 
| 63 66 | 
             
                    return BUNDLE();
         | 
| 64 67 | 
             
                }
         | 
| 65 68 |  | 
| 66 | 
            -
                 | 
| 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 | 
            +
                    uint256 stakingAmount
         | 
| 79 | 
            +
                )
         | 
| 80 | 
            +
                    internal
         | 
| 81 | 
            +
                    returns (
         | 
| 82 | 
            +
                        TokenHandler tokenHandler,
         | 
| 83 | 
            +
                        address wallet,
         | 
| 84 | 
            +
                        uint256 netStakingAmount
         | 
| 85 | 
            +
                    )
         | 
| 86 | 
            +
                {
         | 
| 87 | 
            +
                    if(stakingAmount > 0) {
         | 
| 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 | 
            +
                        uint256 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 += netStakingAmount;
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                        if(poolFeeAmount > 0) {
         | 
| 104 | 
            +
                            poolInfo.feeAmount += poolFeeAmount;
         | 
| 105 | 
            +
                        }
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                        // save updated pool info
         | 
| 108 | 
            +
                        componentInfo.data = abi.encode(poolInfo);
         | 
| 109 | 
            +
                        instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
         | 
| 110 | 
            +
                    }
         | 
| 111 | 
            +
                }
         | 
| 112 | 
            +
             | 
| 113 | 
            +
             | 
| 114 | 
            +
                function create(
         | 
| 115 | 
            +
                    IInstance instance,
         | 
| 116 | 
            +
                    NftId poolNftId,
         | 
| 67 117 | 
             
                    address owner, 
         | 
| 68 118 | 
             
                    Fee memory fee, 
         | 
| 69 | 
            -
                     | 
| 70 | 
            -
                     | 
| 119 | 
            +
                    Amount stakingAmount, 
         | 
| 120 | 
            +
                    Seconds lifetime, 
         | 
| 71 121 | 
             
                    bytes calldata filter
         | 
| 72 122 | 
             
                )
         | 
| 73 123 | 
             
                    external
         | 
| 74 124 | 
             
                    override
         | 
| 125 | 
            +
                    // TODO add restricted and add authz for pool service
         | 
| 75 126 | 
             
                    returns(NftId bundleNftId)
         | 
| 76 127 | 
             
                {
         | 
| 77 | 
            -
                    (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 78 128 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 79 | 
            -
                    NftId poolNftId = info.nftId;
         | 
| 80 129 |  | 
| 130 | 
            +
                    // create initial bundle info
         | 
| 81 131 | 
             
                    IBundle.BundleInfo  memory bundleInfo = IBundle.BundleInfo(
         | 
| 82 132 | 
             
                        poolNftId,
         | 
| 83 133 | 
             
                        fee,
         | 
| 84 134 | 
             
                        filter,
         | 
| 85 135 | 
             
                        stakingAmount,
         | 
| 86 | 
            -
                         | 
| 87 | 
            -
                         | 
| 136 | 
            +
                        AmountLib.zero(),
         | 
| 137 | 
            +
                        AmountLib.zero(),
         | 
| 88 138 | 
             
                        lifetime,
         | 
| 89 | 
            -
                         | 
| 139 | 
            +
                        TimestampLib.blockTimestamp().addSeconds(lifetime),
         | 
| 90 140 | 
             
                        zeroTimestamp()
         | 
| 91 141 | 
             
                    );
         | 
| 92 142 |  | 
| @@ -99,100 +149,183 @@ contract BundleService is | |
| 99 149 | 
             
                            false, // intercepting property for bundles is defined on pool
         | 
| 100 150 | 
             
                            address(0),
         | 
| 101 151 | 
             
                            owner,
         | 
| 102 | 
            -
                             | 
| 152 | 
            +
                            "" // bundle data to be stored in registry
         | 
| 103 153 | 
             
                        )
         | 
| 104 154 | 
             
                    );
         | 
| 105 155 |  | 
| 106 156 | 
             
                    // create bundle info in instance
         | 
| 107 157 | 
             
                    instance.createBundle(bundleNftId, bundleInfo);
         | 
| 108 158 |  | 
| 159 | 
            +
                    // put bundle under bundle managemet
         | 
| 109 160 | 
             
                    BundleManager bundleManager = instance.getBundleManager();
         | 
| 110 161 | 
             
                    bundleManager.add(bundleNftId);
         | 
| 111 162 |  | 
| 112 | 
            -
                     | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
                         | 
| 116 | 
            -
                         | 
| 163 | 
            +
                    // transfer full staking amount to pool wallet
         | 
| 164 | 
            +
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 165 | 
            +
                    componentInfo.tokenHandler.transfer(
         | 
| 166 | 
            +
                        owner,
         | 
| 167 | 
            +
                        componentInfo.wallet,
         | 
| 168 | 
            +
                        stakingAmount.toInt()
         | 
| 169 | 
            +
                    );
         | 
| 117 170 |  | 
| 118 171 | 
             
                    // TODO add logging
         | 
| 119 172 | 
             
                }
         | 
| 120 173 |  | 
| 121 | 
            -
                function  | 
| 174 | 
            +
                function setFee(
         | 
| 122 175 | 
             
                    NftId bundleNftId,
         | 
| 123 176 | 
             
                    Fee memory fee
         | 
| 124 177 | 
             
                )
         | 
| 125 178 | 
             
                    external
         | 
| 126 179 | 
             
                    override
         | 
| 127 180 | 
             
                {
         | 
| 128 | 
            -
                    (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 181 | 
            +
                    (NftId poolNftId, IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 129 182 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 130 | 
            -
                    NftId poolNftId = info.nftId;
         | 
| 131 183 |  | 
| 132 184 | 
             
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 133 | 
            -
                     | 
| 134 | 
            -
             | 
| 185 | 
            +
                    if(bundleInfo.poolNftId.eqz()) {
         | 
| 186 | 
            +
                        revert ErrorBundleServiceBundleUnknown(bundleNftId);
         | 
| 187 | 
            +
                    }
         | 
| 188 | 
            +
             | 
| 189 | 
            +
                    if(bundleInfo.poolNftId != poolNftId) {
         | 
| 190 | 
            +
                        revert ErrorBundleServiceBundlePoolMismatch(poolNftId, bundleInfo.poolNftId );
         | 
| 191 | 
            +
                    }
         | 
| 135 192 |  | 
| 136 193 | 
             
                    bundleInfo.fee = fee;
         | 
| 137 194 |  | 
| 138 195 | 
             
                    instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
         | 
| 139 196 | 
             
                }
         | 
| 140 197 |  | 
| 141 | 
            -
             | 
| 198 | 
            +
             | 
| 199 | 
            +
                // the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
         | 
| 200 | 
            +
                function lockCollateral(
         | 
| 201 | 
            +
                    IInstance instance,
         | 
| 202 | 
            +
                    NftId policyNftId, 
         | 
| 203 | 
            +
                    NftId bundleNftId, 
         | 
| 204 | 
            +
                    uint256 collateralAmount, // required amount to collateralize policy
         | 
| 205 | 
            +
                    uint256 premiumAmount // premium part that reaches bundle for this policy
         | 
| 206 | 
            +
                ) 
         | 
| 142 207 | 
             
                    external
         | 
| 143 | 
            -
                    onlyService
         | 
| 208 | 
            +
                    onlyService // TODO replace with restricted + appropriate granting
         | 
| 144 209 | 
             
                {
         | 
| 145 | 
            -
                     | 
| 146 | 
            -
                     | 
| 147 | 
            -
                     | 
| 148 | 
            -
             | 
| 210 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 211 | 
            +
                    StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
         | 
| 212 | 
            +
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 213 | 
            +
             | 
| 214 | 
            +
                    // ensure bundle is active and not yet expired
         | 
| 215 | 
            +
                    if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
         | 
| 216 | 
            +
                        revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
         | 
| 217 | 
            +
                    }
         | 
| 218 | 
            +
             | 
| 219 | 
            +
                    // ensure bundle capacity is sufficent to collateralize policy
         | 
| 220 | 
            +
                    uint capacity = bundleInfo.capitalAmount.toInt() + premiumAmount - bundleInfo.lockedAmount.toInt();
         | 
| 221 | 
            +
                    if(capacity < collateralAmount) {
         | 
| 222 | 
            +
                        revert ErrorBundleServiceCapacityInsufficient(bundleNftId, capacity, collateralAmount);
         | 
| 223 | 
            +
                    }
         | 
| 224 | 
            +
             | 
| 225 | 
            +
                    // TODO add more validation
         | 
| 226 | 
            +
                    
         | 
| 227 | 
            +
                    // updated locked amount
         | 
| 228 | 
            +
                    bundleInfo.lockedAmount = AmountLib.toAmount(bundleInfo.lockedAmount.toInt() + collateralAmount);
         | 
| 149 229 |  | 
| 150 | 
            -
             | 
| 230 | 
            +
                    // update capital and fees when premiums are involved
         | 
| 231 | 
            +
                    _updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
         | 
| 232 | 
            +
                    
         | 
| 233 | 
            +
                    // link policy to bundle in bundle manger
         | 
| 234 | 
            +
                    _linkPolicy(instance, policyNftId);
         | 
| 235 | 
            +
                }
         | 
| 236 | 
            +
             | 
| 237 | 
            +
             | 
| 238 | 
            +
                function _updateBundleWithPremium(
         | 
| 239 | 
            +
                    IInstance instance,
         | 
| 240 | 
            +
                    NftId bundleNftId,
         | 
| 241 | 
            +
                    IBundle.BundleInfo memory bundleInfo,
         | 
| 242 | 
            +
                    uint256 premiumAmount
         | 
| 243 | 
            +
                )
         | 
| 244 | 
            +
                    internal
         | 
| 245 | 
            +
                {
         | 
| 246 | 
            +
                    // update bundle capital and fee amounts
         | 
| 247 | 
            +
                    if(premiumAmount > 0) {
         | 
| 248 | 
            +
                        // calculate fees and net premium amounts
         | 
| 249 | 
            +
                        (
         | 
| 250 | 
            +
                            uint256 feeAmount, 
         | 
| 251 | 
            +
                            uint256 netPremiumAmount
         | 
| 252 | 
            +
                        ) = FeeLib.calculateFee(bundleInfo.fee, premiumAmount);
         | 
| 253 | 
            +
             | 
| 254 | 
            +
                        // update bundle info with additional capital
         | 
| 255 | 
            +
                        bundleInfo.capitalAmount = AmountLib.toAmount(bundleInfo.capitalAmount.toInt() + netPremiumAmount);
         | 
| 256 | 
            +
             | 
| 257 | 
            +
                        // update bundle info with additional fees
         | 
| 258 | 
            +
                        if(feeAmount > 0) {
         | 
| 259 | 
            +
                            bundleInfo.feeAmount = AmountLib.toAmount(bundleInfo.feeAmount.toInt() + feeAmount);
         | 
| 260 | 
            +
                        }
         | 
| 261 | 
            +
                    }
         | 
| 262 | 
            +
             | 
| 263 | 
            +
                    // save updated bundle info
         | 
| 264 | 
            +
                    instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
         | 
| 265 | 
            +
                }
         | 
| 266 | 
            +
             | 
| 267 | 
            +
             | 
| 268 | 
            +
                function lock(NftId bundleNftId) 
         | 
| 151 269 | 
             
                    external
         | 
| 270 | 
            +
                    virtual
         | 
| 152 271 | 
             
                {
         | 
| 153 | 
            -
                    ( | 
| 272 | 
            +
                    (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 273 | 
            +
             | 
| 274 | 
            +
                    // udpate bundle state
         | 
| 275 | 
            +
                    instance.updateBundleState(bundleNftId, PAUSED());
         | 
| 276 | 
            +
             | 
| 277 | 
            +
                    // update set of active bundles
         | 
| 154 278 | 
             
                    BundleManager bundleManager = instance.getBundleManager();
         | 
| 155 279 | 
             
                    bundleManager.lock(bundleNftId);
         | 
| 280 | 
            +
             | 
| 281 | 
            +
                    emit LogBundleServiceBundleLocked(bundleNftId);
         | 
| 156 282 | 
             
                }
         | 
| 157 283 |  | 
| 158 | 
            -
             | 
| 284 | 
            +
             | 
| 285 | 
            +
                function unlock(NftId bundleNftId) 
         | 
| 159 286 | 
             
                    external
         | 
| 287 | 
            +
                    virtual
         | 
| 160 288 | 
             
                {
         | 
| 161 | 
            -
                    ( | 
| 289 | 
            +
                    (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 290 | 
            +
             | 
| 291 | 
            +
                    // udpate bundle state
         | 
| 292 | 
            +
                    instance.updateBundleState(bundleNftId, ACTIVE());
         | 
| 293 | 
            +
             | 
| 294 | 
            +
                    // update set of active bundles
         | 
| 162 295 | 
             
                    BundleManager bundleManager = instance.getBundleManager();
         | 
| 163 296 | 
             
                    bundleManager.unlock(bundleNftId);
         | 
| 297 | 
            +
             | 
| 298 | 
            +
                    emit LogBundleServiceBundleActivated(bundleNftId);
         | 
| 164 299 | 
             
                }
         | 
| 165 300 |  | 
| 166 | 
            -
             | 
| 301 | 
            +
             | 
| 302 | 
            +
                function close(
         | 
| 167 303 | 
             
                    IInstance instance,
         | 
| 168 | 
            -
                    NftId  | 
| 169 | 
            -
                    NftId bundleNftId, 
         | 
| 170 | 
            -
                    uint256 collateralAmount,
         | 
| 171 | 
            -
                    uint256 netPremiumAmount
         | 
| 304 | 
            +
                    NftId bundleNftId
         | 
| 172 305 | 
             
                ) 
         | 
| 173 306 | 
             
                    external
         | 
| 174 | 
            -
                     | 
| 175 | 
            -
                     | 
| 176 | 
            -
                        IBundle.BundleInfo memory bundleInfo
         | 
| 177 | 
            -
                    )
         | 
| 307 | 
            +
                    virtual
         | 
| 308 | 
            +
                    // TODO add restricted and autz for pool service
         | 
| 178 309 | 
             
                {
         | 
| 179 | 
            -
                     | 
| 180 | 
            -
                     | 
| 310 | 
            +
                    // udpate bundle state
         | 
| 311 | 
            +
                    instance.updateBundleState(bundleNftId, CLOSED());
         | 
| 181 312 |  | 
| 182 | 
            -
                    //  | 
| 183 | 
            -
             | 
| 184 | 
            -
                     | 
| 185 | 
            -
                     | 
| 186 | 
            -
             | 
| 313 | 
            +
                    // ensure no open policies attached to bundle
         | 
| 314 | 
            +
                    BundleManager bundleManager = instance.getBundleManager();
         | 
| 315 | 
            +
                    uint256 openPolicies = bundleManager.activePolicies(bundleNftId);
         | 
| 316 | 
            +
                    if(openPolicies > 0) {
         | 
| 317 | 
            +
                        revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
         | 
| 318 | 
            +
                    }
         | 
| 187 319 |  | 
| 188 | 
            -
                     | 
| 189 | 
            -
                    
         | 
| 190 | 
            -
                    linkPolicy(instance, policyNftId);
         | 
| 320 | 
            +
                    // update set of active bundles
         | 
| 321 | 
            +
                    bundleManager.lock(bundleNftId);
         | 
| 191 322 | 
             
                }
         | 
| 192 323 |  | 
| 193 | 
            -
             | 
| 324 | 
            +
             | 
| 325 | 
            +
                function increaseBalance(
         | 
| 326 | 
            +
                    IInstance instance,
         | 
| 194 327 | 
             
                    NftId bundleNftId, 
         | 
| 195 | 
            -
                    uint256  | 
| 328 | 
            +
                    uint256 premiumAmount
         | 
| 196 329 | 
             
                ) 
         | 
| 197 330 | 
             
                    external
         | 
| 198 331 | 
             
                    onlyService 
         | 
| @@ -200,12 +333,13 @@ contract BundleService is | |
| 200 333 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 201 334 | 
             
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 202 335 |  | 
| 203 | 
            -
                     | 
| 336 | 
            +
                    // update capital and fees when premiums are involved
         | 
| 337 | 
            +
                    _updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
         | 
| 204 338 |  | 
| 205 | 
            -
                     | 
| 339 | 
            +
                    // TODO add logging (?)
         | 
| 206 340 | 
             
                }
         | 
| 207 341 |  | 
| 208 | 
            -
                function  | 
| 342 | 
            +
                function releaseCollateral(IInstance instance,
         | 
| 209 343 | 
             
                    NftId policyNftId, 
         | 
| 210 344 | 
             
                    NftId bundleNftId, 
         | 
| 211 345 | 
             
                    uint256 collateralAmount
         | 
| @@ -216,25 +350,24 @@ contract BundleService is | |
| 216 350 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 217 351 | 
             
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 218 352 |  | 
| 219 | 
            -
                    //  | 
| 220 | 
            -
                    bundleInfo.lockedAmount  | 
| 353 | 
            +
                    // reduce locked amount by released collateral amount
         | 
| 354 | 
            +
                    bundleInfo.lockedAmount = AmountLib.toAmount(bundleInfo.lockedAmount.toInt() - collateralAmount);
         | 
| 221 355 |  | 
| 222 356 | 
             
                    instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
         | 
| 223 357 |  | 
| 224 | 
            -
                     | 
| 358 | 
            +
                    _unlinkPolicy(instance, policyNftId);
         | 
| 225 359 | 
             
                }
         | 
| 226 360 |  | 
| 227 361 | 
             
                /// @dev links policy to bundle
         | 
| 228 | 
            -
                function  | 
| 362 | 
            +
                function _linkPolicy(IInstance instance, NftId policyNftId) 
         | 
| 229 363 | 
             
                    internal
         | 
| 230 | 
            -
                    onlyService 
         | 
| 231 364 | 
             
                {
         | 
| 232 365 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 233 366 | 
             
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         | 
| 234 367 |  | 
| 235 | 
            -
                    // ensure policy has not yet been activated
         | 
| 236 | 
            -
                    if (policyInfo.activatedAt.gtz()) {
         | 
| 237 | 
            -
                        revert BundleManager. | 
| 368 | 
            +
                    // ensure policy has not yet been activated in a previous tx already
         | 
| 369 | 
            +
                    if (policyInfo.activatedAt.gtz() && policyInfo.activatedAt < TimestampLib.blockTimestamp()) {
         | 
| 370 | 
            +
                        revert BundleManager.ErrorBundleManagerPolicyAlreadyActivated(policyNftId);
         | 
| 238 371 | 
             
                    }
         | 
| 239 372 |  | 
| 240 373 | 
             
                    BundleManager bundleManager = instance.getBundleManager();
         | 
| @@ -242,9 +375,8 @@ contract BundleService is | |
| 242 375 | 
             
                }
         | 
| 243 376 |  | 
| 244 377 | 
             
                    /// @dev unlinks policy from bundle
         | 
| 245 | 
            -
                function  | 
| 378 | 
            +
                function _unlinkPolicy(IInstance instance, NftId policyNftId) 
         | 
| 246 379 | 
             
                    internal
         | 
| 247 | 
            -
                    onlyService 
         | 
| 248 380 | 
             
                {
         | 
| 249 381 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 250 382 | 
             
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         | 
| @@ -258,7 +390,7 @@ contract BundleService is | |
| 258 390 |  | 
| 259 391 | 
             
                    // ensure policy is closeable
         | 
| 260 392 | 
             
                    if ( TimestampLib.blockTimestamp() < policyInfo.expiredAt
         | 
| 261 | 
            -
                        && policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
         | 
| 393 | 
            +
                        && policyInfo.payoutAmount.toInt() < policyInfo.sumInsuredAmount)
         | 
| 262 394 | 
             
                    {
         | 
| 263 395 | 
             
                        revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
         | 
| 264 396 | 
             
                    }
         | 
| @@ -267,32 +399,38 @@ contract BundleService is | |
| 267 399 | 
             
                    bundleManager.unlinkPolicy(policyNftId);
         | 
| 268 400 | 
             
                }
         | 
| 269 401 |  | 
| 402 | 
            +
                // TODO move this to pool service
         | 
| 270 403 | 
             
                function _processStakingByTreasury(
         | 
| 271 404 | 
             
                    InstanceReader instanceReader,
         | 
| 272 405 | 
             
                    NftId poolNftId,
         | 
| 273 406 | 
             
                    NftId bundleNftId,
         | 
| 274 | 
            -
                     | 
| 407 | 
            +
                    Amount stakingAmount
         | 
| 275 408 | 
             
                )
         | 
| 276 409 | 
             
                    internal
         | 
| 277 410 | 
             
                {
         | 
| 278 411 | 
             
                    // process token transfer(s)
         | 
| 279 | 
            -
                    if(stakingAmount | 
| 280 | 
            -
                         | 
| 281 | 
            -
                         | 
| 412 | 
            +
                    if(stakingAmount.gtz()) {
         | 
| 413 | 
            +
                        IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 414 | 
            +
                        IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
         | 
| 415 | 
            +
             | 
| 416 | 
            +
                        TokenHandler tokenHandler = componentInfo.tokenHandler;
         | 
| 282 417 | 
             
                        address bundleOwner = getRegistry().ownerOf(bundleNftId);
         | 
| 283 418 | 
             
                        Fee memory stakingFee = poolInfo.stakingFee;
         | 
| 284 419 |  | 
| 285 | 
            -
                         | 
| 286 | 
            -
             | 
| 287 | 
            -
                             | 
| 288 | 
            -
                            stakingAmount
         | 
| 289 | 
            -
                        );
         | 
| 420 | 
            +
                        // pool fee and bundle capital book keeping
         | 
| 421 | 
            +
                        if (FeeLib.gtz(stakingFee)) {
         | 
| 422 | 
            +
                            (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount.toInt());
         | 
| 290 423 |  | 
| 291 424 |  | 
| 292 | 
            -
                        if (! FeeLib.feeIsZero(stakingFee)) {
         | 
| 293 | 
            -
                            (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
         | 
| 294 425 | 
             
                            // TODO: track staking fees in pool's state (issue #177)
         | 
| 295 426 | 
             
                        }
         | 
| 427 | 
            +
             | 
| 428 | 
            +
                        // transfer full staking amount to pool wallet
         | 
| 429 | 
            +
                        tokenHandler.transfer(
         | 
| 430 | 
            +
                            bundleOwner,
         | 
| 431 | 
            +
                            componentInfo.wallet,
         | 
| 432 | 
            +
                            stakingAmount.toInt()
         | 
| 433 | 
            +
                        );
         | 
| 296 434 | 
             
                    }
         | 
| 297 435 | 
             
                }
         | 
| 298 436 | 
             
            }
         |