@etherisc/gif-next 0.0.2-770fd3b-604 → 0.0.2-77a1ccf-469
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 +8 -8
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +22 -145
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +79 -233
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +19 -92
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +57 -178
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +239 -104
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +23 -164
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +240 -155
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +27 -218
- 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 +343 -308
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +19 -184
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +469 -466
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +2 -2
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +79 -110
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +70 -284
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +196 -113
- 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 +18 -220
- 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/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 +182 -331
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +54 -276
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +182 -107
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +645 -268
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +300 -109
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +124 -206
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +26 -191
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +369 -167
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +25 -290
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +12 -177
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +12 -177
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +65 -443
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +188 -141
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +42 -272
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +179 -104
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +42 -272
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +179 -104
- 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 +71 -180
- 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 +7 -7
- 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 +90 -264
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +182 -113
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +11 -11
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +34 -67
- 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/ERC165.sol/ERC165.json +2 -2
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +4 -30
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +4 -30
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -21
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +12 -177
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -150
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +10 -62
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -23
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +171 -88
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +11 -74
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -23
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +13 -215
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -150
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +11 -74
- 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 +31 -269
- 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/TestVersionable.sol/TestVersionable.json +6 -188
- 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/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 +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
- 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/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 +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
- 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 +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
- 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 +69 -84
- package/contracts/components/Distribution.sol +26 -31
- package/contracts/components/IComponent.sol +34 -16
- package/contracts/components/IDistributionComponent.sol +1 -22
- package/contracts/components/IPoolComponent.sol +89 -25
- package/contracts/components/IProductComponent.sol +3 -2
- package/contracts/components/Pool.sol +216 -92
- package/contracts/components/Product.sol +36 -25
- package/contracts/instance/BundleManager.sol +1 -1
- package/contracts/instance/IInstance.sol +7 -1
- package/contracts/instance/Instance.sol +17 -7
- package/contracts/instance/InstanceService.sol +67 -10
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/module/IBundle.sol +2 -1
- package/contracts/instance/module/IDistribution.sol +2 -0
- package/contracts/instance/module/IPolicy.sol +30 -3
- package/contracts/instance/module/ISetup.sol +5 -6
- package/contracts/instance/service/ApplicationService.sol +138 -57
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +4 -3
- package/contracts/instance/service/BundleServiceManager.sol +1 -1
- package/contracts/instance/service/ClaimService.sol +151 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +146 -26
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +9 -9
- package/contracts/instance/service/IBundleService.sol +3 -2
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +23 -2
- package/contracts/instance/service/IPolicyService.sol +17 -35
- package/contracts/instance/service/PolicyService.sol +47 -169
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/IRegistryService.sol +10 -8
- package/contracts/registry/Registry.sol +3 -1
- package/contracts/registry/RegistryService.sol +62 -40
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +18 -28
- package/contracts/registry/TokenRegistry.sol +13 -10
- package/contracts/shared/ERC165.sol +2 -1
- package/contracts/shared/INftOwnable.sol +4 -9
- package/contracts/shared/IRegistryLinked.sol +0 -3
- package/contracts/shared/IService.sol +2 -0
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +10 -80
- package/contracts/shared/ProxyManager.sol +98 -24
- package/contracts/shared/Registerable.sol +3 -10
- package/contracts/shared/RegistryLinked.sol +10 -26
- package/contracts/shared/Service.sol +10 -12
- package/contracts/shared/Versionable.sol +1 -90
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/ObjectType.sol +4 -4
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/RoleId.sol +10 -5
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/Timestamp.sol +12 -13
- package/package.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
- package/contracts/experiment/cloning/Cloner.sol +0 -47
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
@@ -6,9 +6,10 @@ import {IInstance} from "../../instance/IInstance.sol";
|
|
6
6
|
import {InstanceAccessManager} from "../InstanceAccessManager.sol";
|
7
7
|
import {InstanceReader} from "../../instance/InstanceReader.sol";
|
8
8
|
import {ISetup} from "../../instance/module/ISetup.sol";
|
9
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
9
10
|
|
10
|
-
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
11
|
-
import {Fee} from "../../types/Fee.sol";
|
11
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
12
|
+
import {Fee, FeeLib} from "../../types/Fee.sol";
|
12
13
|
import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
|
13
14
|
import {KEEP_STATE} from "../../types/StateId.sol";
|
14
15
|
import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR} from "../../types/ObjectType.sol";
|
@@ -25,7 +26,7 @@ import {IComponent} from "../../components/IComponent.sol";
|
|
25
26
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
26
27
|
import {IDistributionService} from "./IDistributionService.sol";
|
27
28
|
|
28
|
-
import {UFixed} from "../../types/UFixed.sol";
|
29
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
29
30
|
import {DistributorType, DistributorTypeLib} from "../../types/DistributorType.sol";
|
30
31
|
import {ReferralId, ReferralStatus, ReferralLib} from "../../types/Referral.sol";
|
31
32
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
@@ -38,6 +39,9 @@ contract DistributionService is
|
|
38
39
|
IDistributionService
|
39
40
|
{
|
40
41
|
using NftIdLib for NftId;
|
42
|
+
using TimestampLib for Timestamp;
|
43
|
+
using UFixedLib for UFixed;
|
44
|
+
using FeeLib for Fee;
|
41
45
|
|
42
46
|
address internal _registryAddress;
|
43
47
|
|
@@ -87,16 +91,22 @@ contract DistributionService is
|
|
87
91
|
}
|
88
92
|
|
89
93
|
function setFees(
|
94
|
+
Fee memory minDistributionOwnerFee,
|
90
95
|
Fee memory distributionFee
|
91
96
|
)
|
92
97
|
external
|
93
98
|
override
|
94
99
|
{
|
100
|
+
if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
|
101
|
+
revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
|
102
|
+
}
|
103
|
+
|
95
104
|
(IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
|
96
105
|
InstanceReader instanceReader = instance.getInstanceReader();
|
97
106
|
NftId distributionNftId = info.nftId;
|
98
107
|
|
99
108
|
ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
109
|
+
distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
|
100
110
|
distSetupInfo.distributionFee = distributionFee;
|
101
111
|
|
102
112
|
instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
|
@@ -117,6 +127,16 @@ contract DistributionService is
|
|
117
127
|
returns (DistributorType distributorType)
|
118
128
|
{
|
119
129
|
(,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
130
|
+
|
131
|
+
{
|
132
|
+
ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
|
133
|
+
UFixed variableFeesPartsTotal = setupInfo.minDistributionOwnerFee.fractionalFee.add(commissionPercentage);
|
134
|
+
UFixed maxDiscountPercentageLimit = setupInfo.distributionFee.fractionalFee.sub(variableFeesPartsTotal);
|
135
|
+
if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
|
136
|
+
revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
|
137
|
+
}
|
138
|
+
}
|
139
|
+
|
120
140
|
distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
|
121
141
|
Key32 key32 = distributorType.toKey32();
|
122
142
|
|
@@ -144,18 +164,23 @@ contract DistributionService is
|
|
144
164
|
{
|
145
165
|
(, NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
146
166
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
167
|
+
distributorNftId = getRegistryService().registerDistributor(
|
168
|
+
IRegistry.ObjectInfo(
|
169
|
+
zeroNftId(),
|
170
|
+
distributionNftId,
|
171
|
+
DISTRIBUTOR(),
|
172
|
+
true, // intercepting property for bundles is defined on pool
|
173
|
+
address(0),
|
174
|
+
distributor,
|
175
|
+
""
|
176
|
+
));
|
154
177
|
|
155
178
|
IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
|
156
179
|
distributorType,
|
157
180
|
true, // active
|
158
|
-
data
|
181
|
+
data,
|
182
|
+
0,
|
183
|
+
0);
|
159
184
|
|
160
185
|
instance.createDistributor(distributorNftId, info);
|
161
186
|
}
|
@@ -167,13 +192,11 @@ contract DistributionService is
|
|
167
192
|
) external virtual
|
168
193
|
{
|
169
194
|
(,, IInstance instance) = _getAndVerifyCallingDistribution();
|
170
|
-
|
171
|
-
IDistribution.DistributorInfo memory
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
instance.updateDistributor(distributorNftId, info, KEEP_STATE());
|
195
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
196
|
+
IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
|
197
|
+
distributorInfo.distributorType = distributorType;
|
198
|
+
distributorInfo.data = data;
|
199
|
+
instance.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
|
177
200
|
}
|
178
201
|
|
179
202
|
|
@@ -190,8 +213,31 @@ contract DistributionService is
|
|
190
213
|
returns (ReferralId referralId)
|
191
214
|
{
|
192
215
|
(,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
193
|
-
|
194
|
-
|
216
|
+
|
217
|
+
if (bytes(code).length == 0) {
|
218
|
+
revert ErrorIDistributionServiceInvalidReferral(code);
|
219
|
+
}
|
220
|
+
if (expiryAt.eqz()) {
|
221
|
+
revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
|
222
|
+
}
|
223
|
+
|
224
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
225
|
+
IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
|
226
|
+
DistributorType distributorType = distributorInfo.distributorType;
|
227
|
+
IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
|
228
|
+
|
229
|
+
if (distributorTypeData.maxReferralCount < maxReferrals) {
|
230
|
+
revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
|
231
|
+
}
|
232
|
+
if (distributorTypeData.minDiscountPercentage > discountPercentage) {
|
233
|
+
revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
|
234
|
+
}
|
235
|
+
if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
|
236
|
+
revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
|
237
|
+
}
|
238
|
+
if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
|
239
|
+
revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
|
240
|
+
}
|
195
241
|
|
196
242
|
referralId = ReferralLib.toReferralId(distributionNftId, code);
|
197
243
|
IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
|
@@ -215,19 +261,71 @@ contract DistributionService is
|
|
215
261
|
external
|
216
262
|
virtual
|
217
263
|
{
|
264
|
+
// TODO: fetch referral
|
265
|
+
// TODO: update referral usage numbers
|
266
|
+
// TODO: update bookkeeping
|
267
|
+
// TODO: calculate commission for distributor
|
268
|
+
// TODO: calculate fee for distribution owner
|
269
|
+
// TODO: updates sum of commission per distributor -> DistributorInfo
|
270
|
+
// TODO: updates sum of fee per distribution owner
|
218
271
|
revert("NOT_IMPLEMENTED_YET");
|
219
272
|
}
|
220
273
|
|
221
274
|
function calculateFeeAmount(
|
275
|
+
NftId distributionNftId,
|
222
276
|
ReferralId referralId,
|
223
|
-
|
277
|
+
IPolicy.Premium memory premium
|
224
278
|
)
|
225
279
|
external
|
226
280
|
virtual
|
227
281
|
view
|
228
|
-
returns (
|
282
|
+
returns (IPolicy.Premium memory finalPremium)
|
229
283
|
{
|
230
|
-
|
284
|
+
(, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
|
285
|
+
InstanceReader reader = instance.getInstanceReader();
|
286
|
+
|
287
|
+
// first calculate all fixed and variable fees for the distribution - this will defined the fullPremium
|
288
|
+
ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
|
289
|
+
Fee memory distributionFee = setupInfo.distributionFee;
|
290
|
+
Fee memory minDistributionOwnerFee = setupInfo.minDistributionOwnerFee;
|
291
|
+
uint256 distributionFeeVarAmount = (UFixedLib.toUFixed(premium.netPremiumAmount) * distributionFee.fractionalFee).toInt();
|
292
|
+
premium.distributionFeeVarAmount = distributionFeeVarAmount;
|
293
|
+
premium.fullPremiumAmount += distributionFeeVarAmount;
|
294
|
+
|
295
|
+
// if the referral is not valid, then the distribution owner gets everything
|
296
|
+
if (! referralIsValid(distributionNftId, referralId)) {
|
297
|
+
premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
|
298
|
+
premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
|
299
|
+
premium.premiumAmount = premium.fullPremiumAmount;
|
300
|
+
return premium;
|
301
|
+
}
|
302
|
+
|
303
|
+
// if the referral is valid, the the commission and discount are calculated based in the full premium
|
304
|
+
// the remaing amount goes to the distribution owner
|
305
|
+
IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
|
306
|
+
IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
|
307
|
+
IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
|
308
|
+
|
309
|
+
uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
|
310
|
+
premium.commissionAmount = commissionAmount;
|
311
|
+
premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
|
312
|
+
premium.distributionOwnerFeeFixAmount = minDistributionOwnerFee.fixedFee;
|
313
|
+
premium.distributionOwnerFeeVarAmount = distributionFeeVarAmount - commissionAmount - premium.discountAmount;
|
314
|
+
premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
|
315
|
+
|
316
|
+
return premium;
|
317
|
+
}
|
318
|
+
|
319
|
+
function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
|
320
|
+
(address distributionAddress, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
|
321
|
+
IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
|
322
|
+
|
323
|
+
if (info.distributorNftId.eqz()) {
|
324
|
+
return false;
|
325
|
+
}
|
326
|
+
|
327
|
+
isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
|
328
|
+
isValid = isValid && info.usedReferrals < info.maxReferrals;
|
231
329
|
}
|
232
330
|
|
233
331
|
function _getAndVerifyCallingDistribution()
|
@@ -247,7 +345,25 @@ contract DistributionService is
|
|
247
345
|
instance
|
248
346
|
) = _getAndVerifyCaller();
|
249
347
|
|
250
|
-
|
348
|
+
if(objectType != DISTRIBUTION()) {
|
349
|
+
revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
|
350
|
+
}
|
351
|
+
}
|
352
|
+
|
353
|
+
function _getAndVerifyDistribution(NftId distributionNftId)
|
354
|
+
internal
|
355
|
+
view
|
356
|
+
returns(
|
357
|
+
address distributionAddress,
|
358
|
+
IInstance instance
|
359
|
+
)
|
360
|
+
{
|
361
|
+
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(distributionNftId);
|
362
|
+
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
|
363
|
+
if (parentInfo.objectType != INSTANCE()) {
|
364
|
+
revert ErrorIDistributionServiceParentNftIdNotInstance(distributionNftId, info.parentNftId);
|
365
|
+
}
|
366
|
+
instance = IInstance(parentInfo.objectAddress);
|
251
367
|
}
|
252
368
|
|
253
369
|
function _getAndVerifyCaller()
|
@@ -262,12 +378,16 @@ contract DistributionService is
|
|
262
378
|
{
|
263
379
|
objectAddress = msg.sender;
|
264
380
|
objectNftId = getRegistry().getNftId(objectAddress);
|
265
|
-
|
381
|
+
if ( objectNftId.eqz()) {
|
382
|
+
revert ErrorIServiceCallerUnknown(objectAddress);
|
383
|
+
}
|
266
384
|
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(objectNftId);
|
267
385
|
objectType = info.objectType;
|
268
386
|
|
269
387
|
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
|
270
|
-
|
388
|
+
if (parentInfo.objectType != INSTANCE()) {
|
389
|
+
revert ErrorIDistributionServiceParentNftIdNotInstance(objectNftId, info.parentNftId);
|
390
|
+
}
|
271
391
|
instance = IInstance(parentInfo.objectAddress);
|
272
392
|
}
|
273
393
|
|
@@ -16,7 +16,7 @@ contract DistributionServiceManager is ProxyManager {
|
|
16
16
|
constructor(
|
17
17
|
address registryAddress
|
18
18
|
)
|
19
|
-
ProxyManager()
|
19
|
+
ProxyManager(registryAddress)
|
20
20
|
{
|
21
21
|
DistributionService distSrv = new DistributionService();
|
22
22
|
bytes memory data = abi.encode(registryAddress, address(this));
|
@@ -1,12 +1,14 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
4
5
|
import {IRisk} from "../module/IRisk.sol";
|
5
6
|
import {IService} from "../../shared/IService.sol";
|
6
7
|
|
7
8
|
import {NftId} from "../../types/NftId.sol";
|
8
9
|
import {ReferralId} from "../../types/Referral.sol";
|
9
10
|
import {RiskId} from "../../types/RiskId.sol";
|
11
|
+
import {Seconds} from "../../types/Seconds.sol";
|
10
12
|
import {StateId} from "../../types/StateId.sol";
|
11
13
|
import {Timestamp} from "../../types/Timestamp.sol";
|
12
14
|
import {UFixed} from "../../types/UFixed.sol";
|
@@ -17,23 +19,24 @@ import {Fee} from "../../types/Fee.sol";
|
|
17
19
|
interface IApplicationService is IService {
|
18
20
|
|
19
21
|
error IApplicationServicePolicyNotApplied(NftId applicationNftId);
|
22
|
+
error IApplicationServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
|
20
23
|
|
21
24
|
/// @dev creates a new application based on the specified attributes
|
22
25
|
/// may only be called by a product component
|
23
26
|
function create(
|
24
27
|
address applicationOwner,
|
25
28
|
RiskId riskId,
|
29
|
+
uint256 sumInsuredAmount,
|
30
|
+
Seconds lifetime,
|
26
31
|
NftId bundleNftId,
|
27
32
|
ReferralId referralId,
|
28
|
-
uint256 sumInsuredAmount,
|
29
|
-
uint256 lifetime,
|
30
33
|
bytes memory applicationData
|
31
34
|
) external returns (NftId applicationNftId);
|
32
35
|
|
33
36
|
/// @dev updates application attributes
|
34
37
|
/// may only be called while the application is in applied state
|
35
38
|
/// may only be called by the referenced product related to applicationNftId
|
36
|
-
function
|
39
|
+
function adjust(
|
37
40
|
NftId applicationNftId,
|
38
41
|
RiskId riskId,
|
39
42
|
NftId bundleNftId,
|
@@ -63,9 +66,10 @@ interface IApplicationService is IService {
|
|
63
66
|
/// @dev calculates the premium amount for the specified attributes
|
64
67
|
/// also returns the various fee components involved with creating a policy
|
65
68
|
function calculatePremium(
|
69
|
+
NftId productNftId,
|
66
70
|
RiskId riskId,
|
67
71
|
uint256 sumInsuredAmount,
|
68
|
-
|
72
|
+
Seconds lifetime,
|
69
73
|
bytes memory applicationData,
|
70
74
|
NftId bundleNftId,
|
71
75
|
ReferralId referralId
|
@@ -73,10 +77,6 @@ interface IApplicationService is IService {
|
|
73
77
|
external
|
74
78
|
view
|
75
79
|
returns (
|
76
|
-
|
77
|
-
uint256 distributionFeeAmount,
|
78
|
-
uint256 productFeeAmount,
|
79
|
-
uint256 poolFeeAmount,
|
80
|
-
uint256 bundleFeeAmount
|
80
|
+
IPolicy.Premium memory premium
|
81
81
|
);
|
82
82
|
}
|
@@ -3,10 +3,11 @@ pragma solidity ^0.8.19;
|
|
3
3
|
|
4
4
|
import {NftId} from "../../types/NftId.sol";
|
5
5
|
import {Fee} from "../../types/Fee.sol";
|
6
|
-
import {StateId} from "../../types/StateId.sol";
|
7
6
|
import {IService} from "../../shared/IService.sol";
|
8
7
|
import {IBundle} from "../module/IBundle.sol";
|
9
8
|
import {IInstance} from "../../instance/IInstance.sol";
|
9
|
+
import {Seconds} from "../../types/Seconds.sol";
|
10
|
+
import {StateId} from "../../types/StateId.sol";
|
10
11
|
|
11
12
|
interface IBundleService is IService {
|
12
13
|
error ErrorIBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress, uint256 amount);
|
@@ -15,7 +16,7 @@ interface IBundleService is IService {
|
|
15
16
|
address owner,
|
16
17
|
Fee memory fee,
|
17
18
|
uint256 amount,
|
18
|
-
|
19
|
+
Seconds lifetime,
|
19
20
|
bytes calldata filter
|
20
21
|
) external returns(NftId bundleNftId);
|
21
22
|
|
@@ -0,0 +1,61 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRisk} from "../module/IRisk.sol";
|
5
|
+
import {IService} from "../../shared/IService.sol";
|
6
|
+
|
7
|
+
import {ClaimId} from "../../types/ClaimId.sol";
|
8
|
+
import {PayoutId} from "../../types/PayoutId.sol";
|
9
|
+
import {NftId} from "../../types/NftId.sol";
|
10
|
+
import {ReferralId} from "../../types/Referral.sol";
|
11
|
+
import {RiskId} from "../../types/RiskId.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
|
+
|
17
|
+
/// @dev gif service responsible for creating claims and payouts
|
18
|
+
/// only product components may call transaction functions
|
19
|
+
interface IClaimService is
|
20
|
+
IService
|
21
|
+
{
|
22
|
+
|
23
|
+
/// @dev create a new claim for the specified policy
|
24
|
+
/// function can only be called by product, policy needs to match with calling product
|
25
|
+
function createClaim(
|
26
|
+
NftId policyNftId,
|
27
|
+
uint256 claimAmount,
|
28
|
+
bytes memory claimData
|
29
|
+
) external returns (ClaimId);
|
30
|
+
|
31
|
+
/// @dev confirms the specified claim and fixes the final claim amount
|
32
|
+
/// function can only be called by product, policy needs to match with calling product
|
33
|
+
function confirmClaim(NftId policyNftId, ClaimId claimId, uint256 claimAmount) external;
|
34
|
+
|
35
|
+
/// @dev declares the claim as invalid, no payout(s) will be made
|
36
|
+
/// function can only be called by product, policy needs to match with calling product
|
37
|
+
function declineClaim(NftId policyNftId, ClaimId claimId) external;
|
38
|
+
|
39
|
+
/// @dev closes the claim
|
40
|
+
/// 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
|
41
|
+
/// function can only be called by product, policy needs to match with calling product
|
42
|
+
function closeClaim(NftId policyNftId, ClaimId claimId) external;
|
43
|
+
|
44
|
+
/// @dev create a new payout for the specified policy and claim
|
45
|
+
/// function can only be called by product, policy needs to match with calling product
|
46
|
+
function createPayout(
|
47
|
+
NftId policyNftId,
|
48
|
+
ClaimId claimId,
|
49
|
+
uint256 payoutAmount,
|
50
|
+
bytes calldata payoutData
|
51
|
+
) external returns (PayoutId payoutId);
|
52
|
+
|
53
|
+
/// @dev callback function to confirm transfer of payout token to beneficiary
|
54
|
+
/// allows claim service to update claims/payout book keeping
|
55
|
+
/// only pool service can confirm executed payout
|
56
|
+
function payoutExecuted(
|
57
|
+
NftId policyNftId,
|
58
|
+
PayoutId payoutId
|
59
|
+
) external;
|
60
|
+
|
61
|
+
}
|
@@ -3,6 +3,7 @@ pragma solidity ^0.8.19;
|
|
3
3
|
|
4
4
|
import {NftId} from "../../types/NftId.sol";
|
5
5
|
import {Fee} from "../../types/Fee.sol";
|
6
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
6
7
|
import {IService} from "../../shared/IService.sol";
|
7
8
|
import {UFixed} from "../../types/UFixed.sol";
|
8
9
|
import {DistributorType} from "../../types/DistributorType.sol";
|
@@ -11,7 +12,21 @@ import {Timestamp} from "../../types/Timestamp.sol";
|
|
11
12
|
|
12
13
|
|
13
14
|
interface IDistributionService is IService {
|
15
|
+
error ErrorIDistributionServiceParentNftIdNotInstance(NftId nftId, NftId parentNftId);
|
16
|
+
error ErrorIDistributionServiceCallerNotDistributor(address caller);
|
17
|
+
error ErrorIDistributionServiceInvalidReferralId(ReferralId referralId);
|
18
|
+
error ErrorIDistributionServiceMaxReferralsExceeded(uint256 maxReferrals);
|
19
|
+
error ErrorIDistributionServiceDiscountTooLow(uint256 minDiscountPercentage, uint256 discountPercentage);
|
20
|
+
error ErrorIDistributionServiceDiscountTooHigh(uint256 maxDiscountPercentage, uint256 discountPercentage);
|
21
|
+
error ErrorIDistributionServiceExpiryTooLong(uint256 maxReferralLifetime, uint256 expiryAt);
|
22
|
+
error ErrorIDistributionServiceInvalidReferral(string code);
|
23
|
+
error ErrorIDistributionServiceExpirationInvalid(Timestamp expiryAt);
|
24
|
+
error ErrorIDistributionServiceCommissionTooHigh(uint256 commissionPercentage, uint256 maxCommissionPercentage);
|
25
|
+
error ErrorIDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
|
26
|
+
error ErrorIDistributionServiceMaxDiscountTooHigh(uint256 maxDiscountPercentage, uint256 limit);
|
27
|
+
|
14
28
|
function setFees(
|
29
|
+
Fee memory minDistributionOwnerFee,
|
15
30
|
Fee memory distributionFee
|
16
31
|
) external;
|
17
32
|
|
@@ -59,7 +74,13 @@ interface IDistributionService is IService {
|
|
59
74
|
) external;
|
60
75
|
|
61
76
|
function calculateFeeAmount(
|
77
|
+
NftId distributionNftId,
|
62
78
|
ReferralId referralId,
|
63
|
-
|
64
|
-
) external view returns (
|
79
|
+
IPolicy.Premium memory premium
|
80
|
+
) external view returns (IPolicy.Premium memory finalPremium);
|
81
|
+
|
82
|
+
function referralIsValid(
|
83
|
+
NftId distributorNftId,
|
84
|
+
ReferralId referralId
|
85
|
+
) external view returns (bool isValid);
|
65
86
|
}
|
@@ -7,6 +7,7 @@ import {IService} from "../../shared/IService.sol";
|
|
7
7
|
import {NftId} from "../../types/NftId.sol";
|
8
8
|
import {ReferralId} from "../../types/Referral.sol";
|
9
9
|
import {RiskId} from "../../types/RiskId.sol";
|
10
|
+
import {Seconds} from "../../types/Seconds.sol";
|
10
11
|
import {StateId} from "../../types/StateId.sol";
|
11
12
|
import {Timestamp} from "../../types/Timestamp.sol";
|
12
13
|
import {UFixed} from "../../types/UFixed.sol";
|
@@ -22,42 +23,15 @@ interface IPolicyService is IService {
|
|
22
23
|
error ErrorIPolicyServicePremiumNotFullyPaid(NftId policyNftId, uint256 premiumAmount, uint256 premiumPaidAmount);
|
23
24
|
error ErrorIPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
|
24
25
|
error ErrorIPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
|
25
|
-
|
26
|
-
function calculatePremium(
|
27
|
-
RiskId riskId,
|
28
|
-
uint256 sumInsuredAmount,
|
29
|
-
uint256 lifetime,
|
30
|
-
bytes memory applicationData,
|
31
|
-
NftId bundleNftId,
|
32
|
-
ReferralId referralId
|
33
|
-
)
|
34
|
-
external
|
35
|
-
view
|
36
|
-
returns (
|
37
|
-
uint256 premiumAmount,
|
38
|
-
uint256 productFeeAmount,
|
39
|
-
uint256 poolFeeAmount,
|
40
|
-
uint256 bundleFeeAmount,
|
41
|
-
uint256 distributionFeeAmount
|
42
|
-
);
|
43
|
-
|
44
|
-
|
45
|
-
function createApplication(
|
46
|
-
address applicationOwner,
|
47
|
-
RiskId riskId,
|
48
|
-
uint256 sumInsuredAmount,
|
49
|
-
uint256 lifetime,
|
50
|
-
bytes memory applicationData,
|
51
|
-
NftId bundleNftId,
|
52
|
-
ReferralId referralId
|
53
|
-
) external returns (NftId nftId);
|
54
26
|
|
55
27
|
/// @dev declines an application represented by {policyNftId}
|
56
28
|
/// an application can only be declined in applied state
|
57
29
|
/// only the related product may decline an application
|
58
30
|
function decline(NftId policyNftId) external;
|
59
31
|
|
60
|
-
/// @dev underwrites the policy represented by {policyNftId}
|
32
|
+
/// @dev underwrites the policy represented by {policyNftId}
|
33
|
+
/// sets the policy state to underwritten
|
34
|
+
/// may set the policy state to activated and set the activation date
|
61
35
|
/// optionally collects premiums and activates the policy.
|
62
36
|
/// - premium payment is only attempted if requirePremiumPayment is set to true
|
63
37
|
/// - activation is only done if activateAt is a non-zero timestamp
|
@@ -69,17 +43,25 @@ interface IPolicyService is IService {
|
|
69
43
|
Timestamp activateAt
|
70
44
|
) external;
|
71
45
|
|
46
|
+
/// @dev collects the premium token for the specified policy
|
72
47
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external;
|
73
48
|
|
49
|
+
/// @dev activates the specified policy and sets the activation date in the policy metadata
|
50
|
+
/// to activate a policy it needs to be in underwritten state
|
74
51
|
function activate(NftId policyNftId, Timestamp activateAt) external;
|
75
52
|
|
76
|
-
|
53
|
+
/// @dev expires the specified policy and sets the expiry date in the policy metadata
|
54
|
+
/// to expire a policy it must be in active state, policies may be expired even when the predefined expiry date is still in the future
|
55
|
+
/// a policy can only be closed when it has been expired. in addition, it must not have any open claims
|
56
|
+
/// this function can only be called by a product. the policy needs to match with the calling product
|
57
|
+
function expire(NftId policyNftId) external;
|
77
58
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
59
|
+
/// @dev closes the specified policy and sets the closed data in the policy metadata
|
60
|
+
/// a policy can only be closed when it has been expired. in addition, it must not have any open claims
|
61
|
+
/// this function can only be called by a product. the policy needs to match with the calling product
|
62
|
+
function close(NftId policyNftId) external;
|
82
63
|
|
64
|
+
// TODO move function to pool service
|
83
65
|
function calculateRequiredCollateral(
|
84
66
|
UFixed collateralizationLevel,
|
85
67
|
uint256 sumInsuredAmount
|