@etherisc/gif-next 0.0.2-f2df3e2-873 → 0.0.2-f398177-971
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +37 -6
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +44 -13
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +37 -6
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +44 -13
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +55 -24
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +52 -21
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +55 -24
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +52 -21
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +252 -2210
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +21 -38
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +346 -2685
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +67 -49
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +219 -53
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +59 -220
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +32 -117
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +37 -13
- 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 +2 -2
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +75 -217
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +33 -66
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +155 -133
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +35 -64
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +463 -119
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +109 -42
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +181 -399
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +81 -94
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +11 -145
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +79 -30
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +229 -88
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +23 -273
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +40 -326
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +265 -32
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +510 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +5 -13
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +213 -443
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +74 -75
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +439 -54
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +84 -37
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +1004 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +688 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +55 -31
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +22 -35
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -13
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +17 -25
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +21 -34
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +2 -2
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +10 -23
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +5 -13
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -19
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +14 -27
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +6 -19
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +5 -13
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +6 -19
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +17 -25
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +100 -4
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +2 -2
- 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 +42 -18
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +2 -2
- 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/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/components/Component.sol +21 -2
- package/contracts/components/Distribution.sol +5 -4
- package/contracts/components/IComponent.sol +16 -2
- package/contracts/components/IPoolComponent.sol +7 -6
- package/contracts/components/IProductComponent.sol +5 -4
- package/contracts/components/Pool.sol +8 -8
- package/contracts/components/Product.sol +21 -17
- package/contracts/instance/IInstance.sol +28 -53
- package/contracts/instance/IInstanceService.sol +15 -10
- package/contracts/instance/Instance.sol +90 -171
- package/contracts/instance/InstanceAccessManager.sol +35 -21
- package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
- package/contracts/instance/InstanceReader.sol +56 -5
- package/contracts/instance/InstanceService.sol +96 -266
- package/contracts/instance/InstanceStore.sol +212 -0
- package/contracts/instance/ObjectManager.sol +1 -1
- package/contracts/instance/base/ComponentService.sol +47 -20
- package/contracts/instance/base/KeyValueStore.sol +0 -31
- package/contracts/instance/base/Lifecycle.sol +7 -4
- package/contracts/instance/module/IComponents.sol +3 -3
- package/contracts/instance/module/IDistribution.sol +3 -2
- package/contracts/instance/module/IPolicy.sol +5 -5
- package/contracts/instance/service/ApplicationService.sol +58 -227
- package/contracts/instance/service/BundleService.sol +65 -119
- package/contracts/instance/service/ClaimService.sol +232 -34
- package/contracts/instance/service/DistributionService.sol +51 -134
- package/contracts/instance/service/IApplicationService.sol +5 -21
- package/contracts/instance/service/IBundleService.sol +32 -10
- package/contracts/instance/service/IClaimService.sol +37 -39
- package/contracts/instance/service/IDistributionService.sol +10 -22
- package/contracts/instance/service/IPolicyService.sol +15 -72
- package/contracts/instance/service/IPoolService.sol +18 -3
- package/contracts/instance/service/IPricingService.sol +37 -0
- package/contracts/instance/service/PolicyService.sol +112 -277
- package/contracts/instance/service/PoolService.sol +121 -21
- package/contracts/instance/service/PricingService.sol +275 -0
- package/contracts/instance/service/PricingServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +10 -10
- package/contracts/registry/IRegistryService.sol +0 -2
- package/contracts/registry/RegistryService.sol +14 -10
- package/contracts/shared/IPolicyHolder.sol +23 -9
- package/contracts/shared/IRegistryLinked.sol +0 -1
- package/contracts/shared/IService.sol +2 -0
- package/contracts/shared/NftOwnable.sol +0 -2
- package/contracts/shared/PolicyHolder.sol +30 -17
- package/contracts/shared/Registerable.sol +10 -9
- package/contracts/shared/RegistryLinked.sol +0 -5
- package/contracts/shared/TokenHandler.sol +4 -2
- package/contracts/types/Amount.sol +44 -0
- package/contracts/types/Fee.sol +7 -6
- package/contracts/types/ObjectType.sol +5 -1
- package/package.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
- /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
| @@ -13,7 +13,7 @@ import {IVersionable} from "../../shared/IVersionable.sol"; | |
| 13 13 | 
             
            import {Versionable} from "../../shared/Versionable.sol";
         | 
| 14 14 | 
             
            import {INftOwnable} from "../../shared/INftOwnable.sol";
         | 
| 15 15 |  | 
| 16 | 
            -
            import {Amount} from "../../types/Amount.sol";
         | 
| 16 | 
            +
            import {Amount, AmountLib} from "../../types/Amount.sol";
         | 
| 17 17 | 
             
            import {Fee, FeeLib} from "../../types/Fee.sol";
         | 
| 18 18 | 
             
            import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
         | 
| 19 19 | 
             
            import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
         | 
| @@ -44,6 +44,7 @@ contract PoolService is | |
| 44 44 | 
             
                IPoolService 
         | 
| 45 45 | 
             
            {
         | 
| 46 46 | 
             
                using NftIdLib for NftId;
         | 
| 47 | 
            +
                using AmountLib for Amount;
         | 
| 47 48 |  | 
| 48 49 | 
             
                IBundleService internal _bundleService;
         | 
| 49 50 |  | 
| @@ -95,7 +96,7 @@ contract PoolService is | |
| 95 96 | 
             
                    componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
         | 
| 96 97 |  | 
| 97 98 | 
             
                    // save amended component info with instance
         | 
| 98 | 
            -
                    instance.createPoolSetup(poolNftId, componentInfo);
         | 
| 99 | 
            +
                    instance.getInstanceStore().createPoolSetup(poolNftId, componentInfo);
         | 
| 99 100 |  | 
| 100 101 | 
             
                    bytes4[][] memory selectors = new bytes4[][](2);
         | 
| 101 102 | 
             
                    selectors[0] = new bytes4[](1);
         | 
| @@ -117,20 +118,20 @@ contract PoolService is | |
| 117 118 | 
             
                }
         | 
| 118 119 |  | 
| 119 120 |  | 
| 120 | 
            -
                function setMaxCapitalAmount( | 
| 121 | 
            +
                function setMaxCapitalAmount(Amount maxCapitalAmount)
         | 
| 121 122 | 
             
                    external
         | 
| 122 123 | 
             
                    virtual
         | 
| 123 124 | 
             
                {
         | 
| 124 | 
            -
                    (NftId poolNftId | 
| 125 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
         | 
| 125 126 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 126 127 |  | 
| 127 128 | 
             
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 128 129 | 
             
                    IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
         | 
| 129 | 
            -
                     | 
| 130 | 
            +
                    Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
         | 
| 130 131 |  | 
| 131 132 | 
             
                    poolInfo.maxCapitalAmount = maxCapitalAmount;
         | 
| 132 133 | 
             
                    componentInfo.data = abi.encode(poolInfo);
         | 
| 133 | 
            -
                    instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
         | 
| 134 | 
            +
                    instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
         | 
| 134 135 |  | 
| 135 136 | 
             
                    emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
         | 
| 136 137 | 
             
                }
         | 
| @@ -139,7 +140,7 @@ contract PoolService is | |
| 139 140 | 
             
                    external
         | 
| 140 141 | 
             
                    virtual
         | 
| 141 142 | 
             
                {
         | 
| 142 | 
            -
                    (NftId poolNftId | 
| 143 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
         | 
| 143 144 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 144 145 |  | 
| 145 146 | 
             
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| @@ -152,7 +153,7 @@ contract PoolService is | |
| 152 153 |  | 
| 153 154 | 
             
                    poolInfo.bundleOwnerRole = bundleOwnerRole;
         | 
| 154 155 | 
             
                    componentInfo.data = abi.encode(poolInfo);
         | 
| 155 | 
            -
                    instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
         | 
| 156 | 
            +
                    instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
         | 
| 156 157 |  | 
| 157 158 | 
             
                    emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
         | 
| 158 159 | 
             
                }
         | 
| @@ -166,7 +167,7 @@ contract PoolService is | |
| 166 167 | 
             
                    external
         | 
| 167 168 | 
             
                    virtual
         | 
| 168 169 | 
             
                {
         | 
| 169 | 
            -
                    (NftId poolNftId | 
| 170 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
         | 
| 170 171 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 171 172 |  | 
| 172 173 | 
             
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| @@ -176,7 +177,7 @@ contract PoolService is | |
| 176 177 | 
             
                    poolInfo.stakingFee = stakingFee;
         | 
| 177 178 | 
             
                    poolInfo.performanceFee = performanceFee;
         | 
| 178 179 | 
             
                    componentInfo.data = abi.encode(poolInfo);
         | 
| 179 | 
            -
                    instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
         | 
| 180 | 
            +
                    instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
         | 
| 180 181 |  | 
| 181 182 | 
             
                    // TODO add logging
         | 
| 182 183 | 
             
                }
         | 
| @@ -193,21 +194,25 @@ contract PoolService is | |
| 193 194 | 
             
                    virtual
         | 
| 194 195 | 
             
                    returns(NftId bundleNftId)
         | 
| 195 196 | 
             
                {
         | 
| 196 | 
            -
                    (NftId poolNftId,, IInstance instance) =  | 
| 197 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
         | 
| 197 198 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 198 199 |  | 
| 199 | 
            -
                    //  | 
| 200 | 
            -
                     | 
| 200 | 
            +
                    // pool fee book keeping
         | 
| 201 | 
            +
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 202 | 
            +
                    Amount stakingNetAmount = _processStakingFees(componentInfo, stakingAmount);
         | 
| 201 203 |  | 
| 202 204 | 
             
                    bundleNftId = _bundleService.create(
         | 
| 203 205 | 
             
                        instance,
         | 
| 204 206 | 
             
                        poolNftId,
         | 
| 205 207 | 
             
                        owner,
         | 
| 206 208 | 
             
                        fee,
         | 
| 207 | 
            -
                         | 
| 209 | 
            +
                        stakingNetAmount,
         | 
| 208 210 | 
             
                        lifetime,
         | 
| 209 211 | 
             
                        filter);
         | 
| 210 212 |  | 
| 213 | 
            +
                    // collect tokens from bundle owner
         | 
| 214 | 
            +
                    _transferStakingAmount(componentInfo, owner, stakingAmount);
         | 
| 215 | 
            +
             | 
| 211 216 | 
             
                    emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
         | 
| 212 217 | 
             
                }
         | 
| 213 218 |  | 
| @@ -216,7 +221,7 @@ contract PoolService is | |
| 216 221 | 
             
                    external
         | 
| 217 222 | 
             
                    virtual
         | 
| 218 223 | 
             
                {
         | 
| 219 | 
            -
                    (NftId poolNftId,, IInstance instance) =  | 
| 224 | 
            +
                    (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
         | 
| 220 225 |  | 
| 221 226 | 
             
                    // TODO book keeping for pool collateral released outside of retention level
         | 
| 222 227 |  | 
| @@ -228,13 +233,45 @@ contract PoolService is | |
| 228 233 | 
             
                    emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
         | 
| 229 234 | 
             
                }
         | 
| 230 235 |  | 
| 236 | 
            +
                function processSale(
         | 
| 237 | 
            +
                    NftId bundleNftId, 
         | 
| 238 | 
            +
                    IPolicy.Premium memory premium, 
         | 
| 239 | 
            +
                    Amount actualAmountTransferred
         | 
| 240 | 
            +
                ) 
         | 
| 241 | 
            +
                    external
         | 
| 242 | 
            +
                    virtual
         | 
| 243 | 
            +
                {
         | 
| 244 | 
            +
                    IRegistry registry = getRegistry();
         | 
| 245 | 
            +
                    IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
         | 
| 246 | 
            +
                    IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
         | 
| 247 | 
            +
                    IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
         | 
| 248 | 
            +
                    IInstance instance = IInstance(instanceObjectInfo.objectAddress);
         | 
| 249 | 
            +
             | 
| 250 | 
            +
                    Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
         | 
| 251 | 
            +
                    Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
         | 
| 252 | 
            +
                    Amount expectedTransferAmount = AmountLib.toAmount(premium.netPremiumAmount) + poolFeeAmount + bundleFeeAmount;
         | 
| 253 | 
            +
                    if (!(actualAmountTransferred == expectedTransferAmount)) {
         | 
| 254 | 
            +
                        revert ErrorPoolServiceInvalidTransferAmount(expectedTransferAmount, actualAmountTransferred);
         | 
| 255 | 
            +
                    }
         | 
| 256 | 
            +
                    
         | 
| 257 | 
            +
                    // update pool fee balance
         | 
| 258 | 
            +
                    if (poolFeeAmount.gtz()) {
         | 
| 259 | 
            +
                        IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolObjectInfo.nftId);
         | 
| 260 | 
            +
                        poolComponentInfo.feeAmount = poolComponentInfo.feeAmount.add(poolFeeAmount);
         | 
| 261 | 
            +
                        instance.getInstanceStore().updatePoolSetup(poolObjectInfo.nftId, poolComponentInfo, KEEP_STATE());
         | 
| 262 | 
            +
                    }
         | 
| 263 | 
            +
             | 
| 264 | 
            +
                    if (bundleFeeAmount.gtz()) {
         | 
| 265 | 
            +
                        _bundleService.updateBundleFees(instance, bundleNftId, bundleFeeAmount);
         | 
| 266 | 
            +
                    }
         | 
| 267 | 
            +
                }
         | 
| 231 268 |  | 
| 232 269 | 
             
                function lockCollateral(
         | 
| 233 270 | 
             
                    IInstance instance, 
         | 
| 234 271 | 
             
                    NftId productNftId,
         | 
| 235 272 | 
             
                    NftId applicationNftId,
         | 
| 236 273 | 
             
                    IPolicy.PolicyInfo memory applicationInfo,
         | 
| 237 | 
            -
                     | 
| 274 | 
            +
                    Amount premiumAmount // premium amount after product and distribution fees
         | 
| 238 275 | 
             
                )
         | 
| 239 276 | 
             
                    external
         | 
| 240 277 | 
             
                    virtual
         | 
| @@ -255,10 +292,10 @@ contract PoolService is | |
| 255 292 | 
             
                    IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
         | 
| 256 293 |  | 
| 257 294 | 
             
                    // TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
         | 
| 258 | 
            -
                     | 
| 295 | 
            +
                    Amount collateralAmount = applicationInfo.sumInsuredAmount;
         | 
| 259 296 |  | 
| 260 297 | 
             
                    // TODO add correct net premium calculation (pool fee might be > 0)
         | 
| 261 | 
            -
                     | 
| 298 | 
            +
                    Amount premiumAfterPoolFeeAmount = premiumAmount;
         | 
| 262 299 |  | 
| 263 300 | 
             
                    // lock collateral amount from involvedd bundle
         | 
| 264 301 | 
             
                    _bundleService.lockCollateral(
         | 
| @@ -281,6 +318,24 @@ contract PoolService is | |
| 281 318 | 
             
                }
         | 
| 282 319 |  | 
| 283 320 |  | 
| 321 | 
            +
                function reduceCollateral(
         | 
| 322 | 
            +
                    IInstance instance, 
         | 
| 323 | 
            +
                    NftId policyNftId, 
         | 
| 324 | 
            +
                    IPolicy.PolicyInfo memory policyInfo,
         | 
| 325 | 
            +
                    Amount payoutAmount
         | 
| 326 | 
            +
                )
         | 
| 327 | 
            +
                    external
         | 
| 328 | 
            +
                    virtual
         | 
| 329 | 
            +
                    // TODO add restricted and granting for claim service
         | 
| 330 | 
            +
                {
         | 
| 331 | 
            +
                    _bundleService.releaseCollateral(
         | 
| 332 | 
            +
                        instance, 
         | 
| 333 | 
            +
                        policyNftId, 
         | 
| 334 | 
            +
                        policyInfo.bundleNftId, 
         | 
| 335 | 
            +
                        payoutAmount);
         | 
| 336 | 
            +
                }
         | 
| 337 | 
            +
             | 
| 338 | 
            +
             | 
| 284 339 | 
             
                /// @dev releases the remaining collateral linked to the specified policy
         | 
| 285 340 | 
             
                /// may only be called by the policy service for unlocked pool components
         | 
| 286 341 | 
             
                function releaseCollateral(
         | 
| @@ -292,12 +347,57 @@ contract PoolService is | |
| 292 347 | 
             
                    virtual
         | 
| 293 348 | 
             
                    // TODO add restricted and granting for policy service
         | 
| 294 349 | 
             
                {
         | 
| 295 | 
            -
                    // release collateral from involved bundle
         | 
| 296 350 | 
             
                    _bundleService.releaseCollateral(
         | 
| 297 351 | 
             
                        instance, 
         | 
| 298 352 | 
             
                        policyNftId, 
         | 
| 299 353 | 
             
                        policyInfo.bundleNftId, 
         | 
| 300 | 
            -
                        policyInfo.sumInsuredAmount);
         | 
| 354 | 
            +
                        policyInfo.sumInsuredAmount - policyInfo.claimAmount);
         | 
| 355 | 
            +
             | 
| 356 | 
            +
                    _bundleService.unlinkPolicy(
         | 
| 357 | 
            +
                        instance, 
         | 
| 358 | 
            +
                        policyNftId);
         | 
| 359 | 
            +
                }
         | 
| 360 | 
            +
             | 
| 361 | 
            +
             | 
| 362 | 
            +
                function _processStakingFees(
         | 
| 363 | 
            +
                    IComponents.ComponentInfo memory componentInfo, 
         | 
| 364 | 
            +
                    Amount stakingAmount
         | 
| 365 | 
            +
                )
         | 
| 366 | 
            +
                    internal
         | 
| 367 | 
            +
                    returns (Amount stakingNetAmount)
         | 
| 368 | 
            +
                {
         | 
| 369 | 
            +
                    stakingNetAmount = stakingAmount;
         | 
| 370 | 
            +
             | 
| 371 | 
            +
                    // check if any staking fees apply
         | 
| 372 | 
            +
                    Fee memory stakingFee = abi.decode(componentInfo.data, (IComponents.PoolInfo)).stakingFee;
         | 
| 373 | 
            +
                    if (FeeLib.gtz(stakingFee)) {
         | 
| 374 | 
            +
                        (Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
         | 
| 375 | 
            +
                        stakingNetAmount = netAmount;
         | 
| 376 | 
            +
             | 
| 377 | 
            +
                        // TODO update fee balance for pool
         | 
| 378 | 
            +
                    }
         | 
| 379 | 
            +
                }
         | 
| 380 | 
            +
             | 
| 381 | 
            +
             | 
| 382 | 
            +
                // TODO create (I)TreasuryService that deals with all gif related token transfers
         | 
| 383 | 
            +
                /// @dev transfers the specified amount from the bundle owner to the pool's wallet
         | 
| 384 | 
            +
                function _transferStakingAmount(
         | 
| 385 | 
            +
                    IComponents.ComponentInfo memory componentInfo,
         | 
| 386 | 
            +
                    address bundleOwner,
         | 
| 387 | 
            +
                    Amount stakingAmount
         | 
| 388 | 
            +
                )
         | 
| 389 | 
            +
                    internal
         | 
| 390 | 
            +
                {
         | 
| 391 | 
            +
                    TokenHandler tokenHandler = componentInfo.tokenHandler;
         | 
| 392 | 
            +
                    address poolWallet = componentInfo.wallet;
         | 
| 393 | 
            +
             | 
| 394 | 
            +
                    if(stakingAmount.gtz()) {
         | 
| 395 | 
            +
                        tokenHandler.transfer(
         | 
| 396 | 
            +
                            bundleOwner,
         | 
| 397 | 
            +
                            poolWallet,
         | 
| 398 | 
            +
                            stakingAmount
         | 
| 399 | 
            +
                        );
         | 
| 400 | 
            +
                    }
         | 
| 301 401 | 
             
                }
         | 
| 302 402 |  | 
| 303 | 
            -
            }
         | 
| 403 | 
            +
            }
         | 
| @@ -0,0 +1,275 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.19;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {Seconds} from "../../types/Seconds.sol";
         | 
| 5 | 
            +
            import {UFixed, UFixedLib} from "../../types/UFixed.sol";
         | 
| 6 | 
            +
            import {ObjectType} from "../../types/ObjectType.sol";
         | 
| 7 | 
            +
            import {NftId} from "../../types/NftId.sol";
         | 
| 8 | 
            +
            import {Fee} from "../../types/Fee.sol";
         | 
| 9 | 
            +
            import {ReferralId} from "../../types/Referral.sol";
         | 
| 10 | 
            +
            import {RiskId} from "../../types/RiskId.sol";
         | 
| 11 | 
            +
            import {PRODUCT, DISTRIBUTION, PRICE} from "../../types/ObjectType.sol";
         | 
| 12 | 
            +
            import {Amount} from "../../types/Amount.sol";
         | 
| 13 | 
            +
            import {IRegistry} from "../../registry/IRegistry.sol";
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            import {IProductComponent} from "../../components/IProductComponent.sol";
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            import {IInstance} from "../IInstance.sol";
         | 
| 18 | 
            +
            import {InstanceReader} from "../InstanceReader.sol";
         | 
| 19 | 
            +
            import {IComponents} from "../module/IComponents.sol";
         | 
| 20 | 
            +
            import {IPolicy} from "../module/IPolicy.sol";
         | 
| 21 | 
            +
            import {IBundle} from "../module/IBundle.sol";
         | 
| 22 | 
            +
            import {ISetup} from "../module/ISetup.sol";
         | 
| 23 | 
            +
            import {IDistribution} from "../module/IDistribution.sol";
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            import {ComponentService} from "../base/ComponentService.sol";
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            import {IPricingService} from "./IPricingService.sol";
         | 
| 28 | 
            +
            import {IDistributionService} from "./IDistributionService.sol";
         | 
| 29 | 
            +
             | 
| 30 | 
            +
             | 
| 31 | 
            +
            contract PricingService is 
         | 
| 32 | 
            +
                ComponentService, 
         | 
| 33 | 
            +
                IPricingService
         | 
| 34 | 
            +
            {
         | 
| 35 | 
            +
                using UFixedLib for UFixed;
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                IDistributionService internal _distributionService;
         | 
| 38 | 
            +
             | 
| 39 | 
            +
             | 
| 40 | 
            +
                function _initialize(
         | 
| 41 | 
            +
                    address owner, 
         | 
| 42 | 
            +
                    bytes memory data
         | 
| 43 | 
            +
                )
         | 
| 44 | 
            +
                    internal
         | 
| 45 | 
            +
                    virtual override
         | 
| 46 | 
            +
                    initializer()
         | 
| 47 | 
            +
                {
         | 
| 48 | 
            +
                    // TODO check this, might no longer be the way, refactor if necessary
         | 
| 49 | 
            +
                    address registryAddress;
         | 
| 50 | 
            +
                    address initialOwner;
         | 
| 51 | 
            +
                    (registryAddress, initialOwner) = abi.decode(data, (address, address));
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    initializeService(registryAddress, address(0), owner);
         | 
| 54 | 
            +
                    registerInterface(type(IPricingService).interfaceId);
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    _distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
         | 
| 57 | 
            +
                }
         | 
| 58 | 
            +
             | 
| 59 | 
            +
             | 
| 60 | 
            +
                function getDomain() public pure override returns(ObjectType) {
         | 
| 61 | 
            +
                    return PRICE();
         | 
| 62 | 
            +
                }
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                /// @dev calculates the premium amount for the specified attributes
         | 
| 65 | 
            +
                /// also returns the various fee components involved with creating a policy
         | 
| 66 | 
            +
                function calculatePremium(
         | 
| 67 | 
            +
                    NftId productNftId,
         | 
| 68 | 
            +
                    RiskId riskId,
         | 
| 69 | 
            +
                    Amount sumInsuredAmount,
         | 
| 70 | 
            +
                    Seconds lifetime,
         | 
| 71 | 
            +
                    bytes memory applicationData,
         | 
| 72 | 
            +
                    NftId bundleNftId,
         | 
| 73 | 
            +
                    ReferralId referralId
         | 
| 74 | 
            +
                )
         | 
| 75 | 
            +
                    external
         | 
| 76 | 
            +
                    view
         | 
| 77 | 
            +
                    virtual override
         | 
| 78 | 
            +
                    returns (
         | 
| 79 | 
            +
                        IPolicy.Premium memory premium
         | 
| 80 | 
            +
                    )
         | 
| 81 | 
            +
                {
         | 
| 82 | 
            +
                    InstanceReader reader;
         | 
| 83 | 
            +
                    Amount netPremiumAmount;
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                    {
         | 
| 86 | 
            +
                        // verify product
         | 
| 87 | 
            +
                        (
         | 
| 88 | 
            +
                            IRegistry.ObjectInfo memory productInfo, 
         | 
| 89 | 
            +
                            IInstance instance
         | 
| 90 | 
            +
                        ) = _getAndVerifyComponentInfoAndInstance(productNftId, PRODUCT());
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                        reader = instance.getInstanceReader();
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                        // calculate net premium
         | 
| 95 | 
            +
                        netPremiumAmount = IProductComponent(productInfo.objectAddress).calculateNetPremium(
         | 
| 96 | 
            +
                            sumInsuredAmount,
         | 
| 97 | 
            +
                            riskId,
         | 
| 98 | 
            +
                            lifetime,
         | 
| 99 | 
            +
                            applicationData
         | 
| 100 | 
            +
                        );
         | 
| 101 | 
            +
                    }
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                    {
         | 
| 104 | 
            +
                        // get configurations for all involed objects
         | 
| 105 | 
            +
                        ISetup.ProductSetupInfo memory productSetup = reader.getProductSetupInfo(productNftId);
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                        bytes memory componentData = reader.getComponentInfo(productSetup.poolNftId).data;
         | 
| 108 | 
            +
                        IComponents.PoolInfo memory poolInfo = abi.decode(componentData, (IComponents.PoolInfo));
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                        IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
         | 
| 111 | 
            +
                        if(bundleInfo.poolNftId != productSetup.poolNftId) {
         | 
| 112 | 
            +
                            revert ErrorIPricingServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, productSetup.poolNftId);
         | 
| 113 | 
            +
                        }
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                        NftId distributionNftId = productSetup.distributionNftId;
         | 
| 116 | 
            +
                        ISetup.DistributionSetupInfo memory distSetup = reader.getDistributionSetupInfo(distributionNftId);
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                        // calculate premium, order is important
         | 
| 119 | 
            +
                        premium = _getFixedFeeAmounts(
         | 
| 120 | 
            +
                            netPremiumAmount,
         | 
| 121 | 
            +
                            productSetup,
         | 
| 122 | 
            +
                            poolInfo,
         | 
| 123 | 
            +
                            distSetup,
         | 
| 124 | 
            +
                            bundleInfo
         | 
| 125 | 
            +
                        );
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                        premium = _calculateVariableFeeAmounts(
         | 
| 128 | 
            +
                            premium,
         | 
| 129 | 
            +
                            productSetup,
         | 
| 130 | 
            +
                            poolInfo,
         | 
| 131 | 
            +
                            distSetup,
         | 
| 132 | 
            +
                            bundleInfo
         | 
| 133 | 
            +
                        );
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                        premium = _calculateDistributionOwnerFeeAmount(
         | 
| 136 | 
            +
                            premium,
         | 
| 137 | 
            +
                            distSetup,
         | 
| 138 | 
            +
                            referralId,
         | 
| 139 | 
            +
                            distributionNftId,
         | 
| 140 | 
            +
                            reader
         | 
| 141 | 
            +
                        );
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                        // sanity check to validate the fee calculation
         | 
| 144 | 
            +
                        if (premium.distributionOwnerFeeFixAmount < distSetup.minDistributionOwnerFee.fixedFee) {
         | 
| 145 | 
            +
                            revert ErrorIPricingServiceFeeCalculationMismatch( 
         | 
| 146 | 
            +
                                premium.distributionFeeFixAmount,
         | 
| 147 | 
            +
                                premium.distributionFeeVarAmount,
         | 
| 148 | 
            +
                                premium.distributionOwnerFeeFixAmount,
         | 
| 149 | 
            +
                                premium.distributionOwnerFeeVarAmount,
         | 
| 150 | 
            +
                                premium.commissionAmount,
         | 
| 151 | 
            +
                                premium.discountAmount
         | 
| 152 | 
            +
                            );
         | 
| 153 | 
            +
                        }
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                        if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
         | 
| 156 | 
            +
                            revert ErrorIPricingServiceFeeCalculationMismatch(
         | 
| 157 | 
            +
                                premium.distributionFeeFixAmount,
         | 
| 158 | 
            +
                                premium.distributionFeeVarAmount,
         | 
| 159 | 
            +
                                premium.distributionOwnerFeeFixAmount,
         | 
| 160 | 
            +
                                premium.distributionOwnerFeeVarAmount,
         | 
| 161 | 
            +
                                premium.commissionAmount,
         | 
| 162 | 
            +
                                premium.discountAmount
         | 
| 163 | 
            +
                            );
         | 
| 164 | 
            +
                        }
         | 
| 165 | 
            +
                    }
         | 
| 166 | 
            +
                }
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                // internal functions
         | 
| 169 | 
            +
                function _getFixedFeeAmounts(
         | 
| 170 | 
            +
                    Amount netPremiumAmount,
         | 
| 171 | 
            +
                    ISetup.ProductSetupInfo memory productInfo,
         | 
| 172 | 
            +
                    IComponents.PoolInfo memory poolInfo,
         | 
| 173 | 
            +
                    ISetup.DistributionSetupInfo memory distInfo,
         | 
| 174 | 
            +
                    IBundle.BundleInfo memory bundleInfo
         | 
| 175 | 
            +
                )
         | 
| 176 | 
            +
                    internal
         | 
| 177 | 
            +
                    view
         | 
| 178 | 
            +
                    returns (
         | 
| 179 | 
            +
                        IPolicy.Premium memory premium
         | 
| 180 | 
            +
                    )
         | 
| 181 | 
            +
                {
         | 
| 182 | 
            +
                    // initial premium amount is the net premium
         | 
| 183 | 
            +
                    premium.netPremiumAmount = netPremiumAmount.toInt();
         | 
| 184 | 
            +
                    premium.fullPremiumAmount = netPremiumAmount.toInt();
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                    uint256 t = productInfo.productFee.fixedFee;
         | 
| 187 | 
            +
                    premium.productFeeFixAmount = t;
         | 
| 188 | 
            +
                    premium.fullPremiumAmount += t;
         | 
| 189 | 
            +
             | 
| 190 | 
            +
                    t = poolInfo.poolFee.fixedFee;
         | 
| 191 | 
            +
                    premium.poolFeeFixAmount = t;
         | 
| 192 | 
            +
                    premium.fullPremiumAmount += t;
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                    t = bundleInfo.fee.fixedFee;
         | 
| 195 | 
            +
                    premium.bundleFeeFixAmount = t;
         | 
| 196 | 
            +
                    premium.fullPremiumAmount += t;
         | 
| 197 | 
            +
             | 
| 198 | 
            +
                    t = distInfo.distributionFee.fixedFee;
         | 
| 199 | 
            +
                    premium.distributionFeeFixAmount = t;
         | 
| 200 | 
            +
                    premium.fullPremiumAmount += t;
         | 
| 201 | 
            +
                }
         | 
| 202 | 
            +
             | 
| 203 | 
            +
                function _calculateVariableFeeAmounts(
         | 
| 204 | 
            +
                    IPolicy.Premium memory premium,
         | 
| 205 | 
            +
                    ISetup.ProductSetupInfo memory productInfo,
         | 
| 206 | 
            +
                    IComponents.PoolInfo memory poolInfo,
         | 
| 207 | 
            +
                    ISetup.DistributionSetupInfo memory distInfo,
         | 
| 208 | 
            +
                    IBundle.BundleInfo memory bundleInfo
         | 
| 209 | 
            +
                )
         | 
| 210 | 
            +
                    internal
         | 
| 211 | 
            +
                    view
         | 
| 212 | 
            +
                    returns (
         | 
| 213 | 
            +
                        IPolicy.Premium memory intermadiatePremium
         | 
| 214 | 
            +
                    )
         | 
| 215 | 
            +
                {
         | 
| 216 | 
            +
                    UFixed netPremiumAmount = UFixedLib.toUFixed(premium.netPremiumAmount);
         | 
| 217 | 
            +
             | 
| 218 | 
            +
                    uint256 t = (netPremiumAmount * productInfo.productFee.fractionalFee).toInt();
         | 
| 219 | 
            +
                    premium.productFeeVarAmount = t;
         | 
| 220 | 
            +
                    premium.fullPremiumAmount += t;
         | 
| 221 | 
            +
             | 
| 222 | 
            +
                    t = (netPremiumAmount * poolInfo.poolFee.fractionalFee).toInt();
         | 
| 223 | 
            +
                    premium.poolFeeVarAmount = t;
         | 
| 224 | 
            +
                    premium.fullPremiumAmount += t;
         | 
| 225 | 
            +
             | 
| 226 | 
            +
                    t = (netPremiumAmount * bundleInfo.fee.fractionalFee).toInt();
         | 
| 227 | 
            +
                    premium.bundleFeeVarAmount = t;
         | 
| 228 | 
            +
                    premium.fullPremiumAmount += t;
         | 
| 229 | 
            +
             | 
| 230 | 
            +
                    t = (netPremiumAmount * distInfo.distributionFee.fractionalFee).toInt();
         | 
| 231 | 
            +
                    premium.distributionFeeVarAmount = t;
         | 
| 232 | 
            +
                    premium.fullPremiumAmount += t;
         | 
| 233 | 
            +
             | 
| 234 | 
            +
                    return premium;
         | 
| 235 | 
            +
                }
         | 
| 236 | 
            +
             | 
| 237 | 
            +
                function _calculateDistributionOwnerFeeAmount(
         | 
| 238 | 
            +
                    IPolicy.Premium memory premium,
         | 
| 239 | 
            +
                    ISetup.DistributionSetupInfo memory distInfo,
         | 
| 240 | 
            +
                    ReferralId referralId,
         | 
| 241 | 
            +
                    NftId distributionNftId,
         | 
| 242 | 
            +
                    InstanceReader reader
         | 
| 243 | 
            +
                )
         | 
| 244 | 
            +
                    internal
         | 
| 245 | 
            +
                    view 
         | 
| 246 | 
            +
                    returns (IPolicy.Premium memory finalPremium)
         | 
| 247 | 
            +
                {
         | 
| 248 | 
            +
                    // if the referral is not valid, then the distribution owner gets everything
         | 
| 249 | 
            +
                    if (! _distributionService.referralIsValid(distributionNftId, referralId)) {
         | 
| 250 | 
            +
                        premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
         | 
| 251 | 
            +
                        premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
         | 
| 252 | 
            +
                        premium.premiumAmount = premium.fullPremiumAmount;
         | 
| 253 | 
            +
                        return premium;
         | 
| 254 | 
            +
                    }
         | 
| 255 | 
            +
             | 
| 256 | 
            +
                    Fee memory minDistributionOwnerFee = distInfo.minDistributionOwnerFee;
         | 
| 257 | 
            +
             | 
| 258 | 
            +
                    // if the referral is valid, the the commission and discount are calculated based in the full premium
         | 
| 259 | 
            +
                    // the remaing amount goes to the distribution owner
         | 
| 260 | 
            +
                    {
         | 
| 261 | 
            +
                        IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
         | 
| 262 | 
            +
                        IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
         | 
| 263 | 
            +
                        IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
         | 
| 264 | 
            +
             | 
| 265 | 
            +
                        uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
         | 
| 266 | 
            +
                        premium.commissionAmount = commissionAmount;
         | 
| 267 | 
            +
                        premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
         | 
| 268 | 
            +
                        premium.distributionOwnerFeeFixAmount = distInfo.minDistributionOwnerFee.fixedFee;
         | 
| 269 | 
            +
                        premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount - commissionAmount - premium.discountAmount;
         | 
| 270 | 
            +
                        premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
         | 
| 271 | 
            +
                    }
         | 
| 272 | 
            +
             | 
| 273 | 
            +
                    return premium; 
         | 
| 274 | 
            +
                }
         | 
| 275 | 
            +
            }
         | 
| @@ -0,0 +1,51 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {IVersionable} from "../../shared/IVersionable.sol";
         | 
| 5 | 
            +
            import {ProxyManager} from "../../shared/ProxyManager.sol";
         | 
| 6 | 
            +
            import {PricingService} from "./PricingService.sol";
         | 
| 7 | 
            +
            import {Registry} from "../../registry/Registry.sol";
         | 
| 8 | 
            +
            import {RegistryService} from "../../registry/RegistryService.sol";
         | 
| 9 | 
            +
            import {REGISTRY} from "../../types/ObjectType.sol";
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            contract PricingServiceManager is ProxyManager {
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                PricingService private _pricingService;
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                /// @dev initializes proxy manager with distribution service implementation and deploys instance
         | 
| 16 | 
            +
                constructor(
         | 
| 17 | 
            +
                    address registryAddress
         | 
| 18 | 
            +
                )
         | 
| 19 | 
            +
                    ProxyManager(registryAddress)
         | 
| 20 | 
            +
                {
         | 
| 21 | 
            +
                    PricingService pricingSrv = new PricingService();
         | 
| 22 | 
            +
                    bytes memory data = abi.encode(registryAddress, address(this));
         | 
| 23 | 
            +
                    IVersionable versionable = deploy(
         | 
| 24 | 
            +
                        address(pricingSrv), 
         | 
| 25 | 
            +
                        data);
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    _pricingService = PricingService(address(versionable));
         | 
| 28 | 
            +
                    
         | 
| 29 | 
            +
                    // TODO `thi` must have a role or own nft to register service
         | 
| 30 | 
            +
                    //Registry registry = Registry(registryAddress);
         | 
| 31 | 
            +
                    //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _distributionService.getMajorVersion());
         | 
| 32 | 
            +
                    //RegistryService registryService = RegistryService(registryServiceAddress);
         | 
| 33 | 
            +
                    //registryService.registerService(_distributionService);
         | 
| 34 | 
            +
                    
         | 
| 35 | 
            +
                    // TODO no nft to link yet
         | 
| 36 | 
            +
                    // link ownership of instance service manager ot nft owner of instance service
         | 
| 37 | 
            +
                    //_linkToNftOwnable(
         | 
| 38 | 
            +
                    //    address(registryAddress),
         | 
| 39 | 
            +
                    //    address(_distributionService));
         | 
| 40 | 
            +
                }
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                //--- view functions ----------------------------------------------------//
         | 
| 43 | 
            +
                function getPricingService()
         | 
| 44 | 
            +
                    external
         | 
| 45 | 
            +
                    view
         | 
| 46 | 
            +
                    returns (PricingService)
         | 
| 47 | 
            +
                {
         | 
| 48 | 
            +
                    return _pricingService;
         | 
| 49 | 
            +
                }
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            }
         | 
| @@ -111,7 +111,7 @@ contract ProductService is ComponentService, IProductService { | |
| 111 111 | 
             
                    product.linkToRegisteredNftId();
         | 
| 112 112 |  | 
| 113 113 | 
             
                    // create product setup in instance
         | 
| 114 | 
            -
                    instance.createProductSetup(productNftId, product.getSetupInfo());
         | 
| 114 | 
            +
                    instance.getInstanceStore().createProductSetup(productNftId, product.getSetupInfo());
         | 
| 115 115 |  | 
| 116 116 | 
             
                    bytes4[][] memory selectors = new bytes4[][](1);
         | 
| 117 117 | 
             
                    selectors[0] = new bytes4[](1);
         | 
| @@ -157,7 +157,7 @@ contract ProductService is ComponentService, IProductService { | |
| 157 157 | 
             
                {
         | 
| 158 158 | 
             
                    // TODO check args 
         | 
| 159 159 |  | 
| 160 | 
            -
                    (NftId productNftId | 
| 160 | 
            +
                    (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
         | 
| 161 161 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 162 162 |  | 
| 163 163 | 
             
                    ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
         | 
| @@ -165,7 +165,7 @@ contract ProductService is ComponentService, IProductService { | |
| 165 165 | 
             
                    productSetupInfo.productFee = productFee;
         | 
| 166 166 | 
             
                    productSetupInfo.processingFee = processingFee;
         | 
| 167 167 |  | 
| 168 | 
            -
                    instance.updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
         | 
| 168 | 
            +
                    instance.getInstanceStore().updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
         | 
| 169 169 | 
             
                }
         | 
| 170 170 |  | 
| 171 171 | 
             
                function createRisk(
         | 
| @@ -175,10 +175,10 @@ contract ProductService is ComponentService, IProductService { | |
| 175 175 | 
             
                    external 
         | 
| 176 176 | 
             
                    override
         | 
| 177 177 | 
             
                {
         | 
| 178 | 
            -
                    (NftId productNftId | 
| 178 | 
            +
                    (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
         | 
| 179 179 | 
             
                    IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
         | 
| 180 180 |  | 
| 181 | 
            -
                    instance.createRisk(
         | 
| 181 | 
            +
                    instance.getInstanceStore().createRisk(
         | 
| 182 182 | 
             
                        riskId,
         | 
| 183 183 | 
             
                        riskInfo
         | 
| 184 184 | 
             
                    );
         | 
| @@ -190,12 +190,12 @@ contract ProductService is ComponentService, IProductService { | |
| 190 190 | 
             
                )
         | 
| 191 191 | 
             
                    external
         | 
| 192 192 | 
             
                {
         | 
| 193 | 
            -
                    (,, IInstance instance) =  | 
| 193 | 
            +
                    (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
         | 
| 194 194 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 195 195 |  | 
| 196 196 | 
             
                    IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
         | 
| 197 197 | 
             
                    riskInfo.data = data;
         | 
| 198 | 
            -
                    instance.updateRisk(riskId, riskInfo, KEEP_STATE());
         | 
| 198 | 
            +
                    instance.getInstanceStore().updateRisk(riskId, riskInfo, KEEP_STATE());
         | 
| 199 199 | 
             
                }
         | 
| 200 200 |  | 
| 201 201 | 
             
                function updateRiskState(
         | 
| @@ -204,7 +204,7 @@ contract ProductService is ComponentService, IProductService { | |
| 204 204 | 
             
                )
         | 
| 205 205 | 
             
                    external
         | 
| 206 206 | 
             
                {
         | 
| 207 | 
            -
                    (,, IInstance instance) =  | 
| 208 | 
            -
                    instance.updateRiskState(riskId, state);
         | 
| 207 | 
            +
                    (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
         | 
| 208 | 
            +
                    instance.getInstanceStore().updateRiskState(riskId, state);
         | 
| 209 209 | 
             
                }
         | 
| 210 | 
            -
            }
         | 
| 210 | 
            +
            }
         |