@etherisc/gif-next 0.0.2-e5a2253-213 → 0.0.2-e69072e-892
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 +73 -1
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → Component.sol/Component.json} +340 -59
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +804 -211
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{IBaseComponent.sol/IBaseComponent.json → IComponent.sol/IComponent.json} +95 -56
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +699 -22
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +814 -60
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +519 -4
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +896 -298
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +442 -129
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
- 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 +910 -289
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +110 -171
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +874 -557
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +52 -115
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +101 -168
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +346 -263
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +319 -86
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +119 -189
- 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/IAccess.sol/IAccess.json +13 -13
- 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 +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
- 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 +258 -283
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +305 -80
- 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 +983 -221
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +441 -72
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +130 -217
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/service/IClaimService.sol/IClaimService.json} +146 -179
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +552 -140
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +40 -292
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +22 -174
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +22 -174
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +161 -407
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +311 -114
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +139 -237
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +302 -77
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +139 -237
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +302 -77
- 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/IRegistry.sol/IRegistry.json +98 -5
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +112 -198
- 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 +112 -27
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +18 -18
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +216 -234
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -81
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +70 -53
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +151 -50
- 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 +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +22 -174
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +114 -157
- 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 +2 -152
- 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 +129 -51
- 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 +135 -214
- 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 +8 -190
- 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 +221 -0
- package/contracts/components/Distribution.sol +206 -67
- package/contracts/components/IComponent.sol +68 -0
- package/contracts/components/IDistributionComponent.sol +44 -9
- package/contracts/components/IPoolComponent.sol +124 -39
- package/contracts/components/IProductComponent.sol +8 -3
- package/contracts/components/Pool.sol +284 -164
- package/contracts/components/Product.sol +110 -116
- package/contracts/instance/BundleManager.sol +8 -12
- package/contracts/instance/IInstance.sol +41 -9
- package/contracts/instance/IInstanceService.sol +20 -1
- package/contracts/instance/Instance.sol +90 -61
- package/contracts/instance/InstanceAccessManager.sol +18 -24
- package/contracts/instance/InstanceReader.sol +3 -25
- package/contracts/instance/InstanceService.sol +195 -50
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/ObjectManager.sol +7 -24
- package/contracts/instance/base/{ComponentServiceBase.sol → ComponentService.sol} +9 -13
- package/contracts/instance/module/IAccess.sol +3 -4
- 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 +10 -10
- package/contracts/instance/service/ApplicationService.sol +350 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +17 -12
- 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 +312 -33
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +14 -3
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +74 -0
- package/contracts/instance/service/IPolicyService.sol +26 -50
- package/contracts/instance/service/PolicyService.sol +127 -262
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +12 -45
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/ProductService.sol +50 -26
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/IRegistry.sol +16 -8
- package/contracts/registry/IRegistryService.sol +19 -10
- package/contracts/registry/Registry.sol +120 -52
- package/contracts/registry/RegistryAccessManager.sol +31 -25
- package/contracts/registry/RegistryService.sol +91 -128
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +86 -106
- package/contracts/registry/TokenRegistry.sol +19 -13
- package/contracts/shared/ERC165.sol +14 -12
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +26 -0
- package/contracts/shared/IRegisterable.sol +4 -4
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +2 -0
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +66 -80
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +16 -32
- package/contracts/shared/RegistryLinked.sol +48 -0
- package/contracts/shared/Service.sol +19 -19
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/ObjectType.sol +9 -5
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/RoleId.sol +12 -7
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/Timestamp.sol +12 -13
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- 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/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/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -100
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/contracts/components/BaseComponent.sol +0 -168
- package/contracts/components/IBaseComponent.sol +0 -35
- 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
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
- package/contracts/instance/IInstanceBase.sol +0 -25
- package/contracts/instance/InstanceBase.sol +0 -39
- package/contracts/instance/base/IInstanceBase.sol +0 -21
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -0,0 +1,151 @@
|
|
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 "./IApplicationService.sol";
|
6
|
+
|
7
|
+
import {IRegistry} from "../../registry/IRegistry.sol";
|
8
|
+
import {IProductComponent} from "../../components/IProductComponent.sol";
|
9
|
+
import {Product} from "../../components/Product.sol";
|
10
|
+
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
11
|
+
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
12
|
+
import {IInstance} from "../IInstance.sol";
|
13
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
14
|
+
import {IRisk} from "../module/IRisk.sol";
|
15
|
+
import {IBundle} from "../module/IBundle.sol";
|
16
|
+
import {IProductService} from "./IProductService.sol";
|
17
|
+
import {ITreasury} from "../module/ITreasury.sol";
|
18
|
+
import {ISetup} from "../module/ISetup.sol";
|
19
|
+
|
20
|
+
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
21
|
+
|
22
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
23
|
+
import {Versionable} from "../../shared/Versionable.sol";
|
24
|
+
|
25
|
+
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
26
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
27
|
+
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
28
|
+
import {ObjectType, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, CLAIM, BUNDLE} from "../../types/ObjectType.sol";
|
29
|
+
import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
|
30
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
31
|
+
import {Fee, FeeLib} from "../../types/Fee.sol";
|
32
|
+
import {ReferralId} from "../../types/Referral.sol";
|
33
|
+
import {RiskId} from "../../types/RiskId.sol";
|
34
|
+
import {StateId} from "../../types/StateId.sol";
|
35
|
+
import {ClaimId} from "../../types/ClaimId.sol";
|
36
|
+
import {PayoutId} from "../../types/PayoutId.sol";
|
37
|
+
import {Version, VersionLib} from "../../types/Version.sol";
|
38
|
+
|
39
|
+
import {ComponentService} from "../base/ComponentService.sol";
|
40
|
+
import {InstanceReader} from "../InstanceReader.sol";
|
41
|
+
import {IBundleService} from "./IBundleService.sol";
|
42
|
+
import {IClaimService} from "./IClaimService.sol";
|
43
|
+
import {IPoolService} from "./IPoolService.sol";
|
44
|
+
import {IService} from "../../shared/IService.sol";
|
45
|
+
import {Service} from "../../shared/Service.sol";
|
46
|
+
|
47
|
+
|
48
|
+
contract ClaimService is
|
49
|
+
ComponentService,
|
50
|
+
IClaimService
|
51
|
+
{
|
52
|
+
|
53
|
+
|
54
|
+
function _initialize(
|
55
|
+
address owner,
|
56
|
+
bytes memory data
|
57
|
+
)
|
58
|
+
internal
|
59
|
+
virtual override
|
60
|
+
initializer()
|
61
|
+
{
|
62
|
+
// TODO check this, might no longer be the way, refactor if necessary
|
63
|
+
address registryAddress;
|
64
|
+
address initialOwner;
|
65
|
+
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
66
|
+
|
67
|
+
initializeService(registryAddress, owner);
|
68
|
+
registerInterface(type(IClaimService).interfaceId);
|
69
|
+
}
|
70
|
+
|
71
|
+
|
72
|
+
function getDomain() public pure override(IService, Service) returns(ObjectType) {
|
73
|
+
return CLAIM();
|
74
|
+
}
|
75
|
+
|
76
|
+
|
77
|
+
function createClaim(
|
78
|
+
NftId policyNftId,
|
79
|
+
uint256 claimAmount,
|
80
|
+
bytes memory claimData
|
81
|
+
)
|
82
|
+
external
|
83
|
+
virtual
|
84
|
+
returns (ClaimId)
|
85
|
+
{
|
86
|
+
|
87
|
+
}
|
88
|
+
|
89
|
+
|
90
|
+
function confirmClaim(NftId policyNftId, ClaimId claimId, uint256 claimAmount)
|
91
|
+
external
|
92
|
+
virtual
|
93
|
+
// solhint-disable-next-line no-empty-blocks
|
94
|
+
{
|
95
|
+
|
96
|
+
}
|
97
|
+
|
98
|
+
|
99
|
+
function declineClaim(NftId policyNftId, ClaimId claimId)
|
100
|
+
external
|
101
|
+
virtual
|
102
|
+
// solhint-disable-next-line no-empty-blocks
|
103
|
+
{
|
104
|
+
|
105
|
+
}
|
106
|
+
|
107
|
+
|
108
|
+
function closeClaim(NftId policyNftId, ClaimId claimId)
|
109
|
+
external
|
110
|
+
virtual
|
111
|
+
// solhint-disable-next-line no-empty-blocks
|
112
|
+
{
|
113
|
+
|
114
|
+
}
|
115
|
+
|
116
|
+
|
117
|
+
function createPayout(
|
118
|
+
NftId policyNftId,
|
119
|
+
ClaimId claimId,
|
120
|
+
uint256 payoutAmount,
|
121
|
+
bytes calldata payoutData
|
122
|
+
)
|
123
|
+
external
|
124
|
+
virtual
|
125
|
+
returns(PayoutId payoutId)
|
126
|
+
// solhint-disable-next-line no-empty-blocks
|
127
|
+
{
|
128
|
+
|
129
|
+
}
|
130
|
+
|
131
|
+
|
132
|
+
function payoutExecuted(
|
133
|
+
NftId policyNftId,
|
134
|
+
PayoutId payoutId
|
135
|
+
)
|
136
|
+
external
|
137
|
+
virtual
|
138
|
+
// solhint-disable-next-line no-empty-blocks
|
139
|
+
{
|
140
|
+
|
141
|
+
}
|
142
|
+
|
143
|
+
|
144
|
+
// internal functions
|
145
|
+
|
146
|
+
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
147
|
+
IRegistry.ObjectInfo memory productInfo;
|
148
|
+
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
149
|
+
product = Product(productInfo.objectAddress);
|
150
|
+
}
|
151
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
5
|
+
import {ProxyManager} from "../../shared/ProxyManager.sol";
|
6
|
+
import {ClaimService} from "./ClaimService.sol";
|
7
|
+
|
8
|
+
contract ClaimServiceManager is ProxyManager {
|
9
|
+
|
10
|
+
ClaimService private _claimService;
|
11
|
+
|
12
|
+
/// @dev initializes proxy manager with service implementation
|
13
|
+
constructor(
|
14
|
+
address registryAddress
|
15
|
+
)
|
16
|
+
ProxyManager(registryAddress)
|
17
|
+
{
|
18
|
+
ClaimService svc = new ClaimService();
|
19
|
+
bytes memory data = abi.encode(registryAddress, address(this));
|
20
|
+
IVersionable versionable = deploy(
|
21
|
+
address(svc),
|
22
|
+
data);
|
23
|
+
|
24
|
+
_claimService = ClaimService(address(versionable));
|
25
|
+
}
|
26
|
+
|
27
|
+
//--- view functions ----------------------------------------------------//
|
28
|
+
function getClaimService()
|
29
|
+
external
|
30
|
+
view
|
31
|
+
returns (ClaimService)
|
32
|
+
{
|
33
|
+
return _claimService;
|
34
|
+
}
|
35
|
+
}
|
@@ -6,12 +6,13 @@ 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
|
-
import {ObjectType, DISTRIBUTION} from "../../types/ObjectType.sol";
|
15
|
+
import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR} from "../../types/ObjectType.sol";
|
15
16
|
import {Version, VersionLib} from "../../types/Version.sol";
|
16
17
|
|
17
18
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
@@ -19,17 +20,28 @@ import {Versionable} from "../../shared/Versionable.sol";
|
|
19
20
|
|
20
21
|
import {IService} from "../../shared/IService.sol";
|
21
22
|
import {Service} from "../../shared/Service.sol";
|
22
|
-
import {
|
23
|
+
import {ComponentService} from "../base/ComponentService.sol";
|
23
24
|
import {InstanceService} from "../InstanceService.sol";
|
25
|
+
import {IComponent} from "../../components/IComponent.sol";
|
26
|
+
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
24
27
|
import {IDistributionService} from "./IDistributionService.sol";
|
25
|
-
|
28
|
+
|
29
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
30
|
+
import {DistributorType, DistributorTypeLib} from "../../types/DistributorType.sol";
|
31
|
+
import {ReferralId, ReferralStatus, ReferralLib} from "../../types/Referral.sol";
|
32
|
+
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
33
|
+
import {Key32} from "../../types/Key32.sol";
|
34
|
+
import {IDistribution} from "../module/IDistribution.sol";
|
26
35
|
|
27
36
|
|
28
37
|
contract DistributionService is
|
29
|
-
|
38
|
+
ComponentService,
|
30
39
|
IDistributionService
|
31
40
|
{
|
32
41
|
using NftIdLib for NftId;
|
42
|
+
using TimestampLib for Timestamp;
|
43
|
+
using UFixedLib for UFixed;
|
44
|
+
using FeeLib for Fee;
|
33
45
|
|
34
46
|
address internal _registryAddress;
|
35
47
|
|
@@ -46,9 +58,8 @@ contract DistributionService is
|
|
46
58
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
47
59
|
// TODO while DistributionService is not deployed in DistributionServiceManager constructor
|
48
60
|
// owner is DistributionServiceManager deployer
|
49
|
-
|
50
|
-
|
51
|
-
_registerInterface(type(IDistributionService).interfaceId);
|
61
|
+
initializeService(registryAddress, owner);
|
62
|
+
registerInterface(type(IDistributionService).interfaceId);
|
52
63
|
}
|
53
64
|
|
54
65
|
function getDomain() public pure override(Service, IService) returns(ObjectType) {
|
@@ -60,7 +71,7 @@ contract DistributionService is
|
|
60
71
|
returns(NftId distributionNftId)
|
61
72
|
{
|
62
73
|
(
|
63
|
-
|
74
|
+
IComponent component,
|
64
75
|
address owner,
|
65
76
|
IInstance instance,
|
66
77
|
NftId instanceNftId
|
@@ -69,47 +80,315 @@ contract DistributionService is
|
|
69
80
|
DISTRIBUTION(),
|
70
81
|
DISTRIBUTION_OWNER_ROLE());
|
71
82
|
|
72
|
-
(
|
73
|
-
|
74
|
-
bytes memory data
|
75
|
-
) = getRegistryService().registerDistribution(distribution, owner);
|
83
|
+
IRegistry.ObjectInfo memory distributionInfo = getRegistryService().registerDistribution(component, owner);
|
84
|
+
IDistributionComponent distribution = IDistributionComponent(distributionAddress);
|
76
85
|
distribution.linkToRegisteredNftId();
|
77
86
|
distributionNftId = distributionInfo.nftId;
|
78
87
|
|
79
|
-
(
|
80
|
-
|
81
|
-
|
82
|
-
) = _decodeAndVerifyDistributionData(data);
|
83
|
-
instance.createDistributionSetup(distributionNftId, initialSetup);
|
84
|
-
|
85
|
-
getInstanceService().createTarget(instanceNftId, distributionAddress, name);
|
86
|
-
}
|
87
|
-
|
88
|
-
function _decodeAndVerifyDistributionData(bytes memory data)
|
89
|
-
internal
|
90
|
-
returns(string memory name, ISetup.DistributionSetupInfo memory setup)
|
91
|
-
{
|
92
|
-
(name, setup) = abi.decode(
|
93
|
-
data,
|
94
|
-
(string, ISetup.DistributionSetupInfo)
|
95
|
-
);
|
96
|
-
|
97
|
-
// TODO add checks if applicable
|
88
|
+
instance.createDistributionSetup(distributionNftId, distribution.getSetupInfo());
|
89
|
+
getInstanceService().createGifTarget(instanceNftId, distributionAddress, distribution.getName());
|
90
|
+
getInstanceService().grantDistributionDefaultPermissions(instanceNftId, distributionAddress, distribution.getName());
|
98
91
|
}
|
99
92
|
|
100
93
|
function setFees(
|
94
|
+
Fee memory minDistributionOwnerFee,
|
101
95
|
Fee memory distributionFee
|
102
96
|
)
|
103
97
|
external
|
104
98
|
override
|
105
99
|
{
|
100
|
+
if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
|
101
|
+
revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
|
102
|
+
}
|
103
|
+
|
106
104
|
(IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
|
107
105
|
InstanceReader instanceReader = instance.getInstanceReader();
|
108
106
|
NftId distributionNftId = info.nftId;
|
109
107
|
|
110
108
|
ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
109
|
+
distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
|
111
110
|
distSetupInfo.distributionFee = distributionFee;
|
112
111
|
|
113
112
|
instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
|
114
113
|
}
|
114
|
+
|
115
|
+
function createDistributorType(
|
116
|
+
string memory name,
|
117
|
+
UFixed minDiscountPercentage,
|
118
|
+
UFixed maxDiscountPercentage,
|
119
|
+
UFixed commissionPercentage,
|
120
|
+
uint32 maxReferralCount,
|
121
|
+
uint32 maxReferralLifetime,
|
122
|
+
bool allowSelfReferrals,
|
123
|
+
bool allowRenewals,
|
124
|
+
bytes memory data
|
125
|
+
)
|
126
|
+
external
|
127
|
+
returns (DistributorType distributorType)
|
128
|
+
{
|
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
|
+
|
140
|
+
distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
|
141
|
+
Key32 key32 = distributorType.toKey32();
|
142
|
+
|
143
|
+
if(!instance.exists(key32)) {
|
144
|
+
IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
|
145
|
+
name,
|
146
|
+
minDiscountPercentage,
|
147
|
+
maxDiscountPercentage,
|
148
|
+
commissionPercentage,
|
149
|
+
maxReferralCount,
|
150
|
+
maxReferralLifetime,
|
151
|
+
allowSelfReferrals,
|
152
|
+
allowRenewals,
|
153
|
+
data);
|
154
|
+
|
155
|
+
instance.createDistributorType(key32, info);
|
156
|
+
}
|
157
|
+
}
|
158
|
+
|
159
|
+
function createDistributor(
|
160
|
+
address distributor,
|
161
|
+
DistributorType distributorType,
|
162
|
+
bytes memory data
|
163
|
+
) external returns (NftId distributorNftId)
|
164
|
+
{
|
165
|
+
(, NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
166
|
+
|
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
|
+
));
|
177
|
+
|
178
|
+
IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
|
179
|
+
distributorType,
|
180
|
+
true, // active
|
181
|
+
data,
|
182
|
+
0,
|
183
|
+
0);
|
184
|
+
|
185
|
+
instance.createDistributor(distributorNftId, info);
|
186
|
+
}
|
187
|
+
|
188
|
+
function updateDistributorType(
|
189
|
+
NftId distributorNftId,
|
190
|
+
DistributorType distributorType,
|
191
|
+
bytes memory data
|
192
|
+
) external virtual
|
193
|
+
{
|
194
|
+
(,, IInstance instance) = _getAndVerifyCallingDistribution();
|
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());
|
200
|
+
}
|
201
|
+
|
202
|
+
|
203
|
+
function createReferral(
|
204
|
+
NftId distributorNftId,
|
205
|
+
string memory code,
|
206
|
+
UFixed discountPercentage,
|
207
|
+
uint32 maxReferrals,
|
208
|
+
Timestamp expiryAt,
|
209
|
+
bytes memory data
|
210
|
+
)
|
211
|
+
external
|
212
|
+
virtual
|
213
|
+
returns (ReferralId referralId)
|
214
|
+
{
|
215
|
+
(,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
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
|
+
}
|
241
|
+
|
242
|
+
referralId = ReferralLib.toReferralId(distributionNftId, code);
|
243
|
+
IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
|
244
|
+
distributorNftId,
|
245
|
+
code,
|
246
|
+
discountPercentage,
|
247
|
+
maxReferrals,
|
248
|
+
0, // used referrals
|
249
|
+
expiryAt,
|
250
|
+
data
|
251
|
+
);
|
252
|
+
|
253
|
+
instance.createReferral(referralId.toKey32(), info);
|
254
|
+
return referralId;
|
255
|
+
}
|
256
|
+
|
257
|
+
function processSale(
|
258
|
+
ReferralId referralId,
|
259
|
+
uint256 premiumAmount
|
260
|
+
)
|
261
|
+
external
|
262
|
+
virtual
|
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
|
271
|
+
revert("NOT_IMPLEMENTED_YET");
|
272
|
+
}
|
273
|
+
|
274
|
+
function calculateFeeAmount(
|
275
|
+
NftId distributionNftId,
|
276
|
+
ReferralId referralId,
|
277
|
+
IPolicy.Premium memory premium
|
278
|
+
)
|
279
|
+
external
|
280
|
+
virtual
|
281
|
+
view
|
282
|
+
returns (IPolicy.Premium memory finalPremium)
|
283
|
+
{
|
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;
|
329
|
+
}
|
330
|
+
|
331
|
+
function _getAndVerifyCallingDistribution()
|
332
|
+
internal
|
333
|
+
view
|
334
|
+
returns(
|
335
|
+
address distributionAddress,
|
336
|
+
NftId distributionNftId,
|
337
|
+
IInstance instance
|
338
|
+
)
|
339
|
+
{
|
340
|
+
ObjectType objectType;
|
341
|
+
(
|
342
|
+
distributionAddress,
|
343
|
+
distributionNftId,
|
344
|
+
objectType,
|
345
|
+
instance
|
346
|
+
) = _getAndVerifyCaller();
|
347
|
+
|
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);
|
367
|
+
}
|
368
|
+
|
369
|
+
function _getAndVerifyCaller()
|
370
|
+
internal
|
371
|
+
view
|
372
|
+
returns(
|
373
|
+
address objectAddress,
|
374
|
+
NftId objectNftId,
|
375
|
+
ObjectType objectType,
|
376
|
+
IInstance instance
|
377
|
+
)
|
378
|
+
{
|
379
|
+
objectAddress = msg.sender;
|
380
|
+
objectNftId = getRegistry().getNftId(objectAddress);
|
381
|
+
if ( objectNftId.eqz()) {
|
382
|
+
revert ErrorIServiceCallerUnknown(objectAddress);
|
383
|
+
}
|
384
|
+
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(objectNftId);
|
385
|
+
objectType = info.objectType;
|
386
|
+
|
387
|
+
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
|
388
|
+
if (parentInfo.objectType != INSTANCE()) {
|
389
|
+
revert ErrorIDistributionServiceParentNftIdNotInstance(objectNftId, info.parentNftId);
|
390
|
+
}
|
391
|
+
instance = IInstance(parentInfo.objectAddress);
|
392
|
+
}
|
393
|
+
|
115
394
|
}
|
@@ -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));
|
@@ -0,0 +1,82 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
5
|
+
import {IRisk} from "../module/IRisk.sol";
|
6
|
+
import {IService} from "../../shared/IService.sol";
|
7
|
+
|
8
|
+
import {NftId} from "../../types/NftId.sol";
|
9
|
+
import {ReferralId} from "../../types/Referral.sol";
|
10
|
+
import {RiskId} from "../../types/RiskId.sol";
|
11
|
+
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
|
+
|
17
|
+
/// @dev gif service responsible for creating applications
|
18
|
+
/// only product components may call transaction functions
|
19
|
+
interface IApplicationService is IService {
|
20
|
+
|
21
|
+
error IApplicationServicePolicyNotApplied(NftId applicationNftId);
|
22
|
+
error IApplicationServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
|
23
|
+
|
24
|
+
/// @dev creates a new application based on the specified attributes
|
25
|
+
/// may only be called by a product component
|
26
|
+
function create(
|
27
|
+
address applicationOwner,
|
28
|
+
RiskId riskId,
|
29
|
+
uint256 sumInsuredAmount,
|
30
|
+
Seconds lifetime,
|
31
|
+
NftId bundleNftId,
|
32
|
+
ReferralId referralId,
|
33
|
+
bytes memory applicationData
|
34
|
+
) external returns (NftId applicationNftId);
|
35
|
+
|
36
|
+
/// @dev updates application attributes
|
37
|
+
/// may only be called while the application is in applied state
|
38
|
+
/// may only be called by the referenced product related to applicationNftId
|
39
|
+
function adjust(
|
40
|
+
NftId applicationNftId,
|
41
|
+
RiskId riskId,
|
42
|
+
NftId bundleNftId,
|
43
|
+
ReferralId referralId,
|
44
|
+
uint256 sumInsuredAmount,
|
45
|
+
uint256 lifetime,
|
46
|
+
bytes memory applicationData
|
47
|
+
) external;
|
48
|
+
|
49
|
+
/// @dev creates a new application that extends the provided policy
|
50
|
+
/// lifetime will seamlessly extend referenced policy, for closed policies
|
51
|
+
/// lifetime will start at underwriting time
|
52
|
+
/// product will need to limit the time window for renewal as underwriting
|
53
|
+
/// will lock the collateral at underwriting time which might be earlier than activation time
|
54
|
+
/// policyNftId needs to refer to an underwritten (or active or closed) policy
|
55
|
+
/// may only be called by the referenced product related to policyNftId
|
56
|
+
function renew(
|
57
|
+
NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
|
58
|
+
NftId bundleNftId // will likely need a newer bundle for underwriting
|
59
|
+
) external returns (NftId applicationNftId);
|
60
|
+
|
61
|
+
/// @dev revokes the application represented by {policyNftId}
|
62
|
+
/// an application can only be revoked in applied state
|
63
|
+
/// only the application holder may revoke an application
|
64
|
+
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
|
+
}
|