@etherisc/gif-next 0.0.2-f30e0eb-805 → 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/README.md +6 -83
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +47 -6
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +70 -13
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +137 -6
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +144 -13
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +161 -20
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +151 -20
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +71 -20
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +62 -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 +310 -2004
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +101 -52
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +425 -2757
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +95 -58
- 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 +348 -58
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +153 -207
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +38 -83
- 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 +113 -34
- 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 +8 -8
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +6 -6
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +6 -6
- 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 +186 -236
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +38 -55
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +377 -182
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -39
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +713 -83
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +147 -32
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +266 -442
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +82 -107
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +111 -174
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +233 -128
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +385 -51
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +109 -282
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +210 -99
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +682 -33
- 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 +85 -27
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +420 -160
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +104 -53
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +880 -82
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +90 -39
- 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 +144 -57
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +28 -37
- 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 -37
- 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 +22 -49
- 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 +23 -11
- 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 +85 -27
- 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 +91 -28
- 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 +106 -39
- 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 +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
- 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 +83 -4
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +74 -19
- 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 +116 -7
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +17 -4
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/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 +25 -4
- package/contracts/components/Distribution.sol +11 -6
- package/contracts/components/IComponent.sol +19 -3
- package/contracts/components/IPoolComponent.sol +8 -7
- package/contracts/components/IProductComponent.sol +5 -4
- package/contracts/components/Pool.sol +17 -14
- package/contracts/components/Product.sol +144 -62
- package/contracts/instance/BundleManager.sol +3 -4
- package/contracts/instance/IInstance.sol +32 -53
- package/contracts/instance/IInstanceService.sol +15 -14
- package/contracts/instance/Instance.sol +107 -205
- package/contracts/instance/InstanceAccessManager.sol +44 -25
- package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
- package/contracts/instance/InstanceReader.sol +85 -7
- package/contracts/instance/InstanceService.sol +102 -289
- package/contracts/instance/InstanceStore.sol +212 -0
- package/contracts/instance/ObjectManager.sol +1 -1
- package/contracts/instance/base/ComponentService.sol +53 -39
- package/contracts/instance/base/KeyValueStore.sol +8 -34
- package/contracts/instance/base/Lifecycle.sol +15 -4
- package/contracts/instance/module/IAccess.sol +2 -2
- package/contracts/instance/module/IBundle.sol +6 -4
- package/contracts/instance/module/IComponents.sol +7 -1
- package/contracts/instance/module/IDistribution.sol +3 -2
- package/contracts/instance/module/IPolicy.sol +13 -8
- package/contracts/instance/service/ApplicationService.sol +62 -226
- package/contracts/instance/service/BundleService.sol +172 -126
- package/contracts/instance/service/ClaimService.sol +318 -32
- package/contracts/instance/service/DistributionService.sol +71 -190
- package/contracts/instance/service/IApplicationService.sol +8 -28
- package/contracts/instance/service/IBundleService.sol +82 -26
- package/contracts/instance/service/IClaimService.sol +52 -23
- package/contracts/instance/service/IDistributionService.sol +11 -22
- package/contracts/instance/service/IPolicyService.sol +24 -16
- package/contracts/instance/service/IPoolService.sol +82 -3
- package/contracts/instance/service/IPricingService.sol +37 -0
- package/contracts/instance/service/PolicyService.sol +152 -179
- package/contracts/instance/service/PoolService.sol +239 -56
- package/contracts/instance/service/PricingService.sol +275 -0
- package/contracts/instance/service/PricingServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +27 -58
- package/contracts/registry/IRegistryService.sol +2 -3
- package/contracts/registry/RegistryService.sol +24 -21
- package/contracts/registry/ReleaseManager.sol +20 -18
- package/contracts/shared/IPolicyHolder.sol +23 -9
- package/contracts/shared/IRegistryLinked.sol +0 -1
- package/contracts/shared/IService.sol +6 -6
- 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/Service.sol +21 -7
- package/contracts/shared/TokenHandler.sol +4 -2
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +109 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/Fee.sol +16 -8
- package/contracts/types/ObjectType.sol +9 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/StateId.sol +6 -2
- package/contracts/types/Timestamp.sol +5 -0
- 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
         | 
| @@ -60,11 +63,11 @@ contract DistributionService is | |
| 60 63 | 
             
                    (registryAddress, initialOwner) = abi.decode(data, (address, address));
         | 
| 61 64 | 
             
                    // TODO while DistributionService is not deployed in DistributionServiceManager constructor
         | 
| 62 65 | 
             
                    //      owner is DistributionServiceManager deployer
         | 
| 63 | 
            -
                    initializeService(registryAddress, owner);
         | 
| 66 | 
            +
                    initializeService(registryAddress, address(0), owner);
         | 
| 64 67 | 
             
                    registerInterface(type(IDistributionService).interfaceId);
         | 
| 65 68 | 
             
                }
         | 
| 66 69 |  | 
| 67 | 
            -
                function getDomain() public pure override | 
| 70 | 
            +
                function getDomain() public pure override returns(ObjectType) {
         | 
| 68 71 | 
             
                    return DISTRIBUTION();
         | 
| 69 72 | 
             
                }
         | 
| 70 73 |  | 
| @@ -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,15 +122,14 @@ contract DistributionService is | |
| 119 122 | 
             
                        revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
         | 
| 120 123 | 
             
                    }
         | 
| 121 124 |  | 
| 122 | 
            -
                    ( | 
| 125 | 
            +
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
         | 
| 123 126 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 124 | 
            -
                    NftId distributionNftId = info.nftId;
         | 
| 125 127 |  | 
| 126 128 | 
             
                    ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
         | 
| 127 129 | 
             
                    distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
         | 
| 128 130 | 
             
                    distSetupInfo.distributionFee = distributionFee;
         | 
| 129 131 |  | 
| 130 | 
            -
                    instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
         | 
| 132 | 
            +
                    instance.getInstanceStore().updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
         | 
| 131 133 | 
             
                }
         | 
| 132 134 |  | 
| 133 135 | 
             
                function createDistributorType(
         | 
| @@ -144,7 +146,7 @@ contract DistributionService is | |
| 144 146 | 
             
                    external
         | 
| 145 147 | 
             
                    returns (DistributorType distributorType)
         | 
| 146 148 | 
             
                {
         | 
| 147 | 
            -
                    ( | 
| 149 | 
            +
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
         | 
| 148 150 |  | 
| 149 151 | 
             
                    {
         | 
| 150 152 | 
             
                        ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
         | 
| @@ -154,33 +156,33 @@ contract DistributionService is | |
| 154 156 | 
             
                            revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
         | 
| 155 157 | 
             
                        }
         | 
| 156 158 | 
             
                    }
         | 
| 157 | 
            -
             | 
| 159 | 
            +
             | 
| 158 160 | 
             
                    distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
         | 
| 159 | 
            -
                     | 
| 160 | 
            -
             | 
| 161 | 
            -
             | 
| 162 | 
            -
                         | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 167 | 
            -
             | 
| 168 | 
            -
             | 
| 169 | 
            -
             | 
| 170 | 
            -
             | 
| 171 | 
            -
                            data);
         | 
| 172 | 
            -
             | 
| 173 | 
            -
                        instance.createDistributorType(key32, info);
         | 
| 174 | 
            -
                    }
         | 
| 161 | 
            +
                    IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
         | 
| 162 | 
            +
                        name,
         | 
| 163 | 
            +
                        minDiscountPercentage,
         | 
| 164 | 
            +
                        maxDiscountPercentage,
         | 
| 165 | 
            +
                        commissionPercentage,
         | 
| 166 | 
            +
                        maxReferralCount,
         | 
| 167 | 
            +
                        maxReferralLifetime,
         | 
| 168 | 
            +
                        allowSelfReferrals,
         | 
| 169 | 
            +
                        allowRenewals,
         | 
| 170 | 
            +
                        data);
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                    instance.getInstanceStore().createDistributorType(distributorType, info);
         | 
| 175 173 | 
             
                }
         | 
| 176 174 |  | 
| 175 | 
            +
             | 
| 177 176 | 
             
                function createDistributor(
         | 
| 178 177 | 
             
                    address distributor,
         | 
| 179 178 | 
             
                    DistributorType distributorType,
         | 
| 180 179 | 
             
                    bytes memory data
         | 
| 181 | 
            -
                ) | 
| 180 | 
            +
                )
         | 
| 181 | 
            +
                    external 
         | 
| 182 | 
            +
                    virtual
         | 
| 183 | 
            +
                    returns (NftId distributorNftId)
         | 
| 182 184 | 
             
                {
         | 
| 183 | 
            -
                    ( | 
| 185 | 
            +
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
         | 
| 184 186 |  | 
| 185 187 | 
             
                    distributorNftId = getRegistryService().registerDistributor(
         | 
| 186 188 | 
             
                        IRegistry.ObjectInfo(
         | 
| @@ -197,25 +199,27 @@ contract DistributionService is | |
| 197 199 | 
             
                        distributorType,
         | 
| 198 200 | 
             
                        true, // active
         | 
| 199 201 | 
             
                        data,
         | 
| 200 | 
            -
                         | 
| 202 | 
            +
                        AmountLib.zero(),
         | 
| 201 203 | 
             
                        0);
         | 
| 202 204 |  | 
| 203 | 
            -
                    instance.createDistributor(distributorNftId, info);
         | 
| 205 | 
            +
                    instance.getInstanceStore().createDistributor(distributorNftId, info);
         | 
| 204 206 | 
             
                }
         | 
| 205 207 |  | 
| 206 | 
            -
                function updateDistributorType(
         | 
| 207 | 
            -
             | 
| 208 | 
            -
             | 
| 209 | 
            -
             | 
| 210 | 
            -
                ) | 
| 211 | 
            -
                 | 
| 212 | 
            -
             | 
| 213 | 
            -
             | 
| 214 | 
            -
             | 
| 215 | 
            -
             | 
| 216 | 
            -
             | 
| 217 | 
            -
             | 
| 218 | 
            -
                 | 
| 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 | 
            +
                // }
         | 
| 219 223 |  | 
| 220 224 |  | 
| 221 225 | 
             
                function createReferral(
         | 
| @@ -230,7 +234,7 @@ contract DistributionService is | |
| 230 234 | 
             
                    virtual
         | 
| 231 235 | 
             
                    returns (ReferralId referralId)
         | 
| 232 236 | 
             
                {
         | 
| 233 | 
            -
                    ( | 
| 237 | 
            +
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
         | 
| 234 238 |  | 
| 235 239 | 
             
                    if (bytes(code).length == 0) {
         | 
| 236 240 | 
             
                        revert ErrorIDistributionServiceInvalidReferral(code);
         | 
| @@ -240,8 +244,7 @@ contract DistributionService is | |
| 240 244 | 
             
                    }
         | 
| 241 245 |  | 
| 242 246 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 243 | 
            -
                     | 
| 244 | 
            -
                    DistributorType distributorType = distributorInfo.distributorType;
         | 
| 247 | 
            +
                    DistributorType distributorType = instanceReader.getDistributorInfo(distributorNftId).distributorType;
         | 
| 245 248 | 
             
                    IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
         | 
| 246 249 |  | 
| 247 250 | 
             
                    if (distributorTypeData.maxReferralCount < maxReferrals) {
         | 
| @@ -268,15 +271,15 @@ contract DistributionService is | |
| 268 271 | 
             
                        data
         | 
| 269 272 | 
             
                    );
         | 
| 270 273 |  | 
| 271 | 
            -
                    instance.createReferral(referralId | 
| 274 | 
            +
                    instance.getInstanceStore().createReferral(referralId, info);
         | 
| 272 275 | 
             
                    return referralId;
         | 
| 273 276 | 
             
                }
         | 
| 274 277 |  | 
| 275 278 | 
             
                function processSale(
         | 
| 276 | 
            -
                    NftId distributionNftId,
         | 
| 279 | 
            +
                    NftId distributionNftId, // assume always of distribution type
         | 
| 277 280 | 
             
                    ReferralId referralId,
         | 
| 278 281 | 
             
                    IPolicy.Premium memory premium,
         | 
| 279 | 
            -
                     | 
| 282 | 
            +
                    Amount transferredDistributionFeeAmount
         | 
| 280 283 | 
             
                )
         | 
| 281 284 | 
             
                    external
         | 
| 282 285 | 
             
                    virtual
         | 
| @@ -288,109 +291,41 @@ contract DistributionService is | |
| 288 291 | 
             
                        revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
         | 
| 289 292 | 
             
                    }
         | 
| 290 293 |  | 
| 291 | 
            -
                     | 
| 294 | 
            +
                    IInstance instance = _getInstanceForDistribution(distributionNftId);
         | 
| 292 295 | 
             
                    InstanceReader reader = instance.getInstanceReader();
         | 
| 296 | 
            +
                    InstanceStore store = instance.getInstanceStore();
         | 
| 293 297 | 
             
                    IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
         | 
| 294 298 | 
             
                    IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
         | 
| 295 299 | 
             
                    ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
         | 
| 296 300 |  | 
| 297 | 
            -
                     | 
| 298 | 
            -
                     | 
| 301 | 
            +
                    Amount distributionOwnerFee = AmountLib.toAmount(premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount);
         | 
| 302 | 
            +
                    Amount commissionAmount = AmountLib.toAmount(premium.commissionAmount);
         | 
| 299 303 |  | 
| 300 | 
            -
                    if (transferredDistributionFeeAmount  | 
| 301 | 
            -
                        revert  | 
| 304 | 
            +
                    if (!(transferredDistributionFeeAmount == distributionOwnerFee + commissionAmount)) {
         | 
| 305 | 
            +
                        revert ErrorDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
         | 
| 302 306 | 
             
                    }
         | 
| 303 307 |  | 
| 304 308 |  | 
| 305 | 
            -
                    if (distributionOwnerFee | 
| 306 | 
            -
                        setupInfo.sumDistributionOwnerFees += distributionOwnerFee;
         | 
| 307 | 
            -
                         | 
| 309 | 
            +
                    if (distributionOwnerFee.gtz()) {
         | 
| 310 | 
            +
                        setupInfo.sumDistributionOwnerFees += distributionOwnerFee.toInt();
         | 
| 311 | 
            +
                        store.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
         | 
| 308 312 | 
             
                    }
         | 
| 309 313 |  | 
| 310 314 | 
             
                    if (isReferral) {
         | 
| 311 315 | 
             
                        referralInfo.usedReferrals += 1;
         | 
| 312 | 
            -
                         | 
| 316 | 
            +
                        store.updateReferral(referralId, referralInfo, KEEP_STATE());
         | 
| 313 317 |  | 
| 314 | 
            -
                        if (commissionAmount | 
| 315 | 
            -
                            distributorInfo. | 
| 318 | 
            +
                        if (commissionAmount.gtz()) {
         | 
| 319 | 
            +
                            distributorInfo.commissionAmount = distributorInfo.commissionAmount + commissionAmount;
         | 
| 316 320 | 
             
                            distributorInfo.numPoliciesSold += 1;
         | 
| 317 | 
            -
                             | 
| 321 | 
            +
                            store.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
         | 
| 318 322 | 
             
                        }
         | 
| 319 323 | 
             
                    }
         | 
| 320 324 | 
             
                }
         | 
| 321 325 |  | 
| 322 | 
            -
                function calculateFeeAmount(
         | 
| 323 | 
            -
                    NftId distributionNftId,
         | 
| 324 | 
            -
                    ReferralId referralId,
         | 
| 325 | 
            -
                    IPolicy.Premium memory premium
         | 
| 326 | 
            -
                )
         | 
| 327 | 
            -
                    external
         | 
| 328 | 
            -
                    virtual
         | 
| 329 | 
            -
                    view 
         | 
| 330 | 
            -
                    returns (IPolicy.Premium memory finalPremium)
         | 
| 331 | 
            -
                {
         | 
| 332 | 
            -
                    (, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
         | 
| 333 | 
            -
                    InstanceReader reader = instance.getInstanceReader();
         | 
| 334 | 
            -
                    
         | 
| 335 | 
            -
                    // first calculate all fixed and variable fees for the distribution - this will defined the fullPremium
         | 
| 336 | 
            -
                    ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
         | 
| 337 | 
            -
                    Fee memory distributionFee = setupInfo.distributionFee;
         | 
| 338 | 
            -
                    Fee memory minDistributionOwnerFee = setupInfo.minDistributionOwnerFee;
         | 
| 339 | 
            -
                    uint256 distributionFeeVarAmount = (UFixedLib.toUFixed(premium.netPremiumAmount) * distributionFee.fractionalFee).toInt();
         | 
| 340 | 
            -
                    premium.distributionFeeVarAmount = distributionFeeVarAmount;
         | 
| 341 | 
            -
                    premium.fullPremiumAmount += distributionFeeVarAmount;
         | 
| 342 | 
            -
                        
         | 
| 343 | 
            -
                    // if the referral is not valid, then the distribution owner gets everything
         | 
| 344 | 
            -
                    if (! referralIsValid(distributionNftId, referralId)) {
         | 
| 345 | 
            -
                        premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
         | 
| 346 | 
            -
                        premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
         | 
| 347 | 
            -
                        premium.premiumAmount = premium.fullPremiumAmount;
         | 
| 348 | 
            -
                        return premium;
         | 
| 349 | 
            -
                    }
         | 
| 350 | 
            -
             | 
| 351 | 
            -
                    // if the referral is valid, the the commission and discount are calculated based in the full premium
         | 
| 352 | 
            -
                    // the remaing amount goes to the distribution owner
         | 
| 353 | 
            -
                    {
         | 
| 354 | 
            -
                        IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
         | 
| 355 | 
            -
                        IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
         | 
| 356 | 
            -
                        IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
         | 
| 357 | 
            -
             | 
| 358 | 
            -
                        uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
         | 
| 359 | 
            -
                        premium.commissionAmount = commissionAmount;
         | 
| 360 | 
            -
                        premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
         | 
| 361 | 
            -
                        premium.distributionOwnerFeeFixAmount = minDistributionOwnerFee.fixedFee;
         | 
| 362 | 
            -
                        premium.distributionOwnerFeeVarAmount = distributionFeeVarAmount - commissionAmount - premium.discountAmount;
         | 
| 363 | 
            -
                        premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
         | 
| 364 | 
            -
                    }
         | 
| 365 | 
            -
             | 
| 366 | 
            -
                    // sanity check to validate the fee calculation
         | 
| 367 | 
            -
                    if (premium.distributionOwnerFeeFixAmount < minDistributionOwnerFee.fixedFee) {
         | 
| 368 | 
            -
                        revert ErrorIDistributionServiceFeeCalculationMismatch(
         | 
| 369 | 
            -
                            premium.distributionFeeFixAmount,
         | 
| 370 | 
            -
                            premium.distributionFeeVarAmount,
         | 
| 371 | 
            -
                            premium.distributionOwnerFeeFixAmount,
         | 
| 372 | 
            -
                            premium.distributionOwnerFeeVarAmount,
         | 
| 373 | 
            -
                            premium.commissionAmount,
         | 
| 374 | 
            -
                            premium.discountAmount
         | 
| 375 | 
            -
                        );
         | 
| 376 | 
            -
                    }
         | 
| 377 | 
            -
                    if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
         | 
| 378 | 
            -
                        revert ErrorIDistributionServiceFeeCalculationMismatch(
         | 
| 379 | 
            -
                            premium.distributionFeeFixAmount,
         | 
| 380 | 
            -
                            premium.distributionFeeVarAmount,
         | 
| 381 | 
            -
                            premium.distributionOwnerFeeFixAmount,
         | 
| 382 | 
            -
                            premium.distributionOwnerFeeVarAmount,
         | 
| 383 | 
            -
                            premium.commissionAmount,
         | 
| 384 | 
            -
                            premium.discountAmount
         | 
| 385 | 
            -
                        );
         | 
| 386 | 
            -
                    }
         | 
| 387 | 
            -
                    
         | 
| 388 | 
            -
                    return premium; 
         | 
| 389 | 
            -
                }
         | 
| 390 | 
            -
             | 
| 391 326 | 
             
                // TODO: zero should return false
         | 
| 392 327 | 
             
                function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
         | 
| 393 | 
            -
                     | 
| 328 | 
            +
                    IInstance instance = _getInstanceForDistribution(distributionNftId);
         | 
| 394 329 | 
             
                    IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
         | 
| 395 330 |  | 
| 396 331 | 
             
                    if (info.distributorNftId.eqz()) {
         | 
| @@ -401,67 +336,13 @@ contract DistributionService is | |
| 401 336 | 
             
                    isValid = isValid && info.usedReferrals < info.maxReferrals;
         | 
| 402 337 | 
             
                }
         | 
| 403 338 |  | 
| 404 | 
            -
                function  | 
| 405 | 
            -
                    internal
         | 
| 406 | 
            -
                    view
         | 
| 407 | 
            -
                    returns(
         | 
| 408 | 
            -
                        address distributionAddress,
         | 
| 409 | 
            -
                        NftId distributionNftId,
         | 
| 410 | 
            -
                        IInstance instance
         | 
| 411 | 
            -
                    )
         | 
| 412 | 
            -
                {
         | 
| 413 | 
            -
                    ObjectType objectType;
         | 
| 414 | 
            -
                    (
         | 
| 415 | 
            -
                        distributionAddress,
         | 
| 416 | 
            -
                        distributionNftId,
         | 
| 417 | 
            -
                        objectType,
         | 
| 418 | 
            -
                        instance
         | 
| 419 | 
            -
                    ) = _getAndVerifyCaller();
         | 
| 420 | 
            -
             | 
| 421 | 
            -
                    if(objectType != DISTRIBUTION()) {
         | 
| 422 | 
            -
                        revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
         | 
| 423 | 
            -
                    }
         | 
| 424 | 
            -
                }
         | 
| 425 | 
            -
             | 
| 426 | 
            -
                function _getAndVerifyDistribution(NftId distributionNftId)
         | 
| 427 | 
            -
                    internal
         | 
| 428 | 
            -
                    view
         | 
| 429 | 
            -
                    returns(
         | 
| 430 | 
            -
                        address distributionAddress,
         | 
| 431 | 
            -
                        IInstance instance
         | 
| 432 | 
            -
                    )
         | 
| 433 | 
            -
                {
         | 
| 434 | 
            -
                    IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(distributionNftId);
         | 
| 435 | 
            -
                    IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
         | 
| 436 | 
            -
                    if (parentInfo.objectType != INSTANCE()) {
         | 
| 437 | 
            -
                        revert ErrorIDistributionServiceParentNftIdNotInstance(distributionNftId, info.parentNftId);
         | 
| 438 | 
            -
                    }
         | 
| 439 | 
            -
                    instance = IInstance(parentInfo.objectAddress);
         | 
| 440 | 
            -
                }
         | 
| 441 | 
            -
             | 
| 442 | 
            -
                function _getAndVerifyCaller()
         | 
| 339 | 
            +
                function _getInstanceForDistribution(NftId distributionNftId)
         | 
| 443 340 | 
             
                    internal
         | 
| 444 341 | 
             
                    view
         | 
| 445 | 
            -
                    returns(
         | 
| 446 | 
            -
                        address objectAddress,
         | 
| 447 | 
            -
                        NftId objectNftId,
         | 
| 448 | 
            -
                        ObjectType objectType,
         | 
| 449 | 
            -
                        IInstance instance
         | 
| 450 | 
            -
                    )
         | 
| 342 | 
            +
                    returns(IInstance instance)
         | 
| 451 343 | 
             
                {
         | 
| 452 | 
            -
                     | 
| 453 | 
            -
                     | 
| 454 | 
            -
                     | 
| 455 | 
            -
                        revert ErrorIServiceCallerUnknown(objectAddress);
         | 
| 456 | 
            -
                    }
         | 
| 457 | 
            -
                    IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(objectNftId);
         | 
| 458 | 
            -
                    objectType = info.objectType;
         | 
| 459 | 
            -
             | 
| 460 | 
            -
                    IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
         | 
| 461 | 
            -
                    if (parentInfo.objectType != INSTANCE()) {
         | 
| 462 | 
            -
                        revert ErrorIDistributionServiceParentNftIdNotInstance(objectNftId, info.parentNftId);
         | 
| 463 | 
            -
                    }
         | 
| 464 | 
            -
                    instance = IInstance(parentInfo.objectAddress);
         | 
| 344 | 
            +
                    NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
         | 
| 345 | 
            +
                    address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
         | 
| 346 | 
            +
                    return IInstance(instanceAddress);
         | 
| 465 347 | 
             
                }
         | 
| 466 | 
            -
             | 
| 467 | 
            -
            }
         | 
| 348 | 
            +
            }
         | 
| @@ -2,31 +2,28 @@ | |
| 2 2 | 
             
            pragma solidity ^0.8.19;
         | 
| 3 3 |  | 
| 4 4 | 
             
            import {IPolicy} from "../module/IPolicy.sol";
         | 
| 5 | 
            -
            import {IRisk} from "../module/IRisk.sol";
         | 
| 6 5 | 
             
            import {IService} from "../../shared/IService.sol";
         | 
| 7 6 |  | 
| 7 | 
            +
            import {Amount} from "../../types/Amount.sol";
         | 
| 8 8 | 
             
            import {NftId} from "../../types/NftId.sol";
         | 
| 9 | 
            +
            import {ObjectType} from "../../types/ObjectType.sol";
         | 
| 9 10 | 
             
            import {ReferralId} from "../../types/Referral.sol";
         | 
| 10 11 | 
             
            import {RiskId} from "../../types/RiskId.sol";
         | 
| 11 12 | 
             
            import {Seconds} from "../../types/Seconds.sol";
         | 
| 12 | 
            -
            import {StateId} from "../../types/StateId.sol";
         | 
| 13 | 
            -
            import {Timestamp} from "../../types/Timestamp.sol";
         | 
| 14 | 
            -
            import {UFixed} from "../../types/UFixed.sol";
         | 
| 15 | 
            -
            import {Fee} from "../../types/Fee.sol";
         | 
| 16 13 |  | 
| 17 14 | 
             
            /// @dev gif service responsible for creating applications
         | 
| 18 15 | 
             
            /// only product components may call transaction functions
         | 
| 19 16 | 
             
            interface IApplicationService is IService {
         | 
| 20 17 |  | 
| 21 | 
            -
                error  | 
| 22 | 
            -
                error  | 
| 18 | 
            +
                error ErrorApplicationServiceNotProduct(NftId callerNftId, ObjectType callerType);
         | 
| 19 | 
            +
                error ErrorApplicationServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
         | 
| 23 20 |  | 
| 24 21 | 
             
                /// @dev creates a new application based on the specified attributes
         | 
| 25 22 | 
             
                /// may only be called by a product component
         | 
| 26 23 | 
             
                function create(
         | 
| 27 24 | 
             
                    address applicationOwner,
         | 
| 28 25 | 
             
                    RiskId riskId,
         | 
| 29 | 
            -
                     | 
| 26 | 
            +
                    Amount sumInsuredAmount,
         | 
| 30 27 | 
             
                    Seconds lifetime,
         | 
| 31 28 | 
             
                    NftId bundleNftId,
         | 
| 32 29 | 
             
                    ReferralId referralId,
         | 
| @@ -41,8 +38,8 @@ interface IApplicationService is IService { | |
| 41 38 | 
             
                    RiskId riskId,
         | 
| 42 39 | 
             
                    NftId bundleNftId,
         | 
| 43 40 | 
             
                    ReferralId referralId,
         | 
| 44 | 
            -
                     | 
| 45 | 
            -
                     | 
| 41 | 
            +
                    Amount sumInsuredAmount,
         | 
| 42 | 
            +
                    Seconds lifetime,
         | 
| 46 43 | 
             
                    bytes memory applicationData
         | 
| 47 44 | 
             
                ) external;
         | 
| 48 45 |  | 
| @@ -62,21 +59,4 @@ interface IApplicationService is IService { | |
| 62 59 | 
             
                /// an application can only be revoked in applied state
         | 
| 63 60 | 
             
                /// only the application holder may revoke an application
         | 
| 64 61 | 
             
                function revoke(NftId policyNftId) external;
         | 
| 65 | 
            -
             | 
| 66 | 
            -
                /// @dev calculates the premium amount for the specified attributes
         | 
| 67 | 
            -
                /// also returns the various fee components involved with creating a policy
         | 
| 68 | 
            -
                function calculatePremium(
         | 
| 69 | 
            -
                    NftId productNftId,
         | 
| 70 | 
            -
                    RiskId riskId,
         | 
| 71 | 
            -
                    uint256 sumInsuredAmount,
         | 
| 72 | 
            -
                    Seconds lifetime,
         | 
| 73 | 
            -
                    bytes memory applicationData,
         | 
| 74 | 
            -
                    NftId bundleNftId,
         | 
| 75 | 
            -
                    ReferralId referralId
         | 
| 76 | 
            -
                )
         | 
| 77 | 
            -
                    external
         | 
| 78 | 
            -
                    view
         | 
| 79 | 
            -
                    returns (
         | 
| 80 | 
            -
                        IPolicy.Premium memory premium
         | 
| 81 | 
            -
                    );
         | 
| 82 | 
            -
            }
         | 
| 62 | 
            +
            }
         | 
| @@ -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 {IService} from "../../shared/IService.sol";
         | 
| @@ -8,55 +9,110 @@ import {IBundle} from "../module/IBundle.sol"; | |
| 8 9 | 
             
            import {IInstance} from "../../instance/IInstance.sol";
         | 
| 9 10 | 
             
            import {Seconds} from "../../types/Seconds.sol";
         | 
| 10 11 | 
             
            import {StateId} from "../../types/StateId.sol";
         | 
| 12 | 
            +
            import {Timestamp} from "../../types/Timestamp.sol";
         | 
| 11 13 |  | 
| 12 14 | 
             
            interface IBundleService is IService {
         | 
| 13 15 |  | 
| 14 16 | 
             
                event LogBundleServiceBundleActivated(NftId bundleNftId);
         | 
| 15 17 | 
             
                event LogBundleServiceBundleLocked(NftId bundleNftId);
         | 
| 16 | 
            -
                event LogBundleServiceBundleClosed(NftId bundleNftId);
         | 
| 17 18 |  | 
| 18 | 
            -
                error ErrorBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress,  | 
| 19 | 
            -
                error ErrorBundleServiceBundleNotOpen(NftId bundleNftId, StateId state);
         | 
| 19 | 
            +
                error ErrorBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress, Amount amount);
         | 
| 20 | 
            +
                error ErrorBundleServiceBundleNotOpen(NftId bundleNftId, StateId state, Timestamp expiredAt);
         | 
| 21 | 
            +
                error ErrorBundleServiceCapacityInsufficient(NftId bundleNftId, Amount capacityAmount, Amount collateralAmount);
         | 
| 20 22 | 
             
                error ErrorBundleServiceBundleWithOpenPolicies(NftId bundleNftId, uint256 openPoliciesCount);
         | 
| 21 23 |  | 
| 24 | 
            +
                error ErrorBundleServiceBundleUnknown(NftId bundleNftId);
         | 
| 25 | 
            +
                error ErrorBundleServiceBundlePoolMismatch(NftId bundleNftId, NftId expectedPool, NftId actualPool);
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                /// @dev create a new bundle for the specified attributes
         | 
| 30 | 
            +
                /// may only be called by pool service
         | 
| 22 31 | 
             
                function create(
         | 
| 23 | 
            -
                     | 
| 24 | 
            -
                     | 
| 25 | 
            -
                     | 
| 26 | 
            -
                     | 
| 27 | 
            -
                     | 
| 28 | 
            -
             | 
| 32 | 
            +
                    IInstance instance, // instance relevant for bundle
         | 
| 33 | 
            +
                    NftId poolNftId, // the pool the bundle will be linked to
         | 
| 34 | 
            +
                    address owner, // initial bundle owner
         | 
| 35 | 
            +
                    Fee memory fee, // fees deducted from premium that go to bundle owner
         | 
| 36 | 
            +
                    Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
         | 
| 37 | 
            +
                    Seconds lifetime, // initial duration for which new policies are covered
         | 
| 38 | 
            +
                    bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
         | 
| 39 | 
            +
                )
         | 
| 40 | 
            +
                    external 
         | 
| 41 | 
            +
                    returns(NftId bundleNftId); // the nft id of the newly created bundle
         | 
| 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 | 
            +
             | 
| 50 | 
            +
                /// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
         | 
| 51 | 
            +
                /// only active bundles may be locked
         | 
| 52 | 
            +
                /// may only be called by registered and unlocked pool components
         | 
| 53 | 
            +
                function lock(NftId bundleNftId) external;
         | 
| 29 54 |  | 
| 55 | 
            +
                /// @dev activates the specified bundle
         | 
| 56 | 
            +
                /// only locked bundles may be unlocked
         | 
| 57 | 
            +
                /// may only be called by registered and unlocked pool components
         | 
| 58 | 
            +
                function unlock(NftId bundleNftId) external;
         | 
| 30 59 |  | 
| 60 | 
            +
                /// @dev closes the specified bundle
         | 
| 61 | 
            +
                /// only open bundles (active or locked) may be closed
         | 
| 62 | 
            +
                /// to close a bundle it may not have any non-closed polices attached to it
         | 
| 63 | 
            +
                /// may only be called by registered and unlocked pool components
         | 
| 64 | 
            +
                function close(
         | 
| 65 | 
            +
                    IInstance instance, 
         | 
| 66 | 
            +
                    NftId bundleNftId
         | 
| 67 | 
            +
                ) external;
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                /// @dev set bundle fee to provided value
         | 
| 70 | 
            +
                /// may only be called by registered and unlocked pool components
         | 
| 31 71 | 
             
                function setFee(
         | 
| 32 72 | 
             
                    NftId bundleNftId,
         | 
| 33 73 | 
             
                    Fee memory fee
         | 
| 34 74 | 
             
                ) external;
         | 
| 35 75 |  | 
| 36 76 |  | 
| 77 | 
            +
                /// @dev locks the specified collateral in the bundle
         | 
| 78 | 
            +
                /// the locked collateral is added to the bundle locked capital
         | 
| 79 | 
            +
                /// the bundles' fees are updated with the fees for this premium
         | 
| 80 | 
            +
                /// the premium (minus bundle fee) is added to the bundle capital
         | 
| 81 | 
            +
                /// may only be called by pool service
         | 
| 37 82 | 
             
                function lockCollateral(
         | 
| 38 83 | 
             
                    IInstance instanceNftId, 
         | 
| 39 84 | 
             
                    NftId policyNftId, 
         | 
| 40 85 | 
             
                    NftId bundleNftId, 
         | 
| 41 | 
            -
                     | 
| 42 | 
            -
                     | 
| 43 | 
            -
                )
         | 
| 44 | 
            -
                    external
         | 
| 45 | 
            -
                    returns (
         | 
| 46 | 
            -
                        IBundle.BundleInfo memory bundleInfo
         | 
| 47 | 
            -
                    );
         | 
| 48 | 
            -
             | 
| 49 | 
            -
                function increaseBalance(IInstance instance, NftId bundleNftId,  uint256 amount) external;
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                function closePolicy(IInstance instance, NftId policyNftId, NftId bundleNftId, uint256 collateralAmount) external;
         | 
| 52 | 
            -
             | 
| 53 | 
            -
                // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
         | 
| 86 | 
            +
                    Amount collateralAmount, 
         | 
| 87 | 
            +
                    Amount premiumAmount // premium after pool fee
         | 
| 88 | 
            +
                ) external;
         | 
| 54 89 |  | 
| 55 | 
            -
                 | 
| 90 | 
            +
                /// @dev releases the specified collateral in the bundle
         | 
| 91 | 
            +
                /// may only be called by pool service
         | 
| 92 | 
            +
                function releaseCollateral(
         | 
| 93 | 
            +
                    IInstance instance, 
         | 
| 94 | 
            +
                    NftId policyNftId, 
         | 
| 95 | 
            +
                    NftId bundleNftId, 
         | 
| 96 | 
            +
                    Amount collateralAmount
         | 
| 97 | 
            +
                ) external;
         | 
| 56 98 |  | 
| 57 | 
            -
                 | 
| 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;
         | 
| 58 106 |  | 
| 59 | 
            -
                 | 
| 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;
         | 
| 60 113 |  | 
| 61 | 
            -
                function  | 
| 114 | 
            +
                function increaseBalance(
         | 
| 115 | 
            +
                    IInstance instance, 
         | 
| 116 | 
            +
                    NftId bundleNftId,  
         | 
| 117 | 
            +
                    Amount amount) external;
         | 
| 62 118 | 
             
            }
         |