@etherisc/gif-next 0.0.2-e922e07-736 → 0.0.2-e94f4c7-084
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 +68 -0
 - package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
 - package/artifacts/contracts/components/Distribution.sol/Distribution.json +84 -0
 - package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
 - package/artifacts/contracts/components/IComponent.sol/IComponent.json +158 -0
 - package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
 - package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +158 -0
 - package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
 - package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +184 -149
 - package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
 - package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +158 -0
 - package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
 - package/artifacts/contracts/components/Pool.sol/Pool.json +114 -189
 - package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
 - package/artifacts/contracts/components/Product.sol/Product.json +68 -0
 - 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 +457 -268
 - 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 +426 -476
 - 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 +217 -169
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +304 -210
 - 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 +85 -30
 - 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 +175 -83
 - package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +29 -13
 - package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
 - package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +426 -233
 - 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 +372 -86
 - 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 +189 -139
 - package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +48 -56
 - package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
 - package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +111 -40
 - package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
 - package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +246 -170
 - 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 +101 -24
 - package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
 - package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +470 -41
 - package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
 - package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +627 -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 +607 -85
 - package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +71 -19
 - package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
 - package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +777 -55
 - package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +72 -12
 - package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
 - package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +114 -51
 - 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 +17 -36
 - 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 +2 -2
 - 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 +86 -15
 - 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 +2 -2
 - 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 +101 -26
 - 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 +209 -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 +2 -2
 - package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
 - package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
 - package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
 - package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
 - package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +1 -1
 - package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
 - package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
 - package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
 - package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +17 -4
 - package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
 - package/artifacts/contracts/types/UFixed.sol/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 +42 -10
 - package/contracts/components/Distribution.sol +6 -2
 - package/contracts/components/IComponent.sol +9 -1
 - package/contracts/components/IPoolComponent.sol +6 -44
 - package/contracts/components/Pool.sol +50 -126
 - package/contracts/components/Product.sol +141 -59
 - package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
 - package/contracts/instance/BundleManager.sol +9 -8
 - 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 -204
 - 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 +6 -4
 - package/contracts/instance/module/IComponents.sol +41 -0
 - package/contracts/instance/module/IPolicy.sol +11 -6
 - package/contracts/instance/module/ISetup.sol +3 -16
 - package/contracts/instance/service/ApplicationService.sol +25 -19
 - package/contracts/instance/service/BundleService.sol +224 -80
 - package/contracts/instance/service/ClaimService.sol +114 -26
 - package/contracts/instance/service/DistributionService.sol +58 -77
 - package/contracts/instance/service/IApplicationService.sol +3 -7
 - package/contracts/instance/service/IBundleService.sol +72 -25
 - package/contracts/instance/service/IClaimService.sol +46 -15
 - package/contracts/instance/service/IDistributionService.sol +1 -0
 - package/contracts/instance/service/IPolicyService.sol +72 -5
 - package/contracts/instance/service/IPoolService.sol +85 -3
 - package/contracts/instance/service/PolicyService.sol +320 -143
 - package/contracts/instance/service/PoolService.sol +245 -18
 - 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 +10 -11
 - package/contracts/registry/ReleaseManager.sol +20 -18
 - package/contracts/shared/IService.sol +4 -6
 - 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 +70 -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/RoleId.sol +6 -4
 - package/contracts/types/StateId.sol +7 -2
 - package/contracts/types/Timestamp.sol +6 -0
 - package/contracts/types/UFixed.sol +1 -0
 - package/contracts/types/Version.sol +1 -0
 - package/package.json +1 -1
 
| 
         @@ -24,18 +24,16 @@ contract ObjectManager is 
     | 
|
| 
       24 
24 
     | 
    
         
             
                IInstance internal _instance; // store instance address -> more flexible, instance may not be registered during ObjectManager initialization
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                /// @dev call to initialize MUST be made in the same transaction as cloning of the contract
         
     | 
| 
       27 
     | 
    
         
            -
                function initialize(
         
     | 
| 
       28 
     | 
    
         
            -
                     
     | 
| 
       29 
     | 
    
         
            -
                    address registry,
         
     | 
| 
       30 
     | 
    
         
            -
                    address instance
         
     | 
| 
       31 
     | 
    
         
            -
                )
         
     | 
| 
      
 27 
     | 
    
         
            +
                function initialize(address instanceAddress) 
         
     | 
| 
      
 28 
     | 
    
         
            +
                    initializer
         
     | 
| 
       32 
29 
     | 
    
         
             
                    external 
         
     | 
| 
       33 
30 
     | 
    
         
             
                {
         
     | 
| 
       34 
     | 
    
         
            -
                     
     | 
| 
      
 31 
     | 
    
         
            +
                    IInstance instance = IInstance(instanceAddress);
         
     | 
| 
      
 32 
     | 
    
         
            +
                    initialize(instance.authority(), instance.getRegistryAddress());
         
     | 
| 
       35 
33 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                    _instance =  
     | 
| 
      
 34 
     | 
    
         
            +
                    _instance = instance;
         
     | 
| 
       37 
35 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
                    emit LogObjectManagerInitialized( 
     | 
| 
      
 36 
     | 
    
         
            +
                    emit LogObjectManagerInitialized(instanceAddress);
         
     | 
| 
       39 
37 
     | 
    
         
             
                }
         
     | 
| 
       40 
38 
     | 
    
         | 
| 
       41 
39 
     | 
    
         
             
                function getInstance() external view returns (IInstance) {
         
     | 
| 
         @@ -16,7 +16,6 @@ import {InstanceAccessManager} from "../InstanceAccessManager.sol"; 
     | 
|
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
            abstract contract ComponentService is Service {
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                error ErrorComponentServiceAlreadyRegistered(address component, NftId nftId);
         
     | 
| 
       20 
19 
     | 
    
         
             
                error ErrorComponentServiceNotComponent(address component);
         
     | 
| 
       21 
20 
     | 
    
         
             
                error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
         
     | 
| 
       22 
21 
     | 
    
         
             
                error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
         
     | 
| 
         @@ -33,13 +32,15 @@ abstract contract ComponentService is Service { 
     | 
|
| 
       33 
32 
     | 
    
         
             
                // view functions
         
     | 
| 
       34 
33 
     | 
    
         | 
| 
       35 
34 
     | 
    
         
             
                function getRegistryService() public view virtual returns (IRegistryService) {
         
     | 
| 
       36 
     | 
    
         
            -
                     
     | 
| 
       37 
     | 
    
         
            -
                    return IRegistryService(service);
         
     | 
| 
      
 35 
     | 
    
         
            +
                    return IRegistryService(_getServiceAddress(REGISTRY()));
         
     | 
| 
       38 
36 
     | 
    
         
             
                }
         
     | 
| 
       39 
37 
     | 
    
         | 
| 
       40 
38 
     | 
    
         
             
                function getInstanceService() public view returns (InstanceService) {
         
     | 
| 
       41 
     | 
    
         
            -
                     
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
      
 39 
     | 
    
         
            +
                    return InstanceService(_getServiceAddress(INSTANCE()));
         
     | 
| 
      
 40 
     | 
    
         
            +
                }
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                function _getServiceAddress(ObjectType domain) internal view returns (address) {
         
     | 
| 
      
 43 
     | 
    
         
            +
                    return getRegistry().getServiceAddress(domain, getVersion().toMajorPart());
         
     | 
| 
       43 
44 
     | 
    
         
             
                }
         
     | 
| 
       44 
45 
     | 
    
         | 
| 
       45 
46 
     | 
    
         
             
                // internal functions
         
     | 
| 
         @@ -60,12 +61,6 @@ abstract contract ComponentService is Service { 
     | 
|
| 
       60 
61 
     | 
    
         
             
                    // component may only be registerd by initial owner of component
         
     | 
| 
       61 
62 
     | 
    
         
             
                    owner = msg.sender;
         
     | 
| 
       62 
63 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
                    // check component has not already been registerd
         
     | 
| 
       64 
     | 
    
         
            -
                    NftId compoentNftId = getRegistry().getNftId(componentAddress);
         
     | 
| 
       65 
     | 
    
         
            -
                    if(compoentNftId.gtz()) {
         
     | 
| 
       66 
     | 
    
         
            -
                        revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
         
     | 
| 
       67 
     | 
    
         
            -
                    }
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
64 
     | 
    
         
             
                    // check this is a component
         
     | 
| 
       70 
65 
     | 
    
         
             
                    component = IComponent(componentAddress);
         
     | 
| 
       71 
66 
     | 
    
         
             
                    if(!component.supportsInterface(type(IComponent).interfaceId)) {
         
     | 
| 
         @@ -87,48 +82,40 @@ abstract contract ComponentService is Service { 
     | 
|
| 
       87 
82 
     | 
    
         
             
                    // check instance has assigned required role to owner
         
     | 
| 
       88 
83 
     | 
    
         
             
                    instanceNftId = componentInfo.parentNftId;
         
     | 
| 
       89 
84 
     | 
    
         
             
                    instance = _getInstance(instanceNftId);
         
     | 
| 
       90 
     | 
    
         
            -
                     
     | 
| 
       91 
     | 
    
         
            -
                        owner, 
         
     | 
| 
       92 
     | 
    
         
            -
                        requiredRole, 
         
     | 
| 
       93 
     | 
    
         
            -
                        address(instance));
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
                    if(!hasRole) {
         
     | 
| 
      
 85 
     | 
    
         
            +
                    if(!instance.getInstanceAccessManager().hasRole(requiredRole, owner)) {
         
     | 
| 
       96 
86 
     | 
    
         
             
                        revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
         
     | 
| 
       97 
87 
     | 
    
         
             
                    }
         
     | 
| 
       98 
88 
     | 
    
         
             
                }
         
     | 
| 
       99 
89 
     | 
    
         | 
| 
       100 
90 
     | 
    
         
             
                // internal view functions
         
     | 
| 
       101 
91 
     | 
    
         | 
| 
       102 
     | 
    
         
            -
                function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
         
     | 
| 
       103 
     | 
    
         
            -
                    IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
         
     | 
| 
       104 
     | 
    
         
            -
                    return IInstance(instanceInfo.objectAddress);
         
     | 
| 
       105 
     | 
    
         
            -
                }
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
92 
     | 
    
         
             
                function _getAndVerifyComponentInfoAndInstance(
         
     | 
| 
       108 
     | 
    
         
            -
                    //address component,
         
     | 
| 
       109 
93 
     | 
    
         
             
                    ObjectType expectedType
         
     | 
| 
       110 
94 
     | 
    
         
             
                )
         
     | 
| 
       111 
95 
     | 
    
         
             
                    internal
         
     | 
| 
       112 
96 
     | 
    
         
             
                    view
         
     | 
| 
       113 
97 
     | 
    
         
             
                    returns(
         
     | 
| 
      
 98 
     | 
    
         
            +
                        NftId nftId,
         
     | 
| 
       114 
99 
     | 
    
         
             
                        IRegistry.ObjectInfo memory info, 
         
     | 
| 
       115 
100 
     | 
    
         
             
                        IInstance instance
         
     | 
| 
       116 
101 
     | 
    
         
             
                    )
         
     | 
| 
       117 
102 
     | 
    
         
             
                {
         
     | 
| 
       118 
103 
     | 
    
         
             
                    IRegistry registry = getRegistry();
         
     | 
| 
       119 
     | 
    
         
            -
                    //TODO redundant check -> just check type
         
     | 
| 
       120 
     | 
    
         
            -
                    //NftId componentNftId = registry.getNftId(component); 
         
     | 
| 
       121 
     | 
    
         
            -
                    //require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
         
     | 
| 
       122 
104 
     | 
    
         | 
| 
       123 
105 
     | 
    
         
             
                    info = registry.getObjectInfo(msg.sender);
         
     | 
| 
       124 
106 
     | 
    
         
             
                    require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
         
     | 
| 
       125 
107 
     | 
    
         | 
| 
       126 
     | 
    
         
            -
                     
     | 
| 
       127 
     | 
    
         
            -
                    instance =  
     | 
| 
      
 108 
     | 
    
         
            +
                    nftId = info.nftId;
         
     | 
| 
      
 109 
     | 
    
         
            +
                    instance = _getInstance(info.parentNftId);
         
     | 
| 
       128 
110 
     | 
    
         | 
| 
       129 
     | 
    
         
            -
                     
     | 
| 
       130 
     | 
    
         
            -
                    if (accessManager.isTargetLocked(info.objectAddress)) {
         
     | 
| 
      
 111 
     | 
    
         
            +
                    if (instance.getInstanceAccessManager().isTargetLocked(info.objectAddress)) {
         
     | 
| 
       131 
112 
     | 
    
         
             
                        revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
         
     | 
| 
       132 
113 
     | 
    
         
             
                    }
         
     | 
| 
       133 
114 
     | 
    
         
             
                }
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
         
     | 
| 
      
 117 
     | 
    
         
            +
                    return IInstance(
         
     | 
| 
      
 118 
     | 
    
         
            +
                        getRegistry().getObjectInfo(
         
     | 
| 
      
 119 
     | 
    
         
            +
                            instanceNftId).objectAddress);
         
     | 
| 
      
 120 
     | 
    
         
            +
                }
         
     | 
| 
       134 
121 
     | 
    
         
             
            }
         
     | 
| 
         @@ -5,7 +5,7 @@ import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blockn 
     | 
|
| 
       5 
5 
     | 
    
         
             
            import {Key32, KeyId, Key32Lib} from "../../types/Key32.sol";
         
     | 
| 
       6 
6 
     | 
    
         
             
            import {NftId} from "../../types/NftId.sol";
         
     | 
| 
       7 
7 
     | 
    
         
             
            import {ObjectType} from "../../types/ObjectType.sol";
         
     | 
| 
       8 
     | 
    
         
            -
            import {StateId, ACTIVE} from "../../types/StateId.sol";
         
     | 
| 
      
 8 
     | 
    
         
            +
            import {StateId, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
         
     | 
| 
       9 
9 
     | 
    
         
             
            import {Timestamp, TimestampLib} from "../../types/Timestamp.sol";
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
            import {Lifecycle} from "./Lifecycle.sol";
         
     | 
| 
         @@ -79,16 +79,21 @@ contract KeyValueStore is Lifecycle, IKeyValueStore { 
     | 
|
| 
       79 
79 
     | 
    
         
             
                    // update data
         
     | 
| 
       80 
80 
     | 
    
         
             
                    _value[key32].data = data;
         
     | 
| 
       81 
81 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
                    // update  
     | 
| 
      
 82 
     | 
    
         
            +
                    // update state 
         
     | 
| 
      
 83 
     | 
    
         
            +
                    if(state != KEEP_STATE()) {
         
     | 
| 
      
 84 
     | 
    
         
            +
                        metadata.state = state;
         
     | 
| 
      
 85 
     | 
    
         
            +
                    }
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                    // update reest of metadata
         
     | 
| 
       83 
88 
     | 
    
         
             
                    address updatedBy = msg.sender;
         
     | 
| 
       84 
89 
     | 
    
         
             
                    Blocknumber lastUpdatedIn = metadata.updatedIn;
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
       86 
91 
     | 
    
         
             
                    metadata.updatedBy = updatedBy;
         
     | 
| 
       87 
92 
     | 
    
         
             
                    metadata.updatedIn = blockBlocknumber();
         
     | 
| 
       88 
93 
     | 
    
         | 
| 
       89 
94 
     | 
    
         
             
                    // create log entries
         
     | 
| 
       90 
95 
     | 
    
         
             
                    // solhint-disable avoid-tx-origin
         
     | 
| 
       91 
     | 
    
         
            -
                    emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(),  
     | 
| 
      
 96 
     | 
    
         
            +
                    emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
         
     | 
| 
       92 
97 
     | 
    
         
             
                    emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
         
     | 
| 
       93 
98 
     | 
    
         
             
                    // solhing-enable
         
     | 
| 
       94 
99 
     | 
    
         
             
                }
         
     | 
| 
         @@ -134,6 +139,9 @@ contract KeyValueStore is Lifecycle, IKeyValueStore { 
     | 
|
| 
       134 
139 
     | 
    
         
             
                    StateId stateOld = metadata.state;
         
     | 
| 
       135 
140 
     | 
    
         
             
                    require(stateOld.gtz(), "ERROR:KVS-041:NOT_EXISTING");
         
     | 
| 
       136 
141 
     | 
    
         | 
| 
      
 142 
     | 
    
         
            +
                    // ensure state transistion is valid
         
     | 
| 
      
 143 
     | 
    
         
            +
                    checkTransition(metadata.objectType, stateOld, state);
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
       137 
145 
     | 
    
         
             
                    // update metadata (and state)
         
     | 
| 
       138 
146 
     | 
    
         
             
                    address updatedBy = msg.sender;
         
     | 
| 
       139 
147 
     | 
    
         
             
                    Blocknumber lastUpdatedIn = metadata.updatedIn;
         
     | 
| 
         @@ -143,7 +151,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore { 
     | 
|
| 
       143 
151 
     | 
    
         | 
| 
       144 
152 
     | 
    
         
             
                    // create log entry
         
     | 
| 
       145 
153 
     | 
    
         
             
                    // solhint-disable-next-line avoid-tx-origin
         
     | 
| 
       146 
     | 
    
         
            -
                    emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(),  
     | 
| 
      
 154 
     | 
    
         
            +
                    emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
         
     | 
| 
       147 
155 
     | 
    
         
             
                }
         
     | 
| 
       148 
156 
     | 
    
         | 
| 
       149 
157 
     | 
    
         
             
                function exists(Key32 key32) public view returns (bool) {
         
     | 
| 
         @@ -1,22 +1,31 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
      
 4 
     | 
    
         
            +
            import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; 
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       4 
6 
     | 
    
         
             
            import {NftId} from "../../types/NftId.sol";
         
     | 
| 
       5 
     | 
    
         
            -
            import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
         
     | 
| 
       6 
     | 
    
         
            -
            import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED,  
     | 
| 
      
 7 
     | 
    
         
            +
            import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK, CLAIM} from "../../types/ObjectType.sol";
         
     | 
| 
      
 8 
     | 
    
         
            +
            import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, COLLATERALIZED, REVOKED, SUBMITTED, CONFIRMED, DECLINED} from "../../types/StateId.sol";
         
     | 
| 
       7 
9 
     | 
    
         
             
            import {ILifecycle} from "./ILifecycle.sol";
         
     | 
| 
       8 
10 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            contract Lifecycle is 
     | 
| 
      
 11 
     | 
    
         
            +
            contract Lifecycle is
         
     | 
| 
      
 12 
     | 
    
         
            +
                Initializable,
         
     | 
| 
      
 13 
     | 
    
         
            +
                ILifecycle
         
     | 
| 
      
 14 
     | 
    
         
            +
            {
         
     | 
| 
       10 
15 
     | 
    
         
             
                mapping(ObjectType objectType => StateId initialState)
         
     | 
| 
       11 
16 
     | 
    
         
             
                    private _initialState;
         
     | 
| 
       12 
17 
     | 
    
         | 
| 
       13 
18 
     | 
    
         
             
                mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
         
     | 
| 
       14 
19 
     | 
    
         
             
                    private _isValidTransition;
         
     | 
| 
       15 
20 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
                 
     | 
| 
      
 21 
     | 
    
         
            +
                function initializeLifecycle()
         
     | 
| 
      
 22 
     | 
    
         
            +
                    public
         
     | 
| 
      
 23 
     | 
    
         
            +
                    onlyInitializing
         
     | 
| 
      
 24 
     | 
    
         
            +
                {
         
     | 
| 
       17 
25 
     | 
    
         
             
                    _setupBundleLifecycle();
         
     | 
| 
       18 
26 
     | 
    
         
             
                    _setupComponentLifecycle();
         
     | 
| 
       19 
27 
     | 
    
         
             
                    _setupPolicyLifecycle();
         
     | 
| 
      
 28 
     | 
    
         
            +
                    _setupClaimLifecycle();
         
     | 
| 
       20 
29 
     | 
    
         
             
                    _setupRiskLifecycle();
         
     | 
| 
       21 
30 
     | 
    
         
             
                }
         
     | 
| 
       22 
31 
     | 
    
         | 
| 
         @@ -78,6 +87,7 @@ contract Lifecycle is ILifecycle { 
     | 
|
| 
       78 
87 
     | 
    
         
             
                function _setupBundleLifecycle() internal {
         
     | 
| 
       79 
88 
     | 
    
         
             
                    _initialState[BUNDLE()] = ACTIVE();
         
     | 
| 
       80 
89 
     | 
    
         
             
                    _isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
         
     | 
| 
      
 90 
     | 
    
         
            +
                    _isValidTransition[BUNDLE()][ACTIVE()][CLOSED()] = true;
         
     | 
| 
       81 
91 
     | 
    
         
             
                    _isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
         
     | 
| 
       82 
92 
     | 
    
         
             
                    _isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
         
     | 
| 
       83 
93 
     | 
    
         
             
                }
         
     | 
| 
         @@ -86,11 +96,18 @@ contract Lifecycle is ILifecycle { 
     | 
|
| 
       86 
96 
     | 
    
         
             
                    _initialState[POLICY()] = APPLIED();
         
     | 
| 
       87 
97 
     | 
    
         
             
                    _isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
         
     | 
| 
       88 
98 
     | 
    
         
             
                    _isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
         
     | 
| 
       89 
     | 
    
         
            -
                    _isValidTransition[POLICY()][APPLIED()][ 
     | 
| 
       90 
     | 
    
         
            -
                    _isValidTransition[POLICY()][ 
     | 
| 
      
 99 
     | 
    
         
            +
                    _isValidTransition[POLICY()][APPLIED()][COLLATERALIZED()] = true;
         
     | 
| 
      
 100 
     | 
    
         
            +
                    _isValidTransition[POLICY()][COLLATERALIZED()][ACTIVE()] = true;
         
     | 
| 
       91 
101 
     | 
    
         
             
                    _isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
         
     | 
| 
       92 
102 
     | 
    
         
             
                }
         
     | 
| 
       93 
103 
     | 
    
         | 
| 
      
 104 
     | 
    
         
            +
                function _setupClaimLifecycle() internal {
         
     | 
| 
      
 105 
     | 
    
         
            +
                    _initialState[CLAIM()] = SUBMITTED();
         
     | 
| 
      
 106 
     | 
    
         
            +
                    _isValidTransition[CLAIM()][SUBMITTED()][CONFIRMED()] = true;
         
     | 
| 
      
 107 
     | 
    
         
            +
                    _isValidTransition[CLAIM()][SUBMITTED()][DECLINED()] = true;
         
     | 
| 
      
 108 
     | 
    
         
            +
                    _isValidTransition[CLAIM()][CONFIRMED()][CLOSED()] = true;
         
     | 
| 
      
 109 
     | 
    
         
            +
                }
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
       94 
111 
     | 
    
         
             
                function _setupRiskLifecycle() internal {
         
     | 
| 
       95 
112 
     | 
    
         
             
                    _initialState[RISK()] = ACTIVE();
         
     | 
| 
       96 
113 
     | 
    
         
             
                    _isValidTransition[RISK()][ACTIVE()][PAUSED()] = true;
         
     | 
| 
         @@ -8,40 +8,47 @@ import {Timestamp} from "../../types/Timestamp.sol"; 
     | 
|
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            interface IAccess {
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
      
 11 
     | 
    
         
            +
                enum Type {
         
     | 
| 
      
 12 
     | 
    
         
            +
                    NotInitialized,
         
     | 
| 
      
 13 
     | 
    
         
            +
                    Core,
         
     | 
| 
      
 14 
     | 
    
         
            +
                    Gif,
         
     | 
| 
      
 15 
     | 
    
         
            +
                    Custom        
         
     | 
| 
      
 16 
     | 
    
         
            +
                }
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       11 
18 
     | 
    
         
             
                struct RoleInfo {
         
     | 
| 
       12 
19 
     | 
    
         
             
                    ShortString name;
         
     | 
| 
       13 
     | 
    
         
            -
                     
     | 
| 
       14 
     | 
    
         
            -
                    bool isLocked;
         
     | 
| 
      
 20 
     | 
    
         
            +
                    Type rtype;
         
     | 
| 
      
 21 
     | 
    
         
            +
                    //bool isLocked;
         
     | 
| 
      
 22 
     | 
    
         
            +
                    RoleId admin;
         
     | 
| 
       15 
23 
     | 
    
         
             
                    Timestamp createdAt;
         
     | 
| 
       16 
24 
     | 
    
         
             
                    Timestamp updatedAt;
         
     | 
| 
       17 
25 
     | 
    
         
             
                }
         
     | 
| 
       18 
26 
     | 
    
         | 
| 
       19 
27 
     | 
    
         
             
                struct TargetInfo {
         
     | 
| 
       20 
28 
     | 
    
         
             
                    ShortString name;
         
     | 
| 
       21 
     | 
    
         
            -
                     
     | 
| 
      
 29 
     | 
    
         
            +
                    Type ttype;
         
     | 
| 
       22 
30 
     | 
    
         
             
                    bool isLocked;
         
     | 
| 
       23 
31 
     | 
    
         
             
                    Timestamp createdAt;
         
     | 
| 
       24 
32 
     | 
    
         
             
                    Timestamp updatedAt;
         
     | 
| 
       25 
33 
     | 
    
         
             
                }
         
     | 
| 
       26 
34 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                error  
     | 
| 
      
 35 
     | 
    
         
            +
                error ErrorIAccessCallerIsNotRoleAdmin(address caller, RoleId roleId);
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                error ErrorIAccessRoleIdDoesNotExist(RoleId roleId);
         
     | 
| 
       28 
38 
     | 
    
         
             
                error ErrorIAccessRoleIdTooBig(RoleId roleId);
         
     | 
| 
       29 
39 
     | 
    
         
             
                error ErrorIAccessRoleIdTooSmall(RoleId roleId);
         
     | 
| 
       30 
     | 
    
         
            -
                error  
     | 
| 
       31 
     | 
    
         
            -
                error ErrorIAccessRoleIdNotActive(RoleId roleId);
         
     | 
| 
      
 40 
     | 
    
         
            +
                error ErrorIAccessRoleIdExists(RoleId roleId);
         
     | 
| 
       32 
41 
     | 
    
         
             
                error ErrorIAccessRoleNameEmpty(RoleId roleId);
         
     | 
| 
       33 
     | 
    
         
            -
                error  
     | 
| 
       34 
     | 
    
         
            -
                error  
     | 
| 
       35 
     | 
    
         
            -
                error ErrorIAccessRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
         
     | 
| 
       36 
     | 
    
         
            -
                error ErrorIAccessGrantNonexstentRole(RoleId roleId);
         
     | 
| 
       37 
     | 
    
         
            -
                error ErrorIAccessRevokeNonexstentRole(RoleId roleId); 
         
     | 
| 
       38 
     | 
    
         
            -
                error ErrorIAccessRenounceNonexstentRole(RoleId roleId);
         
     | 
| 
      
 42 
     | 
    
         
            +
                error ErrorIAccessRoleNameExists(RoleId roleId, RoleId existingRoleId, ShortString name);
         
     | 
| 
      
 43 
     | 
    
         
            +
                error ErrorIAccessRoleTypeInvalid(RoleId roleId, Type rtype);
         
     | 
| 
       39 
44 
     | 
    
         | 
| 
       40 
45 
     | 
    
         
             
                error ErrorIAccessTargetAddressZero();
         
     | 
| 
       41 
     | 
    
         
            -
                error ErrorIAccessTargetDoesNotExist( 
     | 
| 
       42 
     | 
    
         
            -
                error ErrorIAccessTargetAddressDoesNotExist(address target);
         
     | 
| 
      
 46 
     | 
    
         
            +
                error ErrorIAccessTargetDoesNotExist(address target);
         
     | 
| 
       43 
47 
     | 
    
         
             
                error ErrorIAccessTargetExists(address target, ShortString name);
         
     | 
| 
      
 48 
     | 
    
         
            +
                error ErrorIAccessTargetTypeInvalid(address target, Type ttype);
         
     | 
| 
       44 
49 
     | 
    
         
             
                error ErrorIAccessTargetNameEmpty(address target);
         
     | 
| 
       45 
50 
     | 
    
         
             
                error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
         
     | 
| 
       46 
51 
     | 
    
         
             
                error ErrorIAccessTargetLocked(address target);
         
     | 
| 
      
 52 
     | 
    
         
            +
                error ErrorIAccessTargetNotRegistered(address target);
         
     | 
| 
      
 53 
     | 
    
         
            +
                error ErrorIAccessTargetAuthorityInvalid(address target, address targetAuthority);
         
     | 
| 
       47 
54 
     | 
    
         
             
            }
         
     | 
| 
         @@ -1,21 +1,23 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
      
 4 
     | 
    
         
            +
            import {Amount} from "../../types/Amount.sol";
         
     | 
| 
       4 
5 
     | 
    
         
             
            import {NftId} from "../../types/NftId.sol";
         
     | 
| 
       5 
6 
     | 
    
         
             
            import {Fee} from "../../types/Fee.sol";
         
     | 
| 
       6 
7 
     | 
    
         
             
            import {Seconds} from "../../types/Seconds.sol";
         
     | 
| 
       7 
8 
     | 
    
         
             
            import {Timestamp} from "../../types/Timestamp.sol";
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         
             
            interface IBundle {
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
       10 
12 
     | 
    
         
             
                struct BundleInfo {
         
     | 
| 
       11 
13 
     | 
    
         
             
                    NftId poolNftId;
         
     | 
| 
       12 
14 
     | 
    
         
             
                    Fee fee; // bundle fee on net premium amounts
         
     | 
| 
       13 
15 
     | 
    
         
             
                    bytes filter; // required conditions for applications to be considered for collateralization by this bundle
         
     | 
| 
       14 
     | 
    
         
            -
                     
     | 
| 
       15 
     | 
    
         
            -
                     
     | 
| 
       16 
     | 
    
         
            -
                     
     | 
| 
      
 16 
     | 
    
         
            +
                    Amount capitalAmount; // net stakings + net premiums - payouts
         
     | 
| 
      
 17 
     | 
    
         
            +
                    Amount lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= capital amount)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    Amount feeAmount; // accumulated fee amount
         
     | 
| 
       17 
19 
     | 
    
         
             
                    Seconds lifetime;
         
     | 
| 
       18 
     | 
    
         
            -
                    Timestamp expiredAt; // no new policies
         
     | 
| 
      
 20 
     | 
    
         
            +
                    Timestamp expiredAt; // no new policies starting with this timestamp
         
     | 
| 
       19 
21 
     | 
    
         
             
                    Timestamp closedAt; // no open policies, locked amount = 0
         
     | 
| 
       20 
22 
     | 
    
         
             
                }
         
     | 
| 
       21 
23 
     | 
    
         
             
            }
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
      
 2 
     | 
    
         
            +
            pragma solidity ^0.8.20;
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            import {Amount} from "../../types/Amount.sol";
         
     | 
| 
      
 7 
     | 
    
         
            +
            import {Fee} from "../../types/Fee.sol";
         
     | 
| 
      
 8 
     | 
    
         
            +
            import {NftId} from "../../types/NftId.sol";
         
     | 
| 
      
 9 
     | 
    
         
            +
            import {RoleId} from "../../types/RoleId.sol";
         
     | 
| 
      
 10 
     | 
    
         
            +
            import {TokenHandler} from "../../shared/TokenHandler.sol";
         
     | 
| 
      
 11 
     | 
    
         
            +
            import {UFixed} from "../../types/UFixed.sol";
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            interface IComponents {
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                struct ComponentInfo {
         
     | 
| 
      
 16 
     | 
    
         
            +
                    string name; // component name (needs to be unique per instance)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    IERC20Metadata token;
         
     | 
| 
      
 18 
     | 
    
         
            +
                    TokenHandler tokenHandler;
         
     | 
| 
      
 19 
     | 
    
         
            +
                    address wallet;
         
     | 
| 
      
 20 
     | 
    
         
            +
                    Amount balanceAmount; // calculated balance (may not necessarily match withg wallet balance)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    Amount feeAmount; // accumulated fees belonging to component owner
         
     | 
| 
      
 22 
     | 
    
         
            +
                    bytes data; // will hold component type specific additional info (eg encoded pool info)
         
     | 
| 
      
 23 
     | 
    
         
            +
                }
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                struct PoolInfo {
         
     | 
| 
      
 26 
     | 
    
         
            +
                    NftId productNftId; // the nft of the product this pool is linked to
         
     | 
| 
      
 27 
     | 
    
         
            +
                    RoleId bundleOwnerRole; // the required role for bundle owners
         
     | 
| 
      
 28 
     | 
    
         
            +
                    // TODO maxCapitalAmount -> maxBalanceAmount
         
     | 
| 
      
 29 
     | 
    
         
            +
                    uint256 maxCapitalAmount; // max capital amount allowed for pool
         
     | 
| 
      
 30 
     | 
    
         
            +
                    uint256 balanceAmount; // current pool balance (accounting view)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    uint256 feeAmount; // accumulated fee amount
         
     | 
| 
      
 32 
     | 
    
         
            +
                    bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
         
     | 
| 
      
 33 
     | 
    
         
            +
                    bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
         
     | 
| 
      
 34 
     | 
    
         
            +
                    bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications 
         
     | 
| 
      
 35 
     | 
    
         
            +
                    UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    UFixed retentionLevel; // amount of collateral held in pool (default 100%)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    Fee poolFee; // pool fee on net premium
         
     | 
| 
      
 38 
     | 
    
         
            +
                    Fee stakingFee; // pool fee on staked capital from investor
         
     | 
| 
      
 39 
     | 
    
         
            +
                    Fee performanceFee; // pool fee on profits from capital investors
         
     | 
| 
      
 40 
     | 
    
         
            +
                }
         
     | 
| 
      
 41 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
      
 4 
     | 
    
         
            +
            import {Amount} from "../../types/Amount.sol";
         
     | 
| 
       4 
5 
     | 
    
         
             
            import {NftId} from "../../types/NftId.sol";
         
     | 
| 
       5 
6 
     | 
    
         
             
            import {ClaimId} from "../../types/ClaimId.sol";
         
     | 
| 
       6 
7 
     | 
    
         
             
            import {ReferralId} from "../../types/Referral.sol";
         
     | 
| 
         @@ -42,13 +43,13 @@ interface IPolicy { 
     | 
|
| 
       42 
43 
     | 
    
         
             
                    RiskId riskId;
         
     | 
| 
       43 
44 
     | 
    
         
             
                    uint256 sumInsuredAmount;
         
     | 
| 
       44 
45 
     | 
    
         
             
                    uint256 premiumAmount;
         
     | 
| 
       45 
     | 
    
         
            -
                    uint256 premiumPaidAmount;
         
     | 
| 
      
 46 
     | 
    
         
            +
                    uint256 premiumPaidAmount; // when lower than premium amount: max payout decreased accordingly
         
     | 
| 
       46 
47 
     | 
    
         
             
                    Seconds lifetime;
         
     | 
| 
       47 
48 
     | 
    
         
             
                    bytes applicationData;
         
     | 
| 
       48 
49 
     | 
    
         
             
                    bytes policyData;
         
     | 
| 
       49 
50 
     | 
    
         
             
                    uint16 claimsCount;
         
     | 
| 
       50 
51 
     | 
    
         
             
                    uint16 openClaimsCount;
         
     | 
| 
       51 
     | 
    
         
            -
                     
     | 
| 
      
 52 
     | 
    
         
            +
                    Amount payoutAmount;
         
     | 
| 
       52 
53 
     | 
    
         
             
                    Timestamp activatedAt; // time of underwriting
         
     | 
| 
       53 
54 
     | 
    
         
             
                    Timestamp expiredAt; // no new claims (activatedAt + lifetime)
         
     | 
| 
       54 
55 
     | 
    
         
             
                    Timestamp closedAt; // no locked capital (or declinedAt)
         
     | 
| 
         @@ -56,16 +57,20 @@ interface IPolicy { 
     | 
|
| 
       56 
57 
     | 
    
         | 
| 
       57 
58 
     | 
    
         
             
                // claimId neeeds to be encoded policyNftId:claimId combination
         
     | 
| 
       58 
59 
     | 
    
         
             
                struct ClaimInfo {
         
     | 
| 
       59 
     | 
    
         
            -
                     
     | 
| 
       60 
     | 
    
         
            -
                     
     | 
| 
      
 60 
     | 
    
         
            +
                    Amount claimAmount;
         
     | 
| 
      
 61 
     | 
    
         
            +
                    Amount paidAmount;
         
     | 
| 
      
 62 
     | 
    
         
            +
                    uint8 payoutsCount;
         
     | 
| 
      
 63 
     | 
    
         
            +
                    uint8 openPayoutsCount;
         
     | 
| 
       61 
64 
     | 
    
         
             
                    bytes data;
         
     | 
| 
       62 
     | 
    
         
            -
                     
     | 
| 
      
 65 
     | 
    
         
            +
                    // TODO consider to add processData that may include information supporting confirm or decline
         
     | 
| 
      
 66 
     | 
    
         
            +
                    Timestamp closedAt; // payment of confirmed claim amount (or declinedAt)
         
     | 
| 
       63 
67 
     | 
    
         
             
                }
         
     | 
| 
       64 
68 
     | 
    
         | 
| 
       65 
69 
     | 
    
         
             
                // claimId neeeds to be encoded policyNftId:claimId combination
         
     | 
| 
       66 
70 
     | 
    
         
             
                struct PayoutInfo {
         
     | 
| 
       67 
71 
     | 
    
         
             
                    ClaimId claimId;
         
     | 
| 
       68 
     | 
    
         
            -
                     
     | 
| 
      
 72 
     | 
    
         
            +
                    Amount amount;
         
     | 
| 
      
 73 
     | 
    
         
            +
                    // TODO consider to add a beneficiary address that will be the receiver of the payout tokens
         
     | 
| 
       69 
74 
     | 
    
         
             
                    bytes data;
         
     | 
| 
       70 
75 
     | 
    
         
             
                    Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
         
     | 
| 
       71 
76 
     | 
    
         
             
                }
         
     | 
| 
         @@ -5,10 +5,12 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            import {Fee} from "../../types/Fee.sol";
         
     | 
| 
       7 
7 
     | 
    
         
             
            import {NftId} from "../../types/NftId.sol";
         
     | 
| 
       8 
     | 
    
         
            -
            import { 
     | 
| 
      
 8 
     | 
    
         
            +
            import {RoleId} from "../../types/RoleId.sol";
         
     | 
| 
       9 
9 
     | 
    
         
             
            import {TokenHandler} from "../../shared/TokenHandler.sol";
         
     | 
| 
      
 10 
     | 
    
         
            +
            import {UFixed} from "../../types/UFixed.sol";
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
            interface ISetup {
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
       12 
14 
     | 
    
         
             
                struct ProductSetupInfo {
         
     | 
| 
       13 
15 
     | 
    
         
             
                    IERC20Metadata token;
         
     | 
| 
       14 
16 
     | 
    
         
             
                    TokenHandler tokenHandler;
         
     | 
| 
         @@ -28,19 +30,4 @@ interface ISetup { 
     | 
|
| 
       28 
30 
     | 
    
         
             
                    address wallet;
         
     | 
| 
       29 
31 
     | 
    
         
             
                    uint256 sumDistributionOwnerFees;
         
     | 
| 
       30 
32 
     | 
    
         
             
                }
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                struct PoolSetupInfo {
         
     | 
| 
       33 
     | 
    
         
            -
                    NftId productNftId;
         
     | 
| 
       34 
     | 
    
         
            -
                    TokenHandler tokenHandler;
         
     | 
| 
       35 
     | 
    
         
            -
                    uint256 maxCapitalAmount; // max capital amount allowed for pool
         
     | 
| 
       36 
     | 
    
         
            -
                    bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
         
     | 
| 
       37 
     | 
    
         
            -
                    bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
         
     | 
| 
       38 
     | 
    
         
            -
                    bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications 
         
     | 
| 
       39 
     | 
    
         
            -
                    UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
         
     | 
| 
       40 
     | 
    
         
            -
                    UFixed retentionLevel; // amount of collateral held in pool (default 100%)
         
     | 
| 
       41 
     | 
    
         
            -
                    Fee poolFee; // pool fee on net premium
         
     | 
| 
       42 
     | 
    
         
            -
                    Fee stakingFee; // pool fee on staked capital from investor
         
     | 
| 
       43 
     | 
    
         
            -
                    Fee performanceFee; // pool fee on profits from capital investors
         
     | 
| 
       44 
     | 
    
         
            -
                    address wallet;
         
     | 
| 
       45 
     | 
    
         
            -
                }
         
     | 
| 
       46 
33 
     | 
    
         
             
            }
         
     | 
| 
         @@ -10,6 +10,7 @@ import {Product} from "../../components/Product.sol"; 
     | 
|
| 
       10 
10 
     | 
    
         
             
            import {IPoolComponent} from "../../components/IPoolComponent.sol";
         
     | 
| 
       11 
11 
     | 
    
         
             
            import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
         
     | 
| 
       12 
12 
     | 
    
         
             
            import {IInstance} from "../IInstance.sol";
         
     | 
| 
      
 13 
     | 
    
         
            +
            import {IComponents} from "../module/IComponents.sol";
         
     | 
| 
       13 
14 
     | 
    
         
             
            import {IPolicy} from "../module/IPolicy.sol";
         
     | 
| 
       14 
15 
     | 
    
         
             
            import {IRisk} from "../module/IRisk.sol";
         
     | 
| 
       15 
16 
     | 
    
         
             
            import {IBundle} from "../module/IBundle.sol";
         
     | 
| 
         @@ -22,12 +23,13 @@ import {TokenHandler} from "../../shared/TokenHandler.sol"; 
     | 
|
| 
       22 
23 
     | 
    
         
             
            import {IVersionable} from "../../shared/IVersionable.sol";
         
     | 
| 
       23 
24 
     | 
    
         
             
            import {Versionable} from "../../shared/Versionable.sol";
         
     | 
| 
       24 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
            import {AmountLib} from "../../types/Amount.sol";
         
     | 
| 
       25 
27 
     | 
    
         
             
            import {Seconds} from "../../types/Seconds.sol";
         
     | 
| 
       26 
28 
     | 
    
         
             
            import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
         
     | 
| 
       27 
29 
     | 
    
         
             
            import {UFixed, UFixedLib} from "../../types/UFixed.sol";
         
     | 
| 
       28 
30 
     | 
    
         
             
            import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
         
     | 
| 
       29 
31 
     | 
    
         
             
            import {ObjectType, DISTRIBUTION, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, BUNDLE} from "../../types/ObjectType.sol";
         
     | 
| 
       30 
     | 
    
         
            -
            import {APPLIED, REVOKED,  
     | 
| 
      
 32 
     | 
    
         
            +
            import {APPLIED, REVOKED, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
         
     | 
| 
       31 
33 
     | 
    
         
             
            import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
         
     | 
| 
       32 
34 
     | 
    
         
             
            import {Fee, FeeLib} from "../../types/Fee.sol";
         
     | 
| 
       33 
35 
     | 
    
         
             
            import {ReferralId} from "../../types/Referral.sol";
         
     | 
| 
         @@ -64,14 +66,14 @@ contract ApplicationService is 
     | 
|
| 
       64 
66 
     | 
    
         
             
                    address initialOwner;
         
     | 
| 
       65 
67 
     | 
    
         
             
                    (registryAddress, initialOwner) = abi.decode(data, (address, address));
         
     | 
| 
       66 
68 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
                    initializeService(registryAddress, owner);
         
     | 
| 
      
 69 
     | 
    
         
            +
                    initializeService(registryAddress, address(0), owner);
         
     | 
| 
       68 
70 
     | 
    
         
             
                    registerInterface(type(IApplicationService).interfaceId);
         
     | 
| 
       69 
71 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
                    _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(),  
     | 
| 
      
 72 
     | 
    
         
            +
                    _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart()));
         
     | 
| 
       71 
73 
     | 
    
         
             
                }
         
     | 
| 
       72 
74 
     | 
    
         | 
| 
       73 
75 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                function getDomain() public pure override 
     | 
| 
      
 76 
     | 
    
         
            +
                function getDomain() public pure override returns(ObjectType) {
         
     | 
| 
       75 
77 
     | 
    
         
             
                    return APPLICATION();
         
     | 
| 
       76 
78 
     | 
    
         
             
                }
         
     | 
| 
       77 
79 
     | 
    
         | 
| 
         @@ -89,13 +91,13 @@ contract ApplicationService is 
     | 
|
| 
       89 
91 
     | 
    
         
             
                    virtual
         
     | 
| 
       90 
92 
     | 
    
         
             
                    returns (NftId applicationNftId)
         
     | 
| 
       91 
93 
     | 
    
         
             
                {
         
     | 
| 
       92 
     | 
    
         
            -
                    ( 
     | 
| 
      
 94 
     | 
    
         
            +
                    (NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         
     | 
| 
       93 
95 
     | 
    
         
             
                    // TODO: add validations (see create bundle in pool service)
         
     | 
| 
       94 
96 
     | 
    
         | 
| 
       95 
97 
     | 
    
         
             
                    applicationNftId = getRegistryService().registerPolicy(
         
     | 
| 
       96 
98 
     | 
    
         
             
                        IRegistry.ObjectInfo(
         
     | 
| 
       97 
99 
     | 
    
         
             
                            zeroNftId(),
         
     | 
| 
       98 
     | 
    
         
            -
                             
     | 
| 
      
 100 
     | 
    
         
            +
                            productNftId,
         
     | 
| 
       99 
101 
     | 
    
         
             
                            POLICY(),
         
     | 
| 
       100 
102 
     | 
    
         
             
                            false, // intercepting property for policies is defined on product
         
     | 
| 
       101 
103 
     | 
    
         
             
                            address(0),
         
     | 
| 
         @@ -106,7 +108,7 @@ contract ApplicationService is 
     | 
|
| 
       106 
108 
     | 
    
         | 
| 
       107 
109 
     | 
    
         
             
                    // (uint256 premiumAmount,,,,,) = calculatePremium(
         
     | 
| 
       108 
110 
     | 
    
         
             
                    IPolicy.Premium memory premium = calculatePremium(
         
     | 
| 
       109 
     | 
    
         
            -
                         
     | 
| 
      
 111 
     | 
    
         
            +
                        productNftId,
         
     | 
| 
       110 
112 
     | 
    
         
             
                        riskId,
         
     | 
| 
       111 
113 
     | 
    
         
             
                        sumInsuredAmount,
         
     | 
| 
       112 
114 
     | 
    
         
             
                        lifetime,
         
     | 
| 
         @@ -116,7 +118,7 @@ contract ApplicationService is 
     | 
|
| 
       116 
118 
     | 
    
         
             
                    );
         
     | 
| 
       117 
119 
     | 
    
         | 
| 
       118 
120 
     | 
    
         
             
                    IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
         
     | 
| 
       119 
     | 
    
         
            -
                         
     | 
| 
      
 121 
     | 
    
         
            +
                        productNftId,
         
     | 
| 
       120 
122 
     | 
    
         
             
                        bundleNftId,
         
     | 
| 
       121 
123 
     | 
    
         
             
                        referralId,
         
     | 
| 
       122 
124 
     | 
    
         
             
                        riskId,
         
     | 
| 
         @@ -128,14 +130,13 @@ contract ApplicationService is 
     | 
|
| 
       128 
130 
     | 
    
         
             
                        "",
         
     | 
| 
       129 
131 
     | 
    
         
             
                        0,
         
     | 
| 
       130 
132 
     | 
    
         
             
                        0,
         
     | 
| 
       131 
     | 
    
         
            -
                         
     | 
| 
      
 133 
     | 
    
         
            +
                        AmountLib.zero(),
         
     | 
| 
       132 
134 
     | 
    
         
             
                        zeroTimestamp(),
         
     | 
| 
       133 
135 
     | 
    
         
             
                        zeroTimestamp(),
         
     | 
| 
       134 
136 
     | 
    
         
             
                        zeroTimestamp()
         
     | 
| 
       135 
137 
     | 
    
         
             
                    );
         
     | 
| 
       136 
138 
     | 
    
         | 
| 
       137 
139 
     | 
    
         
             
                    instance.createApplication(applicationNftId, policyInfo);
         
     | 
| 
       138 
     | 
    
         
            -
                    instance.updateApplicationState(applicationNftId, APPLIED());
         
     | 
| 
       139 
140 
     | 
    
         | 
| 
       140 
141 
     | 
    
         
             
                    // TODO: add logging
         
     | 
| 
       141 
142 
     | 
    
         
             
                }
         
     | 
| 
         @@ -172,7 +173,7 @@ contract ApplicationService is 
     | 
|
| 
       172 
173 
     | 
    
         
             
                    external
         
     | 
| 
       173 
174 
     | 
    
         
             
                    virtual override
         
     | 
| 
       174 
175 
     | 
    
         
             
                {
         
     | 
| 
       175 
     | 
    
         
            -
                    ( 
     | 
| 
      
 176 
     | 
    
         
            +
                    (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         
     | 
| 
       176 
177 
     | 
    
         
             
                    instance.updateApplicationState(applicationNftId, REVOKED());
         
     | 
| 
       177 
178 
     | 
    
         
             
                }
         
     | 
| 
       178 
179 
     | 
    
         | 
| 
         @@ -254,15 +255,15 @@ contract ApplicationService is 
     | 
|
| 
       254 
255 
     | 
    
         
             
                            premium.fullPremiumAmount += t;
         
     | 
| 
       255 
256 
     | 
    
         
             
                        }
         
     | 
| 
       256 
257 
     | 
    
         
             
                        {
         
     | 
| 
       257 
     | 
    
         
            -
                             
     | 
| 
       258 
     | 
    
         
            -
                            uint256 t =  
     | 
| 
      
 258 
     | 
    
         
            +
                            bytes memory componentData = instanceReader.getComponentInfo(poolNftId).data;
         
     | 
| 
      
 259 
     | 
    
         
            +
                            uint256 t = abi.decode(componentData, (IComponents.PoolInfo)).poolFee.fixedFee;
         
     | 
| 
       259 
260 
     | 
    
         
             
                            premium.poolFeeFixAmount = t;
         
     | 
| 
       260 
261 
     | 
    
         
             
                            premium.fullPremiumAmount += t;
         
     | 
| 
       261 
262 
     | 
    
         
             
                        }
         
     | 
| 
       262 
263 
     | 
    
         
             
                        {
         
     | 
| 
       263 
264 
     | 
    
         
             
                            IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         
     | 
| 
       264 
265 
     | 
    
         
             
                            if(bundleInfo.poolNftId != poolNftId) {
         
     | 
| 
       265 
     | 
    
         
            -
                                revert  
     | 
| 
      
 266 
     | 
    
         
            +
                                revert ErrorApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
         
     | 
| 
       266 
267 
     | 
    
         
             
                            }
         
     | 
| 
       267 
268 
     | 
    
         
             
                            uint256 t = bundleInfo.fee.fixedFee;
         
     | 
| 
       268 
269 
     | 
    
         
             
                            premium.bundleFeeFixAmount = t;
         
     | 
| 
         @@ -307,15 +308,16 @@ contract ApplicationService is 
     | 
|
| 
       307 
308 
     | 
    
         
             
                            premium.fullPremiumAmount += t;
         
     | 
| 
       308 
309 
     | 
    
         
             
                        }
         
     | 
| 
       309 
310 
     | 
    
         
             
                        {
         
     | 
| 
       310 
     | 
    
         
            -
                             
     | 
| 
       311 
     | 
    
         
            -
                             
     | 
| 
      
 311 
     | 
    
         
            +
                            bytes memory componentData = instanceReader.getComponentInfo(poolNftId).data;
         
     | 
| 
      
 312 
     | 
    
         
            +
                            UFixed poolFractionalFee = abi.decode(componentData, (IComponents.PoolInfo)).poolFee.fractionalFee;
         
     | 
| 
      
 313 
     | 
    
         
            +
                            uint256 t = (UFixedLib.toUFixed(netPremiumAmount) * poolFractionalFee).toInt();
         
     | 
| 
       312 
314 
     | 
    
         
             
                            premium.poolFeeVarAmount = t;
         
     | 
| 
       313 
315 
     | 
    
         
             
                            premium.fullPremiumAmount += t;
         
     | 
| 
       314 
316 
     | 
    
         
             
                        }
         
     | 
| 
       315 
317 
     | 
    
         
             
                        {
         
     | 
| 
       316 
318 
     | 
    
         
             
                            IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
         
     | 
| 
       317 
319 
     | 
    
         
             
                            if(bundleInfo.poolNftId != poolNftId) {
         
     | 
| 
       318 
     | 
    
         
            -
                                revert  
     | 
| 
      
 320 
     | 
    
         
            +
                                revert ErrorApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
         
     | 
| 
       319 
321 
     | 
    
         
             
                            }
         
     | 
| 
       320 
322 
     | 
    
         
             
                            uint256 t = (UFixedLib.toUFixed(netPremiumAmount) * bundleInfo.fee.fractionalFee).toInt();
         
     | 
| 
       321 
323 
     | 
    
         
             
                            premium.bundleFeeVarAmount = t;
         
     | 
| 
         @@ -336,14 +338,18 @@ contract ApplicationService is 
     | 
|
| 
       336 
338 
     | 
    
         | 
| 
       337 
339 
     | 
    
         
             
                function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
         
     | 
| 
       338 
340 
     | 
    
         
             
                    IRegistry.ObjectInfo memory productInfo;
         
     | 
| 
       339 
     | 
    
         
            -
                    (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         
     | 
| 
      
 341 
     | 
    
         
            +
                    (, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         
     | 
| 
       340 
342 
     | 
    
         
             
                    product = Product(productInfo.objectAddress);
         
     | 
| 
       341 
343 
     | 
    
         
             
                }
         
     | 
| 
       342 
344 
     | 
    
         | 
| 
       343 
345 
     | 
    
         
             
                function _getAndVerifyProduct(NftId productNftId) internal view returns (Product product) {
         
     | 
| 
       344 
346 
     | 
    
         
             
                    IRegistry registry = getRegistry();        
         
     | 
| 
       345 
347 
     | 
    
         
             
                    IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productNftId);
         
     | 
| 
       346 
     | 
    
         
            -
             
     | 
| 
      
 348 
     | 
    
         
            +
             
     | 
| 
      
 349 
     | 
    
         
            +
                    if(productInfo.objectType != PRODUCT()) {
         
     | 
| 
      
 350 
     | 
    
         
            +
                        revert ErrorApplicationServiceNotProduct(productNftId, productInfo.objectType);
         
     | 
| 
      
 351 
     | 
    
         
            +
                    }
         
     | 
| 
      
 352 
     | 
    
         
            +
             
     | 
| 
       347 
353 
     | 
    
         
             
                    product = Product(productInfo.objectAddress);
         
     | 
| 
       348 
354 
     | 
    
         
             
                }
         
     | 
| 
       349 
355 
     | 
    
         
             
            }
         
     |