@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
| @@ -8,11 +8,12 @@ import {InstanceReader} from "../../instance/InstanceReader.sol"; | |
| 8 8 | 
             
            import {ISetup} from "../../instance/module/ISetup.sol";
         | 
| 9 9 | 
             
            import {IPolicy} from "../module/IPolicy.sol";
         | 
| 10 10 |  | 
| 11 | 
            +
            import {Amount, AmountLib} from "../../types/Amount.sol";
         | 
| 11 12 | 
             
            import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
         | 
| 12 13 | 
             
            import {Fee, FeeLib} from "../../types/Fee.sol";
         | 
| 13 14 | 
             
            import {PRODUCT_SERVICE_ROLE, DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
         | 
| 14 15 | 
             
            import {KEEP_STATE} from "../../types/StateId.sol";
         | 
| 15 | 
            -
            import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR} from "../../types/ObjectType.sol";
         | 
| 16 | 
            +
            import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR, PRICE} from "../../types/ObjectType.sol";
         | 
| 16 17 | 
             
            import {Version, VersionLib} from "../../types/Version.sol";
         | 
| 17 18 | 
             
            import {RoleId} from "../../types/RoleId.sol";
         | 
| 18 19 |  | 
| @@ -26,6 +27,7 @@ import {InstanceService} from "../InstanceService.sol"; | |
| 26 27 | 
             
            import {IComponent} from "../../components/IComponent.sol";
         | 
| 27 28 | 
             
            import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
         | 
| 28 29 | 
             
            import {IDistributionService} from "./IDistributionService.sol";
         | 
| 30 | 
            +
            import {IPricingService} from "./IPricingService.sol";
         | 
| 29 31 |  | 
| 30 32 | 
             
            import {UFixed, UFixedLib} from "../../types/UFixed.sol";
         | 
| 31 33 | 
             
            import {DistributorType, DistributorTypeLib} from "../../types/DistributorType.sol";
         | 
| @@ -33,6 +35,7 @@ import {ReferralId, ReferralStatus, ReferralLib} from "../../types/Referral.sol" | |
| 33 35 | 
             
            import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
         | 
| 34 36 | 
             
            import {Key32} from "../../types/Key32.sol";
         | 
| 35 37 | 
             
            import {IDistribution} from "../module/IDistribution.sol";
         | 
| 38 | 
            +
            import {InstanceStore} from "../InstanceStore.sol";
         | 
| 36 39 |  | 
| 37 40 |  | 
| 38 41 | 
             
            contract DistributionService is
         | 
| @@ -87,7 +90,7 @@ contract DistributionService is | |
| 87 90 | 
             
                    distribution.linkToRegisteredNftId();
         | 
| 88 91 | 
             
                    distributionNftId = distributionInfo.nftId;
         | 
| 89 92 |  | 
| 90 | 
            -
                    instance.createDistributionSetup(distributionNftId, distribution.getSetupInfo());
         | 
| 93 | 
            +
                    instance.getInstanceStore().createDistributionSetup(distributionNftId, distribution.getSetupInfo());
         | 
| 91 94 | 
             
                    // TODO move to distribution?
         | 
| 92 95 | 
             
                    bytes4[][] memory selectors = new bytes4[][](2);
         | 
| 93 96 | 
             
                    selectors[0] = new bytes4[](1);
         | 
| @@ -119,14 +122,14 @@ contract DistributionService is | |
| 119 122 | 
             
                        revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
         | 
| 120 123 | 
             
                    }
         | 
| 121 124 |  | 
| 122 | 
            -
                    (NftId distributionNftId | 
| 125 | 
            +
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
         | 
| 123 126 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 124 127 |  | 
| 125 128 | 
             
                    ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
         | 
| 126 129 | 
             
                    distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
         | 
| 127 130 | 
             
                    distSetupInfo.distributionFee = distributionFee;
         | 
| 128 131 |  | 
| 129 | 
            -
                    instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
         | 
| 132 | 
            +
                    instance.getInstanceStore().updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
         | 
| 130 133 | 
             
                }
         | 
| 131 134 |  | 
| 132 135 | 
             
                function createDistributorType(
         | 
| @@ -143,7 +146,7 @@ contract DistributionService is | |
| 143 146 | 
             
                    external
         | 
| 144 147 | 
             
                    returns (DistributorType distributorType)
         | 
| 145 148 | 
             
                {
         | 
| 146 | 
            -
                    (NftId distributionNftId | 
| 149 | 
            +
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
         | 
| 147 150 |  | 
| 148 151 | 
             
                    {
         | 
| 149 152 | 
             
                        ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
         | 
| @@ -153,7 +156,7 @@ contract DistributionService is | |
| 153 156 | 
             
                            revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
         | 
| 154 157 | 
             
                        }
         | 
| 155 158 | 
             
                    }
         | 
| 156 | 
            -
             | 
| 159 | 
            +
             | 
| 157 160 | 
             
                    distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
         | 
| 158 161 | 
             
                    IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
         | 
| 159 162 | 
             
                        name,
         | 
| @@ -166,16 +169,20 @@ contract DistributionService is | |
| 166 169 | 
             
                        allowRenewals,
         | 
| 167 170 | 
             
                        data);
         | 
| 168 171 |  | 
| 169 | 
            -
                    instance.createDistributorType(distributorType, info);
         | 
| 172 | 
            +
                    instance.getInstanceStore().createDistributorType(distributorType, info);
         | 
| 170 173 | 
             
                }
         | 
| 171 174 |  | 
| 175 | 
            +
             | 
| 172 176 | 
             
                function createDistributor(
         | 
| 173 177 | 
             
                    address distributor,
         | 
| 174 178 | 
             
                    DistributorType distributorType,
         | 
| 175 179 | 
             
                    bytes memory data
         | 
| 176 | 
            -
                ) | 
| 180 | 
            +
                )
         | 
| 181 | 
            +
                    external 
         | 
| 182 | 
            +
                    virtual
         | 
| 183 | 
            +
                    returns (NftId distributorNftId)
         | 
| 177 184 | 
             
                {
         | 
| 178 | 
            -
                    (NftId distributionNftId | 
| 185 | 
            +
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
         | 
| 179 186 |  | 
| 180 187 | 
             
                    distributorNftId = getRegistryService().registerDistributor(
         | 
| 181 188 | 
             
                        IRegistry.ObjectInfo(
         | 
| @@ -192,25 +199,27 @@ contract DistributionService is | |
| 192 199 | 
             
                        distributorType,
         | 
| 193 200 | 
             
                        true, // active
         | 
| 194 201 | 
             
                        data,
         | 
| 195 | 
            -
                         | 
| 202 | 
            +
                        AmountLib.zero(),
         | 
| 196 203 | 
             
                        0);
         | 
| 197 204 |  | 
| 198 | 
            -
                    instance.createDistributor(distributorNftId, info);
         | 
| 205 | 
            +
                    instance.getInstanceStore().createDistributor(distributorNftId, info);
         | 
| 199 206 | 
             
                }
         | 
| 200 207 |  | 
| 201 | 
            -
                function updateDistributorType(
         | 
| 202 | 
            -
             | 
| 203 | 
            -
             | 
| 204 | 
            -
             | 
| 205 | 
            -
                ) | 
| 206 | 
            -
                 | 
| 207 | 
            -
             | 
| 208 | 
            -
             | 
| 209 | 
            -
             | 
| 210 | 
            -
             | 
| 211 | 
            -
             | 
| 212 | 
            -
             | 
| 213 | 
            -
                 | 
| 208 | 
            +
                // function updateDistributorType(
         | 
| 209 | 
            +
                //     NftId distributorNftId,
         | 
| 210 | 
            +
                //     DistributorType distributorType,
         | 
| 211 | 
            +
                //     bytes memory data
         | 
| 212 | 
            +
                // )
         | 
| 213 | 
            +
                //     external
         | 
| 214 | 
            +
                //     virtual
         | 
| 215 | 
            +
                // {
         | 
| 216 | 
            +
                //     (, IInstance instance) = _getAndVerifyCallingDistribution();
         | 
| 217 | 
            +
                //     InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 218 | 
            +
                //     IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
         | 
| 219 | 
            +
                //     distributorInfo.distributorType = distributorType;
         | 
| 220 | 
            +
                //     distributorInfo.data = data;
         | 
| 221 | 
            +
                //     instance.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
         | 
| 222 | 
            +
                // }
         | 
| 214 223 |  | 
| 215 224 |  | 
| 216 225 | 
             
                function createReferral(
         | 
| @@ -225,7 +234,7 @@ contract DistributionService is | |
| 225 234 | 
             
                    virtual
         | 
| 226 235 | 
             
                    returns (ReferralId referralId)
         | 
| 227 236 | 
             
                {
         | 
| 228 | 
            -
                    (NftId distributionNftId | 
| 237 | 
            +
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
         | 
| 229 238 |  | 
| 230 239 | 
             
                    if (bytes(code).length == 0) {
         | 
| 231 240 | 
             
                        revert ErrorIDistributionServiceInvalidReferral(code);
         | 
| @@ -235,8 +244,7 @@ contract DistributionService is | |
| 235 244 | 
             
                    }
         | 
| 236 245 |  | 
| 237 246 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 238 | 
            -
                     | 
| 239 | 
            -
                    DistributorType distributorType = distributorInfo.distributorType;
         | 
| 247 | 
            +
                    DistributorType distributorType = instanceReader.getDistributorInfo(distributorNftId).distributorType;
         | 
| 240 248 | 
             
                    IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
         | 
| 241 249 |  | 
| 242 250 | 
             
                    if (distributorTypeData.maxReferralCount < maxReferrals) {
         | 
| @@ -263,15 +271,15 @@ contract DistributionService is | |
| 263 271 | 
             
                        data
         | 
| 264 272 | 
             
                    );
         | 
| 265 273 |  | 
| 266 | 
            -
                    instance.createReferral(referralId, info);
         | 
| 274 | 
            +
                    instance.getInstanceStore().createReferral(referralId, info);
         | 
| 267 275 | 
             
                    return referralId;
         | 
| 268 276 | 
             
                }
         | 
| 269 277 |  | 
| 270 278 | 
             
                function processSale(
         | 
| 271 | 
            -
                    NftId distributionNftId,
         | 
| 279 | 
            +
                    NftId distributionNftId, // assume always of distribution type
         | 
| 272 280 | 
             
                    ReferralId referralId,
         | 
| 273 281 | 
             
                    IPolicy.Premium memory premium,
         | 
| 274 | 
            -
                     | 
| 282 | 
            +
                    Amount transferredDistributionFeeAmount
         | 
| 275 283 | 
             
                )
         | 
| 276 284 | 
             
                    external
         | 
| 277 285 | 
             
                    virtual
         | 
| @@ -285,104 +293,36 @@ contract DistributionService is | |
| 285 293 |  | 
| 286 294 | 
             
                    IInstance instance = _getInstanceForDistribution(distributionNftId);
         | 
| 287 295 | 
             
                    InstanceReader reader = instance.getInstanceReader();
         | 
| 296 | 
            +
                    InstanceStore store = instance.getInstanceStore();
         | 
| 288 297 | 
             
                    IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
         | 
| 289 298 | 
             
                    IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
         | 
| 290 299 | 
             
                    ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
         | 
| 291 300 |  | 
| 292 | 
            -
                     | 
| 293 | 
            -
                     | 
| 301 | 
            +
                    Amount distributionOwnerFee = AmountLib.toAmount(premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount);
         | 
| 302 | 
            +
                    Amount commissionAmount = AmountLib.toAmount(premium.commissionAmount);
         | 
| 294 303 |  | 
| 295 | 
            -
                    if (transferredDistributionFeeAmount  | 
| 296 | 
            -
                        revert  | 
| 304 | 
            +
                    if (!(transferredDistributionFeeAmount == distributionOwnerFee + commissionAmount)) {
         | 
| 305 | 
            +
                        revert ErrorDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
         | 
| 297 306 | 
             
                    }
         | 
| 298 307 |  | 
| 299 308 |  | 
| 300 | 
            -
                    if (distributionOwnerFee | 
| 301 | 
            -
                        setupInfo.sumDistributionOwnerFees += distributionOwnerFee;
         | 
| 302 | 
            -
                         | 
| 309 | 
            +
                    if (distributionOwnerFee.gtz()) {
         | 
| 310 | 
            +
                        setupInfo.sumDistributionOwnerFees += distributionOwnerFee.toInt();
         | 
| 311 | 
            +
                        store.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
         | 
| 303 312 | 
             
                    }
         | 
| 304 313 |  | 
| 305 314 | 
             
                    if (isReferral) {
         | 
| 306 315 | 
             
                        referralInfo.usedReferrals += 1;
         | 
| 307 | 
            -
                         | 
| 316 | 
            +
                        store.updateReferral(referralId, referralInfo, KEEP_STATE());
         | 
| 308 317 |  | 
| 309 | 
            -
                        if (commissionAmount | 
| 310 | 
            -
                            distributorInfo. | 
| 318 | 
            +
                        if (commissionAmount.gtz()) {
         | 
| 319 | 
            +
                            distributorInfo.commissionAmount = distributorInfo.commissionAmount + commissionAmount;
         | 
| 311 320 | 
             
                            distributorInfo.numPoliciesSold += 1;
         | 
| 312 | 
            -
                             | 
| 321 | 
            +
                            store.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
         | 
| 313 322 | 
             
                        }
         | 
| 314 323 | 
             
                    }
         | 
| 315 324 | 
             
                }
         | 
| 316 325 |  | 
| 317 | 
            -
                function calculateFeeAmount(
         | 
| 318 | 
            -
                    NftId distributionNftId,
         | 
| 319 | 
            -
                    ReferralId referralId,
         | 
| 320 | 
            -
                    IPolicy.Premium memory premium
         | 
| 321 | 
            -
                )
         | 
| 322 | 
            -
                    external
         | 
| 323 | 
            -
                    virtual
         | 
| 324 | 
            -
                    view 
         | 
| 325 | 
            -
                    returns (IPolicy.Premium memory finalPremium)
         | 
| 326 | 
            -
                {
         | 
| 327 | 
            -
                    IInstance instance = _getInstanceForDistribution(distributionNftId);
         | 
| 328 | 
            -
                    InstanceReader reader = instance.getInstanceReader();
         | 
| 329 | 
            -
                    
         | 
| 330 | 
            -
                    // first calculate all fixed and variable fees for the distribution - this will defined the fullPremium
         | 
| 331 | 
            -
                    ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
         | 
| 332 | 
            -
                    Fee memory distributionFee = setupInfo.distributionFee;
         | 
| 333 | 
            -
                    Fee memory minDistributionOwnerFee = setupInfo.minDistributionOwnerFee;
         | 
| 334 | 
            -
                    uint256 distributionFeeVarAmount = (UFixedLib.toUFixed(premium.netPremiumAmount) * distributionFee.fractionalFee).toInt();
         | 
| 335 | 
            -
                    premium.distributionFeeVarAmount = distributionFeeVarAmount;
         | 
| 336 | 
            -
                    premium.fullPremiumAmount += distributionFeeVarAmount;
         | 
| 337 | 
            -
                        
         | 
| 338 | 
            -
                    // if the referral is not valid, then the distribution owner gets everything
         | 
| 339 | 
            -
                    if (! referralIsValid(distributionNftId, referralId)) {
         | 
| 340 | 
            -
                        premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
         | 
| 341 | 
            -
                        premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
         | 
| 342 | 
            -
                        premium.premiumAmount = premium.fullPremiumAmount;
         | 
| 343 | 
            -
                        return premium;
         | 
| 344 | 
            -
                    }
         | 
| 345 | 
            -
             | 
| 346 | 
            -
                    // if the referral is valid, the the commission and discount are calculated based in the full premium
         | 
| 347 | 
            -
                    // the remaing amount goes to the distribution owner
         | 
| 348 | 
            -
                    {
         | 
| 349 | 
            -
                        IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
         | 
| 350 | 
            -
                        IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
         | 
| 351 | 
            -
                        IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
         | 
| 352 | 
            -
             | 
| 353 | 
            -
                        uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
         | 
| 354 | 
            -
                        premium.commissionAmount = commissionAmount;
         | 
| 355 | 
            -
                        premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
         | 
| 356 | 
            -
                        premium.distributionOwnerFeeFixAmount = minDistributionOwnerFee.fixedFee;
         | 
| 357 | 
            -
                        premium.distributionOwnerFeeVarAmount = distributionFeeVarAmount - commissionAmount - premium.discountAmount;
         | 
| 358 | 
            -
                        premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
         | 
| 359 | 
            -
                    }
         | 
| 360 | 
            -
             | 
| 361 | 
            -
                    // sanity check to validate the fee calculation
         | 
| 362 | 
            -
                    if (premium.distributionOwnerFeeFixAmount < minDistributionOwnerFee.fixedFee) {
         | 
| 363 | 
            -
                        revert ErrorIDistributionServiceFeeCalculationMismatch(
         | 
| 364 | 
            -
                            premium.distributionFeeFixAmount,
         | 
| 365 | 
            -
                            premium.distributionFeeVarAmount,
         | 
| 366 | 
            -
                            premium.distributionOwnerFeeFixAmount,
         | 
| 367 | 
            -
                            premium.distributionOwnerFeeVarAmount,
         | 
| 368 | 
            -
                            premium.commissionAmount,
         | 
| 369 | 
            -
                            premium.discountAmount
         | 
| 370 | 
            -
                        );
         | 
| 371 | 
            -
                    }
         | 
| 372 | 
            -
                    if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
         | 
| 373 | 
            -
                        revert ErrorIDistributionServiceFeeCalculationMismatch(
         | 
| 374 | 
            -
                            premium.distributionFeeFixAmount,
         | 
| 375 | 
            -
                            premium.distributionFeeVarAmount,
         | 
| 376 | 
            -
                            premium.distributionOwnerFeeFixAmount,
         | 
| 377 | 
            -
                            premium.distributionOwnerFeeVarAmount,
         | 
| 378 | 
            -
                            premium.commissionAmount,
         | 
| 379 | 
            -
                            premium.discountAmount
         | 
| 380 | 
            -
                        );
         | 
| 381 | 
            -
                    }
         | 
| 382 | 
            -
                    
         | 
| 383 | 
            -
                    return premium; 
         | 
| 384 | 
            -
                }
         | 
| 385 | 
            -
             | 
| 386 326 | 
             
                // TODO: zero should return false
         | 
| 387 327 | 
             
                function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
         | 
| 388 328 | 
             
                    IInstance instance = _getInstanceForDistribution(distributionNftId);
         | 
| @@ -396,29 +336,6 @@ contract DistributionService is | |
| 396 336 | 
             
                    isValid = isValid && info.usedReferrals < info.maxReferrals;
         | 
| 397 337 | 
             
                }
         | 
| 398 338 |  | 
| 399 | 
            -
                function _getAndVerifyCallingDistribution()
         | 
| 400 | 
            -
                    internal
         | 
| 401 | 
            -
                    view
         | 
| 402 | 
            -
                    returns(
         | 
| 403 | 
            -
                        NftId distributionNftId,
         | 
| 404 | 
            -
                        IInstance instance
         | 
| 405 | 
            -
                    )
         | 
| 406 | 
            -
                {
         | 
| 407 | 
            -
                    distributionNftId = getRegistry().getNftId(msg.sender);
         | 
| 408 | 
            -
                    if (distributionNftId.eqz()) {
         | 
| 409 | 
            -
                        revert ErrorDistributionServiceCallerNotRegistered(msg.sender);
         | 
| 410 | 
            -
                    }
         | 
| 411 | 
            -
             | 
| 412 | 
            -
                    IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(distributionNftId);
         | 
| 413 | 
            -
                    if(info.objectType != DISTRIBUTION()) {
         | 
| 414 | 
            -
                        revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
         | 
| 415 | 
            -
                    }
         | 
| 416 | 
            -
             | 
| 417 | 
            -
                    address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
         | 
| 418 | 
            -
                    instance = IInstance(instanceAddress);
         | 
| 419 | 
            -
                }
         | 
| 420 | 
            -
             | 
| 421 | 
            -
             | 
| 422 339 | 
             
                function _getInstanceForDistribution(NftId distributionNftId)
         | 
| 423 340 | 
             
                    internal
         | 
| 424 341 | 
             
                    view
         | 
| @@ -428,4 +345,4 @@ contract DistributionService is | |
| 428 345 | 
             
                    address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
         | 
| 429 346 | 
             
                    return IInstance(instanceAddress);
         | 
| 430 347 | 
             
                }
         | 
| 431 | 
            -
            }
         | 
| 348 | 
            +
            }
         | 
| @@ -4,6 +4,7 @@ pragma solidity ^0.8.19; | |
| 4 4 | 
             
            import {IPolicy} from "../module/IPolicy.sol";
         | 
| 5 5 | 
             
            import {IService} from "../../shared/IService.sol";
         | 
| 6 6 |  | 
| 7 | 
            +
            import {Amount} from "../../types/Amount.sol";
         | 
| 7 8 | 
             
            import {NftId} from "../../types/NftId.sol";
         | 
| 8 9 | 
             
            import {ObjectType} from "../../types/ObjectType.sol";
         | 
| 9 10 | 
             
            import {ReferralId} from "../../types/Referral.sol";
         | 
| @@ -22,7 +23,7 @@ interface IApplicationService is IService { | |
| 22 23 | 
             
                function create(
         | 
| 23 24 | 
             
                    address applicationOwner,
         | 
| 24 25 | 
             
                    RiskId riskId,
         | 
| 25 | 
            -
                     | 
| 26 | 
            +
                    Amount sumInsuredAmount,
         | 
| 26 27 | 
             
                    Seconds lifetime,
         | 
| 27 28 | 
             
                    NftId bundleNftId,
         | 
| 28 29 | 
             
                    ReferralId referralId,
         | 
| @@ -37,8 +38,8 @@ interface IApplicationService is IService { | |
| 37 38 | 
             
                    RiskId riskId,
         | 
| 38 39 | 
             
                    NftId bundleNftId,
         | 
| 39 40 | 
             
                    ReferralId referralId,
         | 
| 40 | 
            -
                     | 
| 41 | 
            -
                     | 
| 41 | 
            +
                    Amount sumInsuredAmount,
         | 
| 42 | 
            +
                    Seconds lifetime,
         | 
| 42 43 | 
             
                    bytes memory applicationData
         | 
| 43 44 | 
             
                ) external;
         | 
| 44 45 |  | 
| @@ -58,21 +59,4 @@ interface IApplicationService is IService { | |
| 58 59 | 
             
                /// an application can only be revoked in applied state
         | 
| 59 60 | 
             
                /// only the application holder may revoke an application
         | 
| 60 61 | 
             
                function revoke(NftId policyNftId) external;
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                /// @dev calculates the premium amount for the specified attributes
         | 
| 63 | 
            -
                /// also returns the various fee components involved with creating a policy
         | 
| 64 | 
            -
                function calculatePremium(
         | 
| 65 | 
            -
                    NftId productNftId,
         | 
| 66 | 
            -
                    RiskId riskId,
         | 
| 67 | 
            -
                    uint256 sumInsuredAmount,
         | 
| 68 | 
            -
                    Seconds lifetime,
         | 
| 69 | 
            -
                    bytes memory applicationData,
         | 
| 70 | 
            -
                    NftId bundleNftId,
         | 
| 71 | 
            -
                    ReferralId referralId
         | 
| 72 | 
            -
                )
         | 
| 73 | 
            -
                    external
         | 
| 74 | 
            -
                    view
         | 
| 75 | 
            -
                    returns (
         | 
| 76 | 
            -
                        IPolicy.Premium memory premium
         | 
| 77 | 
            -
                    );
         | 
| 78 | 
            -
            }
         | 
| 62 | 
            +
            }
         | 
| @@ -16,13 +16,15 @@ interface IBundleService is IService { | |
| 16 16 | 
             
                event LogBundleServiceBundleActivated(NftId bundleNftId);
         | 
| 17 17 | 
             
                event LogBundleServiceBundleLocked(NftId bundleNftId);
         | 
| 18 18 |  | 
| 19 | 
            -
                error ErrorBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress,  | 
| 19 | 
            +
                error ErrorBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress, Amount amount);
         | 
| 20 20 | 
             
                error ErrorBundleServiceBundleNotOpen(NftId bundleNftId, StateId state, Timestamp expiredAt);
         | 
| 21 | 
            -
                error ErrorBundleServiceCapacityInsufficient(NftId bundleNftId,  | 
| 21 | 
            +
                error ErrorBundleServiceCapacityInsufficient(NftId bundleNftId, Amount capacityAmount, Amount collateralAmount);
         | 
| 22 22 | 
             
                error ErrorBundleServiceBundleWithOpenPolicies(NftId bundleNftId, uint256 openPoliciesCount);
         | 
| 23 23 |  | 
| 24 24 | 
             
                error ErrorBundleServiceBundleUnknown(NftId bundleNftId);
         | 
| 25 | 
            -
                error ErrorBundleServiceBundlePoolMismatch(NftId  | 
| 25 | 
            +
                error ErrorBundleServiceBundlePoolMismatch(NftId bundleNftId, NftId expectedPool, NftId actualPool);
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
         | 
| 26 28 |  | 
| 27 29 | 
             
                /// @dev create a new bundle for the specified attributes
         | 
| 28 30 | 
             
                /// may only be called by pool service
         | 
| @@ -38,6 +40,13 @@ interface IBundleService is IService { | |
| 38 40 | 
             
                    external 
         | 
| 39 41 | 
             
                    returns(NftId bundleNftId); // the nft id of the newly created bundle
         | 
| 40 42 |  | 
| 43 | 
            +
             | 
| 44 | 
            +
                /// @dev increase bundle stakes by the specified amount
         | 
| 45 | 
            +
                /// may only be called by the bundle owner
         | 
| 46 | 
            +
                // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                // function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
         | 
| 49 | 
            +
             | 
| 41 50 | 
             
                /// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
         | 
| 42 51 | 
             
                /// only active bundles may be locked
         | 
| 43 52 | 
             
                /// may only be called by registered and unlocked pool components
         | 
| @@ -74,23 +83,36 @@ interface IBundleService is IService { | |
| 74 83 | 
             
                    IInstance instanceNftId, 
         | 
| 75 84 | 
             
                    NftId policyNftId, 
         | 
| 76 85 | 
             
                    NftId bundleNftId, 
         | 
| 77 | 
            -
                     | 
| 78 | 
            -
                     | 
| 86 | 
            +
                    Amount collateralAmount, 
         | 
| 87 | 
            +
                    Amount premiumAmount // premium after pool fee
         | 
| 79 88 | 
             
                ) external;
         | 
| 80 89 |  | 
| 81 | 
            -
             | 
| 82 90 | 
             
                /// @dev releases the specified collateral in the bundle
         | 
| 83 91 | 
             
                /// may only be called by pool service
         | 
| 84 92 | 
             
                function releaseCollateral(
         | 
| 85 93 | 
             
                    IInstance instance, 
         | 
| 86 94 | 
             
                    NftId policyNftId, 
         | 
| 87 95 | 
             
                    NftId bundleNftId, 
         | 
| 88 | 
            -
                     | 
| 96 | 
            +
                    Amount collateralAmount
         | 
| 89 97 | 
             
                ) external;
         | 
| 90 98 |  | 
| 91 | 
            -
                 | 
| 99 | 
            +
                /// @dev unlink policy from bundle
         | 
| 100 | 
            +
                /// policy may only be unlinked if policy is closeable
         | 
| 101 | 
            +
                /// may only be called by pool service
         | 
| 102 | 
            +
                function unlinkPolicy(
         | 
| 103 | 
            +
                    IInstance instance, 
         | 
| 104 | 
            +
                    NftId policyNftId
         | 
| 105 | 
            +
                ) external;
         | 
| 92 106 |  | 
| 93 | 
            -
                 | 
| 107 | 
            +
                /// @dev updates the bundle's fees of with the provided fee amount
         | 
| 108 | 
            +
                function updateBundleFees(
         | 
| 109 | 
            +
                    IInstance instance,
         | 
| 110 | 
            +
                    NftId bundleNftId,
         | 
| 111 | 
            +
                    Amount feeAmount
         | 
| 112 | 
            +
                ) external;
         | 
| 94 113 |  | 
| 95 | 
            -
                 | 
| 114 | 
            +
                function increaseBalance(
         | 
| 115 | 
            +
                    IInstance instance, 
         | 
| 116 | 
            +
                    NftId bundleNftId,  
         | 
| 117 | 
            +
                    Amount amount) external;
         | 
| 96 118 | 
             
            }
         | 
| @@ -20,73 +20,71 @@ interface IClaimService is | |
| 20 20 | 
             
                IService
         | 
| 21 21 | 
             
            {
         | 
| 22 22 |  | 
| 23 | 
            +
                event LogClaimServiceClaimSubmitted(NftId policyNftId, ClaimId claimId, Amount claimAmount);
         | 
| 24 | 
            +
                event LogClaimServiceClaimConfirmed(NftId policyNftId, ClaimId claimId, Amount confirmedAmount);
         | 
| 25 | 
            +
                event LogClaimServiceClaimDeclined(NftId policyNftId, ClaimId claimId);
         | 
| 26 | 
            +
                event LogClaimServiceClaimClosed(NftId policyNftId, ClaimId claimId);
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                event LogClaimServicePayoutCreated(NftId policyNftId, PayoutId payoutId, Amount amount);
         | 
| 29 | 
            +
                event LogClaimServicePayoutProcessed(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary, Amount netAmount);
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                error ErrorClaimServicePolicyProductMismatch(NftId policyNftId, NftId expectedProduct, NftId actualProduct);
         | 
| 32 | 
            +
                error ErrorClaimServicePolicyNotOpen(NftId policyNftId);
         | 
| 33 | 
            +
                error ErrorClaimServiceClaimExceedsSumInsured(NftId policyNftId, Amount sumInsured, Amount payoutsIncludingClaimAmount);
         | 
| 34 | 
            +
             | 
| 23 35 | 
             
                error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint8 openPayouts);
         | 
| 24 36 | 
             
                error ErrorClaimServiceClaimWithMissingPayouts(NftId policyNftId, ClaimId claimId, Amount claimAmount, Amount paidAmount);
         | 
| 25 37 | 
             
                error ErrorClaimServiceClaimNotInExpectedState(NftId policyNftId, ClaimId claimId, StateId expectedState, StateId actualState);
         | 
| 26 38 |  | 
| 27 39 | 
             
                /// @dev create a new claim for the specified policy
         | 
| 40 | 
            +
                /// returns the id of the newly created claim
         | 
| 28 41 | 
             
                /// function can only be called by product, policy needs to match with calling product
         | 
| 29 42 | 
             
                function submit(
         | 
| 30 | 
            -
                    IInstance instance,
         | 
| 31 43 | 
             
                    NftId policyNftId, 
         | 
| 32 | 
            -
                    ClaimId claimId,
         | 
| 33 44 | 
             
                    Amount claimAmount,
         | 
| 34 45 | 
             
                    bytes memory claimData
         | 
| 35 | 
            -
                ) external;
         | 
| 46 | 
            +
                ) external returns (ClaimId claimId);
         | 
| 36 47 |  | 
| 37 | 
            -
                /// @dev  | 
| 48 | 
            +
                /// @dev declines the specified claim
         | 
| 38 49 | 
             
                /// function can only be called by product, policy needs to match with calling product
         | 
| 39 | 
            -
                function  | 
| 40 | 
            -
                    IInstance instance,
         | 
| 41 | 
            -
                    InstanceReader instanceReader,
         | 
| 50 | 
            +
                function decline(
         | 
| 42 51 | 
             
                    NftId policyNftId, 
         | 
| 43 | 
            -
                    ClaimId claimId | 
| 44 | 
            -
                    Amount claimAmount
         | 
| 45 | 
            -
                ) external;
         | 
| 52 | 
            +
                    ClaimId claimId) external;
         | 
| 46 53 |  | 
| 47 | 
            -
                /// @dev  | 
| 54 | 
            +
                /// @dev confirms the specified claim and specifies the payout amount
         | 
| 48 55 | 
             
                /// function can only be called by product, policy needs to match with calling product
         | 
| 49 | 
            -
                function  | 
| 50 | 
            -
                    IInstance instance,
         | 
| 51 | 
            -
                    InstanceReader instanceReader,
         | 
| 56 | 
            +
                function confirm(
         | 
| 52 57 | 
             
                    NftId policyNftId, 
         | 
| 53 | 
            -
                    ClaimId claimId
         | 
| 58 | 
            +
                    ClaimId claimId,
         | 
| 59 | 
            +
                    Amount confirmedAmount
         | 
| 54 60 | 
             
                ) external;
         | 
| 55 61 |  | 
| 56 | 
            -
                /// @dev closes the claim
         | 
| 57 | 
            -
                /// a claim may only be closed once all existing payouts have been executed and the sum of the paid out amounts has reached the claim amount
         | 
| 62 | 
            +
                /// @dev closes the specified claim
         | 
| 58 63 | 
             
                /// function can only be called by product, policy needs to match with calling product
         | 
| 59 64 | 
             
                function close(
         | 
| 60 | 
            -
                    IInstance instance,
         | 
| 61 | 
            -
                    InstanceReader instanceReader,
         | 
| 62 65 | 
             
                    NftId policyNftId, 
         | 
| 63 66 | 
             
                    ClaimId claimId
         | 
| 64 | 
            -
                ) external; | 
| 67 | 
            +
                ) external;
         | 
| 68 | 
            +
             | 
| 65 69 |  | 
| 66 | 
            -
                /// @dev  | 
| 67 | 
            -
                ///  | 
| 70 | 
            +
                /// @dev creates a new payout for the specified claim
         | 
| 71 | 
            +
                /// returns the id of the newly created payout, this id is unique for the specified policy
         | 
| 68 72 | 
             
                /// function can only be called by product, policy needs to match with calling product
         | 
| 69 73 | 
             
                function createPayout(
         | 
| 70 | 
            -
                    IInstance instance,
         | 
| 71 74 | 
             
                    NftId policyNftId, 
         | 
| 72 | 
            -
                     | 
| 73 | 
            -
                    Amount  | 
| 74 | 
            -
                    bytes  | 
| 75 | 
            -
                ) | 
| 75 | 
            +
                    ClaimId claimId,
         | 
| 76 | 
            +
                    Amount amount,
         | 
| 77 | 
            +
                    bytes memory data
         | 
| 78 | 
            +
                )
         | 
| 79 | 
            +
                    external
         | 
| 80 | 
            +
                    returns (PayoutId payoutId);
         | 
| 76 81 |  | 
| 77 | 
            -
             | 
| 78 | 
            -
                ///  | 
| 79 | 
            -
                ///  | 
| 82 | 
            +
             | 
| 83 | 
            +
                /// @dev processes the specified payout
         | 
| 84 | 
            +
                /// this includes moving the payout token to the beneficiary (default: policy holder)
         | 
| 85 | 
            +
                /// function can only be called by product, policy needs to match with calling product
         | 
| 80 86 | 
             
                function processPayout(
         | 
| 81 | 
            -
                    IInstance instance,
         | 
| 82 | 
            -
                    InstanceReader instanceReader,
         | 
| 83 87 | 
             
                    NftId policyNftId, 
         | 
| 84 88 | 
             
                    PayoutId payoutId
         | 
| 85 | 
            -
                )
         | 
| 86 | 
            -
                    external 
         | 
| 87 | 
            -
                    returns (
         | 
| 88 | 
            -
                        Amount amount,
         | 
| 89 | 
            -
                        bool payoutIsClosingClaim
         | 
| 90 | 
            -
                    );
         | 
| 91 | 
            -
             | 
| 89 | 
            +
                ) external;
         | 
| 92 90 | 
             
            }
         | 
| @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.19;
         | 
| 3 3 |  | 
| 4 | 
            +
            import {Amount} from "../../types/Amount.sol";
         | 
| 4 5 | 
             
            import {NftId} from "../../types/NftId.sol";
         | 
| 5 6 | 
             
            import {Fee} from "../../types/Fee.sol";
         | 
| 6 7 | 
             
            import {IPolicy} from "../module/IPolicy.sol";
         | 
| @@ -25,16 +26,8 @@ interface IDistributionService is IService { | |
| 25 26 | 
             
                error ErrorIDistributionServiceCommissionTooHigh(uint256 commissionPercentage, uint256 maxCommissionPercentage);
         | 
| 26 27 | 
             
                error ErrorIDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
         | 
| 27 28 | 
             
                error ErrorIDistributionServiceMaxDiscountTooHigh(uint256 maxDiscountPercentage, uint256 limit);
         | 
| 28 | 
            -
                error ErrorIDistributionServiceFeeCalculationMismatch(
         | 
| 29 | 
            -
                            uint256 distributionFeeFixAmount,
         | 
| 30 | 
            -
                            uint256 distributionFeeVarAmount,
         | 
| 31 | 
            -
                            uint256 distributionOwnerFeeFixAmount,
         | 
| 32 | 
            -
                            uint256 distributionOwnerFeeVarAmount,
         | 
| 33 | 
            -
                            uint256 commissionAmount,
         | 
| 34 | 
            -
                            uint256 discountAmount
         | 
| 35 | 
            -
                        );
         | 
| 36 29 | 
             
                error ErrorIDistributionServiceReferralInvalid(NftId distributionNftId, ReferralId referralId);
         | 
| 37 | 
            -
                error  | 
| 30 | 
            +
                error ErrorDistributionServiceInvalidFeeTransferred(Amount transferredDistributionFeeAmount, Amount expectedDistributionFeeAmount);
         | 
| 38 31 |  | 
| 39 32 | 
             
                function setFees(
         | 
| 40 33 | 
             
                    Fee memory minDistributionOwnerFee,
         | 
| @@ -61,11 +54,12 @@ interface IDistributionService is IService { | |
| 61 54 | 
             
                    bytes memory data
         | 
| 62 55 | 
             
                ) external returns (NftId distributorNftId);
         | 
| 63 56 |  | 
| 64 | 
            -
                 | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
                 | 
| 57 | 
            +
                // TODO re-enable and reorganize (service contract too large)
         | 
| 58 | 
            +
                // function updateDistributorType(
         | 
| 59 | 
            +
                //     NftId distributorNftId,
         | 
| 60 | 
            +
                //     DistributorType distributorType,
         | 
| 61 | 
            +
                //     bytes memory data
         | 
| 62 | 
            +
                // ) external;
         | 
| 69 63 |  | 
| 70 64 | 
             
                function createReferral(
         | 
| 71 65 | 
             
                    NftId distributorNftId,
         | 
| @@ -83,17 +77,11 @@ interface IDistributionService is IService { | |
| 83 77 | 
             
                    NftId distributionNftId,
         | 
| 84 78 | 
             
                    ReferralId referralId,
         | 
| 85 79 | 
             
                    IPolicy.Premium memory premium,
         | 
| 86 | 
            -
                     | 
| 80 | 
            +
                    Amount transferredDistributionFeeAmount
         | 
| 87 81 | 
             
                ) external;
         | 
| 88 82 |  | 
| 89 | 
            -
                function calculateFeeAmount(
         | 
| 90 | 
            -
                    NftId distributionNftId,
         | 
| 91 | 
            -
                    ReferralId referralId,
         | 
| 92 | 
            -
                    IPolicy.Premium memory premium
         | 
| 93 | 
            -
                ) external view returns (IPolicy.Premium memory finalPremium);
         | 
| 94 | 
            -
             | 
| 95 83 | 
             
                function referralIsValid(
         | 
| 96 84 | 
             
                    NftId distributorNftId,
         | 
| 97 85 | 
             
                    ReferralId referralId
         | 
| 98 86 | 
             
                ) external view returns (bool isValid);
         | 
| 99 | 
            -
            }
         | 
| 87 | 
            +
            }
         |