@etherisc/gif-next 0.0.2-9105e58-225 → 0.0.2-917cede-703
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -83
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +78 -100
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +139 -194
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +156 -64
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +169 -143
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +353 -176
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -138
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +291 -248
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +83 -173
- 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 +527 -400
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +166 -181
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +500 -623
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -126
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +253 -236
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +300 -384
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +246 -84
- 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 +71 -166
- 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 +56 -73
- 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 +266 -253
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +214 -76
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +409 -386
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +249 -71
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +338 -230
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +225 -63
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +883 -233
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +308 -78
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +196 -181
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +233 -296
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +231 -177
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +594 -134
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +405 -190
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +583 -109
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +68 -141
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +525 -296
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +228 -86
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +734 -206
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +234 -68
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +107 -222
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +191 -73
- 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 +0 -163
- 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 +24 -221
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +184 -70
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +68 -141
- 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 +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +169 -53
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +5 -16
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +82 -161
- 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 +6 -17
- 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 +100 -211
- 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/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +209 -0
- 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 +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
- 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 +1 -1
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +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 +38 -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 +99 -88
- package/contracts/components/Distribution.sol +22 -46
- package/contracts/components/IComponent.sol +40 -19
- 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 +178 -130
- package/contracts/components/Product.sol +157 -71
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +10 -9
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +37 -27
- package/contracts/instance/IInstanceService.sol +18 -9
- package/contracts/instance/Instance.sol +117 -98
- package/contracts/instance/InstanceAccessManager.sol +388 -158
- package/contracts/instance/InstanceReader.sol +36 -12
- package/contracts/instance/InstanceService.sol +193 -191
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +13 -5
- package/contracts/instance/base/Lifecycle.sol +23 -6
- package/contracts/instance/module/IAccess.sol +21 -14
- package/contracts/instance/module/IBundle.sol +8 -5
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +2 -0
- package/contracts/instance/module/IPolicy.sol +37 -7
- package/contracts/instance/module/ISetup.sol +7 -21
- package/contracts/instance/service/ApplicationService.sol +137 -50
- package/contracts/instance/service/BundleService.sol +228 -83
- package/contracts/instance/service/ClaimService.sol +114 -26
- package/contracts/instance/service/DistributionService.sol +225 -71
- package/contracts/instance/service/IApplicationService.sol +9 -13
- package/contracts/instance/service/IBundleService.sol +74 -26
- package/contracts/instance/service/IClaimService.sol +46 -15
- package/contracts/instance/service/IDistributionService.sol +37 -3
- package/contracts/instance/service/IPolicyService.sol +69 -21
- package/contracts/instance/service/IPoolService.sol +85 -3
- package/contracts/instance/service/PolicyService.sol +301 -230
- package/contracts/instance/service/PolicyServiceManager.sol +1 -1
- package/contracts/instance/service/PoolService.sol +245 -18
- package/contracts/instance/service/ProductService.sol +31 -54
- package/contracts/instance/service/ProductServiceManager.sol +1 -1
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +2 -0
- package/contracts/registry/IRegistryService.sol +4 -3
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +23 -20
- package/contracts/registry/RegistryService.sol +15 -16
- package/contracts/registry/ReleaseManager.sol +26 -33
- package/contracts/registry/TokenRegistry.sol +1 -6
- package/contracts/shared/IService.sol +4 -4
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/ProxyManager.sol +89 -22
- package/contracts/shared/Registerable.sol +2 -6
- package/contracts/shared/Service.sol +29 -17
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/shared/Versionable.sol +1 -90
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +70 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +6 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +13 -6
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +7 -2
- package/contracts/types/Timestamp.sol +18 -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
@@ -22,18 +22,19 @@ import {TokenHandler} from "../../shared/TokenHandler.sol";
|
|
22
22
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
23
23
|
import {Versionable} from "../../shared/Versionable.sol";
|
24
24
|
|
25
|
+
import {Amount, AmountLib} from "../../types/Amount.sol";
|
25
26
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
26
27
|
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
27
28
|
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
28
29
|
import {ObjectType, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, CLAIM, BUNDLE} from "../../types/ObjectType.sol";
|
29
|
-
import {
|
30
|
+
import {SUBMITTED, ACTIVE, KEEP_STATE, DECLINED, CONFIRMED, CLOSED} from "../../types/StateId.sol";
|
30
31
|
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
31
32
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
32
33
|
import {ReferralId} from "../../types/Referral.sol";
|
33
34
|
import {RiskId} from "../../types/RiskId.sol";
|
34
35
|
import {StateId} from "../../types/StateId.sol";
|
35
|
-
import {ClaimId} from "../../types/ClaimId.sol";
|
36
|
-
import {PayoutId} from "../../types/PayoutId.sol";
|
36
|
+
import {ClaimId, ClaimIdLib} from "../../types/ClaimId.sol";
|
37
|
+
import {PayoutId, PayoutIdLib} from "../../types/PayoutId.sol";
|
37
38
|
import {Version, VersionLib} from "../../types/Version.sol";
|
38
39
|
|
39
40
|
import {ComponentService} from "../base/ComponentService.sol";
|
@@ -50,6 +51,7 @@ contract ClaimService is
|
|
50
51
|
IClaimService
|
51
52
|
{
|
52
53
|
|
54
|
+
IPoolService internal _poolService;
|
53
55
|
|
54
56
|
function _initialize(
|
55
57
|
address owner,
|
@@ -64,77 +66,140 @@ contract ClaimService is
|
|
64
66
|
address initialOwner;
|
65
67
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
66
68
|
|
67
|
-
initializeService(registryAddress, owner);
|
69
|
+
initializeService(registryAddress, address(0), owner);
|
70
|
+
|
71
|
+
_poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
|
72
|
+
|
68
73
|
registerInterface(type(IClaimService).interfaceId);
|
69
74
|
}
|
70
75
|
|
71
76
|
|
72
|
-
function getDomain() public pure override
|
77
|
+
function getDomain() public pure override returns(ObjectType) {
|
73
78
|
return CLAIM();
|
74
79
|
}
|
75
80
|
|
76
81
|
|
77
|
-
function
|
82
|
+
function submit(
|
83
|
+
IInstance instance,
|
78
84
|
NftId policyNftId,
|
79
|
-
|
85
|
+
ClaimId claimId,
|
86
|
+
Amount claimAmount,
|
80
87
|
bytes memory claimData
|
81
88
|
)
|
82
89
|
external
|
83
90
|
virtual
|
84
|
-
|
91
|
+
// TODO add restricted and grant to policy service
|
85
92
|
{
|
86
|
-
|
93
|
+
instance.createClaim(
|
94
|
+
policyNftId,
|
95
|
+
claimId,
|
96
|
+
IPolicy.ClaimInfo(
|
97
|
+
claimAmount,
|
98
|
+
AmountLib.zero(), // paidAmount
|
99
|
+
0, // payoutsCount
|
100
|
+
0, // openPayoutsCount
|
101
|
+
claimData,
|
102
|
+
TimestampLib.zero())); // closedAt
|
87
103
|
}
|
88
104
|
|
89
105
|
|
90
|
-
function
|
106
|
+
function confirm(
|
107
|
+
IInstance instance,
|
108
|
+
InstanceReader instanceReader,
|
109
|
+
NftId policyNftId,
|
110
|
+
ClaimId claimId,
|
111
|
+
Amount confirmedAmount
|
112
|
+
)
|
91
113
|
external
|
92
114
|
virtual
|
93
|
-
// solhint-disable-next-line no-empty-blocks
|
94
115
|
{
|
95
|
-
|
116
|
+
IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
|
117
|
+
claimInfo.claimAmount = confirmedAmount;
|
118
|
+
instance.updateClaim(policyNftId, claimId, claimInfo, CONFIRMED());
|
96
119
|
}
|
97
120
|
|
98
|
-
|
99
|
-
|
121
|
+
function decline(
|
122
|
+
IInstance instance,
|
123
|
+
InstanceReader instanceReader,
|
124
|
+
NftId policyNftId,
|
125
|
+
ClaimId claimId
|
126
|
+
)
|
100
127
|
external
|
101
128
|
virtual
|
102
|
-
// solhint-disable-next-line no-empty-blocks
|
103
129
|
{
|
104
|
-
|
130
|
+
IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
|
131
|
+
claimInfo.closedAt = TimestampLib.blockTimestamp();
|
132
|
+
instance.updateClaim(policyNftId, claimId, claimInfo, DECLINED());
|
105
133
|
}
|
106
134
|
|
107
135
|
|
108
|
-
function
|
136
|
+
function close(
|
137
|
+
IInstance instance,
|
138
|
+
InstanceReader instanceReader,
|
139
|
+
NftId policyNftId,
|
140
|
+
ClaimId claimId
|
141
|
+
)
|
109
142
|
external
|
110
143
|
virtual
|
111
|
-
// solhint-disable-next-line no-empty-blocks
|
112
144
|
{
|
113
|
-
|
145
|
+
IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, CONFIRMED());
|
146
|
+
|
147
|
+
// check claim has no open payouts
|
148
|
+
if(claimInfo.openPayoutsCount > 0) {
|
149
|
+
revert ErrorClaimServiceClaimWithOpenPayouts(
|
150
|
+
policyNftId,
|
151
|
+
claimId,
|
152
|
+
claimInfo.openPayoutsCount);
|
153
|
+
}
|
154
|
+
|
155
|
+
// check claim paid amount matches with claim amount
|
156
|
+
if(claimInfo.paidAmount.toInt() < claimInfo.claimAmount.toInt()) {
|
157
|
+
revert ErrorClaimServiceClaimWithMissingPayouts(
|
158
|
+
policyNftId,
|
159
|
+
claimId,
|
160
|
+
claimInfo.claimAmount,
|
161
|
+
claimInfo.paidAmount);
|
162
|
+
}
|
163
|
+
|
164
|
+
claimInfo.closedAt = TimestampLib.blockTimestamp();
|
165
|
+
instance.updateClaim(policyNftId, claimId, claimInfo, CLOSED());
|
114
166
|
}
|
115
167
|
|
116
168
|
|
117
169
|
function createPayout(
|
170
|
+
IInstance instance,
|
118
171
|
NftId policyNftId,
|
119
|
-
|
120
|
-
|
172
|
+
PayoutId payoutId,
|
173
|
+
Amount payoutAmount,
|
121
174
|
bytes calldata payoutData
|
122
175
|
)
|
123
176
|
external
|
124
177
|
virtual
|
125
|
-
|
126
|
-
// solhint-disable-next-line no-empty-blocks
|
178
|
+
// TODO add restricted and grant to policy service
|
127
179
|
{
|
128
|
-
|
180
|
+
instance.createPayout(
|
181
|
+
policyNftId,
|
182
|
+
payoutId,
|
183
|
+
IPolicy.PayoutInfo(
|
184
|
+
payoutId.toClaimId(),
|
185
|
+
payoutAmount,
|
186
|
+
payoutData,
|
187
|
+
TimestampLib.zero()));
|
129
188
|
}
|
130
189
|
|
131
190
|
|
132
|
-
function
|
191
|
+
function processPayout(
|
192
|
+
IInstance instance,
|
193
|
+
InstanceReader instanceReader,
|
133
194
|
NftId policyNftId,
|
134
195
|
PayoutId payoutId
|
135
196
|
)
|
136
197
|
external
|
137
198
|
virtual
|
199
|
+
returns (
|
200
|
+
Amount amount,
|
201
|
+
bool payoutIsClosingClaim
|
202
|
+
)
|
138
203
|
// solhint-disable-next-line no-empty-blocks
|
139
204
|
{
|
140
205
|
|
@@ -143,9 +208,32 @@ contract ClaimService is
|
|
143
208
|
|
144
209
|
// internal functions
|
145
210
|
|
211
|
+
function _verifyClaim(
|
212
|
+
InstanceReader instanceReader,
|
213
|
+
NftId policyNftId,
|
214
|
+
ClaimId claimId,
|
215
|
+
StateId expectedState
|
216
|
+
)
|
217
|
+
internal
|
218
|
+
view
|
219
|
+
returns (
|
220
|
+
IPolicy.ClaimInfo memory claimInfo
|
221
|
+
)
|
222
|
+
{
|
223
|
+
// check claim is created state
|
224
|
+
StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
|
225
|
+
if(claimState != expectedState) {
|
226
|
+
revert ErrorClaimServiceClaimNotInExpectedState(
|
227
|
+
policyNftId, claimId, expectedState, claimState);
|
228
|
+
}
|
229
|
+
|
230
|
+
// get claim info
|
231
|
+
claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
|
232
|
+
}
|
233
|
+
|
146
234
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
147
235
|
IRegistry.ObjectInfo memory productInfo;
|
148
|
-
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
236
|
+
(, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
149
237
|
product = Product(productInfo.objectAddress);
|
150
238
|
}
|
151
239
|
}
|
@@ -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
11
|
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
11
|
-
import {Fee} from "../../types/Fee.sol";
|
12
|
-
import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.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
|
|
@@ -54,11 +60,11 @@ contract DistributionService is
|
|
54
60
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
55
61
|
// TODO while DistributionService is not deployed in DistributionServiceManager constructor
|
56
62
|
// owner is DistributionServiceManager deployer
|
57
|
-
initializeService(registryAddress, owner);
|
63
|
+
initializeService(registryAddress, address(0), owner);
|
58
64
|
registerInterface(type(IDistributionService).interfaceId);
|
59
65
|
}
|
60
66
|
|
61
|
-
function getDomain() public pure override
|
67
|
+
function getDomain() public pure override returns(ObjectType) {
|
62
68
|
return DISTRIBUTION();
|
63
69
|
}
|
64
70
|
|
@@ -82,21 +88,42 @@ 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
|
{
|
95
|
-
(
|
118
|
+
if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
|
119
|
+
revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
|
120
|
+
}
|
121
|
+
|
122
|
+
(NftId distributionNftId, IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
|
96
123
|
InstanceReader instanceReader = instance.getInstanceReader();
|
97
|
-
NftId distributionNftId = info.nftId;
|
98
124
|
|
99
125
|
ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
126
|
+
distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
|
100
127
|
distSetupInfo.distributionFee = distributionFee;
|
101
128
|
|
102
129
|
instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
|
@@ -116,24 +143,30 @@ contract DistributionService is
|
|
116
143
|
external
|
117
144
|
returns (DistributorType distributorType)
|
118
145
|
{
|
119
|
-
(
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
commissionPercentage,
|
129
|
-
maxReferralCount,
|
130
|
-
maxReferralLifetime,
|
131
|
-
allowSelfReferrals,
|
132
|
-
allowRenewals,
|
133
|
-
data);
|
134
|
-
|
135
|
-
instance.createDistributorType(key32, info);
|
146
|
+
(NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
147
|
+
|
148
|
+
{
|
149
|
+
ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
|
150
|
+
UFixed variableFeesPartsTotal = setupInfo.minDistributionOwnerFee.fractionalFee.add(commissionPercentage);
|
151
|
+
UFixed maxDiscountPercentageLimit = setupInfo.distributionFee.fractionalFee.sub(variableFeesPartsTotal);
|
152
|
+
if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
|
153
|
+
revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
|
154
|
+
}
|
136
155
|
}
|
156
|
+
|
157
|
+
distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
|
158
|
+
IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
|
159
|
+
name,
|
160
|
+
minDiscountPercentage,
|
161
|
+
maxDiscountPercentage,
|
162
|
+
commissionPercentage,
|
163
|
+
maxReferralCount,
|
164
|
+
maxReferralLifetime,
|
165
|
+
allowSelfReferrals,
|
166
|
+
allowRenewals,
|
167
|
+
data);
|
168
|
+
|
169
|
+
instance.createDistributorType(distributorType, info);
|
137
170
|
}
|
138
171
|
|
139
172
|
function createDistributor(
|
@@ -142,7 +175,7 @@ contract DistributionService is
|
|
142
175
|
bytes memory data
|
143
176
|
) external returns (NftId distributorNftId)
|
144
177
|
{
|
145
|
-
(
|
178
|
+
(NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
146
179
|
|
147
180
|
distributorNftId = getRegistryService().registerDistributor(
|
148
181
|
IRegistry.ObjectInfo(
|
@@ -158,7 +191,9 @@ contract DistributionService is
|
|
158
191
|
IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
|
159
192
|
distributorType,
|
160
193
|
true, // active
|
161
|
-
data
|
194
|
+
data,
|
195
|
+
0,
|
196
|
+
0);
|
162
197
|
|
163
198
|
instance.createDistributor(distributorNftId, info);
|
164
199
|
}
|
@@ -169,14 +204,12 @@ contract DistributionService is
|
|
169
204
|
bytes memory data
|
170
205
|
) external virtual
|
171
206
|
{
|
172
|
-
(
|
173
|
-
|
174
|
-
IDistribution.DistributorInfo memory
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
instance.updateDistributor(distributorNftId, info, KEEP_STATE());
|
207
|
+
(, IInstance instance) = _getAndVerifyCallingDistribution();
|
208
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
209
|
+
IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
|
210
|
+
distributorInfo.distributorType = distributorType;
|
211
|
+
distributorInfo.data = data;
|
212
|
+
instance.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
|
180
213
|
}
|
181
214
|
|
182
215
|
|
@@ -192,9 +225,32 @@ contract DistributionService is
|
|
192
225
|
virtual
|
193
226
|
returns (ReferralId referralId)
|
194
227
|
{
|
195
|
-
(
|
196
|
-
|
197
|
-
|
228
|
+
(NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
229
|
+
|
230
|
+
if (bytes(code).length == 0) {
|
231
|
+
revert ErrorIDistributionServiceInvalidReferral(code);
|
232
|
+
}
|
233
|
+
if (expiryAt.eqz()) {
|
234
|
+
revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
|
235
|
+
}
|
236
|
+
|
237
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
238
|
+
IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
|
239
|
+
DistributorType distributorType = distributorInfo.distributorType;
|
240
|
+
IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
|
241
|
+
|
242
|
+
if (distributorTypeData.maxReferralCount < maxReferrals) {
|
243
|
+
revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
|
244
|
+
}
|
245
|
+
if (distributorTypeData.minDiscountPercentage > discountPercentage) {
|
246
|
+
revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
|
247
|
+
}
|
248
|
+
if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
|
249
|
+
revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
|
250
|
+
}
|
251
|
+
if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
|
252
|
+
revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
|
253
|
+
}
|
198
254
|
|
199
255
|
referralId = ReferralLib.toReferralId(distributionNftId, code);
|
200
256
|
IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
|
@@ -207,71 +263,169 @@ contract DistributionService is
|
|
207
263
|
data
|
208
264
|
);
|
209
265
|
|
210
|
-
instance.createReferral(referralId
|
266
|
+
instance.createReferral(referralId, info);
|
211
267
|
return referralId;
|
212
268
|
}
|
213
269
|
|
214
270
|
function processSale(
|
271
|
+
NftId distributionNftId,
|
215
272
|
ReferralId referralId,
|
216
|
-
|
273
|
+
IPolicy.Premium memory premium,
|
274
|
+
uint256 transferredDistributionFeeAmount
|
217
275
|
)
|
218
276
|
external
|
219
277
|
virtual
|
220
278
|
{
|
221
|
-
|
279
|
+
bool isReferral = ! referralId.eqz();
|
280
|
+
bool referralValid = referralIsValid(distributionNftId, referralId);
|
281
|
+
|
282
|
+
if (isReferral && ! referralValid) {
|
283
|
+
revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
|
284
|
+
}
|
285
|
+
|
286
|
+
IInstance instance = _getInstanceForDistribution(distributionNftId);
|
287
|
+
InstanceReader reader = instance.getInstanceReader();
|
288
|
+
IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
|
289
|
+
IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
|
290
|
+
ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
|
291
|
+
|
292
|
+
uint256 distributionOwnerFee = premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount;
|
293
|
+
uint256 commissionAmount = premium.commissionAmount;
|
294
|
+
|
295
|
+
if (transferredDistributionFeeAmount != distributionOwnerFee + commissionAmount) {
|
296
|
+
revert ErrorIDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
|
297
|
+
}
|
298
|
+
|
299
|
+
|
300
|
+
if (distributionOwnerFee > 0) {
|
301
|
+
setupInfo.sumDistributionOwnerFees += distributionOwnerFee;
|
302
|
+
instance.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
|
303
|
+
}
|
304
|
+
|
305
|
+
if (isReferral) {
|
306
|
+
referralInfo.usedReferrals += 1;
|
307
|
+
instance.updateReferral(referralId, referralInfo, KEEP_STATE());
|
308
|
+
|
309
|
+
if (commissionAmount > 0) {
|
310
|
+
distributorInfo.sumCommisions += commissionAmount;
|
311
|
+
distributorInfo.numPoliciesSold += 1;
|
312
|
+
instance.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
|
313
|
+
}
|
314
|
+
}
|
222
315
|
}
|
223
316
|
|
224
317
|
function calculateFeeAmount(
|
318
|
+
NftId distributionNftId,
|
225
319
|
ReferralId referralId,
|
226
|
-
|
320
|
+
IPolicy.Premium memory premium
|
227
321
|
)
|
228
322
|
external
|
229
323
|
virtual
|
230
324
|
view
|
231
|
-
returns (
|
325
|
+
returns (IPolicy.Premium memory finalPremium)
|
232
326
|
{
|
233
|
-
|
327
|
+
IInstance instance = _getInstanceForDistribution(distributionNftId);
|
328
|
+
InstanceReader reader = instance.getInstanceReader();
|
329
|
+
|
330
|
+
// first calculate all fixed and variable fees for the distribution - this will defined the fullPremium
|
331
|
+
ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
|
332
|
+
Fee memory distributionFee = setupInfo.distributionFee;
|
333
|
+
Fee memory minDistributionOwnerFee = setupInfo.minDistributionOwnerFee;
|
334
|
+
uint256 distributionFeeVarAmount = (UFixedLib.toUFixed(premium.netPremiumAmount) * distributionFee.fractionalFee).toInt();
|
335
|
+
premium.distributionFeeVarAmount = distributionFeeVarAmount;
|
336
|
+
premium.fullPremiumAmount += distributionFeeVarAmount;
|
337
|
+
|
338
|
+
// if the referral is not valid, then the distribution owner gets everything
|
339
|
+
if (! referralIsValid(distributionNftId, referralId)) {
|
340
|
+
premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
|
341
|
+
premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
|
342
|
+
premium.premiumAmount = premium.fullPremiumAmount;
|
343
|
+
return premium;
|
344
|
+
}
|
345
|
+
|
346
|
+
// if the referral is valid, the the commission and discount are calculated based in the full premium
|
347
|
+
// the remaing amount goes to the distribution owner
|
348
|
+
{
|
349
|
+
IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
|
350
|
+
IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
|
351
|
+
IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
|
352
|
+
|
353
|
+
uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
|
354
|
+
premium.commissionAmount = commissionAmount;
|
355
|
+
premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
|
356
|
+
premium.distributionOwnerFeeFixAmount = minDistributionOwnerFee.fixedFee;
|
357
|
+
premium.distributionOwnerFeeVarAmount = distributionFeeVarAmount - commissionAmount - premium.discountAmount;
|
358
|
+
premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
|
359
|
+
}
|
360
|
+
|
361
|
+
// sanity check to validate the fee calculation
|
362
|
+
if (premium.distributionOwnerFeeFixAmount < minDistributionOwnerFee.fixedFee) {
|
363
|
+
revert ErrorIDistributionServiceFeeCalculationMismatch(
|
364
|
+
premium.distributionFeeFixAmount,
|
365
|
+
premium.distributionFeeVarAmount,
|
366
|
+
premium.distributionOwnerFeeFixAmount,
|
367
|
+
premium.distributionOwnerFeeVarAmount,
|
368
|
+
premium.commissionAmount,
|
369
|
+
premium.discountAmount
|
370
|
+
);
|
371
|
+
}
|
372
|
+
if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
|
373
|
+
revert ErrorIDistributionServiceFeeCalculationMismatch(
|
374
|
+
premium.distributionFeeFixAmount,
|
375
|
+
premium.distributionFeeVarAmount,
|
376
|
+
premium.distributionOwnerFeeFixAmount,
|
377
|
+
premium.distributionOwnerFeeVarAmount,
|
378
|
+
premium.commissionAmount,
|
379
|
+
premium.discountAmount
|
380
|
+
);
|
381
|
+
}
|
382
|
+
|
383
|
+
return premium;
|
384
|
+
}
|
385
|
+
|
386
|
+
// TODO: zero should return false
|
387
|
+
function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
|
388
|
+
IInstance instance = _getInstanceForDistribution(distributionNftId);
|
389
|
+
IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
|
390
|
+
|
391
|
+
if (info.distributorNftId.eqz()) {
|
392
|
+
return false;
|
393
|
+
}
|
394
|
+
|
395
|
+
isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
|
396
|
+
isValid = isValid && info.usedReferrals < info.maxReferrals;
|
234
397
|
}
|
235
398
|
|
236
399
|
function _getAndVerifyCallingDistribution()
|
237
400
|
internal
|
238
401
|
view
|
239
402
|
returns(
|
240
|
-
address distributionAddress,
|
241
403
|
NftId distributionNftId,
|
242
404
|
IInstance instance
|
243
405
|
)
|
244
406
|
{
|
245
|
-
|
246
|
-
(
|
247
|
-
|
248
|
-
|
249
|
-
objectType,
|
250
|
-
instance
|
251
|
-
) = _getAndVerifyCaller();
|
407
|
+
distributionNftId = getRegistry().getNftId(msg.sender);
|
408
|
+
if (distributionNftId.eqz()) {
|
409
|
+
revert ErrorDistributionServiceCallerNotRegistered(msg.sender);
|
410
|
+
}
|
252
411
|
|
253
|
-
|
412
|
+
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(distributionNftId);
|
413
|
+
if(info.objectType != DISTRIBUTION()) {
|
414
|
+
revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
|
415
|
+
}
|
416
|
+
|
417
|
+
address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
|
418
|
+
instance = IInstance(instanceAddress);
|
254
419
|
}
|
255
420
|
|
256
|
-
|
421
|
+
|
422
|
+
function _getInstanceForDistribution(NftId distributionNftId)
|
257
423
|
internal
|
258
424
|
view
|
259
|
-
returns(
|
260
|
-
address objectAddress,
|
261
|
-
NftId objectNftId,
|
262
|
-
ObjectType objectType,
|
263
|
-
IInstance instance
|
264
|
-
)
|
425
|
+
returns(IInstance instance)
|
265
426
|
{
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(objectNftId);
|
270
|
-
objectType = info.objectType;
|
271
|
-
|
272
|
-
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
|
273
|
-
require(parentInfo.objectType == INSTANCE(), "ERROR:SRV-031:PARENT_NOT_INSTANCE");
|
274
|
-
instance = IInstance(parentInfo.objectAddress);
|
427
|
+
NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
|
428
|
+
address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
|
429
|
+
return IInstance(instanceAddress);
|
275
430
|
}
|
276
|
-
|
277
431
|
}
|