@etherisc/gif-next 0.0.2-f29e479-370 → 0.0.2-f2df3e2-873
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -83
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +78 -89
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +139 -140
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +156 -64
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +181 -112
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +353 -176
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -138
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +299 -245
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +83 -162
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +527 -400
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +175 -51
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +500 -612
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -126
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +253 -236
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +305 -211
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +71 -23
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +86 -31
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +291 -100
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +46 -22
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +422 -252
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +78 -14
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +373 -87
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +55 -7
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +579 -123
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +71 -47
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +200 -46
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +241 -188
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +251 -58
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +444 -25
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +430 -76
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +511 -14
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +544 -153
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +51 -27
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +562 -52
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +24 -12
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +115 -52
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -24
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +18 -37
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +80 -14
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +3 -3
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +87 -16
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +3 -3
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +102 -27
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +185 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/Component.sol +99 -87
- package/contracts/components/Distribution.sol +18 -21
- package/contracts/components/IComponent.sol +40 -18
- package/contracts/components/IDistributionComponent.sol +1 -22
- package/contracts/components/IPoolComponent.sol +73 -47
- package/contracts/components/IProductComponent.sol +3 -2
- package/contracts/components/Pool.sol +178 -130
- package/contracts/components/Product.sol +157 -71
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +10 -9
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +37 -27
- package/contracts/instance/IInstanceService.sol +18 -9
- package/contracts/instance/Instance.sol +117 -98
- package/contracts/instance/InstanceAccessManager.sol +388 -158
- package/contracts/instance/InstanceReader.sol +36 -12
- package/contracts/instance/InstanceService.sol +193 -191
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +13 -5
- package/contracts/instance/base/Lifecycle.sol +23 -6
- package/contracts/instance/module/IAccess.sol +21 -14
- package/contracts/instance/module/IBundle.sol +8 -5
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +2 -1
- package/contracts/instance/module/IPolicy.sol +37 -7
- package/contracts/instance/module/ISetup.sol +7 -22
- package/contracts/instance/service/ApplicationService.sol +137 -50
- package/contracts/instance/service/BundleService.sol +221 -83
- package/contracts/instance/service/ClaimService.sol +114 -26
- package/contracts/instance/service/DistributionService.sol +174 -118
- package/contracts/instance/service/IApplicationService.sol +9 -13
- package/contracts/instance/service/IBundleService.sol +68 -26
- package/contracts/instance/service/IClaimService.sol +46 -15
- package/contracts/instance/service/IDistributionService.sol +20 -4
- package/contracts/instance/service/IPolicyService.sol +69 -21
- package/contracts/instance/service/IPoolService.sol +82 -3
- package/contracts/instance/service/PolicyService.sol +297 -232
- package/contracts/instance/service/PoolService.sol +214 -20
- package/contracts/instance/service/ProductService.sol +31 -54
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +2 -0
- package/contracts/registry/IRegistryService.sol +4 -3
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +23 -20
- package/contracts/registry/RegistryService.sol +15 -16
- package/contracts/registry/ReleaseManager.sol +20 -18
- package/contracts/shared/IService.sol +4 -6
- package/contracts/shared/Registerable.sol +2 -2
- package/contracts/shared/Service.sol +21 -7
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +65 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +6 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +13 -6
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +7 -2
- package/contracts/types/Timestamp.sol +18 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +1 -1
| @@ -3,24 +3,31 @@ pragma solidity ^0.8.19; | |
| 3 3 |  | 
| 4 4 | 
             
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 5 |  | 
| 6 | 
            +
            import {Amount} from "../types/Amount.sol";
         | 
| 7 | 
            +
            import {ClaimId} from "../types/ClaimId.sol";
         | 
| 8 | 
            +
            import {Component} from "./Component.sol";
         | 
| 9 | 
            +
            import {Fee} from "../types/Fee.sol";
         | 
| 6 10 | 
             
            import {IRisk} from "../instance/module/IRisk.sol";
         | 
| 7 11 | 
             
            import {IApplicationService} from "../instance/service/IApplicationService.sol";
         | 
| 8 12 | 
             
            import {IPolicyService} from "../instance/service/IPolicyService.sol";
         | 
| 13 | 
            +
            import {IProductService} from "../instance/service/IProductService.sol";
         | 
| 9 14 | 
             
            import {IClaimService} from "../instance/service/IClaimService.sol";
         | 
| 10 15 | 
             
            import {IProductComponent} from "./IProductComponent.sol";
         | 
| 11 16 | 
             
            import {NftId, NftIdLib} from "../types/NftId.sol";
         | 
| 17 | 
            +
            import {PayoutId} from "../types/PayoutId.sol";
         | 
| 12 18 | 
             
            import {PRODUCT, APPLICATION, POLICY, CLAIM } from "../types/ObjectType.sol";
         | 
| 13 19 | 
             
            import {ReferralId} from "../types/Referral.sol";
         | 
| 14 20 | 
             
            import {RiskId, RiskIdLib} from "../types/RiskId.sol";
         | 
| 21 | 
            +
            import {Seconds} from "../types/Seconds.sol";
         | 
| 15 22 | 
             
            import {StateId} from "../types/StateId.sol";
         | 
| 16 23 | 
             
            import {Timestamp} from "../types/Timestamp.sol";
         | 
| 17 | 
            -
            import {Fee} from "../types/Fee.sol";
         | 
| 18 | 
            -
            import {Component} from "./Component.sol";
         | 
| 19 24 |  | 
| 20 25 | 
             
            import {TokenHandler} from "../shared/TokenHandler.sol";
         | 
| 21 26 |  | 
| 22 27 | 
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 28 | 
            +
            import {IPolicy} from "../instance/module/IPolicy.sol";
         | 
| 23 29 | 
             
            import {ISetup} from "../instance/module/ISetup.sol";
         | 
| 30 | 
            +
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 24 31 | 
             
            import {Pool} from "../components/Pool.sol";
         | 
| 25 32 | 
             
            import {Distribution} from "../components/Distribution.sol";
         | 
| 26 33 |  | 
| @@ -32,6 +39,7 @@ abstract contract Product is | |
| 32 39 | 
             
                bytes32 public constant PRODUCT_STORAGE_LOCATION_V1 = 0x0bb7aafdb8e380f81267337bc5b5dfdf76e6d3a380ecadb51ec665246d9d6800;
         | 
| 33 40 |  | 
| 34 41 | 
             
                struct ProductStorage {
         | 
| 42 | 
            +
                    IProductService _productService;
         | 
| 35 43 | 
             
                    IApplicationService _applicationService;
         | 
| 36 44 | 
             
                    IPolicyService _policyService;
         | 
| 37 45 | 
             
                    IClaimService _claimService;
         | 
| @@ -55,20 +63,21 @@ abstract contract Product is | |
| 55 63 | 
             
                    Fee memory productFee,
         | 
| 56 64 | 
             
                    Fee memory processingFee,
         | 
| 57 65 | 
             
                    address initialOwner,
         | 
| 58 | 
            -
                    bytes memory data
         | 
| 66 | 
            +
                    bytes memory registryData // writeonly data that will saved in the object info record of the registry
         | 
| 59 67 | 
             
                )
         | 
| 60 68 | 
             
                    public
         | 
| 61 69 | 
             
                    virtual
         | 
| 62 70 | 
             
                    onlyInitializing()
         | 
| 63 71 | 
             
                {
         | 
| 64 | 
            -
                    initializeComponent(registry, instanceNftId, name, token, PRODUCT(), isInterceptor, initialOwner,  | 
| 72 | 
            +
                    initializeComponent(registry, instanceNftId, name, token, PRODUCT(), isInterceptor, initialOwner, registryData);
         | 
| 65 73 |  | 
| 66 74 | 
             
                    ProductStorage storage $ = _getProductStorage();
         | 
| 67 75 | 
             
                    // TODO add validation
         | 
| 68 | 
            -
                    // TODO refactor to go via registry
         | 
| 69 | 
            -
                    $. | 
| 70 | 
            -
                    $. | 
| 71 | 
            -
                    $. | 
| 76 | 
            +
                    // TODO refactor to go via registry ?
         | 
| 77 | 
            +
                    $._productService = IProductService(_getServiceAddress(PRODUCT())); 
         | 
| 78 | 
            +
                    $._applicationService = IApplicationService(_getServiceAddress(APPLICATION())); 
         | 
| 79 | 
            +
                    $._policyService = IPolicyService(_getServiceAddress(POLICY())); 
         | 
| 80 | 
            +
                    $._claimService = IClaimService(_getServiceAddress(CLAIM())); 
         | 
| 72 81 | 
             
                    $._pool = Pool(pool);
         | 
| 73 82 | 
             
                    $._distribution = Distribution(distribution);
         | 
| 74 83 | 
             
                    $._initialProductFee = productFee;
         | 
| @@ -80,55 +89,24 @@ abstract contract Product is | |
| 80 89 | 
             
                    registerInterface(type(IProductComponent).interfaceId);  
         | 
| 81 90 | 
             
                }
         | 
| 82 91 |  | 
| 83 | 
            -
             | 
| 84 | 
            -
                function  | 
| 85 | 
            -
                     | 
| 86 | 
            -
                     | 
| 87 | 
            -
                    uint256 lifetime,
         | 
| 88 | 
            -
                    bytes memory applicationData,
         | 
| 89 | 
            -
                    NftId bundleNftId,
         | 
| 90 | 
            -
                    ReferralId referralId
         | 
| 91 | 
            -
                )
         | 
| 92 | 
            -
                    external 
         | 
| 93 | 
            -
                    view 
         | 
| 94 | 
            -
                    override 
         | 
| 95 | 
            -
                    returns (uint256 premiumAmount)
         | 
| 96 | 
            -
                {
         | 
| 97 | 
            -
                    (premiumAmount,,,,) = _getProductStorage()._policyService.calculatePremium(
         | 
| 98 | 
            -
                        riskId,
         | 
| 99 | 
            -
                        sumInsuredAmount,
         | 
| 100 | 
            -
                        lifetime,
         | 
| 101 | 
            -
                        applicationData,
         | 
| 102 | 
            -
                        bundleNftId,
         | 
| 103 | 
            -
                        referralId
         | 
| 104 | 
            -
                    );
         | 
| 105 | 
            -
                }
         | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
                function calculateNetPremium(
         | 
| 109 | 
            -
                    uint256 sumInsuredAmount,
         | 
| 110 | 
            -
                    RiskId riskId,
         | 
| 111 | 
            -
                    uint256 lifetime,
         | 
| 112 | 
            -
                    bytes memory applicationData
         | 
| 92 | 
            +
                // from product component
         | 
| 93 | 
            +
                function setFees(
         | 
| 94 | 
            +
                    Fee memory productFee,
         | 
| 95 | 
            +
                    Fee memory processingFee
         | 
| 113 96 | 
             
                )
         | 
| 114 97 | 
             
                    external
         | 
| 115 | 
            -
                     | 
| 116 | 
            -
                     | 
| 117 | 
            -
                     | 
| 98 | 
            +
                    onlyOwner
         | 
| 99 | 
            +
                    restricted()
         | 
| 100 | 
            +
                    override
         | 
| 118 101 | 
             
                {
         | 
| 119 | 
            -
                     | 
| 120 | 
            -
                    return sumInsuredAmount / 10;
         | 
| 121 | 
            -
                }
         | 
| 122 | 
            -
             | 
| 123 | 
            -
                function _toRiskId(string memory riskName) internal pure returns (RiskId riskId) {
         | 
| 124 | 
            -
                    return RiskIdLib.toRiskId(riskName);
         | 
| 102 | 
            +
                    _getProductService().setFees(productFee, processingFee);
         | 
| 125 103 | 
             
                }
         | 
| 126 104 |  | 
| 127 105 | 
             
                function _createRisk(
         | 
| 128 106 | 
             
                    RiskId id,
         | 
| 129 107 | 
             
                    bytes memory data
         | 
| 130 108 | 
             
                ) internal {
         | 
| 131 | 
            -
                     | 
| 109 | 
            +
                    _getProductService().createRisk(
         | 
| 132 110 | 
             
                        id,
         | 
| 133 111 | 
             
                        data
         | 
| 134 112 | 
             
                    );
         | 
| @@ -138,7 +116,7 @@ abstract contract Product is | |
| 138 116 | 
             
                    RiskId id,
         | 
| 139 117 | 
             
                    bytes memory data
         | 
| 140 118 | 
             
                ) internal {
         | 
| 141 | 
            -
                     | 
| 119 | 
            +
                    _getProductService().updateRisk(
         | 
| 142 120 | 
             
                        id,
         | 
| 143 121 | 
             
                        data
         | 
| 144 122 | 
             
                    );
         | 
| @@ -148,7 +126,7 @@ abstract contract Product is | |
| 148 126 | 
             
                    RiskId id,
         | 
| 149 127 | 
             
                    StateId state
         | 
| 150 128 | 
             
                ) internal {
         | 
| 151 | 
            -
                     | 
| 129 | 
            +
                    _getProductService().updateRiskState(
         | 
| 152 130 | 
             
                        id,
         | 
| 153 131 | 
             
                        state
         | 
| 154 132 | 
             
                    );
         | 
| @@ -162,7 +140,7 @@ abstract contract Product is | |
| 162 140 | 
             
                    address applicationOwner,
         | 
| 163 141 | 
             
                    RiskId riskId,
         | 
| 164 142 | 
             
                    uint256 sumInsuredAmount,
         | 
| 165 | 
            -
                     | 
| 143 | 
            +
                    Seconds lifetime,
         | 
| 166 144 | 
             
                    NftId bundleNftId,
         | 
| 167 145 | 
             
                    ReferralId referralId,
         | 
| 168 146 | 
             
                    bytes memory applicationData
         | 
| @@ -181,14 +159,14 @@ abstract contract Product is | |
| 181 159 | 
             
                    );
         | 
| 182 160 | 
             
                }
         | 
| 183 161 |  | 
| 184 | 
            -
                function  | 
| 162 | 
            +
                function _collateralize(
         | 
| 185 163 | 
             
                    NftId policyNftId,
         | 
| 186 164 | 
             
                    bool requirePremiumPayment,
         | 
| 187 165 | 
             
                    Timestamp activateAt
         | 
| 188 166 | 
             
                )
         | 
| 189 167 | 
             
                    internal
         | 
| 190 168 | 
             
                {
         | 
| 191 | 
            -
                    _getProductStorage()._policyService. | 
| 169 | 
            +
                    _getProductStorage()._policyService.collateralize(
         | 
| 192 170 | 
             
                        policyNftId, 
         | 
| 193 171 | 
             
                        requirePremiumPayment, 
         | 
| 194 172 | 
             
                        activateAt);
         | 
| @@ -221,28 +199,136 @@ abstract contract Product is | |
| 221 199 | 
             
                )
         | 
| 222 200 | 
             
                    internal
         | 
| 223 201 | 
             
                {
         | 
| 224 | 
            -
                    _getProductStorage()._policyService.close( | 
| 202 | 
            +
                    _getProductStorage()._policyService.close(
         | 
| 203 | 
            +
                        policyNftId);
         | 
| 225 204 | 
             
                }
         | 
| 226 205 |  | 
| 227 | 
            -
                function  | 
| 228 | 
            -
                     | 
| 206 | 
            +
                function _submitClaim(
         | 
| 207 | 
            +
                    NftId policyNftId,
         | 
| 208 | 
            +
                    Amount claimAmount,
         | 
| 209 | 
            +
                    bytes memory claimData
         | 
| 210 | 
            +
                )
         | 
| 211 | 
            +
                    internal
         | 
| 212 | 
            +
                    returns(ClaimId)
         | 
| 213 | 
            +
                {
         | 
| 214 | 
            +
                    return _getProductStorage()._policyService.submitClaim(
         | 
| 215 | 
            +
                        policyNftId,
         | 
| 216 | 
            +
                        claimAmount,
         | 
| 217 | 
            +
                        claimData);
         | 
| 229 218 | 
             
                }
         | 
| 230 219 |  | 
| 231 | 
            -
                function  | 
| 232 | 
            -
                     | 
| 220 | 
            +
                function _confirmClaim(
         | 
| 221 | 
            +
                    NftId policyNftId,
         | 
| 222 | 
            +
                    ClaimId claimId,
         | 
| 223 | 
            +
                    Amount confirmedAmount
         | 
| 224 | 
            +
                )
         | 
| 225 | 
            +
                    internal
         | 
| 226 | 
            +
                {
         | 
| 227 | 
            +
                    _getProductStorage()._policyService.confirmClaim(
         | 
| 228 | 
            +
                        policyNftId,
         | 
| 229 | 
            +
                        claimId,
         | 
| 230 | 
            +
                        confirmedAmount);
         | 
| 233 231 | 
             
                }
         | 
| 234 232 |  | 
| 235 | 
            -
                 | 
| 236 | 
            -
             | 
| 237 | 
            -
                     | 
| 238 | 
            -
             | 
| 233 | 
            +
                function _declineClaim(
         | 
| 234 | 
            +
                    NftId policyNftId,
         | 
| 235 | 
            +
                    ClaimId claimId
         | 
| 236 | 
            +
                )
         | 
| 237 | 
            +
                    internal
         | 
| 238 | 
            +
                {
         | 
| 239 | 
            +
                    _getProductStorage()._policyService.declineClaim(
         | 
| 240 | 
            +
                        policyNftId,
         | 
| 241 | 
            +
                        claimId);
         | 
| 242 | 
            +
                }
         | 
| 243 | 
            +
             | 
| 244 | 
            +
                function _closeClaim(
         | 
| 245 | 
            +
                    NftId policyNftId,
         | 
| 246 | 
            +
                    ClaimId claimId
         | 
| 247 | 
            +
                )
         | 
| 248 | 
            +
                    internal
         | 
| 249 | 
            +
                {
         | 
| 250 | 
            +
                    _getProductStorage()._policyService.closeClaim(
         | 
| 251 | 
            +
                        policyNftId,
         | 
| 252 | 
            +
                        claimId);
         | 
| 253 | 
            +
                }
         | 
| 254 | 
            +
             | 
| 255 | 
            +
                function _createPayout(
         | 
| 256 | 
            +
                    NftId policyNftId,
         | 
| 257 | 
            +
                    ClaimId claimId,
         | 
| 258 | 
            +
                    Amount amount,
         | 
| 259 | 
            +
                    bytes memory data
         | 
| 260 | 
            +
                )
         | 
| 261 | 
            +
                    internal
         | 
| 262 | 
            +
                    returns (PayoutId)
         | 
| 263 | 
            +
                {
         | 
| 264 | 
            +
                    return _getProductStorage()._policyService.createPayout(
         | 
| 265 | 
            +
                        policyNftId, 
         | 
| 266 | 
            +
                        claimId, 
         | 
| 267 | 
            +
                        amount, 
         | 
| 268 | 
            +
                        data);
         | 
| 269 | 
            +
                }
         | 
| 270 | 
            +
             | 
| 271 | 
            +
                function _processPayout(
         | 
| 272 | 
            +
                    NftId policyNftId,
         | 
| 273 | 
            +
                    PayoutId payoutId
         | 
| 274 | 
            +
                )
         | 
| 275 | 
            +
                    internal
         | 
| 276 | 
            +
                {
         | 
| 277 | 
            +
                    _getProductStorage()._policyService.processPayout(
         | 
| 278 | 
            +
                        policyNftId,
         | 
| 279 | 
            +
                        payoutId);
         | 
| 280 | 
            +
                }
         | 
| 281 | 
            +
             | 
| 282 | 
            +
                function calculatePremium(
         | 
| 283 | 
            +
                    uint256 sumInsuredAmount,
         | 
| 284 | 
            +
                    RiskId riskId,
         | 
| 285 | 
            +
                    Seconds lifetime,
         | 
| 286 | 
            +
                    bytes memory applicationData,
         | 
| 287 | 
            +
                    NftId bundleNftId,
         | 
| 288 | 
            +
                    ReferralId referralId
         | 
| 289 | 
            +
                )
         | 
| 290 | 
            +
                    external 
         | 
| 291 | 
            +
                    view 
         | 
| 292 | 
            +
                    override 
         | 
| 293 | 
            +
                    returns (uint256 premiumAmount)
         | 
| 294 | 
            +
                {
         | 
| 295 | 
            +
                    IPolicy.Premium memory premium = _getProductStorage()._applicationService.calculatePremium(
         | 
| 296 | 
            +
                        getNftId(),
         | 
| 297 | 
            +
                        riskId,
         | 
| 298 | 
            +
                        sumInsuredAmount,
         | 
| 299 | 
            +
                        lifetime,
         | 
| 300 | 
            +
                        applicationData,
         | 
| 301 | 
            +
                        bundleNftId,
         | 
| 302 | 
            +
                        referralId
         | 
| 303 | 
            +
                    );
         | 
| 304 | 
            +
                    premiumAmount = premium.premiumAmount;
         | 
| 305 | 
            +
                }
         | 
| 306 | 
            +
             | 
| 307 | 
            +
                function calculateNetPremium(
         | 
| 308 | 
            +
                    uint256 sumInsuredAmount,
         | 
| 309 | 
            +
                    RiskId riskId,
         | 
| 310 | 
            +
                    Seconds lifetime,
         | 
| 311 | 
            +
                    bytes memory applicationData
         | 
| 239 312 | 
             
                )
         | 
| 240 313 | 
             
                    external
         | 
| 241 | 
            -
                     | 
| 242 | 
            -
                     | 
| 243 | 
            -
                     | 
| 314 | 
            +
                    view
         | 
| 315 | 
            +
                    virtual override
         | 
| 316 | 
            +
                    returns (uint256 netPremiumAmount)
         | 
| 244 317 | 
             
                {
         | 
| 245 | 
            -
                     | 
| 318 | 
            +
                    // default 10% of sum insured
         | 
| 319 | 
            +
                    return sumInsuredAmount / 10;
         | 
| 320 | 
            +
                }
         | 
| 321 | 
            +
             | 
| 322 | 
            +
                function _toRiskId(string memory riskName) internal pure returns (RiskId riskId) {
         | 
| 323 | 
            +
                    return RiskIdLib.toRiskId(riskName);
         | 
| 324 | 
            +
                }
         | 
| 325 | 
            +
             | 
| 326 | 
            +
                function getPoolNftId() external view override returns (NftId poolNftId) {
         | 
| 327 | 
            +
                    return getRegistry().getNftId(address(_getProductStorage()._pool));
         | 
| 328 | 
            +
                }
         | 
| 329 | 
            +
             | 
| 330 | 
            +
                function getDistributionNftId() external view override returns (NftId distributionNftId) {
         | 
| 331 | 
            +
                    return getRegistry().getNftId(address(_getProductStorage()._distribution));
         | 
| 246 332 | 
             
                }
         | 
| 247 333 |  | 
| 248 334 | 
             
                function getSetupInfo() public view returns (ISetup.ProductSetupInfo memory setupInfo) {
         | 
| @@ -259,19 +345,15 @@ abstract contract Product is | |
| 259 345 | 
             
                    ProductStorage storage $ = _getProductStorage();
         | 
| 260 346 |  | 
| 261 347 | 
             
                    ISetup.DistributionSetupInfo memory distributionSetupInfo = $._distribution.getSetupInfo();
         | 
| 262 | 
            -
                     | 
| 348 | 
            +
                    IComponents.PoolInfo memory poolInfo = $._pool.getPoolInfo();
         | 
| 263 349 |  | 
| 264 350 | 
             
                    return ISetup.ProductSetupInfo(
         | 
| 265 351 | 
             
                        getToken(),
         | 
| 266 352 | 
             
                        $._tokenHandler,
         | 
| 267 353 | 
             
                        $._distributionNftId,
         | 
| 268 354 | 
             
                        $._poolNftId,
         | 
| 269 | 
            -
                        distributionSetupInfo.distributionFee, 
         | 
| 270 355 | 
             
                        $._initialProductFee,
         | 
| 271 356 | 
             
                        $._initialProcessingFee,
         | 
| 272 | 
            -
                        poolSetupInfo.poolFee, 
         | 
| 273 | 
            -
                        poolSetupInfo.stakingFee, 
         | 
| 274 | 
            -
                        poolSetupInfo.performanceFee,
         | 
| 275 357 | 
             
                        false,
         | 
| 276 358 | 
             
                        getWallet()
         | 
| 277 359 | 
             
                    );
         | 
| @@ -282,4 +364,8 @@ abstract contract Product is | |
| 282 364 | 
             
                        $.slot := PRODUCT_STORAGE_LOCATION_V1
         | 
| 283 365 | 
             
                    }
         | 
| 284 366 | 
             
                }
         | 
| 367 | 
            +
             | 
| 368 | 
            +
                function _getProductService() internal view returns (IProductService) {
         | 
| 369 | 
            +
                    return _getProductStorage()._productService;
         | 
| 370 | 
            +
                }
         | 
| 285 371 | 
             
            }
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
         | 
| 5 | 
            +
             | 
| 6 | 
            +
             | 
| 7 | 
            +
            contract AccessManagerUpgradeableInitializeable is AccessManagerUpgradeable {
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                function initialize(address initialAdmin) initializer public {
         | 
| 10 | 
            +
                    __AccessManager_init(initialAdmin);        
         | 
| 11 | 
            +
                }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            }
         | 
| @@ -22,9 +22,10 @@ contract BundleManager is | |
| 22 22 | 
             
                event LogBundleManagerBundleAdded(NftId poolNftId, NftId bundleNftId);
         | 
| 23 23 | 
             
                event LogBundleManagerBundleUnlocked(NftId poolNftId, NftId bundleNftId);
         | 
| 24 24 | 
             
                event LogBundleManagerBundleLocked(NftId poolNftId, NftId bundleNftId);
         | 
| 25 | 
            +
                event LogBundleManagerBundleClosed(NftId poolNftId, NftId bundleNftId);
         | 
| 25 26 |  | 
| 26 | 
            -
                error  | 
| 27 | 
            -
                error  | 
| 27 | 
            +
                error ErrorBundleManagerPolicyAlreadyActivated(NftId policyNftId);
         | 
| 28 | 
            +
                error ErrorBundleManagerBundleLocked(NftId bundleNftId, NftId policyNftId);
         | 
| 28 29 | 
             
                error ErrorBundleManagerPolicyWithOpenClaims(NftId policyNftId, uint256 openClaimsCount);
         | 
| 29 30 | 
             
                error ErrorBundleManagerPolicyNotCloseable(NftId policyNftId);
         | 
| 30 31 | 
             
                error ErrorBundleManagerBundleUnknown(NftId bundleNftId);
         | 
| @@ -32,9 +33,8 @@ contract BundleManager is | |
| 32 33 |  | 
| 33 34 | 
             
                mapping(NftId bundleNftId => LibNftIdSet.Set policies) internal _activePolicies;
         | 
| 34 35 |  | 
| 35 | 
            -
                /// @dev links a policy  | 
| 36 | 
            -
                // to link a policy it MUST NOT yet have been  | 
| 37 | 
            -
                // the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
         | 
| 36 | 
            +
                /// @dev links a policy to its bundle
         | 
| 37 | 
            +
                // to link a policy it MUST NOT yet have been linked
         | 
| 38 38 | 
             
                function linkPolicy(NftId policyNftId) external restricted() {
         | 
| 39 39 | 
             
                    NftId bundleNftId = _instance.getInstanceReader().getPolicyInfo(policyNftId).bundleNftId;
         | 
| 40 40 | 
             
                    // decision will likely depend on the decision what to check here and what in the service
         | 
| @@ -42,7 +42,7 @@ contract BundleManager is | |
| 42 42 |  | 
| 43 43 | 
             
                    // ensure bundle is unlocked (in active set) and registered with this instance
         | 
| 44 44 | 
             
                    if (!_isActive(poolNftId, bundleNftId)) {
         | 
| 45 | 
            -
                        revert  | 
| 45 | 
            +
                        revert ErrorBundleManagerBundleLocked(bundleNftId, policyNftId);
         | 
| 46 46 | 
             
                    }
         | 
| 47 47 |  | 
| 48 48 | 
             
                    LibNftIdSet.add(_activePolicies[bundleNftId], policyNftId);
         | 
| @@ -71,7 +71,7 @@ contract BundleManager is | |
| 71 71 | 
             
                }
         | 
| 72 72 |  | 
| 73 73 |  | 
| 74 | 
            -
                /// @dev add a new bundle to a  | 
| 74 | 
            +
                /// @dev add a new bundle to a pool registerd with this instance
         | 
| 75 75 | 
             
                // the corresponding pool is fetched via instance reader
         | 
| 76 76 | 
             
                function add(NftId bundleNftId) external restricted() {
         | 
| 77 77 | 
             
                    NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
         | 
| @@ -85,14 +85,15 @@ contract BundleManager is | |
| 85 85 | 
             
                    emit LogBundleManagerBundleAdded(poolNftId, bundleNftId);
         | 
| 86 86 | 
             
                }
         | 
| 87 87 |  | 
| 88 | 
            -
             | 
| 88 | 
            +
             | 
| 89 | 
            +
                /// @dev unlocked (active) bundles are available to collateralize new policies
         | 
| 89 90 | 
             
                function unlock(NftId bundleNftId) external restricted() {
         | 
| 90 91 | 
             
                    NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
         | 
| 91 92 | 
             
                    _activate(poolNftId, bundleNftId);
         | 
| 92 93 | 
             
                    emit LogBundleManagerBundleUnlocked(poolNftId, bundleNftId);
         | 
| 93 94 | 
             
                }
         | 
| 94 95 |  | 
| 95 | 
            -
                /// @dev locked (deactivated) bundles may not  | 
| 96 | 
            +
                /// @dev locked (deactivated) bundles may not collateralize any new policies
         | 
| 96 97 | 
             
                function lock(NftId bundleNftId) external restricted() {
         | 
| 97 98 | 
             
                    NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
         | 
| 98 99 | 
             
                    _deactivate(poolNftId, bundleNftId);
         | 
| @@ -10,7 +10,8 @@ abstract contract Cloneable is | |
| 10 10 | 
             
                AccessManagedUpgradeable
         | 
| 11 11 | 
             
            {
         | 
| 12 12 | 
             
                event CloneableInitialized(address authority, address registry);
         | 
| 13 | 
            -
             | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                error CloneableAuthorityZero();
         | 
| 14 15 | 
             
                error CloneableRegistryInvalid(address registry);
         | 
| 15 16 |  | 
| 16 17 | 
             
                IRegistry internal _registry;
         | 
| @@ -25,9 +26,13 @@ abstract contract Cloneable is | |
| 25 26 | 
             
                    address registry
         | 
| 26 27 | 
             
                )
         | 
| 27 28 | 
             
                    public 
         | 
| 28 | 
            -
                     | 
| 29 | 
            +
                    onlyInitializing
         | 
| 29 30 | 
             
                {
         | 
| 30 31 | 
             
                    // check/handle access managed
         | 
| 32 | 
            +
                    if(authority == address(0)) {
         | 
| 33 | 
            +
                        revert CloneableAuthorityZero();
         | 
| 34 | 
            +
                    }
         | 
| 35 | 
            +
                    
         | 
| 31 36 | 
             
                    __AccessManaged_init(authority);
         | 
| 32 37 |  | 
| 33 38 | 
             
                    // check/handle registry
         | 
| @@ -3,53 +3,57 @@ pragma solidity ^0.8.20; | |
| 3 3 |  | 
| 4 4 | 
             
            import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
         | 
| 5 5 |  | 
| 6 | 
            +
            import {ClaimId} from "../types/ClaimId.sol";
         | 
| 7 | 
            +
            import {DistributorType} from "../types/DistributorType.sol";
         | 
| 8 | 
            +
            import {PayoutId} from "../types/PayoutId.sol";
         | 
| 6 9 | 
             
            import {NftId} from "../types/NftId.sol";
         | 
| 7 10 | 
             
            import {StateId} from "../types/StateId.sol";
         | 
| 11 | 
            +
            import {ReferralId} from "../types/Referral.sol";
         | 
| 8 12 | 
             
            import {RiskId} from "../types/RiskId.sol";
         | 
| 13 | 
            +
            import {VersionPart} from "../types/Version.sol";
         | 
| 14 | 
            +
            import {Key32} from "../types/Key32.sol";
         | 
| 9 15 |  | 
| 10 16 | 
             
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 11 17 |  | 
| 18 | 
            +
            import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
         | 
| 19 | 
            +
             | 
| 12 20 | 
             
            import {InstanceAccessManager} from "./InstanceAccessManager.sol";
         | 
| 13 21 | 
             
            import {BundleManager} from "./BundleManager.sol";
         | 
| 14 22 | 
             
            import {InstanceReader} from "./InstanceReader.sol";
         | 
| 15 23 |  | 
| 16 24 | 
             
            import {IBundle} from "./module/IBundle.sol";
         | 
| 17 25 | 
             
            import {IBundleService} from "./service/IBundleService.sol";
         | 
| 18 | 
            -
            import { | 
| 26 | 
            +
            import {IComponents} from "./module/IComponents.sol";
         | 
| 19 27 | 
             
            import {InstanceAccessManager} from "./InstanceAccessManager.sol";
         | 
| 20 28 | 
             
            import {IKeyValueStore} from "./base/IKeyValueStore.sol";
         | 
| 21 29 | 
             
            import {IPolicy} from "./module/IPolicy.sol";
         | 
| 22 30 | 
             
            import {IDistribution} from "./module/IDistribution.sol";
         | 
| 23 | 
            -
            import {IPolicyService} from "./service/IPolicyService.sol";
         | 
| 24 | 
            -
            import {IPoolService} from "./service/IPoolService.sol";
         | 
| 25 | 
            -
            import {IProductService} from "./service/IProductService.sol";
         | 
| 26 | 
            -
            import {IPolicyService} from "./service/IPolicyService.sol";
         | 
| 27 | 
            -
            import {IBundleService} from "./service/IBundleService.sol";
         | 
| 28 31 | 
             
            import {IRisk} from "./module/IRisk.sol";
         | 
| 29 32 | 
             
            import {ISetup} from "./module/ISetup.sol";
         | 
| 30 | 
            -
            import {NftId} from "../types/NftId.sol";
         | 
| 31 | 
            -
            import {RiskId} from "../types/RiskId.sol";
         | 
| 32 | 
            -
            import {StateId} from "../types/StateId.sol";
         | 
| 33 | 
            -
            import {VersionPart} from "../types/Version.sol";
         | 
| 34 | 
            -
            import {Key32} from "../types/Key32.sol";
         | 
| 35 33 |  | 
| 36 34 |  | 
| 37 35 |  | 
| 36 | 
            +
            interface IInstance is 
         | 
| 37 | 
            +
                IRegisterable, 
         | 
| 38 | 
            +
                ITransferInterceptor, 
         | 
| 39 | 
            +
                IAccessManaged, 
         | 
| 40 | 
            +
                IKeyValueStore 
         | 
| 41 | 
            +
            {
         | 
| 42 | 
            +
                error ErrorInstanceInstanceAccessManagerAlreadySet(address instanceAccessManager);
         | 
| 43 | 
            +
                error ErrorInstanceInstanceAccessManagerAuthorityMismatch(address instanceAuthority);
         | 
| 38 44 |  | 
| 39 | 
            -
             | 
| 45 | 
            +
                error ErrorInstanceBundleManagerAlreadySet(address instanceBundleManager);
         | 
| 46 | 
            +
                error ErrorInstanceBundleManagerInstanceMismatch(address instance);
         | 
| 47 | 
            +
                error ErrorInstanceBundleManagerAuthorityMismatch(address instanceAuthority);
         | 
| 40 48 |  | 
| 41 | 
            -
                 | 
| 42 | 
            -
                function getProductService() external view returns (IProductService);
         | 
| 43 | 
            -
                function getPoolService() external view returns (IPoolService);
         | 
| 44 | 
            -
                function getPolicyService() external view returns (IPolicyService);
         | 
| 45 | 
            -
                function getBundleService() external view returns (IBundleService);
         | 
| 49 | 
            +
                error ErrorInstanceInstanceReaderInstanceMismatch(address instanceAuthority);
         | 
| 46 50 |  | 
| 47 51 | 
             
                function createDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup) external;
         | 
| 48 52 | 
             
                function updateDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup, StateId newState) external;
         | 
| 49 53 | 
             
                function updateDistributionSetupState(NftId distributionNftId, StateId newState) external;
         | 
| 50 54 |  | 
| 51 | 
            -
                function createPoolSetup(NftId poolNftId,  | 
| 52 | 
            -
                function updatePoolSetup(NftId poolNftId,  | 
| 55 | 
            +
                function createPoolSetup(NftId poolNftId, IComponents.ComponentInfo memory info) external;
         | 
| 56 | 
            +
                function updatePoolSetup(NftId poolNftId, IComponents.ComponentInfo memory info, StateId newState) external;
         | 
| 53 57 | 
             
                function updatePoolSetupState(NftId poolNftId, StateId newState) external;
         | 
| 54 58 |  | 
| 55 59 | 
             
                function createBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle) external;
         | 
| @@ -60,17 +64,17 @@ interface IInstance is IRegisterable, IKeyValueStore, IAccessManaged { | |
| 60 64 | 
             
                function updateProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup, StateId newState) external;
         | 
| 61 65 | 
             
                function updateProductSetupState(NftId productNftId, StateId newState) external;
         | 
| 62 66 |  | 
| 63 | 
            -
                function createDistributorType( | 
| 64 | 
            -
                function updateDistributorType( | 
| 65 | 
            -
                function updateDistributorTypeState( | 
| 67 | 
            +
                function createDistributorType(DistributorType distributorType, IDistribution.DistributorTypeInfo memory info) external;
         | 
| 68 | 
            +
                function updateDistributorType(DistributorType distributorType, IDistribution.DistributorTypeInfo memory info, StateId newState) external;
         | 
| 69 | 
            +
                function updateDistributorTypeState(DistributorType distributorType, StateId newState) external;
         | 
| 66 70 |  | 
| 67 71 | 
             
                function createDistributor(NftId nftId, IDistribution.DistributorInfo memory info) external;
         | 
| 68 72 | 
             
                function updateDistributor(NftId nftId, IDistribution.DistributorInfo memory info, StateId newState) external;
         | 
| 69 73 | 
             
                function updateDistributorState(NftId nftId, StateId newState) external;
         | 
| 70 74 |  | 
| 71 | 
            -
                function createReferral( | 
| 72 | 
            -
                function updateReferral( | 
| 73 | 
            -
                function updateReferralState( | 
| 75 | 
            +
                function createReferral(ReferralId referralId, IDistribution.ReferralInfo memory referralInfo) external;
         | 
| 76 | 
            +
                function updateReferral(ReferralId referralId, IDistribution.ReferralInfo memory referralInfo, StateId newState) external;
         | 
| 77 | 
            +
                function updateReferralState(ReferralId referralId, StateId newState) external;
         | 
| 74 78 |  | 
| 75 79 | 
             
                function createRisk(RiskId riskId, IRisk.RiskInfo memory risk) external;
         | 
| 76 80 | 
             
                function updateRisk(RiskId riskId, IRisk.RiskInfo memory risk, StateId newState) external;
         | 
| @@ -83,10 +87,16 @@ interface IInstance is IRegisterable, IKeyValueStore, IAccessManaged { | |
| 83 87 | 
             
                function updatePolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy, StateId newState) external;
         | 
| 84 88 | 
             
                function updatePolicyState(NftId policyNftId, StateId newState) external;
         | 
| 85 89 |  | 
| 86 | 
            -
                 | 
| 87 | 
            -
                 | 
| 90 | 
            +
                function createClaim(NftId policyNftId, ClaimId claimId, IPolicy.ClaimInfo memory claim) external;
         | 
| 91 | 
            +
                function updateClaim(NftId policyNftId, ClaimId claimId, IPolicy.ClaimInfo memory claim, StateId newState) external;
         | 
| 92 | 
            +
                function updateClaimState(NftId policyNftId, ClaimId claimId, StateId newState) external;
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                function createPayout(NftId policyNftId, PayoutId payoutId, IPolicy.PayoutInfo memory claim) external;
         | 
| 95 | 
            +
                function updatePayout(NftId policyNftId, PayoutId payoutId, IPolicy.PayoutInfo memory claim, StateId newState) external;
         | 
| 96 | 
            +
                function updatePayoutState(NftId policyNftId, PayoutId payoutId, StateId newState) external;
         | 
| 88 97 |  | 
| 89 98 | 
             
                function getMajorVersion() external pure returns (VersionPart majorVersion);
         | 
| 90 99 | 
             
                function getInstanceReader() external view returns (InstanceReader);
         | 
| 91 100 | 
             
                function getBundleManager() external view returns (BundleManager);
         | 
| 101 | 
            +
                function getInstanceAccessManager() external view returns (InstanceAccessManager);
         | 
| 92 102 | 
             
            }
         | 
| @@ -5,11 +5,8 @@ import {NftId} from "../types/NftId.sol"; | |
| 5 5 | 
             
            import {ObjectType} from "../types/ObjectType.sol";
         | 
| 6 6 | 
             
            import {RoleId} from "../types/RoleId.sol";
         | 
| 7 7 | 
             
            import {IService} from "../shared/IService.sol";
         | 
| 8 | 
            -
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 11 | 
            -
            import {IComponent} from "../components/IComponent.sol";
         | 
| 12 8 |  | 
| 9 | 
            +
            import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
         | 
| 13 10 | 
             
            import {InstanceAccessManager} from "./InstanceAccessManager.sol";
         | 
| 14 11 | 
             
            import {Instance} from "./Instance.sol";
         | 
| 15 12 | 
             
            import {InstanceReader} from "./InstanceReader.sol";
         | 
| @@ -18,6 +15,7 @@ import {BundleManager} from "./BundleManager.sol"; | |
| 18 15 | 
             
            interface IInstanceService is IService {
         | 
| 19 16 |  | 
| 20 17 | 
             
                error ErrorInstanceServiceMasterInstanceAlreadySet();
         | 
| 18 | 
            +
                error ErrorInstanceServiceMasterOzAccessManagerAlreadySet();
         | 
| 21 19 | 
             
                error ErrorInstanceServiceMasterInstanceAccessManagerAlreadySet();
         | 
| 22 20 | 
             
                error ErrorInstanceServiceMasterBundleManagerAlreadySet();
         | 
| 23 21 | 
             
                error ErrorInstanceServiceInstanceAddressZero();
         | 
| @@ -27,33 +25,44 @@ interface IInstanceService is IService { | |
| 27 25 | 
             
                error ErrorInstanceServiceInstanceReaderSameAsMasterInstanceReader();
         | 
| 28 26 | 
             
                error ErrorInstanceServiceInstanceReaderInstanceMismatch();
         | 
| 29 27 |  | 
| 30 | 
            -
                error  | 
| 28 | 
            +
                error ErrorInstanceServiceOzAccessManagerZero();
         | 
| 29 | 
            +
                error ErrorInstanceServiceInstanceAccessManagerZero();
         | 
| 31 30 | 
             
                error ErrorInstanceServiceInstanceReaderZero();
         | 
| 32 31 | 
             
                error ErrorInstanceServiceBundleManagerZero();
         | 
| 33 32 |  | 
| 34 33 | 
             
                error ErrorInstanceServiceInstanceAuthorityMismatch();
         | 
| 34 | 
            +
                error ErrorInstanceServiceBundleManagerAuthorityMismatch();
         | 
| 35 35 | 
             
                error ErrorInstanceServiceInstanceReaderInstanceMismatch2();
         | 
| 36 36 | 
             
                error ErrorInstanceServiceBundleMangerInstanceMismatch();
         | 
| 37 37 |  | 
| 38 38 | 
             
                error ErrorInstanceServiceRequestUnauhorized(address caller);
         | 
| 39 39 | 
             
                error ErrorInstanceServiceNotInstanceOwner(address caller, NftId instanceNftId);
         | 
| 40 | 
            +
                error ErrorInstanceServiceNotInstance(NftId nftId);
         | 
| 40 41 | 
             
                error ErrorInstanceServiceComponentNotRegistered(address componentAddress);
         | 
| 42 | 
            +
                error ErrorInstanceServiceInstanceComponentMismatch(NftId instanceNftId, NftId componentNftId);
         | 
| 41 43 | 
             
                error ErrorInstanceServiceInvalidComponentType(address componentAddress, ObjectType expectedType, ObjectType componentType);
         | 
| 42 44 |  | 
| 43 | 
            -
                event LogInstanceCloned(address  | 
| 45 | 
            +
                event LogInstanceCloned(address clonedOzAccessManager, address clonedInstanceAccessManager, address clonedInstance, address clonedBundleManager, address clonedInstanceReader, NftId clonedInstanceNftId);
         | 
| 44 46 |  | 
| 45 47 | 
             
                function createInstanceClone()
         | 
| 46 48 | 
             
                    external 
         | 
| 47 49 | 
             
                    returns (
         | 
| 48 | 
            -
                         | 
| 50 | 
            +
                        AccessManagerUpgradeableInitializeable clonedOzAccessManager,
         | 
| 51 | 
            +
                        InstanceAccessManager clonedInstanceAccessManager, 
         | 
| 49 52 | 
             
                        Instance clonedInstance,
         | 
| 50 53 | 
             
                        NftId instanceNftId,
         | 
| 51 54 | 
             
                        InstanceReader clonedInstanceReader,
         | 
| 52 55 | 
             
                        BundleManager clonedBundleManager
         | 
| 53 56 | 
             
                    );
         | 
| 54 57 |  | 
| 55 | 
            -
                function  | 
| 56 | 
            -
             | 
| 58 | 
            +
                function createGifTarget(
         | 
| 59 | 
            +
                    NftId instanceNftId,
         | 
| 60 | 
            +
                    address targetAddress,
         | 
| 61 | 
            +
                    string memory targetName,
         | 
| 62 | 
            +
                    bytes4[][] memory selectors,
         | 
| 63 | 
            +
                    RoleId[] memory roles
         | 
| 64 | 
            +
                ) external;
         | 
| 57 65 |  | 
| 66 | 
            +
                function setComponentLocked(bool locked) external;
         | 
| 58 67 | 
             
            }
         | 
| 59 68 |  |