@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
| @@ -6,25 +6,30 @@ import {IRegistry} from "../../registry/IRegistry.sol"; | |
| 6 6 | 
             
            import {IInstance} from "../../instance/IInstance.sol";
         | 
| 7 7 | 
             
            import {IBundle} from "../../instance/module/IBundle.sol";
         | 
| 8 8 | 
             
            import {TokenHandler} from "../../instance/module/ITreasury.sol";
         | 
| 9 | 
            -
            import { | 
| 9 | 
            +
            import {IComponents} from "../module/IComponents.sol";
         | 
| 10 10 | 
             
            import {IPolicy} from "../module/IPolicy.sol";
         | 
| 11 11 |  | 
| 12 12 | 
             
            import {IVersionable} from "../../shared/IVersionable.sol";
         | 
| 13 13 | 
             
            import {Versionable} from "../../shared/Versionable.sol";
         | 
| 14 14 | 
             
            import {INftOwnable} from "../../shared/INftOwnable.sol";
         | 
| 15 15 |  | 
| 16 | 
            +
            import {Amount} from "../../types/Amount.sol";
         | 
| 17 | 
            +
            import {Fee, FeeLib} from "../../types/Fee.sol";
         | 
| 16 18 | 
             
            import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
         | 
| 17 19 | 
             
            import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
         | 
| 18 | 
            -
            import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
         | 
| 20 | 
            +
            import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../../types/RoleId.sol";
         | 
| 19 21 | 
             
            import {Fee, FeeLib} from "../../types/Fee.sol";
         | 
| 20 22 | 
             
            import {Version, VersionLib} from "../../types/Version.sol";
         | 
| 21 23 | 
             
            import {KEEP_STATE, StateId} from "../../types/StateId.sol";
         | 
| 24 | 
            +
            import {Seconds} from "../../types/Seconds.sol";
         | 
| 22 25 | 
             
            import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
         | 
| 26 | 
            +
            import {Version, VersionLib} from "../../types/Version.sol";
         | 
| 23 27 |  | 
| 24 28 | 
             
            import {IService} from "../../shared/IService.sol";
         | 
| 25 29 | 
             
            import {Service} from "../../shared/Service.sol";
         | 
| 26 30 | 
             
            import {BundleManager} from "../BundleManager.sol";
         | 
| 27 31 | 
             
            import {ComponentService} from "../base/ComponentService.sol";
         | 
| 32 | 
            +
            import {IBundleService} from "./IBundleService.sol";
         | 
| 28 33 | 
             
            import {IPoolService} from "./IPoolService.sol";
         | 
| 29 34 | 
             
            import {IRegistryService} from "../../registry/IRegistryService.sol";
         | 
| 30 35 | 
             
            import {InstanceService} from "../InstanceService.sol";
         | 
| @@ -40,7 +45,7 @@ contract PoolService is | |
| 40 45 | 
             
            {
         | 
| 41 46 | 
             
                using NftIdLib for NftId;
         | 
| 42 47 |  | 
| 43 | 
            -
                 | 
| 48 | 
            +
                IBundleService internal _bundleService;
         | 
| 44 49 |  | 
| 45 50 | 
             
                function _initialize(
         | 
| 46 51 | 
             
                    address owner, 
         | 
| @@ -55,11 +60,14 @@ contract PoolService is | |
| 55 60 | 
             
                    (registryAddress, initialOwner) = abi.decode(data, (address, address));
         | 
| 56 61 | 
             
                    // TODO while PoolService is not deployed in PoolServiceManager constructor
         | 
| 57 62 | 
             
                    //      owner is PoolServiceManager deployer
         | 
| 58 | 
            -
                    initializeService(registryAddress, owner);
         | 
| 63 | 
            +
                    initializeService(registryAddress, address(0), owner);
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                    _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart()));
         | 
| 66 | 
            +
             | 
| 59 67 | 
             
                    registerInterface(type(IPoolService).interfaceId);
         | 
| 60 68 | 
             
                }
         | 
| 61 69 |  | 
| 62 | 
            -
                function getDomain() public pure override | 
| 70 | 
            +
                function getDomain() public pure override returns(ObjectType) {
         | 
| 63 71 | 
             
                    return POOL();
         | 
| 64 72 | 
             
                }
         | 
| 65 73 |  | 
| @@ -78,32 +86,218 @@ contract PoolService is | |
| 78 86 | 
             
                        POOL_OWNER_ROLE());
         | 
| 79 87 |  | 
| 80 88 | 
             
                    IPoolComponent pool = IPoolComponent(poolAddress);
         | 
| 81 | 
            -
                    IRegistry.ObjectInfo memory  | 
| 89 | 
            +
                    IRegistry.ObjectInfo memory registryInfo = getRegistryService().registerPool(pool, owner);
         | 
| 82 90 | 
             
                    pool.linkToRegisteredNftId();
         | 
| 83 | 
            -
                    poolNftId =  | 
| 91 | 
            +
                    poolNftId = registryInfo.nftId;
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                    // amend component info with pool specific token handler
         | 
| 94 | 
            +
                    IComponents.ComponentInfo memory componentInfo = pool.getComponentInfo();
         | 
| 95 | 
            +
                    componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                    // save amended component info with instance
         | 
| 98 | 
            +
                    instance.createPoolSetup(poolNftId, componentInfo);
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                    bytes4[][] memory selectors = new bytes4[][](2);
         | 
| 101 | 
            +
                    selectors[0] = new bytes4[](1);
         | 
| 102 | 
            +
                    selectors[1] = new bytes4[](1);
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                    selectors[0][0] = IPoolComponent.setFees.selector;
         | 
| 105 | 
            +
                    selectors[1][0] = IPoolComponent.verifyApplication.selector;
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                    RoleId[] memory roles = new RoleId[](2);
         | 
| 108 | 
            +
                    roles[0] = POOL_OWNER_ROLE();
         | 
| 109 | 
            +
                    roles[1] = POLICY_SERVICE_ROLE();
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                    getInstanceService().createGifTarget(
         | 
| 112 | 
            +
                        instanceNftId, 
         | 
| 113 | 
            +
                        poolAddress, 
         | 
| 114 | 
            +
                        pool.getName(), 
         | 
| 115 | 
            +
                        selectors, 
         | 
| 116 | 
            +
                        roles);
         | 
| 117 | 
            +
                }
         | 
| 118 | 
            +
             | 
| 119 | 
            +
             | 
| 120 | 
            +
                function setMaxCapitalAmount(uint256 maxCapitalAmount)
         | 
| 121 | 
            +
                    external
         | 
| 122 | 
            +
                    virtual
         | 
| 123 | 
            +
                {
         | 
| 124 | 
            +
                    (NftId poolNftId, IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 125 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 128 | 
            +
                    IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
         | 
| 129 | 
            +
                    uint256 previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                    poolInfo.maxCapitalAmount = maxCapitalAmount;
         | 
| 132 | 
            +
                    componentInfo.data = abi.encode(poolInfo);
         | 
| 133 | 
            +
                    instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
         | 
| 84 134 |  | 
| 85 | 
            -
                     | 
| 86 | 
            -
                    getInstanceService().createGifTarget(instanceNftId, poolAddress, pool.getName());
         | 
| 87 | 
            -
                    getInstanceService().grantPoolDefaultPermissions(instanceNftId, poolAddress, pool.getName());
         | 
| 135 | 
            +
                    emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
         | 
| 88 136 | 
             
                }
         | 
| 89 137 |  | 
| 138 | 
            +
                function setBundleOwnerRole(RoleId bundleOwnerRole)
         | 
| 139 | 
            +
                    external
         | 
| 140 | 
            +
                    virtual
         | 
| 141 | 
            +
                {
         | 
| 142 | 
            +
                    (NftId poolNftId, IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 143 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 146 | 
            +
                    IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
         | 
| 147 | 
            +
             | 
| 148 | 
            +
                    // bundle owner role may only be set once per pool
         | 
| 149 | 
            +
                    if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
         | 
| 150 | 
            +
                        revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
         | 
| 151 | 
            +
                    }
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                    poolInfo.bundleOwnerRole = bundleOwnerRole;
         | 
| 154 | 
            +
                    componentInfo.data = abi.encode(poolInfo);
         | 
| 155 | 
            +
                    instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                    emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
         | 
| 158 | 
            +
                }
         | 
| 159 | 
            +
             | 
| 160 | 
            +
             | 
| 90 161 | 
             
                function setFees(
         | 
| 91 162 | 
             
                    Fee memory poolFee,
         | 
| 92 163 | 
             
                    Fee memory stakingFee,
         | 
| 93 164 | 
             
                    Fee memory performanceFee
         | 
| 94 165 | 
             
                )
         | 
| 95 166 | 
             
                    external
         | 
| 96 | 
            -
                     | 
| 167 | 
            +
                    virtual
         | 
| 97 168 | 
             
                {
         | 
| 98 | 
            -
                    (IRegistry.ObjectInfo memory  | 
| 169 | 
            +
                    (NftId poolNftId, IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 99 170 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
                     | 
| 103 | 
            -
             | 
| 104 | 
            -
                     | 
| 105 | 
            -
                     | 
| 106 | 
            -
                    
         | 
| 107 | 
            -
                     | 
| 171 | 
            +
             | 
| 172 | 
            +
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 173 | 
            +
                    IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                    poolInfo.poolFee = poolFee;
         | 
| 176 | 
            +
                    poolInfo.stakingFee = stakingFee;
         | 
| 177 | 
            +
                    poolInfo.performanceFee = performanceFee;
         | 
| 178 | 
            +
                    componentInfo.data = abi.encode(poolInfo);
         | 
| 179 | 
            +
                    instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
         | 
| 180 | 
            +
             | 
| 181 | 
            +
                    // TODO add logging
         | 
| 108 182 | 
             
                }
         | 
| 183 | 
            +
             | 
| 184 | 
            +
             | 
| 185 | 
            +
                function createBundle(
         | 
| 186 | 
            +
                    address owner, // initial bundle owner
         | 
| 187 | 
            +
                    Fee memory fee, // fees deducted from premium that go to bundle owner
         | 
| 188 | 
            +
                    Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
         | 
| 189 | 
            +
                    Seconds lifetime, // initial duration for which new policies are covered
         | 
| 190 | 
            +
                    bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
         | 
| 191 | 
            +
                )
         | 
| 192 | 
            +
                    external 
         | 
| 193 | 
            +
                    virtual
         | 
| 194 | 
            +
                    returns(NftId bundleNftId)
         | 
| 195 | 
            +
                {
         | 
| 196 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 197 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 198 | 
            +
             | 
| 199 | 
            +
                    // TODO add implementation that takes care of staking fees
         | 
| 200 | 
            +
                    Amount stakingAfterFeesAmount = stakingAmount;
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                    bundleNftId = _bundleService.create(
         | 
| 203 | 
            +
                        instance,
         | 
| 204 | 
            +
                        poolNftId,
         | 
| 205 | 
            +
                        owner,
         | 
| 206 | 
            +
                        fee,
         | 
| 207 | 
            +
                        stakingAfterFeesAmount,
         | 
| 208 | 
            +
                        lifetime,
         | 
| 209 | 
            +
                        filter);
         | 
| 210 | 
            +
             | 
| 211 | 
            +
                    emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
         | 
| 212 | 
            +
                }
         | 
| 213 | 
            +
             | 
| 214 | 
            +
             | 
| 215 | 
            +
                function closeBundle(NftId bundleNftId)
         | 
| 216 | 
            +
                    external
         | 
| 217 | 
            +
                    virtual
         | 
| 218 | 
            +
                {
         | 
| 219 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
         | 
| 220 | 
            +
             | 
| 221 | 
            +
                    // TODO book keeping for pool collateral released outside of retention level
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                    // releasing collateral in bundle
         | 
| 224 | 
            +
                    _bundleService.close(instance, bundleNftId);
         | 
| 225 | 
            +
             | 
| 226 | 
            +
                    // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                    emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
         | 
| 229 | 
            +
                }
         | 
| 230 | 
            +
             | 
| 231 | 
            +
             | 
| 232 | 
            +
                function lockCollateral(
         | 
| 233 | 
            +
                    IInstance instance, 
         | 
| 234 | 
            +
                    NftId productNftId,
         | 
| 235 | 
            +
                    NftId applicationNftId,
         | 
| 236 | 
            +
                    IPolicy.PolicyInfo memory applicationInfo,
         | 
| 237 | 
            +
                    uint256 premiumAmount // premium amount after product and distribution fees
         | 
| 238 | 
            +
                )
         | 
| 239 | 
            +
                    external
         | 
| 240 | 
            +
                    virtual
         | 
| 241 | 
            +
                    // TODO add restricted and granting for policy service
         | 
| 242 | 
            +
                {
         | 
| 243 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 244 | 
            +
                    NftId poolNftId = instanceReader.getProductSetupInfo(productNftId).poolNftId;
         | 
| 245 | 
            +
                    NftId bundleNftId = applicationInfo.bundleNftId;
         | 
| 246 | 
            +
             | 
| 247 | 
            +
                    // TODO move this check to application creation and don't repeat this here
         | 
| 248 | 
            +
                    // ensure that pool for bundle from application matches with pool for product of application
         | 
| 249 | 
            +
                    IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         | 
| 250 | 
            +
                    if(bundleInfo.poolNftId != poolNftId) {
         | 
| 251 | 
            +
                        revert ErrorPoolServiceBundlePoolMismatch(bundleInfo.poolNftId, poolNftId);
         | 
| 252 | 
            +
                    }
         | 
| 253 | 
            +
             | 
| 254 | 
            +
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 255 | 
            +
                    IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
         | 
| 256 | 
            +
             | 
| 257 | 
            +
                    // TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
         | 
| 258 | 
            +
                    uint256 collateralAmount = applicationInfo.sumInsuredAmount;
         | 
| 259 | 
            +
             | 
| 260 | 
            +
                    // TODO add correct net premium calculation (pool fee might be > 0)
         | 
| 261 | 
            +
                    uint256 premiumAfterPoolFeeAmount = premiumAmount;
         | 
| 262 | 
            +
             | 
| 263 | 
            +
                    // lock collateral amount from involvedd bundle
         | 
| 264 | 
            +
                    _bundleService.lockCollateral(
         | 
| 265 | 
            +
                        instance,
         | 
| 266 | 
            +
                        applicationNftId, 
         | 
| 267 | 
            +
                        bundleNftId,
         | 
| 268 | 
            +
                        collateralAmount,
         | 
| 269 | 
            +
                        premiumAfterPoolFeeAmount);
         | 
| 270 | 
            +
             | 
| 271 | 
            +
                    // also verify/confirm application by pool if necessary
         | 
| 272 | 
            +
                    if(poolInfo.isVerifyingApplications) {
         | 
| 273 | 
            +
                        address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
         | 
| 274 | 
            +
                        IPoolComponent(poolAddress).verifyApplication(
         | 
| 275 | 
            +
                            applicationNftId, 
         | 
| 276 | 
            +
                            applicationInfo.applicationData, 
         | 
| 277 | 
            +
                            bundleNftId,
         | 
| 278 | 
            +
                            bundleInfo.filter,
         | 
| 279 | 
            +
                            collateralAmount);
         | 
| 280 | 
            +
                    }
         | 
| 281 | 
            +
                }
         | 
| 282 | 
            +
             | 
| 283 | 
            +
             | 
| 284 | 
            +
                /// @dev releases the remaining collateral linked to the specified policy
         | 
| 285 | 
            +
                /// may only be called by the policy service for unlocked pool components
         | 
| 286 | 
            +
                function releaseCollateral(
         | 
| 287 | 
            +
                    IInstance instance, 
         | 
| 288 | 
            +
                    NftId policyNftId, 
         | 
| 289 | 
            +
                    IPolicy.PolicyInfo memory policyInfo
         | 
| 290 | 
            +
                )
         | 
| 291 | 
            +
                    external
         | 
| 292 | 
            +
                    virtual
         | 
| 293 | 
            +
                    // TODO add restricted and granting for policy service
         | 
| 294 | 
            +
                {
         | 
| 295 | 
            +
                    // release collateral from involved bundle
         | 
| 296 | 
            +
                    _bundleService.releaseCollateral(
         | 
| 297 | 
            +
                        instance, 
         | 
| 298 | 
            +
                        policyNftId, 
         | 
| 299 | 
            +
                        policyInfo.bundleNftId, 
         | 
| 300 | 
            +
                        policyInfo.sumInsuredAmount);
         | 
| 301 | 
            +
                }
         | 
| 302 | 
            +
             | 
| 109 303 | 
             
            }
         | 
| @@ -24,7 +24,7 @@ import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol"; | |
| 24 24 | 
             
            import {UFixed, UFixedLib} from "../../types/UFixed.sol";
         | 
| 25 25 | 
             
            import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
         | 
| 26 26 | 
             
            import {ObjectType, PRODUCT, POOL, POLICY} from "../../types/ObjectType.sol";
         | 
| 27 | 
            -
            import {APPLIED,  | 
| 27 | 
            +
            import {APPLIED, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
         | 
| 28 28 | 
             
            import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
         | 
| 29 29 | 
             
            import {Fee, FeeLib} from "../../types/Fee.sol";
         | 
| 30 30 | 
             
            import {ReferralId} from "../../types/Referral.sol";
         | 
| @@ -60,9 +60,9 @@ contract ProductService is ComponentService, IProductService { | |
| 60 60 | 
             
                    address initialOwner;
         | 
| 61 61 | 
             
                    (registryAddress, initialOwner) = abi.decode(data, (address, address));
         | 
| 62 62 |  | 
| 63 | 
            -
                    initializeService(registryAddress, owner);
         | 
| 63 | 
            +
                    initializeService(registryAddress, address(0), owner);
         | 
| 64 64 |  | 
| 65 | 
            -
                    _poolService = IPoolService(getRegistry().getServiceAddress(POOL(),  | 
| 65 | 
            +
                    _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
         | 
| 66 66 |  | 
| 67 67 | 
             
                    registerInterface(type(IProductService).interfaceId);
         | 
| 68 68 | 
             
                }
         | 
| @@ -113,15 +113,23 @@ contract ProductService is ComponentService, IProductService { | |
| 113 113 | 
             
                    // create product setup in instance
         | 
| 114 114 | 
             
                    instance.createProductSetup(productNftId, product.getSetupInfo());
         | 
| 115 115 |  | 
| 116 | 
            +
                    bytes4[][] memory selectors = new bytes4[][](1);
         | 
| 117 | 
            +
                    selectors[0] = new bytes4[](1);
         | 
| 118 | 
            +
                    selectors[0][0] = IProductComponent.setFees.selector;
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                    RoleId[] memory roles = new RoleId[](1);
         | 
| 121 | 
            +
                    roles[0] = PRODUCT_OWNER_ROLE();
         | 
| 122 | 
            +
             | 
| 116 123 | 
             
                    // create target for instane access manager
         | 
| 117 124 | 
             
                    getInstanceService().createGifTarget(
         | 
| 118 125 | 
             
                        getRegistry().getNftId(address(instance)), 
         | 
| 119 126 | 
             
                        address(product), 
         | 
| 120 | 
            -
                        product.getName() | 
| 121 | 
            -
             | 
| 127 | 
            +
                        product.getName(),
         | 
| 128 | 
            +
                        selectors,
         | 
| 129 | 
            +
                        roles);
         | 
| 122 130 | 
             
                }
         | 
| 123 131 |  | 
| 124 | 
            -
                function getDomain() public pure override | 
| 132 | 
            +
                function getDomain() public pure override returns(ObjectType) {
         | 
| 125 133 | 
             
                    return PRODUCT();
         | 
| 126 134 | 
             
                }
         | 
| 127 135 |  | 
| @@ -139,38 +147,6 @@ contract ProductService is ComponentService, IProductService { | |
| 139 147 | 
             
                    // if(wallet == address(0)) {
         | 
| 140 148 | 
             
                    //     revert WalletIsZero();
         | 
| 141 149 | 
             
                    // }
         | 
| 142 | 
            -
             | 
| 143 | 
            -
                    // IRegistry.ObjectInfo memory tokenInfo = getRegistry().getObjectInfo(address(info.token));
         | 
| 144 | 
            -
             | 
| 145 | 
            -
                    // if(tokenInfo.objectType != TOKEN()) {
         | 
| 146 | 
            -
                    //     revert InvalidToken();
         | 
| 147 | 
            -
                    // } 
         | 
| 148 | 
            -
             | 
| 149 | 
            -
                    // IRegistry.ObjectInfo memory poolInfo = getRegistry().getObjectInfo(info.poolNftId);
         | 
| 150 | 
            -
             | 
| 151 | 
            -
                    // if(poolInfo.objectType != POOL()) {
         | 
| 152 | 
            -
                    //     revert InvalidPool();
         | 
| 153 | 
            -
                    // }
         | 
| 154 | 
            -
             | 
| 155 | 
            -
                    // if(poolInfo.parentNftId != instanceNftId) {
         | 
| 156 | 
            -
                    //     revert InvalidPoolsInstance();
         | 
| 157 | 
            -
                    // }
         | 
| 158 | 
            -
                    // // TODO pool have the same token
         | 
| 159 | 
            -
                    // //ITreasury.PoolSetup memory poolSetup = instance.getPoolSetup(info.poolNftId);
         | 
| 160 | 
            -
                    // //require(tokenInfo.objectAddress == address(poolSetup.token), "ERROR:COS-018:PRODUCT_POOL_TOKEN_MISMATCH");
         | 
| 161 | 
            -
                    // // TODO pool is not linked
         | 
| 162 | 
            -
             | 
| 163 | 
            -
                    // IRegistry.ObjectInfo memory distributionInfo = getRegistry().getObjectInfo(info.distributionNftId);
         | 
| 164 | 
            -
             | 
| 165 | 
            -
                    // if(distributionInfo.objectType != DISTRIBUTION()) {
         | 
| 166 | 
            -
                    //     revert  InvalidDistribution();
         | 
| 167 | 
            -
                    // } 
         | 
| 168 | 
            -
             | 
| 169 | 
            -
                    // if(distributionInfo.parentNftId != instanceNftId) {
         | 
| 170 | 
            -
                    //     revert InvalidDistributionsInstance();
         | 
| 171 | 
            -
                    // }
         | 
| 172 | 
            -
                    // // TODO distribution have the same token
         | 
| 173 | 
            -
                    // // TODO distribution is not linked
         | 
| 174 150 | 
             
                }
         | 
| 175 151 |  | 
| 176 152 | 
             
                function setFees(
         | 
| @@ -181,13 +157,9 @@ contract ProductService is ComponentService, IProductService { | |
| 181 157 | 
             
                {
         | 
| 182 158 | 
             
                    // TODO check args 
         | 
| 183 159 |  | 
| 184 | 
            -
                    (
         | 
| 185 | 
            -
                        IRegistry.ObjectInfo memory productInfo, 
         | 
| 186 | 
            -
                        IInstance instance
         | 
| 187 | 
            -
                    ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         | 
| 188 | 
            -
             | 
| 160 | 
            +
                    (NftId productNftId, IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         | 
| 189 161 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 190 | 
            -
             | 
| 162 | 
            +
             | 
| 191 163 | 
             
                    ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
         | 
| 192 164 |  | 
| 193 165 | 
             
                    productSetupInfo.productFee = productFee;
         | 
| @@ -199,13 +171,13 @@ contract ProductService is ComponentService, IProductService { | |
| 199 171 | 
             
                function createRisk(
         | 
| 200 172 | 
             
                    RiskId riskId,
         | 
| 201 173 | 
             
                    bytes memory data
         | 
| 202 | 
            -
                ) | 
| 203 | 
            -
                     | 
| 204 | 
            -
             | 
| 205 | 
            -
             | 
| 206 | 
            -
                    ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         | 
| 207 | 
            -
                    NftId productNftId = productInfo.nftId;
         | 
| 174 | 
            +
                )
         | 
| 175 | 
            +
                    external 
         | 
| 176 | 
            +
                    override
         | 
| 177 | 
            +
                {
         | 
| 178 | 
            +
                    (NftId productNftId, IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         | 
| 208 179 | 
             
                    IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
         | 
| 180 | 
            +
             | 
| 209 181 | 
             
                    instance.createRisk(
         | 
| 210 182 | 
             
                        riskId,
         | 
| 211 183 | 
             
                        riskInfo
         | 
| @@ -215,9 +187,12 @@ contract ProductService is ComponentService, IProductService { | |
| 215 187 | 
             
                function updateRisk(
         | 
| 216 188 | 
             
                    RiskId riskId,
         | 
| 217 189 | 
             
                    bytes memory data
         | 
| 218 | 
            -
                ) | 
| 219 | 
            -
                     | 
| 190 | 
            +
                )
         | 
| 191 | 
            +
                    external
         | 
| 192 | 
            +
                {
         | 
| 193 | 
            +
                    (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         | 
| 220 194 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 195 | 
            +
             | 
| 221 196 | 
             
                    IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
         | 
| 222 197 | 
             
                    riskInfo.data = data;
         | 
| 223 198 | 
             
                    instance.updateRisk(riskId, riskInfo, KEEP_STATE());
         | 
| @@ -226,8 +201,10 @@ contract ProductService is ComponentService, IProductService { | |
| 226 201 | 
             
                function updateRiskState(
         | 
| 227 202 | 
             
                    RiskId riskId,
         | 
| 228 203 | 
             
                    StateId state
         | 
| 229 | 
            -
                ) | 
| 230 | 
            -
                     | 
| 204 | 
            +
                )
         | 
| 205 | 
            +
                    external
         | 
| 206 | 
            +
                {
         | 
| 207 | 
            +
                    (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         | 
| 231 208 | 
             
                    instance.updateRiskState(riskId, state);
         | 
| 232 209 | 
             
                }
         | 
| 233 210 | 
             
            }
         | 
| @@ -95,6 +95,10 @@ contract ChainNft is ERC721Enumerable { | |
| 95 95 |  | 
| 96 96 | 
             
                    _totalMinted++;
         | 
| 97 97 | 
             
                    _safeMint(to, tokenId);
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                    if(interceptor != address(0)) {
         | 
| 100 | 
            +
                        ITransferInterceptor(interceptor).nftMint(to, tokenId);
         | 
| 101 | 
            +
                    }
         | 
| 98 102 | 
             
                }
         | 
| 99 103 |  | 
| 100 104 |  | 
| @@ -195,6 +199,10 @@ contract ChainNft is ERC721Enumerable { | |
| 195 199 | 
             
                        _chainIdDigits;
         | 
| 196 200 | 
             
                }
         | 
| 197 201 |  | 
| 202 | 
            +
                function getNextTokenId() external view returns (uint256) {
         | 
| 203 | 
            +
                    return calculateTokenId(_idNext);
         | 
| 204 | 
            +
                }
         | 
| 205 | 
            +
             | 
| 198 206 | 
             
                function _getNextTokenId() private returns (uint256 id) {
         | 
| 199 207 | 
             
                    id = calculateTokenId(_idNext);
         | 
| 200 208 | 
             
                    _idNext++;
         | 
| @@ -84,6 +84,8 @@ interface IRegistry is IERC165 { | |
| 84 84 |  | 
| 85 85 | 
             
                function isRegisteredService(address contractAddress) external view returns (bool);
         | 
| 86 86 |  | 
| 87 | 
            +
                function isRegisteredComponent(address object) external view returns (bool);
         | 
| 88 | 
            +
             | 
| 87 89 | 
             
                function isValidRelease(VersionPart version) external view returns (bool);
         | 
| 88 90 |  | 
| 89 91 | 
             
                function getServiceAddress(
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
         | 
| 4 | 
            +
            // import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
         | 
| 5 5 |  | 
| 6 6 | 
             
            import {NftId} from "../types/NftId.sol";
         | 
| 7 7 | 
             
            import {ObjectType} from "../types/ObjectType.sol";
         | 
| @@ -13,8 +13,9 @@ import {IRegisterable} from "../shared/IRegisterable.sol"; | |
| 13 13 | 
             
            import {IComponent} from "../components/IComponent.sol";
         | 
| 14 14 |  | 
| 15 15 | 
             
            interface IRegistryService is 
         | 
| 16 | 
            -
                 IService | 
| 17 | 
            -
                  | 
| 16 | 
            +
                 IService
         | 
| 17 | 
            +
                 // TODO cleanup
         | 
| 18 | 
            +
                 // IAccessManaged 
         | 
| 18 19 | 
             
            {
         | 
| 19 20 | 
             
                 error SelfRegistration();
         | 
| 20 21 | 
             
                 error NotRegistryOwner();
         | 
| @@ -149,7 +149,6 @@ contract Registry is | |
| 149 149 | 
             
                    }
         | 
| 150 150 |  | 
| 151 151 | 
             
                    if(
         | 
| 152 | 
            -
             | 
| 153 152 | 
             
                        parentType == PROTOCOL() ||
         | 
| 154 153 | 
             
                        parentType == REGISTRY() ||
         | 
| 155 154 | 
             
                        parentType == SERVICE()
         | 
| @@ -186,7 +185,7 @@ contract Registry is | |
| 186 185 | 
             
                    return _releaseManager.getReleaseInfo(version);
         | 
| 187 186 | 
             
                }
         | 
| 188 187 |  | 
| 189 | 
            -
                function getObjectCount() external view  | 
| 188 | 
            +
                function getObjectCount() external view returns (uint256) {
         | 
| 190 189 | 
             
                    return _chainNft.totalSupply();
         | 
| 191 190 | 
             
                }
         | 
| 192 191 |  | 
| @@ -198,11 +197,11 @@ contract Registry is | |
| 198 197 | 
             
                    return _registryNftId;
         | 
| 199 198 | 
             
                }
         | 
| 200 199 |  | 
| 201 | 
            -
                function getNftId(address object) external view  | 
| 200 | 
            +
                function getNftId(address object) external view returns (NftId id) {
         | 
| 202 201 | 
             
                    return _nftIdByAddress[object];
         | 
| 203 202 | 
             
                }
         | 
| 204 203 |  | 
| 205 | 
            -
                function ownerOf(NftId nftId) public view  | 
| 204 | 
            +
                function ownerOf(NftId nftId) public view returns (address) {
         | 
| 206 205 | 
             
                    return _chainNft.ownerOf(nftId.toInt());
         | 
| 207 206 | 
             
                }
         | 
| 208 207 |  | 
| @@ -210,26 +209,31 @@ contract Registry is | |
| 210 209 | 
             
                    return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
         | 
| 211 210 | 
             
                }
         | 
| 212 211 |  | 
| 213 | 
            -
                function getObjectInfo(NftId nftId) external view  | 
| 212 | 
            +
                function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
         | 
| 214 213 | 
             
                    return _info[nftId];
         | 
| 215 214 | 
             
                }
         | 
| 216 215 |  | 
| 217 | 
            -
                function getObjectInfo(address object) external view  | 
| 216 | 
            +
                function getObjectInfo(address object) external view returns (ObjectInfo memory) {
         | 
| 218 217 | 
             
                    return _info[_nftIdByAddress[object]];
         | 
| 219 218 | 
             
                }
         | 
| 220 219 |  | 
| 221 | 
            -
                function isRegistered(NftId nftId) public view  | 
| 220 | 
            +
                function isRegistered(NftId nftId) public view returns (bool) {
         | 
| 222 221 | 
             
                    return _info[nftId].objectType.gtz();
         | 
| 223 222 | 
             
                }
         | 
| 224 223 |  | 
| 225 | 
            -
                function isRegistered(address object) external view  | 
| 224 | 
            +
                function isRegistered(address object) external view returns (bool) {
         | 
| 226 225 | 
             
                    return _nftIdByAddress[object].gtz();
         | 
| 227 226 | 
             
                }
         | 
| 228 227 |  | 
| 229 | 
            -
                function isRegisteredService(address object) external view  | 
| 228 | 
            +
                function isRegisteredService(address object) external view returns (bool) {
         | 
| 230 229 | 
             
                    return _info[_nftIdByAddress[object]].objectType == SERVICE();
         | 
| 231 230 | 
             
                }
         | 
| 232 231 |  | 
| 232 | 
            +
                function isRegisteredComponent(address object) external view returns (bool) {
         | 
| 233 | 
            +
                    NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
         | 
| 234 | 
            +
                    return _info[objectParentNftId].objectType == INSTANCE();
         | 
| 235 | 
            +
                }
         | 
| 236 | 
            +
             | 
| 233 237 | 
             
                function isValidRelease(VersionPart version) external view returns (bool)
         | 
| 234 238 | 
             
                {
         | 
| 235 239 | 
             
                    return _releaseManager.isValidRelease(version);
         | 
| @@ -287,18 +291,9 @@ contract Registry is | |
| 287 291 | 
             
                    }
         | 
| 288 292 |  | 
| 289 293 | 
             
                    address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
         | 
| 294 | 
            +
                    uint256 tokenId = _chainNft.getNextTokenId();
         | 
| 295 | 
            +
                    nftId = toNftId(tokenId);
         | 
| 290 296 |  | 
| 291 | 
            -
                    // TODO does external call
         | 
| 292 | 
            -
                    // compute next nftId, do all checks and stores, mint() at most end...
         | 
| 293 | 
            -
                    uint256 mintedTokenId = _chainNft.mint(
         | 
| 294 | 
            -
                        info.initialOwner,
         | 
| 295 | 
            -
                        interceptor,
         | 
| 296 | 
            -
                        EMPTY_URI);
         | 
| 297 | 
            -
                    nftId = toNftId(mintedTokenId);
         | 
| 298 | 
            -
             | 
| 299 | 
            -
                    // TODO move nftId out of info struct
         | 
| 300 | 
            -
                    // getters by nftId -> return struct without nftId
         | 
| 301 | 
            -
                    // getters by address -> return nftId AND struct
         | 
| 302 297 | 
             
                    info.nftId = nftId;
         | 
| 303 298 | 
             
                    _info[nftId] = info;
         | 
| 304 299 |  | 
| @@ -314,6 +309,14 @@ contract Registry is | |
| 314 309 | 
             
                    }
         | 
| 315 310 |  | 
| 316 311 | 
             
                    emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
         | 
| 312 | 
            +
             | 
| 313 | 
            +
                    // calls nft receiver(1) and interceptor(2)
         | 
| 314 | 
            +
                    uint256 mintedTokenId = _chainNft.mint(
         | 
| 315 | 
            +
                        info.initialOwner,
         | 
| 316 | 
            +
                        interceptor,
         | 
| 317 | 
            +
                        EMPTY_URI);
         | 
| 318 | 
            +
                    assert(mintedTokenId == tokenId);
         | 
| 319 | 
            +
                    
         | 
| 317 320 | 
             
                }
         | 
| 318 321 |  | 
| 319 322 | 
             
                /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
         |