@etherisc/gif-next 0.0.2-b244df3-779 → 0.0.2-b38343e-249
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -1
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +853 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +887 -242
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +160 -100
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +791 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +655 -43
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +654 -5
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +600 -217
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +543 -152
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +881 -121
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +168 -166
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +791 -438
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +118 -173
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +61 -97
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +390 -362
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +299 -130
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +188 -168
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +24 -13
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +858 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +657 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +408 -246
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +302 -81
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +743 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +443 -192
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +322 -73
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +200 -204
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +170 -217
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → instance/service/IClaimService.sol/IClaimService.json} +154 -124
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +197 -163
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +138 -230
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +23 -186
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +29 -192
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +392 -267
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +339 -86
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +216 -218
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +299 -78
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +217 -219
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +305 -76
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +225 -133
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +149 -217
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +238 -235
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +195 -322
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +48 -0
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +23 -186
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +119 -173
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +140 -230
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/components/Component.sol +242 -0
- package/contracts/components/Distribution.sol +209 -64
- package/contracts/components/IComponent.sol +55 -0
- package/contracts/components/IDistributionComponent.sol +59 -3
- package/contracts/components/IPoolComponent.sol +50 -29
- package/contracts/components/IProductComponent.sol +7 -3
- package/contracts/components/Pool.sol +135 -152
- package/contracts/components/Product.sol +114 -121
- package/contracts/instance/BundleManager.sol +7 -11
- package/contracts/instance/IInstance.sol +42 -10
- package/contracts/instance/IInstanceService.sol +27 -2
- package/contracts/instance/Instance.sol +84 -69
- package/contracts/instance/InstanceAccessManager.sol +36 -41
- package/contracts/instance/InstanceReader.sol +3 -25
- package/contracts/instance/InstanceService.sol +271 -79
- package/contracts/instance/InstanceServiceManager.sol +6 -9
- package/contracts/instance/ObjectManager.sol +7 -24
- package/contracts/instance/base/ComponentService.sol +134 -0
- package/contracts/instance/module/IAccess.sol +4 -5
- package/contracts/instance/module/IPolicy.sol +4 -2
- package/contracts/instance/module/ISetup.sol +5 -4
- package/contracts/instance/service/ApplicationService.sol +268 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +52 -14
- package/contracts/instance/service/BundleServiceManager.sol +6 -9
- package/contracts/instance/service/ClaimService.sol +151 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +208 -49
- package/contracts/instance/service/DistributionServiceManager.sol +7 -10
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +12 -3
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +53 -0
- package/contracts/instance/service/IPolicyService.sol +48 -46
- package/contracts/instance/service/PolicyService.sol +156 -190
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +27 -42
- package/contracts/instance/service/PoolServiceManager.sol +6 -9
- package/contracts/instance/service/ProductService.sol +100 -40
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +37 -19
- package/contracts/registry/IRegistryService.sol +30 -13
- package/contracts/registry/Registry.sol +233 -217
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +96 -171
- package/contracts/registry/RegistryServiceManager.sol +21 -39
- package/contracts/registry/ReleaseManager.sol +322 -0
- package/contracts/registry/TokenRegistry.sol +22 -17
- package/contracts/shared/ERC165.sol +14 -12
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +26 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +2 -1
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +66 -80
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +14 -30
- package/contracts/shared/RegistryLinked.sol +48 -0
- package/contracts/shared/Service.sol +25 -22
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestService.sol +4 -3
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/ObjectType.sol +9 -5
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/RoleId.sol +6 -8
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
- package/contracts/components/BaseComponent.sol +0 -132
- package/contracts/components/IBaseComponent.sol +0 -31
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/IInstanceBase.sol +0 -26
- package/contracts/instance/InstanceBase.sol +0 -41
- package/contracts/instance/base/ComponentServiceBase.sol +0 -72
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/service/ComponentOwnerService.sol +0 -317
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -4,10 +4,10 @@ pragma solidity ^0.8.19;
|
|
4
4
|
import {DISTRIBUTION} from "../types/ObjectType.sol";
|
5
5
|
import {IDistributionService} from "../instance/service/IDistributionService.sol";
|
6
6
|
import {IProductService} from "../instance/service/IProductService.sol";
|
7
|
-
import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
|
8
|
-
import {ReferralId} from "../types/Referral.sol";
|
7
|
+
import {NftId, zeroNftId, NftIdLib, toNftId} from "../types/NftId.sol";
|
8
|
+
import {ReferralId, ReferralStatus, ReferralLib} from "../types/Referral.sol";
|
9
9
|
import {Fee, FeeLib} from "../types/Fee.sol";
|
10
|
-
import {
|
10
|
+
import {Component} from "./Component.sol";
|
11
11
|
import {IDistributionComponent} from "./IDistributionComponent.sol";
|
12
12
|
import {IRegistry} from "../registry/IRegistry.sol";
|
13
13
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
@@ -15,58 +15,152 @@ import {ISetup} from "../instance/module/ISetup.sol";
|
|
15
15
|
import {Registerable} from "../shared/Registerable.sol";
|
16
16
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
17
17
|
import {InstanceReader} from "../instance/InstanceReader.sol";
|
18
|
+
import {UFixed} from "../types/UFixed.sol";
|
19
|
+
import {DistributorType} from "../types/DistributorType.sol";
|
20
|
+
import {Timestamp} from "../types/Timestamp.sol";
|
21
|
+
import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
|
18
22
|
|
19
|
-
|
20
|
-
|
23
|
+
|
24
|
+
abstract contract Distribution is
|
25
|
+
Component,
|
21
26
|
IDistributionComponent
|
22
27
|
{
|
23
|
-
|
24
|
-
|
25
|
-
Fee internal _initialDistributionFee;
|
26
|
-
bool internal _isVerifying;
|
27
|
-
|
28
|
-
TokenHandler internal _tokenHandler;
|
29
|
-
|
30
|
-
IDistributionService private _distributionService;
|
31
|
-
IProductService private _productService;
|
28
|
+
// keccak256(abi.encode(uint256(keccak256("etherisc.storage.Distribution")) - 1)) & ~bytes32(uint256(0xff));
|
29
|
+
bytes32 public constant DISTRIBUTION_STORAGE_LOCATION_V1 = 0xaab7c5ea03d290056d6c060e0833d3ebcbe647f7694616a2ec52738a64b2f900;
|
32
30
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
31
|
+
struct DistributionStorage {
|
32
|
+
Fee _distributionFee;
|
33
|
+
TokenHandler _tokenHandler;
|
34
|
+
IDistributionService _distributionService;
|
35
|
+
mapping(address distributor => NftId distributorNftId) _distributorNftId;
|
38
36
|
}
|
39
37
|
|
40
|
-
|
38
|
+
function initializeDistribution(
|
41
39
|
address registry,
|
42
40
|
NftId instanceNftId,
|
43
|
-
|
41
|
+
string memory name,
|
44
42
|
address token,
|
45
|
-
bool verifying,
|
46
43
|
Fee memory distributionFee,
|
47
|
-
address initialOwner
|
44
|
+
address initialOwner,
|
45
|
+
bytes memory data
|
48
46
|
)
|
49
|
-
|
47
|
+
public
|
48
|
+
virtual
|
49
|
+
onlyInitializing()
|
50
50
|
{
|
51
|
-
|
52
|
-
_initialDistributionFee = distributionFee;
|
51
|
+
initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, data);
|
53
52
|
|
54
|
-
|
53
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
54
|
+
// TODO add validation
|
55
|
+
$._distributionFee = distributionFee;
|
56
|
+
$._tokenHandler = new TokenHandler(token);
|
57
|
+
$._distributionService = getInstance().getDistributionService();
|
55
58
|
|
56
|
-
|
57
|
-
_productService = _instance.getProductService();
|
58
|
-
|
59
|
-
_registerInterface(type(IDistributionComponent).interfaceId);
|
59
|
+
registerInterface(type(IDistributionComponent).interfaceId);
|
60
60
|
}
|
61
61
|
|
62
|
-
|
63
62
|
function setFees(
|
64
63
|
Fee memory distributionFee
|
65
64
|
)
|
66
65
|
external
|
67
66
|
override
|
67
|
+
onlyOwner
|
68
|
+
restricted()
|
69
|
+
{
|
70
|
+
_getDistributionStorage()._distributionService.setFees(distributionFee);
|
71
|
+
}
|
72
|
+
|
73
|
+
function getDistributionFee() external view returns (Fee memory distributionFee) {
|
74
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
75
|
+
return $._distributionFee;
|
76
|
+
}
|
77
|
+
|
78
|
+
function createDistributorType(
|
79
|
+
string memory name,
|
80
|
+
UFixed minDiscountPercentage,
|
81
|
+
UFixed maxDiscountPercentage,
|
82
|
+
UFixed commissionPercentage,
|
83
|
+
uint32 maxReferralCount,
|
84
|
+
uint32 maxReferralLifetime,
|
85
|
+
bool allowSelfReferrals,
|
86
|
+
bool allowRenewals,
|
87
|
+
bytes memory data
|
88
|
+
)
|
89
|
+
public
|
90
|
+
returns (DistributorType distributorType)
|
91
|
+
{
|
92
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
93
|
+
distributorType = $._distributionService.createDistributorType(
|
94
|
+
name,
|
95
|
+
minDiscountPercentage,
|
96
|
+
maxDiscountPercentage,
|
97
|
+
commissionPercentage,
|
98
|
+
maxReferralCount,
|
99
|
+
maxReferralLifetime,
|
100
|
+
allowSelfReferrals,
|
101
|
+
allowRenewals,
|
102
|
+
data);
|
103
|
+
}
|
104
|
+
|
105
|
+
function createDistributor(
|
106
|
+
address distributor,
|
107
|
+
DistributorType distributorType,
|
108
|
+
bytes memory data
|
109
|
+
)
|
110
|
+
public
|
111
|
+
returns(NftId distributorNftId)
|
112
|
+
{
|
113
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
114
|
+
require($._distributorNftId[distributor].eqz(), "ERROR:DST-030:ALREADY_DISTRIBUTOR");
|
115
|
+
|
116
|
+
distributorNftId = $._distributionService.createDistributor(
|
117
|
+
distributor,
|
118
|
+
distributorType,
|
119
|
+
data);
|
120
|
+
|
121
|
+
$._distributorNftId[distributor] = distributorNftId;
|
122
|
+
}
|
123
|
+
|
124
|
+
function updateDistributorType(
|
125
|
+
NftId distributorNftId,
|
126
|
+
DistributorType distributorType,
|
127
|
+
bytes memory data
|
128
|
+
)
|
129
|
+
public
|
130
|
+
// TODO figure out what we need for authz
|
131
|
+
// and add it
|
68
132
|
{
|
69
|
-
|
133
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
134
|
+
$._distributionService.updateDistributorType(
|
135
|
+
distributorNftId,
|
136
|
+
distributorType,
|
137
|
+
data);
|
138
|
+
}
|
139
|
+
|
140
|
+
/**
|
141
|
+
* @dev lets distributors create referral codes.
|
142
|
+
* referral codes need to be unique
|
143
|
+
*/
|
144
|
+
function createReferral(
|
145
|
+
NftId distributorNftId,
|
146
|
+
string memory code,
|
147
|
+
UFixed discountPercentage,
|
148
|
+
uint32 maxReferrals,
|
149
|
+
Timestamp expiryAt,
|
150
|
+
bytes memory data
|
151
|
+
)
|
152
|
+
public
|
153
|
+
// TODO add authz (only active distributor)
|
154
|
+
returns (ReferralId referralId)
|
155
|
+
{
|
156
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
157
|
+
referralId = $._distributionService.createReferral(
|
158
|
+
distributorNftId,
|
159
|
+
code,
|
160
|
+
discountPercentage,
|
161
|
+
maxReferrals,
|
162
|
+
expiryAt,
|
163
|
+
data);
|
70
164
|
}
|
71
165
|
|
72
166
|
function calculateFeeAmount(
|
@@ -81,9 +175,53 @@ contract Distribution is
|
|
81
175
|
ISetup.DistributionSetupInfo memory setupInfo = getSetupInfo();
|
82
176
|
Fee memory fee = setupInfo.distributionFee;
|
83
177
|
(feeAmount,) = FeeLib.calculateFee(fee, netPremiumAmount);
|
178
|
+
// TODO: use this?
|
179
|
+
// return _distributionService.calculateFeeAmount(referralId, premiumAmount);
|
180
|
+
}
|
181
|
+
|
182
|
+
function isDistributor(address candidate)
|
183
|
+
public
|
184
|
+
view
|
185
|
+
returns (bool)
|
186
|
+
{
|
187
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
188
|
+
return $._distributorNftId[candidate].gtz();
|
189
|
+
}
|
190
|
+
|
191
|
+
function getDistributorNftId(address distributor)
|
192
|
+
public
|
193
|
+
view
|
194
|
+
returns (NftId distributorNftId)
|
195
|
+
{
|
196
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
197
|
+
return $._distributorNftId[distributor];
|
198
|
+
}
|
199
|
+
|
200
|
+
function getDiscountPercentage(string memory referralCode)
|
201
|
+
external
|
202
|
+
view
|
203
|
+
returns (
|
204
|
+
UFixed discountPercentage,
|
205
|
+
ReferralStatus status
|
206
|
+
)
|
207
|
+
{
|
208
|
+
ReferralId referralId = getReferralId(referralCode);
|
209
|
+
return getInstanceReader().getDiscountPercentage(referralId);
|
84
210
|
}
|
85
211
|
|
86
212
|
|
213
|
+
function getReferralId(
|
214
|
+
string memory referralCode
|
215
|
+
)
|
216
|
+
public
|
217
|
+
view
|
218
|
+
returns (ReferralId referralId)
|
219
|
+
{
|
220
|
+
return ReferralLib.toReferralId(
|
221
|
+
getNftId(),
|
222
|
+
referralCode);
|
223
|
+
}
|
224
|
+
|
87
225
|
function calculateRenewalFeeAmount(
|
88
226
|
ReferralId referralId,
|
89
227
|
uint256 netPremiumAmount
|
@@ -99,13 +237,15 @@ contract Distribution is
|
|
99
237
|
|
100
238
|
function processSale(
|
101
239
|
ReferralId referralId,
|
102
|
-
uint256
|
240
|
+
uint256 premiumAmount
|
103
241
|
)
|
104
242
|
external
|
105
|
-
|
243
|
+
onlyOwner
|
244
|
+
restricted()
|
106
245
|
virtual override
|
107
246
|
{
|
108
|
-
|
247
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
248
|
+
$._distributionService.processSale(referralId, premiumAmount);
|
109
249
|
}
|
110
250
|
|
111
251
|
function processRenewal(
|
@@ -113,7 +253,8 @@ contract Distribution is
|
|
113
253
|
uint256 feeAmount
|
114
254
|
)
|
115
255
|
external
|
116
|
-
|
256
|
+
onlyOwner
|
257
|
+
restricted()
|
117
258
|
virtual override
|
118
259
|
{
|
119
260
|
// default is no action
|
@@ -125,39 +266,43 @@ contract Distribution is
|
|
125
266
|
}
|
126
267
|
|
127
268
|
function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
|
128
|
-
InstanceReader reader =
|
129
|
-
|
269
|
+
InstanceReader reader = getInstance().getInstanceReader();
|
270
|
+
setupInfo = reader.getDistributionSetupInfo(getNftId());
|
271
|
+
|
272
|
+
// fallback to initial setup info (wallet is always != address(0))
|
273
|
+
if(setupInfo.wallet == address(0)) {
|
274
|
+
setupInfo = _getInitialSetupInfo();
|
275
|
+
}
|
276
|
+
}
|
277
|
+
|
278
|
+
function _getInitialSetupInfo() internal view returns (ISetup.DistributionSetupInfo memory setupInfo) {
|
279
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
280
|
+
return ISetup.DistributionSetupInfo(
|
281
|
+
zeroNftId(),
|
282
|
+
$._tokenHandler,
|
283
|
+
$._distributionFee,
|
284
|
+
address(this)
|
285
|
+
);
|
286
|
+
}
|
287
|
+
|
288
|
+
|
289
|
+
function nftTransferFrom(address from, address to, uint256 tokenId) external virtual override (Component, ITransferInterceptor) {
|
290
|
+
// keep track of distributor nft owner
|
291
|
+
emit LogDistributorUpdated(to, msg.sender);
|
292
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
293
|
+
$._distributorNftId[from] = zeroNftId();
|
294
|
+
$._distributorNftId[to] = toNftId(tokenId);
|
130
295
|
}
|
131
296
|
|
132
297
|
|
133
298
|
/// @dev returns true iff the component needs to be called when selling/renewing policis
|
134
299
|
function isVerifying() external view returns (bool verifying) {
|
135
|
-
return
|
300
|
+
return true;
|
136
301
|
}
|
137
302
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
view
|
143
|
-
override (IRegisterable, Registerable)
|
144
|
-
returns(IRegistry.ObjectInfo memory, bytes memory)
|
145
|
-
{
|
146
|
-
(
|
147
|
-
IRegistry.ObjectInfo memory info,
|
148
|
-
) = super.getInitialInfo();
|
149
|
-
|
150
|
-
return (
|
151
|
-
info,
|
152
|
-
abi.encode(
|
153
|
-
ISetup.DistributionSetupInfo(
|
154
|
-
_productNftId,
|
155
|
-
_tokenHandler,
|
156
|
-
_initialDistributionFee,
|
157
|
-
_isVerifying,
|
158
|
-
address(this)
|
159
|
-
)
|
160
|
-
)
|
161
|
-
);
|
303
|
+
function _getDistributionStorage() private pure returns (DistributionStorage storage $) {
|
304
|
+
assembly {
|
305
|
+
$.slot := DISTRIBUTION_STORAGE_LOCATION_V1
|
306
|
+
}
|
162
307
|
}
|
163
308
|
}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
|
6
|
+
import {IInstance} from "../instance/IInstance.sol";
|
7
|
+
import {IInstanceService} from "../instance/IInstanceService.sol";
|
8
|
+
import {IProductService} from "../instance/service/IProductService.sol";
|
9
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
10
|
+
import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
|
11
|
+
import {NftId} from "../types/NftId.sol";
|
12
|
+
import {ObjectType} from "../types/ObjectType.sol";
|
13
|
+
|
14
|
+
interface IComponent is
|
15
|
+
IRegisterable,
|
16
|
+
ITransferInterceptor
|
17
|
+
{
|
18
|
+
|
19
|
+
error ErrorComponentNotChainNft(address caller);
|
20
|
+
error ErrorComponentNotProductService(address caller);
|
21
|
+
error ErrorComponentNotInstance(NftId instanceNftId, address instance);
|
22
|
+
error ErrorComponentProductNftAlreadySet();
|
23
|
+
error ErrorComponentWalletAddressZero();
|
24
|
+
error ErrorComponentWalletAddressIsSameAsCurrent(address newWallet);
|
25
|
+
error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
|
26
|
+
error ErrorComponentUnauthorized(address caller, uint64 requiredRoleIdNum);
|
27
|
+
|
28
|
+
event LogComponentWalletAddressChanged(address newWallet);
|
29
|
+
event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
|
30
|
+
|
31
|
+
function getName() external view returns (string memory name);
|
32
|
+
|
33
|
+
// TODO remove and replace with accessmanaged target locking mechanism
|
34
|
+
function lock() external;
|
35
|
+
function unlock() external;
|
36
|
+
|
37
|
+
function getToken() external view returns (IERC20Metadata token);
|
38
|
+
|
39
|
+
function setWallet(address walletAddress) external;
|
40
|
+
function getWallet() external view returns (address walletAddress);
|
41
|
+
|
42
|
+
function isNftInterceptor() external view returns(bool isInterceptor);
|
43
|
+
|
44
|
+
function getInstance() external view returns (IInstance instance);
|
45
|
+
|
46
|
+
/// @dev returns the service address for the specified domain
|
47
|
+
/// gets address via lookup from registry using the major version form the linked instance
|
48
|
+
function getServiceAddress(ObjectType domain) external view returns (address service);
|
49
|
+
|
50
|
+
function setProductNftId(NftId productNftId) external;
|
51
|
+
function getProductNftId() external view returns (NftId productNftId);
|
52
|
+
|
53
|
+
function getInstanceService() external view returns (IInstanceService);
|
54
|
+
function getProductService() external view returns (IProductService);
|
55
|
+
}
|
@@ -2,16 +2,62 @@
|
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
4
|
import {Fee} from "../types/Fee.sol";
|
5
|
-
import {
|
6
|
-
import {NftId} from "../types/NftId.sol";
|
5
|
+
import {IComponent} from "./IComponent.sol";
|
7
6
|
import {ISetup} from "../instance/module/ISetup.sol";
|
7
|
+
import {ReferralId, ReferralStatus} from "../types/Referral.sol";
|
8
|
+
import {NftId} from "../types/NftId.sol";
|
9
|
+
import {DistributorType} from "../types/DistributorType.sol";
|
10
|
+
import {UFixed} from "../types/UFixed.sol";
|
11
|
+
import {Timestamp} from "../types/Timestamp.sol";
|
12
|
+
|
13
|
+
interface IDistributionComponent is IComponent {
|
8
14
|
|
9
|
-
|
15
|
+
event LogDistributorUpdated(address to, address caller);
|
16
|
+
|
17
|
+
function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
|
10
18
|
|
11
19
|
function setFees(
|
12
20
|
Fee memory distributionFee
|
13
21
|
) external;
|
14
22
|
|
23
|
+
function createDistributorType(
|
24
|
+
string memory name,
|
25
|
+
UFixed minDiscountPercentage,
|
26
|
+
UFixed maxDiscountPercentage,
|
27
|
+
UFixed commissionPercentage,
|
28
|
+
uint32 maxReferralCount,
|
29
|
+
uint32 maxReferralLifetime,
|
30
|
+
bool allowSelfReferrals,
|
31
|
+
bool allowRenewals,
|
32
|
+
bytes memory data
|
33
|
+
) external returns (DistributorType distributorType);
|
34
|
+
|
35
|
+
function createDistributor(
|
36
|
+
address distributor,
|
37
|
+
DistributorType distributorType,
|
38
|
+
bytes memory data
|
39
|
+
) external returns(NftId distributorNftId);
|
40
|
+
|
41
|
+
function updateDistributorType(
|
42
|
+
NftId distributorNftId,
|
43
|
+
DistributorType distributorType,
|
44
|
+
bytes memory data
|
45
|
+
) external;
|
46
|
+
|
47
|
+
/**
|
48
|
+
* @dev lets distributors create referral codes.
|
49
|
+
* referral codes need to be unique
|
50
|
+
* distributor is identified via msg.sender.
|
51
|
+
*/
|
52
|
+
function createReferral(
|
53
|
+
NftId distributorNftId,
|
54
|
+
string memory code,
|
55
|
+
UFixed discountPercentage,
|
56
|
+
uint32 maxReferrals,
|
57
|
+
Timestamp expiryAt,
|
58
|
+
bytes memory data
|
59
|
+
) external returns (ReferralId referralId);
|
60
|
+
|
15
61
|
function calculateFeeAmount(
|
16
62
|
ReferralId referralId,
|
17
63
|
uint256 netPremiumAmount
|
@@ -36,6 +82,16 @@ interface IDistributionComponent {
|
|
36
82
|
uint256 feeAmount
|
37
83
|
) external;
|
38
84
|
|
85
|
+
function getDiscountPercentage(
|
86
|
+
string memory referralCode
|
87
|
+
) external view returns (UFixed discountPercentage, ReferralStatus status);
|
88
|
+
|
89
|
+
function getDistributionFee() external view returns (Fee memory distibutionFee);
|
90
|
+
|
91
|
+
function getReferralId(
|
92
|
+
string memory referralCode
|
93
|
+
) external returns (ReferralId referralId);
|
94
|
+
|
39
95
|
/// @dev returns true iff the referral id is valid
|
40
96
|
function referralIsValid(ReferralId referralId) external view returns (bool isValid);
|
41
97
|
|
@@ -1,43 +1,41 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {NftId} from "../types/NftId.sol";
|
5
4
|
import {Fee} from "../types/Fee.sol";
|
5
|
+
import {IComponent} from "./IComponent.sol";
|
6
|
+
import {ISetup} from "../instance/module/ISetup.sol";
|
7
|
+
import {NftId} from "../types/NftId.sol";
|
6
8
|
import {UFixed} from "../types/UFixed.sol";
|
7
9
|
|
8
|
-
|
10
|
+
/// @dev pool components hold and manage the collateral to cover active policies
|
11
|
+
/// pools come in different flavors
|
12
|
+
interface IPoolComponent is IComponent {
|
9
13
|
|
10
14
|
event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
|
11
15
|
|
16
|
+
error ErrorPoolNotPoolService(address service);
|
17
|
+
|
18
|
+
function getSetupInfo() external view returns (ISetup.PoolSetupInfo memory setupInfo);
|
19
|
+
|
12
20
|
function setFees(
|
13
21
|
Fee memory poolFee,
|
14
22
|
Fee memory stakingFee,
|
15
23
|
Fee memory performanceFee
|
16
24
|
) external;
|
17
25
|
|
18
|
-
|
19
|
-
|
20
|
-
*/
|
21
|
-
function createBundle(
|
22
|
-
Fee memory fee,
|
23
|
-
uint256 initialAmount,
|
24
|
-
uint256 lifetime,
|
25
|
-
bytes memory filter
|
26
|
-
) external returns(NftId bundleNftId);
|
27
|
-
|
26
|
+
/// @dev sets an additional bundle fee, this fee is added on top of the poolFee and deducted from the premium amounts.
|
27
|
+
/// via these fees individual bundler owner may earn income per policy in the context of peer to peer pools
|
28
28
|
function setBundleFee(
|
29
|
-
NftId
|
29
|
+
NftId bundleNftId,
|
30
30
|
Fee memory fee
|
31
31
|
) external;
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
function underwrite(
|
40
|
-
NftId policyNftId,
|
33
|
+
/// @dev this is a callback function that is called by the product service when underwriting a policy.
|
34
|
+
/// the pool has the option to check the details and object to underwriting by reverting.
|
35
|
+
/// the function is only called for "active" pools that ask to be involved/notified
|
36
|
+
/// by product related state changes.
|
37
|
+
function verifyApplication(
|
38
|
+
NftId applicationNftId,
|
41
39
|
bytes memory policyData,
|
42
40
|
bytes memory bundleFilter,
|
43
41
|
uint256 collateralizationAmount
|
@@ -47,10 +45,37 @@ interface IPoolComponent {
|
|
47
45
|
|
48
46
|
function unlockBundle(NftId bundleNftId) external;
|
49
47
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
48
|
+
/// @dev defines the multiplier to calculate the required collateral to cover a given sum insured amount
|
49
|
+
/// default implementation returns 100%
|
50
|
+
function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
|
51
|
+
|
52
|
+
/// @dev defines the amount of collateral held in the pool.
|
53
|
+
/// if the value is < 100% the pool is required to hold a policy that covers the locally missing collateral
|
54
|
+
/// default implementation returns 100%
|
55
|
+
function getRetentionLevel() external view returns (UFixed retentionLevel);
|
56
|
+
|
57
|
+
/// @dev declares if pool intercept transfers of bundle nft ids
|
58
|
+
/// - yes: pool may block transfer of bundle ownership or simply updates some bookkeeping related to bundle ownership. callback function is nftTransferFrom
|
59
|
+
/// - no: pool is not involved in transfer of bundle ownership
|
60
|
+
/// default implementation returns false (no)
|
61
|
+
function isInterceptingBundleTransfers() external view returns (bool);
|
62
|
+
|
63
|
+
/// @dev declares if pool relies on external management of collateral (yes/no):
|
64
|
+
/// - yes: underwriting of new policies does not require an actual token balance, instead it is assumed that the pool owner will manage funds externally and inject enough tokens to allow process confirmed payouts
|
65
|
+
/// - no: the pool smart contract ensures that the necessary capacity of the pool prior to underwriting.
|
66
|
+
/// default implementation returns false (no)
|
67
|
+
function isExternallyManaged() external view returns (bool);
|
68
|
+
|
69
|
+
/// @dev declares if pool component is actively involved in underwriting (yes/no):
|
70
|
+
/// - yes: verifying pools components actively confirm underwriting applications, ie the pool component logic explicitly needs to confirm the locking of collateral to cover the sum insured of the policy
|
71
|
+
/// - no: underwriting a policy does not require any interaction with the pool component if the covering bundle can provide the necessary captial
|
72
|
+
/// default implementation returnsfalse (no)
|
73
|
+
function isVerifyingApplications() external view returns (bool);
|
74
|
+
|
75
|
+
/// @dev returns true iff the policy application data in policyData matches
|
76
|
+
/// with the bundle filter criteria encoded in bundleFilter
|
77
|
+
/// this is a callback function that is only called if a pool declares itself as a verifying pool
|
78
|
+
/// default implementation returns true
|
54
79
|
function policyMatchesBundle(
|
55
80
|
bytes memory policyData,
|
56
81
|
bytes memory bundleFilter
|
@@ -59,8 +84,4 @@ interface IPoolComponent {
|
|
59
84
|
view
|
60
85
|
returns (bool isMatching);
|
61
86
|
|
62
|
-
function isConfirmingApplication() external view returns (bool isConfirmingApplication);
|
63
|
-
|
64
|
-
function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
|
65
|
-
|
66
87
|
}
|
@@ -2,11 +2,15 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {Fee} from "../types/Fee.sol";
|
5
|
+
import {IComponent} from "./IComponent.sol";
|
6
|
+
import {ISetup} from "../instance/module/ISetup.sol";
|
5
7
|
import {NftId} from "../types/NftId.sol";
|
6
8
|
import {ReferralId} from "../types/Referral.sol";
|
7
9
|
import {RiskId} from "../types/RiskId.sol";
|
8
10
|
|
9
|
-
interface IProductComponent {
|
11
|
+
interface IProductComponent is IComponent {
|
12
|
+
|
13
|
+
function getSetupInfo() external view returns (ISetup.ProductSetupInfo memory setupInfo);
|
10
14
|
|
11
15
|
function setFees(
|
12
16
|
Fee memory productFee,
|
@@ -18,8 +22,8 @@ interface IProductComponent {
|
|
18
22
|
RiskId riskId,
|
19
23
|
uint256 lifetime,
|
20
24
|
bytes memory applicationData,
|
21
|
-
|
22
|
-
|
25
|
+
NftId bundleNftId,
|
26
|
+
ReferralId referralId
|
23
27
|
) external view returns (uint256 premiumAmount);
|
24
28
|
|
25
29
|
function calculateNetPremium(
|