@etherisc/gif-next 0.0.2-bfb44e0-483 → 0.0.2-c0b400a-177
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 +80 -145
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +125 -239
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +77 -92
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +102 -183
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +261 -201
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +81 -164
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +278 -288
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +85 -218
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +496 -536
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +105 -212
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +567 -621
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +448 -121
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +120 -227
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +170 -397
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +207 -116
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
- 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 +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +54 -71
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- 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 +141 -366
- 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 +824 -268
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +312 -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 +89 -257
- 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 +514 -157
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +45 -289
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +69 -153
- 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 +85 -442
- 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 +116 -249
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +187 -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/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
- 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/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
- 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/TokenHandler.sol/TokenHandler.json +2 -2
- 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/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +11 -74
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- 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/TestVersion.sol/TestVersion.json +2 -2
- 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/Blocknumber.sol/BlocknumberLib.json +2 -2
- 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/Fee.sol/FeeLib.json +2 -2
- 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 +17 -4
- 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 +23 -4
- 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/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/Component.sol +96 -81
- package/contracts/components/Distribution.sol +29 -47
- package/contracts/components/IComponent.sol +40 -16
- package/contracts/components/IDistributionComponent.sol +1 -30
- package/contracts/components/IPoolComponent.sol +73 -47
- package/contracts/components/IProductComponent.sol +3 -2
- package/contracts/components/Pool.sol +171 -126
- package/contracts/components/Product.sol +38 -23
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +7 -5
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +23 -11
- package/contracts/instance/IInstanceService.sol +18 -5
- package/contracts/instance/Instance.sol +62 -16
- package/contracts/instance/InstanceAccessManager.sol +382 -157
- package/contracts/instance/InstanceReader.sol +7 -10
- package/contracts/instance/InstanceService.sol +222 -160
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +5 -5
- package/contracts/instance/base/KeyValueStore.sol +5 -2
- package/contracts/instance/base/Lifecycle.sol +11 -2
- package/contracts/instance/module/IAccess.sol +20 -13
- package/contracts/instance/module/IBundle.sol +2 -1
- package/contracts/instance/module/IComponents.sol +35 -0
- package/contracts/instance/module/IDistribution.sol +2 -0
- package/contracts/instance/module/IPolicy.sol +30 -3
- package/contracts/instance/module/ISetup.sol +7 -21
- package/contracts/instance/service/ApplicationService.sol +139 -57
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +76 -38
- 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 +224 -31
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +9 -9
- package/contracts/instance/service/IBundleService.sol +19 -11
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +36 -3
- package/contracts/instance/service/IPolicyService.sol +18 -34
- package/contracts/instance/service/IPoolService.sol +17 -2
- package/contracts/instance/service/PolicyService.sol +74 -195
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +128 -17
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/ProductService.sol +10 -2
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +2 -0
- package/contracts/registry/IRegistryService.sol +10 -8
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +26 -21
- 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/TokenHandler.sol +11 -5
- package/contracts/shared/Versionable.sol +1 -90
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/Fee.sol +1 -0
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +5 -4
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +16 -9
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +1 -0
- package/contracts/types/Timestamp.sol +13 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- 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
@@ -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,13 +6,15 @@ 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";
|
12
|
-
import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
|
11
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
12
|
+
import {Fee, FeeLib} from "../../types/Fee.sol";
|
13
|
+
import {PRODUCT_SERVICE_ROLE, 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";
|
15
16
|
import {Version, VersionLib} from "../../types/Version.sol";
|
17
|
+
import {RoleId} from "../../types/RoleId.sol";
|
16
18
|
|
17
19
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
18
20
|
import {Versionable} from "../../shared/Versionable.sol";
|
@@ -25,7 +27,7 @@ import {IComponent} from "../../components/IComponent.sol";
|
|
25
27
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
26
28
|
import {IDistributionService} from "./IDistributionService.sol";
|
27
29
|
|
28
|
-
import {UFixed} from "../../types/UFixed.sol";
|
30
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
29
31
|
import {DistributorType, DistributorTypeLib} from "../../types/DistributorType.sol";
|
30
32
|
import {ReferralId, ReferralStatus, ReferralLib} from "../../types/Referral.sol";
|
31
33
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
@@ -38,6 +40,10 @@ contract DistributionService is
|
|
38
40
|
IDistributionService
|
39
41
|
{
|
40
42
|
using NftIdLib for NftId;
|
43
|
+
using TimestampLib for Timestamp;
|
44
|
+
using UFixedLib for UFixed;
|
45
|
+
using FeeLib for Fee;
|
46
|
+
using ReferralLib for ReferralId;
|
41
47
|
|
42
48
|
address internal _registryAddress;
|
43
49
|
|
@@ -82,21 +88,43 @@ contract DistributionService is
|
|
82
88
|
distributionNftId = distributionInfo.nftId;
|
83
89
|
|
84
90
|
instance.createDistributionSetup(distributionNftId, distribution.getSetupInfo());
|
85
|
-
|
86
|
-
|
91
|
+
// TODO move to distribution?
|
92
|
+
bytes4[][] memory selectors = new bytes4[][](2);
|
93
|
+
selectors[0] = new bytes4[](1);
|
94
|
+
selectors[1] = new bytes4[](2);
|
95
|
+
|
96
|
+
selectors[0][0] = IDistributionComponent.setFees.selector;
|
97
|
+
selectors[1][0] = IDistributionComponent.processRenewal.selector;
|
98
|
+
|
99
|
+
RoleId[] memory roles = new RoleId[](2);
|
100
|
+
roles[0] = DISTRIBUTION_OWNER_ROLE();
|
101
|
+
roles[1] = PRODUCT_SERVICE_ROLE();
|
102
|
+
|
103
|
+
getInstanceService().createGifTarget(
|
104
|
+
instanceNftId,
|
105
|
+
distributionAddress,
|
106
|
+
distribution.getName(),
|
107
|
+
selectors,
|
108
|
+
roles);
|
87
109
|
}
|
88
110
|
|
89
111
|
function setFees(
|
112
|
+
Fee memory minDistributionOwnerFee,
|
90
113
|
Fee memory distributionFee
|
91
114
|
)
|
92
115
|
external
|
93
116
|
override
|
94
117
|
{
|
118
|
+
if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
|
119
|
+
revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
|
120
|
+
}
|
121
|
+
|
95
122
|
(IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
|
96
123
|
InstanceReader instanceReader = instance.getInstanceReader();
|
97
124
|
NftId distributionNftId = info.nftId;
|
98
125
|
|
99
126
|
ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
127
|
+
distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
|
100
128
|
distSetupInfo.distributionFee = distributionFee;
|
101
129
|
|
102
130
|
instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
|
@@ -117,6 +145,16 @@ contract DistributionService is
|
|
117
145
|
returns (DistributorType distributorType)
|
118
146
|
{
|
119
147
|
(,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
148
|
+
|
149
|
+
{
|
150
|
+
ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
|
151
|
+
UFixed variableFeesPartsTotal = setupInfo.minDistributionOwnerFee.fractionalFee.add(commissionPercentage);
|
152
|
+
UFixed maxDiscountPercentageLimit = setupInfo.distributionFee.fractionalFee.sub(variableFeesPartsTotal);
|
153
|
+
if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
|
154
|
+
revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
|
155
|
+
}
|
156
|
+
}
|
157
|
+
|
120
158
|
distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
|
121
159
|
Key32 key32 = distributorType.toKey32();
|
122
160
|
|
@@ -144,18 +182,23 @@ contract DistributionService is
|
|
144
182
|
{
|
145
183
|
(, NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
146
184
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
185
|
+
distributorNftId = getRegistryService().registerDistributor(
|
186
|
+
IRegistry.ObjectInfo(
|
187
|
+
zeroNftId(),
|
188
|
+
distributionNftId,
|
189
|
+
DISTRIBUTOR(),
|
190
|
+
true, // intercepting property for bundles is defined on pool
|
191
|
+
address(0),
|
192
|
+
distributor,
|
193
|
+
""
|
194
|
+
));
|
154
195
|
|
155
196
|
IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
|
156
197
|
distributorType,
|
157
198
|
true, // active
|
158
|
-
data
|
199
|
+
data,
|
200
|
+
0,
|
201
|
+
0);
|
159
202
|
|
160
203
|
instance.createDistributor(distributorNftId, info);
|
161
204
|
}
|
@@ -167,13 +210,11 @@ contract DistributionService is
|
|
167
210
|
) external virtual
|
168
211
|
{
|
169
212
|
(,, IInstance instance) = _getAndVerifyCallingDistribution();
|
170
|
-
|
171
|
-
IDistribution.DistributorInfo memory
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
instance.updateDistributor(distributorNftId, info, KEEP_STATE());
|
213
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
214
|
+
IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
|
215
|
+
distributorInfo.distributorType = distributorType;
|
216
|
+
distributorInfo.data = data;
|
217
|
+
instance.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
|
177
218
|
}
|
178
219
|
|
179
220
|
|
@@ -190,8 +231,31 @@ contract DistributionService is
|
|
190
231
|
returns (ReferralId referralId)
|
191
232
|
{
|
192
233
|
(,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
193
|
-
|
194
|
-
|
234
|
+
|
235
|
+
if (bytes(code).length == 0) {
|
236
|
+
revert ErrorIDistributionServiceInvalidReferral(code);
|
237
|
+
}
|
238
|
+
if (expiryAt.eqz()) {
|
239
|
+
revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
|
240
|
+
}
|
241
|
+
|
242
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
243
|
+
IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
|
244
|
+
DistributorType distributorType = distributorInfo.distributorType;
|
245
|
+
IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
|
246
|
+
|
247
|
+
if (distributorTypeData.maxReferralCount < maxReferrals) {
|
248
|
+
revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
|
249
|
+
}
|
250
|
+
if (distributorTypeData.minDiscountPercentage > discountPercentage) {
|
251
|
+
revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
|
252
|
+
}
|
253
|
+
if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
|
254
|
+
revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
|
255
|
+
}
|
256
|
+
if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
|
257
|
+
revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
|
258
|
+
}
|
195
259
|
|
196
260
|
referralId = ReferralLib.toReferralId(distributionNftId, code);
|
197
261
|
IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
|
@@ -209,25 +273,132 @@ contract DistributionService is
|
|
209
273
|
}
|
210
274
|
|
211
275
|
function processSale(
|
276
|
+
NftId distributionNftId,
|
212
277
|
ReferralId referralId,
|
213
|
-
|
278
|
+
IPolicy.Premium memory premium,
|
279
|
+
uint256 transferredDistributionFeeAmount
|
214
280
|
)
|
215
281
|
external
|
216
282
|
virtual
|
217
283
|
{
|
218
|
-
|
284
|
+
bool isReferral = ! referralId.eqz();
|
285
|
+
bool referralValid = referralIsValid(distributionNftId, referralId);
|
286
|
+
|
287
|
+
if (isReferral && ! referralValid) {
|
288
|
+
revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
|
289
|
+
}
|
290
|
+
|
291
|
+
(, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
|
292
|
+
InstanceReader reader = instance.getInstanceReader();
|
293
|
+
IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
|
294
|
+
IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
|
295
|
+
ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
|
296
|
+
|
297
|
+
uint256 distributionOwnerFee = premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount;
|
298
|
+
uint256 commissionAmount = premium.commissionAmount;
|
299
|
+
|
300
|
+
if (transferredDistributionFeeAmount != distributionOwnerFee + commissionAmount) {
|
301
|
+
revert ErrorIDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
|
302
|
+
}
|
303
|
+
|
304
|
+
|
305
|
+
if (distributionOwnerFee > 0) {
|
306
|
+
setupInfo.sumDistributionOwnerFees += distributionOwnerFee;
|
307
|
+
instance.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
|
308
|
+
}
|
309
|
+
|
310
|
+
if (isReferral) {
|
311
|
+
referralInfo.usedReferrals += 1;
|
312
|
+
instance.updateReferral(referralId.toKey32(), referralInfo, KEEP_STATE());
|
313
|
+
|
314
|
+
if (commissionAmount > 0) {
|
315
|
+
distributorInfo.sumCommisions += commissionAmount;
|
316
|
+
distributorInfo.numPoliciesSold += 1;
|
317
|
+
instance.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
|
318
|
+
}
|
319
|
+
}
|
219
320
|
}
|
220
321
|
|
221
322
|
function calculateFeeAmount(
|
323
|
+
NftId distributionNftId,
|
222
324
|
ReferralId referralId,
|
223
|
-
|
325
|
+
IPolicy.Premium memory premium
|
224
326
|
)
|
225
327
|
external
|
226
328
|
virtual
|
227
329
|
view
|
228
|
-
returns (
|
330
|
+
returns (IPolicy.Premium memory finalPremium)
|
229
331
|
{
|
230
|
-
|
332
|
+
(, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
|
333
|
+
InstanceReader reader = instance.getInstanceReader();
|
334
|
+
|
335
|
+
// first calculate all fixed and variable fees for the distribution - this will defined the fullPremium
|
336
|
+
ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
|
337
|
+
Fee memory distributionFee = setupInfo.distributionFee;
|
338
|
+
Fee memory minDistributionOwnerFee = setupInfo.minDistributionOwnerFee;
|
339
|
+
uint256 distributionFeeVarAmount = (UFixedLib.toUFixed(premium.netPremiumAmount) * distributionFee.fractionalFee).toInt();
|
340
|
+
premium.distributionFeeVarAmount = distributionFeeVarAmount;
|
341
|
+
premium.fullPremiumAmount += distributionFeeVarAmount;
|
342
|
+
|
343
|
+
// if the referral is not valid, then the distribution owner gets everything
|
344
|
+
if (! referralIsValid(distributionNftId, referralId)) {
|
345
|
+
premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
|
346
|
+
premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
|
347
|
+
premium.premiumAmount = premium.fullPremiumAmount;
|
348
|
+
return premium;
|
349
|
+
}
|
350
|
+
|
351
|
+
// if the referral is valid, the the commission and discount are calculated based in the full premium
|
352
|
+
// the remaing amount goes to the distribution owner
|
353
|
+
{
|
354
|
+
IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
|
355
|
+
IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
|
356
|
+
IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
|
357
|
+
|
358
|
+
uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
|
359
|
+
premium.commissionAmount = commissionAmount;
|
360
|
+
premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
|
361
|
+
premium.distributionOwnerFeeFixAmount = minDistributionOwnerFee.fixedFee;
|
362
|
+
premium.distributionOwnerFeeVarAmount = distributionFeeVarAmount - commissionAmount - premium.discountAmount;
|
363
|
+
premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
|
364
|
+
}
|
365
|
+
|
366
|
+
// sanity check to validate the fee calculation
|
367
|
+
if (premium.distributionOwnerFeeFixAmount < minDistributionOwnerFee.fixedFee) {
|
368
|
+
revert ErrorIDistributionServiceFeeCalculationMismatch(
|
369
|
+
premium.distributionFeeFixAmount,
|
370
|
+
premium.distributionFeeVarAmount,
|
371
|
+
premium.distributionOwnerFeeFixAmount,
|
372
|
+
premium.distributionOwnerFeeVarAmount,
|
373
|
+
premium.commissionAmount,
|
374
|
+
premium.discountAmount
|
375
|
+
);
|
376
|
+
}
|
377
|
+
if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
|
378
|
+
revert ErrorIDistributionServiceFeeCalculationMismatch(
|
379
|
+
premium.distributionFeeFixAmount,
|
380
|
+
premium.distributionFeeVarAmount,
|
381
|
+
premium.distributionOwnerFeeFixAmount,
|
382
|
+
premium.distributionOwnerFeeVarAmount,
|
383
|
+
premium.commissionAmount,
|
384
|
+
premium.discountAmount
|
385
|
+
);
|
386
|
+
}
|
387
|
+
|
388
|
+
return premium;
|
389
|
+
}
|
390
|
+
|
391
|
+
// TODO: zero should return false
|
392
|
+
function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
|
393
|
+
(address distributionAddress, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
|
394
|
+
IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
|
395
|
+
|
396
|
+
if (info.distributorNftId.eqz()) {
|
397
|
+
return false;
|
398
|
+
}
|
399
|
+
|
400
|
+
isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
|
401
|
+
isValid = isValid && info.usedReferrals < info.maxReferrals;
|
231
402
|
}
|
232
403
|
|
233
404
|
function _getAndVerifyCallingDistribution()
|
@@ -247,7 +418,25 @@ contract DistributionService is
|
|
247
418
|
instance
|
248
419
|
) = _getAndVerifyCaller();
|
249
420
|
|
250
|
-
|
421
|
+
if(objectType != DISTRIBUTION()) {
|
422
|
+
revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
|
423
|
+
}
|
424
|
+
}
|
425
|
+
|
426
|
+
function _getAndVerifyDistribution(NftId distributionNftId)
|
427
|
+
internal
|
428
|
+
view
|
429
|
+
returns(
|
430
|
+
address distributionAddress,
|
431
|
+
IInstance instance
|
432
|
+
)
|
433
|
+
{
|
434
|
+
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(distributionNftId);
|
435
|
+
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
|
436
|
+
if (parentInfo.objectType != INSTANCE()) {
|
437
|
+
revert ErrorIDistributionServiceParentNftIdNotInstance(distributionNftId, info.parentNftId);
|
438
|
+
}
|
439
|
+
instance = IInstance(parentInfo.objectAddress);
|
251
440
|
}
|
252
441
|
|
253
442
|
function _getAndVerifyCaller()
|
@@ -262,12 +451,16 @@ contract DistributionService is
|
|
262
451
|
{
|
263
452
|
objectAddress = msg.sender;
|
264
453
|
objectNftId = getRegistry().getNftId(objectAddress);
|
265
|
-
|
454
|
+
if ( objectNftId.eqz()) {
|
455
|
+
revert ErrorIServiceCallerUnknown(objectAddress);
|
456
|
+
}
|
266
457
|
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(objectNftId);
|
267
458
|
objectType = info.objectType;
|
268
459
|
|
269
460
|
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
|
270
|
-
|
461
|
+
if (parentInfo.objectType != INSTANCE()) {
|
462
|
+
revert ErrorIDistributionServiceParentNftIdNotInstance(objectNftId, info.parentNftId);
|
463
|
+
}
|
271
464
|
instance = IInstance(parentInfo.objectAddress);
|
272
465
|
}
|
273
466
|
|
@@ -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
|
}
|