@etherisc/gif-next 0.0.2-2a59cd5-352 → 0.0.2-2aa1035-611
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 +90 -145
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +145 -233
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +158 -73
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +169 -150
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +350 -180
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -145
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +298 -288
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +95 -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 +274 -2000
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +183 -203
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +398 -2776
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +491 -127
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +253 -236
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +216 -451
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +184 -121
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2663 -0
- 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 +100 -215
- 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 +164 -379
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +649 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +433 -425
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +244 -105
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1072 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +685 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +657 -318
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +270 -115
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +99 -236
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +235 -319
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +602 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +373 -158
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +417 -232
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +568 -120
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +518 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +64 -163
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +563 -366
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +220 -121
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +771 -247
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +237 -102
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +988 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +689 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +136 -271
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +186 -107
- 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 +4 -193
- 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 +28 -277
- 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 +23 -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 +64 -163
- 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 +72 -203
- 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 +90 -253
- 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 +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -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 +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 +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -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 +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 +100 -83
- package/contracts/components/Distribution.sol +22 -46
- package/contracts/components/IComponent.sol +43 -17
- 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 +172 -76
- 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 +43 -49
- package/contracts/instance/IInstanceService.sol +32 -12
- package/contracts/instance/Instance.sol +129 -173
- package/contracts/instance/InstanceAccessManager.sol +404 -160
- package/contracts/instance/InstanceAuthorizationsLib.sol +300 -0
- package/contracts/instance/InstanceReader.sol +43 -16
- package/contracts/instance/InstanceService.sol +160 -293
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/InstanceStore.sol +208 -0
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +53 -39
- 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 +41 -9
- package/contracts/instance/module/ISetup.sol +7 -21
- package/contracts/instance/service/ApplicationService.sol +75 -158
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +230 -88
- package/contracts/instance/service/BundleServiceManager.sol +1 -1
- package/contracts/instance/service/ClaimService.sol +239 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +156 -96
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +9 -30
- package/contracts/instance/service/IBundleService.sol +74 -26
- package/contracts/instance/service/IClaimService.sol +92 -0
- package/contracts/instance/service/IDistributionService.sol +26 -6
- package/contracts/instance/service/IPolicyService.sol +89 -38
- package/contracts/instance/service/IPoolService.sol +85 -3
- package/contracts/instance/service/IPricingService.sol +36 -0
- package/contracts/instance/service/PolicyService.sol +358 -305
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +246 -19
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/PricingService.sol +275 -0
- package/contracts/instance/service/PricingServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +37 -60
- 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 +11 -10
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +23 -20
- package/contracts/registry/RegistryService.sol +56 -47
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +26 -33
- 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 +4 -4
- 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 +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 +75 -0
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +12 -7
- package/contracts/types/PayoutId.sol +82 -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 +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
|
@@ -0,0 +1,239 @@
|
|
|
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 {Amount, AmountLib} from "../../types/Amount.sol";
|
|
26
|
+
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
|
27
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
|
28
|
+
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
|
29
|
+
import {ObjectType, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, CLAIM, BUNDLE} from "../../types/ObjectType.sol";
|
|
30
|
+
import {SUBMITTED, ACTIVE, KEEP_STATE, DECLINED, CONFIRMED, CLOSED} from "../../types/StateId.sol";
|
|
31
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
|
32
|
+
import {Fee, FeeLib} from "../../types/Fee.sol";
|
|
33
|
+
import {ReferralId} from "../../types/Referral.sol";
|
|
34
|
+
import {RiskId} from "../../types/RiskId.sol";
|
|
35
|
+
import {StateId} from "../../types/StateId.sol";
|
|
36
|
+
import {ClaimId, ClaimIdLib} from "../../types/ClaimId.sol";
|
|
37
|
+
import {PayoutId, PayoutIdLib} from "../../types/PayoutId.sol";
|
|
38
|
+
import {Version, VersionLib} from "../../types/Version.sol";
|
|
39
|
+
|
|
40
|
+
import {ComponentService} from "../base/ComponentService.sol";
|
|
41
|
+
import {InstanceReader} from "../InstanceReader.sol";
|
|
42
|
+
import {IBundleService} from "./IBundleService.sol";
|
|
43
|
+
import {IClaimService} from "./IClaimService.sol";
|
|
44
|
+
import {IPoolService} from "./IPoolService.sol";
|
|
45
|
+
import {IService} from "../../shared/IService.sol";
|
|
46
|
+
import {Service} from "../../shared/Service.sol";
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
contract ClaimService is
|
|
50
|
+
ComponentService,
|
|
51
|
+
IClaimService
|
|
52
|
+
{
|
|
53
|
+
|
|
54
|
+
IPoolService internal _poolService;
|
|
55
|
+
|
|
56
|
+
function _initialize(
|
|
57
|
+
address owner,
|
|
58
|
+
bytes memory data
|
|
59
|
+
)
|
|
60
|
+
internal
|
|
61
|
+
virtual override
|
|
62
|
+
initializer()
|
|
63
|
+
{
|
|
64
|
+
// TODO check this, might no longer be the way, refactor if necessary
|
|
65
|
+
address registryAddress;
|
|
66
|
+
address initialOwner;
|
|
67
|
+
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
|
68
|
+
|
|
69
|
+
initializeService(registryAddress, address(0), owner);
|
|
70
|
+
|
|
71
|
+
_poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
|
|
72
|
+
|
|
73
|
+
registerInterface(type(IClaimService).interfaceId);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
function getDomain() public pure override returns(ObjectType) {
|
|
78
|
+
return CLAIM();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
function submit(
|
|
83
|
+
IInstance instance,
|
|
84
|
+
NftId policyNftId,
|
|
85
|
+
ClaimId claimId,
|
|
86
|
+
Amount claimAmount,
|
|
87
|
+
bytes memory claimData
|
|
88
|
+
)
|
|
89
|
+
external
|
|
90
|
+
virtual
|
|
91
|
+
// TODO add restricted and grant to policy service
|
|
92
|
+
{
|
|
93
|
+
instance.getInstanceStore().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
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
function confirm(
|
|
107
|
+
IInstance instance,
|
|
108
|
+
InstanceReader instanceReader,
|
|
109
|
+
NftId policyNftId,
|
|
110
|
+
ClaimId claimId,
|
|
111
|
+
Amount confirmedAmount
|
|
112
|
+
)
|
|
113
|
+
external
|
|
114
|
+
virtual
|
|
115
|
+
{
|
|
116
|
+
IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
|
|
117
|
+
claimInfo.claimAmount = confirmedAmount;
|
|
118
|
+
instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CONFIRMED());
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function decline(
|
|
122
|
+
IInstance instance,
|
|
123
|
+
InstanceReader instanceReader,
|
|
124
|
+
NftId policyNftId,
|
|
125
|
+
ClaimId claimId
|
|
126
|
+
)
|
|
127
|
+
external
|
|
128
|
+
virtual
|
|
129
|
+
{
|
|
130
|
+
IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
|
|
131
|
+
claimInfo.closedAt = TimestampLib.blockTimestamp();
|
|
132
|
+
instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, DECLINED());
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
function close(
|
|
137
|
+
IInstance instance,
|
|
138
|
+
InstanceReader instanceReader,
|
|
139
|
+
NftId policyNftId,
|
|
140
|
+
ClaimId claimId
|
|
141
|
+
)
|
|
142
|
+
external
|
|
143
|
+
virtual
|
|
144
|
+
{
|
|
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.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CLOSED());
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
function createPayout(
|
|
170
|
+
IInstance instance,
|
|
171
|
+
NftId policyNftId,
|
|
172
|
+
PayoutId payoutId,
|
|
173
|
+
Amount payoutAmount,
|
|
174
|
+
bytes calldata payoutData
|
|
175
|
+
)
|
|
176
|
+
external
|
|
177
|
+
virtual
|
|
178
|
+
// TODO add restricted and grant to policy service
|
|
179
|
+
{
|
|
180
|
+
instance.getInstanceStore().createPayout(
|
|
181
|
+
policyNftId,
|
|
182
|
+
payoutId,
|
|
183
|
+
IPolicy.PayoutInfo(
|
|
184
|
+
payoutId.toClaimId(),
|
|
185
|
+
payoutAmount,
|
|
186
|
+
payoutData,
|
|
187
|
+
TimestampLib.zero()));
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
function processPayout(
|
|
192
|
+
IInstance instance,
|
|
193
|
+
InstanceReader instanceReader,
|
|
194
|
+
NftId policyNftId,
|
|
195
|
+
PayoutId payoutId
|
|
196
|
+
)
|
|
197
|
+
external
|
|
198
|
+
virtual
|
|
199
|
+
returns (
|
|
200
|
+
Amount amount,
|
|
201
|
+
bool payoutIsClosingClaim
|
|
202
|
+
)
|
|
203
|
+
// solhint-disable-next-line no-empty-blocks
|
|
204
|
+
{
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
// internal functions
|
|
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
|
+
|
|
234
|
+
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
|
235
|
+
IRegistry.ObjectInfo memory productInfo;
|
|
236
|
+
(, productInfo,) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
|
237
|
+
product = Product(productInfo.objectAddress);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
@@ -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
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
|
-
import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR} from "../../types/ObjectType.sol";
|
|
15
|
+
import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR, PRICE} 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";
|
|
@@ -24,13 +26,15 @@ import {InstanceService} from "../InstanceService.sol";
|
|
|
24
26
|
import {IComponent} from "../../components/IComponent.sol";
|
|
25
27
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
|
26
28
|
import {IDistributionService} from "./IDistributionService.sol";
|
|
29
|
+
import {IPricingService} from "./IPricingService.sol";
|
|
27
30
|
|
|
28
|
-
import {UFixed} from "../../types/UFixed.sol";
|
|
31
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
|
29
32
|
import {DistributorType, DistributorTypeLib} from "../../types/DistributorType.sol";
|
|
30
33
|
import {ReferralId, ReferralStatus, ReferralLib} from "../../types/Referral.sol";
|
|
31
34
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
|
32
35
|
import {Key32} from "../../types/Key32.sol";
|
|
33
36
|
import {IDistribution} from "../module/IDistribution.sol";
|
|
37
|
+
import {InstanceStore} from "../InstanceStore.sol";
|
|
34
38
|
|
|
35
39
|
|
|
36
40
|
contract DistributionService is
|
|
@@ -38,6 +42,10 @@ contract DistributionService is
|
|
|
38
42
|
IDistributionService
|
|
39
43
|
{
|
|
40
44
|
using NftIdLib for NftId;
|
|
45
|
+
using TimestampLib for Timestamp;
|
|
46
|
+
using UFixedLib for UFixed;
|
|
47
|
+
using FeeLib for Fee;
|
|
48
|
+
using ReferralLib for ReferralId;
|
|
41
49
|
|
|
42
50
|
address internal _registryAddress;
|
|
43
51
|
|
|
@@ -54,11 +62,11 @@ contract DistributionService is
|
|
|
54
62
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
|
55
63
|
// TODO while DistributionService is not deployed in DistributionServiceManager constructor
|
|
56
64
|
// owner is DistributionServiceManager deployer
|
|
57
|
-
initializeService(registryAddress, owner);
|
|
65
|
+
initializeService(registryAddress, address(0), owner);
|
|
58
66
|
registerInterface(type(IDistributionService).interfaceId);
|
|
59
67
|
}
|
|
60
68
|
|
|
61
|
-
function getDomain() public pure override
|
|
69
|
+
function getDomain() public pure override returns(ObjectType) {
|
|
62
70
|
return DISTRIBUTION();
|
|
63
71
|
}
|
|
64
72
|
|
|
@@ -81,25 +89,46 @@ contract DistributionService is
|
|
|
81
89
|
distribution.linkToRegisteredNftId();
|
|
82
90
|
distributionNftId = distributionInfo.nftId;
|
|
83
91
|
|
|
84
|
-
instance.createDistributionSetup(distributionNftId, distribution.getSetupInfo());
|
|
85
|
-
|
|
86
|
-
|
|
92
|
+
instance.getInstanceStore().createDistributionSetup(distributionNftId, distribution.getSetupInfo());
|
|
93
|
+
// TODO move to distribution?
|
|
94
|
+
bytes4[][] memory selectors = new bytes4[][](2);
|
|
95
|
+
selectors[0] = new bytes4[](1);
|
|
96
|
+
selectors[1] = new bytes4[](2);
|
|
97
|
+
|
|
98
|
+
selectors[0][0] = IDistributionComponent.setFees.selector;
|
|
99
|
+
selectors[1][0] = IDistributionComponent.processRenewal.selector;
|
|
100
|
+
|
|
101
|
+
RoleId[] memory roles = new RoleId[](2);
|
|
102
|
+
roles[0] = DISTRIBUTION_OWNER_ROLE();
|
|
103
|
+
roles[1] = PRODUCT_SERVICE_ROLE();
|
|
104
|
+
|
|
105
|
+
getInstanceService().createGifTarget(
|
|
106
|
+
instanceNftId,
|
|
107
|
+
distributionAddress,
|
|
108
|
+
distribution.getName(),
|
|
109
|
+
selectors,
|
|
110
|
+
roles);
|
|
87
111
|
}
|
|
88
112
|
|
|
89
113
|
function setFees(
|
|
114
|
+
Fee memory minDistributionOwnerFee,
|
|
90
115
|
Fee memory distributionFee
|
|
91
116
|
)
|
|
92
117
|
external
|
|
93
118
|
override
|
|
94
119
|
{
|
|
95
|
-
(
|
|
120
|
+
if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
|
|
121
|
+
revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
(NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
|
|
96
125
|
InstanceReader instanceReader = instance.getInstanceReader();
|
|
97
|
-
NftId distributionNftId = info.nftId;
|
|
98
126
|
|
|
99
127
|
ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
|
128
|
+
distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
|
|
100
129
|
distSetupInfo.distributionFee = distributionFee;
|
|
101
130
|
|
|
102
|
-
instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
|
|
131
|
+
instance.getInstanceStore().updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
|
|
103
132
|
}
|
|
104
133
|
|
|
105
134
|
function createDistributorType(
|
|
@@ -116,24 +145,30 @@ contract DistributionService is
|
|
|
116
145
|
external
|
|
117
146
|
returns (DistributorType distributorType)
|
|
118
147
|
{
|
|
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);
|
|
148
|
+
(NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
|
|
149
|
+
|
|
150
|
+
{
|
|
151
|
+
ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
|
|
152
|
+
UFixed variableFeesPartsTotal = setupInfo.minDistributionOwnerFee.fractionalFee.add(commissionPercentage);
|
|
153
|
+
UFixed maxDiscountPercentageLimit = setupInfo.distributionFee.fractionalFee.sub(variableFeesPartsTotal);
|
|
154
|
+
if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
|
|
155
|
+
revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
|
|
156
|
+
}
|
|
136
157
|
}
|
|
158
|
+
|
|
159
|
+
distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
|
|
160
|
+
IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
|
|
161
|
+
name,
|
|
162
|
+
minDiscountPercentage,
|
|
163
|
+
maxDiscountPercentage,
|
|
164
|
+
commissionPercentage,
|
|
165
|
+
maxReferralCount,
|
|
166
|
+
maxReferralLifetime,
|
|
167
|
+
allowSelfReferrals,
|
|
168
|
+
allowRenewals,
|
|
169
|
+
data);
|
|
170
|
+
|
|
171
|
+
instance.getInstanceStore().createDistributorType(distributorType, info);
|
|
137
172
|
}
|
|
138
173
|
|
|
139
174
|
function createDistributor(
|
|
@@ -142,7 +177,7 @@ contract DistributionService is
|
|
|
142
177
|
bytes memory data
|
|
143
178
|
) external returns (NftId distributorNftId)
|
|
144
179
|
{
|
|
145
|
-
(
|
|
180
|
+
(NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
|
|
146
181
|
|
|
147
182
|
distributorNftId = getRegistryService().registerDistributor(
|
|
148
183
|
IRegistry.ObjectInfo(
|
|
@@ -158,9 +193,11 @@ contract DistributionService is
|
|
|
158
193
|
IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
|
|
159
194
|
distributorType,
|
|
160
195
|
true, // active
|
|
161
|
-
data
|
|
196
|
+
data,
|
|
197
|
+
0,
|
|
198
|
+
0);
|
|
162
199
|
|
|
163
|
-
instance.createDistributor(distributorNftId, info);
|
|
200
|
+
instance.getInstanceStore().createDistributor(distributorNftId, info);
|
|
164
201
|
}
|
|
165
202
|
|
|
166
203
|
function updateDistributorType(
|
|
@@ -169,14 +206,12 @@ contract DistributionService is
|
|
|
169
206
|
bytes memory data
|
|
170
207
|
) external virtual
|
|
171
208
|
{
|
|
172
|
-
(,, IInstance instance) =
|
|
173
|
-
|
|
174
|
-
IDistribution.DistributorInfo memory
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
instance.updateDistributor(distributorNftId, info, KEEP_STATE());
|
|
209
|
+
(,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
|
|
210
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
|
211
|
+
IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
|
|
212
|
+
distributorInfo.distributorType = distributorType;
|
|
213
|
+
distributorInfo.data = data;
|
|
214
|
+
instance.getInstanceStore().updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
|
|
180
215
|
}
|
|
181
216
|
|
|
182
217
|
|
|
@@ -192,11 +227,32 @@ contract DistributionService is
|
|
|
192
227
|
virtual
|
|
193
228
|
returns (ReferralId referralId)
|
|
194
229
|
{
|
|
195
|
-
(
|
|
196
|
-
|
|
197
|
-
|
|
230
|
+
(NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
|
|
231
|
+
|
|
232
|
+
if (bytes(code).length == 0) {
|
|
233
|
+
revert ErrorIDistributionServiceInvalidReferral(code);
|
|
234
|
+
}
|
|
235
|
+
if (expiryAt.eqz()) {
|
|
236
|
+
revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
|
240
|
+
IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
|
|
241
|
+
DistributorType distributorType = distributorInfo.distributorType;
|
|
242
|
+
IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
|
|
198
243
|
|
|
199
|
-
|
|
244
|
+
if (distributorTypeData.maxReferralCount < maxReferrals) {
|
|
245
|
+
revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
|
|
246
|
+
}
|
|
247
|
+
if (distributorTypeData.minDiscountPercentage > discountPercentage) {
|
|
248
|
+
revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
|
|
249
|
+
}
|
|
250
|
+
if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
|
|
251
|
+
revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
|
|
252
|
+
}
|
|
253
|
+
if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
|
|
254
|
+
revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
|
|
255
|
+
}
|
|
200
256
|
|
|
201
257
|
referralId = ReferralLib.toReferralId(distributionNftId, code);
|
|
202
258
|
IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
|
|
@@ -209,74 +265,78 @@ contract DistributionService is
|
|
|
209
265
|
data
|
|
210
266
|
);
|
|
211
267
|
|
|
212
|
-
instance.createReferral(referralId
|
|
268
|
+
instance.getInstanceStore().createReferral(referralId, info);
|
|
213
269
|
return referralId;
|
|
214
270
|
}
|
|
215
271
|
|
|
216
272
|
function processSale(
|
|
273
|
+
NftId distributionNftId, // assume always of distribution type
|
|
217
274
|
ReferralId referralId,
|
|
218
|
-
|
|
275
|
+
IPolicy.Premium memory premium,
|
|
276
|
+
uint256 transferredDistributionFeeAmount
|
|
219
277
|
)
|
|
220
278
|
external
|
|
221
279
|
virtual
|
|
222
280
|
{
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
// TODO: if referral is not active, process sale with conditions of distribution component
|
|
226
|
-
revert("NOT_IMPLEMENTED_YET");
|
|
227
|
-
}
|
|
281
|
+
bool isReferral = ! referralId.eqz();
|
|
282
|
+
bool referralValid = referralIsValid(distributionNftId, referralId);
|
|
228
283
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
284
|
+
if (isReferral && ! referralValid) {
|
|
285
|
+
revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
IInstance instance = _getInstanceForDistribution(distributionNftId);
|
|
289
|
+
InstanceReader reader = instance.getInstanceReader();
|
|
290
|
+
InstanceStore store = instance.getInstanceStore();
|
|
291
|
+
IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
|
|
292
|
+
IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
|
|
293
|
+
ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
|
|
294
|
+
|
|
295
|
+
uint256 distributionOwnerFee = premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount;
|
|
296
|
+
uint256 commissionAmount = premium.commissionAmount;
|
|
297
|
+
|
|
298
|
+
if (transferredDistributionFeeAmount != distributionOwnerFee + commissionAmount) {
|
|
299
|
+
revert ErrorIDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
if (distributionOwnerFee > 0) {
|
|
304
|
+
setupInfo.sumDistributionOwnerFees += distributionOwnerFee;
|
|
305
|
+
store.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
if (isReferral) {
|
|
309
|
+
referralInfo.usedReferrals += 1;
|
|
310
|
+
store.updateReferral(referralId, referralInfo, KEEP_STATE());
|
|
311
|
+
|
|
312
|
+
if (commissionAmount > 0) {
|
|
313
|
+
distributorInfo.sumCommisions += commissionAmount;
|
|
314
|
+
distributorInfo.numPoliciesSold += 1;
|
|
315
|
+
store.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
|
|
316
|
+
}
|
|
317
|
+
}
|
|
239
318
|
}
|
|
240
319
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
address distributionAddress,
|
|
246
|
-
NftId distributionNftId,
|
|
247
|
-
IInstance instance
|
|
248
|
-
)
|
|
249
|
-
{
|
|
250
|
-
ObjectType objectType;
|
|
251
|
-
(
|
|
252
|
-
distributionAddress,
|
|
253
|
-
distributionNftId,
|
|
254
|
-
objectType,
|
|
255
|
-
instance
|
|
256
|
-
) = _getAndVerifyCaller();
|
|
320
|
+
// TODO: zero should return false
|
|
321
|
+
function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
|
|
322
|
+
IInstance instance = _getInstanceForDistribution(distributionNftId);
|
|
323
|
+
IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
|
|
257
324
|
|
|
258
|
-
|
|
325
|
+
if (info.distributorNftId.eqz()) {
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
|
|
330
|
+
isValid = isValid && info.usedReferrals < info.maxReferrals;
|
|
259
331
|
}
|
|
260
332
|
|
|
261
|
-
function
|
|
333
|
+
function _getInstanceForDistribution(NftId distributionNftId)
|
|
262
334
|
internal
|
|
263
335
|
view
|
|
264
|
-
returns(
|
|
265
|
-
address objectAddress,
|
|
266
|
-
NftId objectNftId,
|
|
267
|
-
ObjectType objectType,
|
|
268
|
-
IInstance instance
|
|
269
|
-
)
|
|
336
|
+
returns(IInstance instance)
|
|
270
337
|
{
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(objectNftId);
|
|
275
|
-
objectType = info.objectType;
|
|
276
|
-
|
|
277
|
-
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
|
|
278
|
-
require(parentInfo.objectType == INSTANCE(), "ERROR:SRV-031:PARENT_NOT_INSTANCE");
|
|
279
|
-
instance = IInstance(parentInfo.objectAddress);
|
|
338
|
+
NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
|
|
339
|
+
address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
|
|
340
|
+
return IInstance(instanceAddress);
|
|
280
341
|
}
|
|
281
|
-
|
|
282
|
-
}
|
|
342
|
+
}
|
|
@@ -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));
|