@etherisc/gif-next 0.0.2-4e6a781-730 → 0.0.2-4e99ed1-062
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -13
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +280 -94
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +632 -152
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +208 -58
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +407 -86
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +446 -151
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +212 -130
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +591 -185
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +384 -166
- 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 +845 -458
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +240 -193
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1013 -783
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +463 -167
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +136 -228
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +455 -300
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +370 -102
- 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 +181 -177
- 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 +58 -75
- 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 +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1039 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +673 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +474 -345
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +363 -91
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +817 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +641 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1224 -198
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +453 -85
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +622 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +223 -279
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +475 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +796 -147
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +91 -251
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +476 -126
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +73 -154
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +250 -385
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +317 -125
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +634 -203
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +317 -93
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +217 -233
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +309 -93
- 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 +34 -2
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +75 -190
- 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 +47 -15
- 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 +191 -233
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -94
- 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 +141 -37
- 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 -29
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +73 -154
- 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 +113 -33
- 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 -74
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +125 -55
- 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 +178 -158
- 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 +2 -152
- 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 +125 -55
- 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 +195 -207
- 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 +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/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -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 +100 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +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 +100 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/Component.sol +115 -78
- package/contracts/components/Distribution.sol +187 -57
- package/contracts/components/IComponent.sol +50 -17
- package/contracts/components/IDistributionComponent.sol +39 -15
- package/contracts/components/IPoolComponent.sol +84 -31
- package/contracts/components/IProductComponent.sol +3 -2
- package/contracts/components/Pool.sol +224 -148
- package/contracts/components/Product.sol +97 -69
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +7 -5
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +36 -10
- package/contracts/instance/IInstanceService.sol +35 -4
- package/contracts/instance/Instance.sol +101 -43
- package/contracts/instance/InstanceAccessManager.sol +389 -160
- package/contracts/instance/InstanceReader.sol +8 -10
- package/contracts/instance/InstanceService.sol +243 -190
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +13 -5
- package/contracts/instance/base/Lifecycle.sol +11 -2
- package/contracts/instance/module/IAccess.sol +22 -16
- 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 +30 -3
- package/contracts/instance/module/ISetup.sol +7 -20
- package/contracts/instance/service/ApplicationService.sol +350 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +215 -77
- package/contracts/instance/service/BundleServiceManager.sol +1 -1
- package/contracts/instance/service/ClaimService.sol +151 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +348 -19
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +70 -21
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +87 -0
- package/contracts/instance/service/IPolicyService.sol +27 -49
- package/contracts/instance/service/IPoolService.sol +82 -3
- package/contracts/instance/service/PolicyService.sol +145 -321
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +214 -21
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/ProductService.sol +34 -58
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +5 -2
- package/contracts/registry/IRegistryService.sol +14 -11
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +43 -28
- package/contracts/registry/RegistryService.sol +70 -50
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +32 -40
- package/contracts/registry/TokenRegistry.sol +16 -12
- 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 +3 -3
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +4 -4
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +66 -85
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +7 -19
- package/contracts/shared/RegistryLinked.sol +48 -0
- package/contracts/shared/Service.sol +32 -20
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +60 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +10 -5
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +16 -9
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +1 -0
- package/contracts/types/Timestamp.sol +13 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +3 -3
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
- package/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
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
|
-
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
5
|
-
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
|
6
4
|
import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
|
|
5
|
+
import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
|
|
6
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
|
7
|
+
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
7
8
|
|
|
8
9
|
import {IComponent} from "./IComponent.sol";
|
|
10
|
+
import {IComponents} from "../instance/module/IComponents.sol";
|
|
9
11
|
import {IProductService} from "../instance/service/IProductService.sol";
|
|
10
12
|
import {IInstanceService} from "../instance/IInstanceService.sol";
|
|
11
13
|
import {IInstance} from "../instance/IInstance.sol";
|
|
12
14
|
import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
|
|
15
|
+
import {InstanceReader} from "../instance/InstanceReader.sol";
|
|
13
16
|
import {IRegistry} from "../registry/IRegistry.sol";
|
|
14
17
|
import {NftId} from "../types/NftId.sol";
|
|
15
18
|
import {ObjectType, INSTANCE, PRODUCT} from "../types/ObjectType.sol";
|
|
@@ -17,9 +20,9 @@ import {VersionPart} from "../types/Version.sol";
|
|
|
17
20
|
import {Registerable} from "../shared/Registerable.sol";
|
|
18
21
|
import {RoleId, RoleIdLib} from "../types/RoleId.sol";
|
|
19
22
|
import {IAccess} from "../instance/module/IAccess.sol";
|
|
23
|
+
import {VersionPart} from "../types/Version.sol";
|
|
20
24
|
|
|
21
25
|
// TODO discuss to inherit from oz accessmanaged
|
|
22
|
-
// TODO make contract upgradeable
|
|
23
26
|
// then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
|
|
24
27
|
// same pattern as for Service which is also upgradeable
|
|
25
28
|
abstract contract Component is
|
|
@@ -28,47 +31,32 @@ abstract contract Component is
|
|
|
28
31
|
AccessManagedUpgradeable
|
|
29
32
|
{
|
|
30
33
|
// keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Component.sol")) - 1)) & ~bytes32(uint256(0xff));
|
|
31
|
-
bytes32 public constant
|
|
34
|
+
bytes32 public constant COMPONENT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
|
|
32
35
|
|
|
33
36
|
struct ComponentStorage {
|
|
34
|
-
IInstance _instance; // instance for this component
|
|
35
37
|
string _name; // unique (per instance) component name
|
|
36
38
|
IERC20Metadata _token; // token for this component
|
|
39
|
+
IInstance _instance; // instance for this component
|
|
37
40
|
address _wallet; // wallet for this component (default = component contract itself)
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
InstanceReader _instanceReader; // instance reader for this component
|
|
42
|
+
bool _isNftInterceptor; // declares if component is involved in nft transfers
|
|
40
43
|
NftId _productNftId; // only relevant for components that are linked to a aproduct
|
|
41
|
-
IProductService _productService; // product service for component, might not be relevant for some component types (eg oracles)
|
|
42
44
|
}
|
|
43
45
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
revert ErrorComponentNotProductService(msg.sender);
|
|
46
|
+
function _getComponentStorage() private pure returns (ComponentStorage storage $) {
|
|
47
|
+
assembly {
|
|
48
|
+
$.slot := COMPONENT_LOCATION_V1
|
|
48
49
|
}
|
|
49
|
-
_;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
constructor(
|
|
53
|
-
address registry,
|
|
54
|
-
NftId instanceNftId,
|
|
55
|
-
string memory name,
|
|
56
|
-
address token,
|
|
57
|
-
ObjectType componentType,
|
|
58
|
-
bool isInterceptor,
|
|
59
|
-
address initialOwner,
|
|
60
|
-
bytes memory data
|
|
61
|
-
) {
|
|
62
|
-
_initializeComponent(registry, instanceNftId, name, token, componentType, isInterceptor, initialOwner, data);
|
|
63
50
|
}
|
|
64
51
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
52
|
+
modifier onlyChainNft() {
|
|
53
|
+
if(msg.sender != getRegistry().getChainNftAddress()) {
|
|
54
|
+
revert ErrorComponentNotChainNft(msg.sender);
|
|
68
55
|
}
|
|
56
|
+
_;
|
|
69
57
|
}
|
|
70
58
|
|
|
71
|
-
function
|
|
59
|
+
function initializeComponent(
|
|
72
60
|
address registry,
|
|
73
61
|
NftId instanceNftId,
|
|
74
62
|
string memory name,
|
|
@@ -76,70 +64,52 @@ abstract contract Component is
|
|
|
76
64
|
ObjectType componentType,
|
|
77
65
|
bool isInterceptor,
|
|
78
66
|
address initialOwner,
|
|
79
|
-
bytes memory data
|
|
67
|
+
bytes memory registryData // writeonly data that will saved in the object info record of the registry
|
|
80
68
|
)
|
|
81
|
-
|
|
82
|
-
initializer
|
|
69
|
+
public
|
|
83
70
|
virtual
|
|
71
|
+
onlyInitializing()
|
|
84
72
|
{
|
|
85
|
-
|
|
86
|
-
_initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, data);
|
|
87
|
-
|
|
88
|
-
// set unique name of component
|
|
89
|
-
$._name = name;
|
|
73
|
+
initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, registryData);
|
|
90
74
|
|
|
91
75
|
// set and check linked instance
|
|
92
|
-
|
|
93
|
-
$._instance = IInstance(
|
|
76
|
+
ComponentStorage storage $ = _getComponentStorage();
|
|
77
|
+
$._instance = IInstance(
|
|
78
|
+
getRegistry().getObjectInfo(instanceNftId).objectAddress);
|
|
79
|
+
|
|
94
80
|
if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
|
|
95
|
-
revert ErrorComponentNotInstance(instanceNftId
|
|
81
|
+
revert ErrorComponentNotInstance(instanceNftId);
|
|
96
82
|
}
|
|
97
83
|
|
|
98
84
|
// initialize AccessManagedUpgradeable
|
|
99
85
|
__AccessManaged_init($._instance.authority());
|
|
100
86
|
|
|
101
|
-
// set
|
|
102
|
-
|
|
103
|
-
$.
|
|
104
|
-
$.
|
|
105
|
-
|
|
106
|
-
// set wallet and token
|
|
87
|
+
// set component state
|
|
88
|
+
$._name = name;
|
|
89
|
+
$._isNftInterceptor = isInterceptor;
|
|
90
|
+
$._instanceReader = $._instance.getInstanceReader();
|
|
107
91
|
$._wallet = address(this);
|
|
108
92
|
$._token = IERC20Metadata(token);
|
|
109
93
|
|
|
110
|
-
|
|
94
|
+
registerInterface(type(IAccessManaged).interfaceId);
|
|
95
|
+
registerInterface(type(IComponent).interfaceId);
|
|
111
96
|
}
|
|
112
97
|
|
|
113
98
|
function lock() external onlyOwner override {
|
|
114
|
-
|
|
99
|
+
IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
|
|
115
100
|
}
|
|
116
101
|
|
|
117
102
|
function unlock() external onlyOwner override {
|
|
118
|
-
|
|
103
|
+
IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
|
|
119
104
|
}
|
|
120
105
|
|
|
121
|
-
|
|
122
|
-
function setProductNftId(NftId productNftId)
|
|
106
|
+
function setWallet(address newWallet)
|
|
123
107
|
external
|
|
124
108
|
override
|
|
125
|
-
|
|
109
|
+
onlyOwner
|
|
126
110
|
{
|
|
127
111
|
ComponentStorage storage $ = _getComponentStorage();
|
|
128
112
|
|
|
129
|
-
if($._productNftId.gtz()) {
|
|
130
|
-
revert ErrorComponentProductNftAlreadySet();
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
$._productNftId = productNftId;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/// @dev Sets the wallet address for the component.
|
|
137
|
-
/// if the current wallet has tokens, these will be transferred.
|
|
138
|
-
/// if the new wallet address is externally owned, an approval from the
|
|
139
|
-
/// owner of the external wallet for the component to move all tokens must exist.
|
|
140
|
-
function setWallet(address newWallet) external override onlyOwner {
|
|
141
|
-
ComponentStorage storage $ = _getComponentStorage();
|
|
142
|
-
|
|
143
113
|
address currentWallet = $._wallet;
|
|
144
114
|
uint256 currentBalance = $._token.balanceOf(currentWallet);
|
|
145
115
|
|
|
@@ -147,8 +117,9 @@ abstract contract Component is
|
|
|
147
117
|
if (newWallet == address(0)) {
|
|
148
118
|
revert ErrorComponentWalletAddressZero();
|
|
149
119
|
}
|
|
120
|
+
|
|
150
121
|
if (newWallet == currentWallet) {
|
|
151
|
-
revert ErrorComponentWalletAddressIsSameAsCurrent(
|
|
122
|
+
revert ErrorComponentWalletAddressIsSameAsCurrent();
|
|
152
123
|
}
|
|
153
124
|
|
|
154
125
|
if (currentBalance > 0) {
|
|
@@ -165,7 +136,7 @@ abstract contract Component is
|
|
|
165
136
|
|
|
166
137
|
// effects
|
|
167
138
|
$._wallet = newWallet;
|
|
168
|
-
emit LogComponentWalletAddressChanged(newWallet);
|
|
139
|
+
emit LogComponentWalletAddressChanged(currentWallet, newWallet);
|
|
169
140
|
|
|
170
141
|
// interactions
|
|
171
142
|
if (currentBalance > 0) {
|
|
@@ -180,11 +151,44 @@ abstract contract Component is
|
|
|
180
151
|
}
|
|
181
152
|
}
|
|
182
153
|
|
|
183
|
-
function
|
|
184
|
-
|
|
185
|
-
view
|
|
154
|
+
function setProductNftId(NftId productNftId)
|
|
155
|
+
external
|
|
186
156
|
override
|
|
187
|
-
|
|
157
|
+
{
|
|
158
|
+
ComponentStorage storage $ = _getComponentStorage();
|
|
159
|
+
|
|
160
|
+
// verify caller is product service
|
|
161
|
+
if(msg.sender != _getServiceAddress(PRODUCT())) {
|
|
162
|
+
revert ErrorComponentNotProductService(msg.sender);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// verify component is not yet linked to a product
|
|
166
|
+
if($._productNftId.gtz()) {
|
|
167
|
+
revert ErrorComponentProductNftAlreadySet();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
$._productNftId = productNftId;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function nftMint(address to, uint256 tokenId)
|
|
174
|
+
external
|
|
175
|
+
virtual
|
|
176
|
+
onlyChainNft
|
|
177
|
+
{}
|
|
178
|
+
|
|
179
|
+
/// @dev callback function for nft transfers
|
|
180
|
+
/// may only be called by chain nft contract.
|
|
181
|
+
/// do not override this function to implement business logic for handling transfers
|
|
182
|
+
/// override internal function _nftTransferFrom instead
|
|
183
|
+
function nftTransferFrom(address from, address to, uint256 tokenId)
|
|
184
|
+
external
|
|
185
|
+
virtual
|
|
186
|
+
onlyChainNft
|
|
187
|
+
{
|
|
188
|
+
_nftTransferFrom(from, to, tokenId);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function getWallet() public view override returns (address walletAddress)
|
|
188
192
|
{
|
|
189
193
|
return _getComponentStorage()._wallet;
|
|
190
194
|
}
|
|
@@ -193,6 +197,10 @@ abstract contract Component is
|
|
|
193
197
|
return _getComponentStorage()._token;
|
|
194
198
|
}
|
|
195
199
|
|
|
200
|
+
function isNftInterceptor() public view override returns(bool isInterceptor) {
|
|
201
|
+
return _getComponentStorage()._isNftInterceptor;
|
|
202
|
+
}
|
|
203
|
+
|
|
196
204
|
function getInstance() public view override returns (IInstance instance) {
|
|
197
205
|
return _getComponentStorage()._instance;
|
|
198
206
|
}
|
|
@@ -205,12 +213,41 @@ abstract contract Component is
|
|
|
205
213
|
return _getComponentStorage()._productNftId;
|
|
206
214
|
}
|
|
207
215
|
|
|
208
|
-
function
|
|
209
|
-
|
|
216
|
+
function getComponentInfo() public view returns (IComponents.ComponentInfo memory info) {
|
|
217
|
+
info = _getInstanceReader().getComponentInfo(getNftId());
|
|
218
|
+
|
|
219
|
+
// fallback to initial info (wallet is always != address(0))
|
|
220
|
+
if(info.wallet == address(0)) {
|
|
221
|
+
info = _getInitialInfo();
|
|
222
|
+
}
|
|
210
223
|
}
|
|
211
224
|
|
|
212
|
-
|
|
213
|
-
|
|
225
|
+
/// @dev defines initial component specification
|
|
226
|
+
/// overwrite this function according to your use case
|
|
227
|
+
function _getInitialInfo()
|
|
228
|
+
internal
|
|
229
|
+
view
|
|
230
|
+
virtual
|
|
231
|
+
returns (IComponents.ComponentInfo memory info)
|
|
232
|
+
{ }
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
/// @dev internal function for nft transfers.
|
|
236
|
+
/// handling logic that deals with nft transfers need to overwrite this function
|
|
237
|
+
function _nftTransferFrom(address from, address to, uint256 tokenId)
|
|
238
|
+
internal
|
|
239
|
+
virtual
|
|
240
|
+
{ }
|
|
241
|
+
|
|
242
|
+
/// @dev returns reader for linked instance
|
|
243
|
+
function _getInstanceReader() internal view returns (InstanceReader reader) {
|
|
244
|
+
return _getComponentStorage()._instanceReader;
|
|
214
245
|
}
|
|
215
246
|
|
|
216
|
-
|
|
247
|
+
/// @dev returns the service address for the specified domain
|
|
248
|
+
/// gets address via lookup from registry using the major version form the linked instance
|
|
249
|
+
function _getServiceAddress(ObjectType domain) internal view returns (address service) {
|
|
250
|
+
VersionPart majorVersion = _getComponentStorage()._instance.getMajorVersion();
|
|
251
|
+
return getRegistry().getServiceAddress(domain, majorVersion);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
@@ -4,10 +4,11 @@ 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
10
|
import {Component} from "./Component.sol";
|
|
11
|
+
import {IDistribution} from "../instance/module/IDistribution.sol";
|
|
11
12
|
import {IDistributionComponent} from "./IDistributionComponent.sol";
|
|
12
13
|
import {IRegistry} from "../registry/IRegistry.sol";
|
|
13
14
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
|
@@ -15,73 +16,200 @@ import {ISetup} from "../instance/module/ISetup.sol";
|
|
|
15
16
|
import {Registerable} from "../shared/Registerable.sol";
|
|
16
17
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
|
17
18
|
import {InstanceReader} from "../instance/InstanceReader.sol";
|
|
19
|
+
import {UFixed} from "../types/UFixed.sol";
|
|
20
|
+
import {DistributorType} from "../types/DistributorType.sol";
|
|
21
|
+
import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
|
|
22
|
+
import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
|
|
23
|
+
|
|
18
24
|
|
|
19
25
|
abstract contract Distribution is
|
|
20
26
|
Component,
|
|
21
27
|
IDistributionComponent
|
|
22
28
|
{
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
bool internal _isVerifying;
|
|
26
|
-
Fee internal _initialDistributionFee;
|
|
27
|
-
|
|
28
|
-
TokenHandler internal _tokenHandler;
|
|
29
|
+
// keccak256(abi.encode(uint256(keccak256("etherisc.storage.Distribution")) - 1)) & ~bytes32(uint256(0xff));
|
|
30
|
+
bytes32 public constant DISTRIBUTION_STORAGE_LOCATION_V1 = 0xaab7c5ea03d290056d6c060e0833d3ebcbe647f7694616a2ec52738a64b2f900;
|
|
29
31
|
|
|
30
|
-
|
|
32
|
+
struct DistributionStorage {
|
|
33
|
+
Fee _minDistributionOwnerFee;
|
|
34
|
+
Fee _distributionFee;
|
|
35
|
+
TokenHandler _tokenHandler;
|
|
36
|
+
IDistributionService _distributionService;
|
|
37
|
+
mapping(address distributor => NftId distributorNftId) _distributorNftId;
|
|
38
|
+
}
|
|
31
39
|
|
|
32
|
-
|
|
40
|
+
function initializeDistribution(
|
|
33
41
|
address registry,
|
|
34
42
|
NftId instanceNftId,
|
|
35
|
-
// TODO refactor into tokenNftId
|
|
36
43
|
string memory name,
|
|
37
44
|
address token,
|
|
38
|
-
|
|
45
|
+
Fee memory minDistributionOwnerFee,
|
|
39
46
|
Fee memory distributionFee,
|
|
40
47
|
address initialOwner,
|
|
41
|
-
bytes memory data
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
true,
|
|
48
|
-
initialOwner,
|
|
49
|
-
data
|
|
50
|
-
) {
|
|
51
|
-
_isVerifying = verifying;
|
|
52
|
-
_initialDistributionFee = distributionFee;
|
|
48
|
+
bytes memory registryData // writeonly data that will saved in the object info record of the registry
|
|
49
|
+
)
|
|
50
|
+
public
|
|
51
|
+
virtual
|
|
52
|
+
onlyInitializing()
|
|
53
|
+
{
|
|
54
|
+
initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, registryData);
|
|
53
55
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
|
57
|
+
// TODO add validation
|
|
58
|
+
$._minDistributionOwnerFee = minDistributionOwnerFee;
|
|
59
|
+
$._distributionFee = distributionFee;
|
|
60
|
+
$._tokenHandler = new TokenHandler(token);
|
|
61
|
+
$._distributionService = getInstance().getDistributionService();
|
|
56
62
|
|
|
57
|
-
|
|
63
|
+
registerInterface(type(IDistributionComponent).interfaceId);
|
|
58
64
|
}
|
|
59
65
|
|
|
60
66
|
function setFees(
|
|
67
|
+
Fee memory minDistributionOwnerFee,
|
|
61
68
|
Fee memory distributionFee
|
|
62
69
|
)
|
|
63
70
|
external
|
|
64
71
|
override
|
|
72
|
+
onlyOwner
|
|
65
73
|
restricted()
|
|
66
74
|
{
|
|
67
|
-
_distributionService.setFees(distributionFee);
|
|
75
|
+
_getDistributionStorage()._distributionService.setFees(minDistributionOwnerFee, distributionFee);
|
|
68
76
|
}
|
|
69
77
|
|
|
70
|
-
function
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
function getDistributionFee() external view returns (Fee memory distributionFee) {
|
|
79
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
|
80
|
+
return $._distributionFee;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function createDistributorType(
|
|
84
|
+
string memory name,
|
|
85
|
+
UFixed minDiscountPercentage,
|
|
86
|
+
UFixed maxDiscountPercentage,
|
|
87
|
+
UFixed commissionPercentage,
|
|
88
|
+
uint32 maxReferralCount,
|
|
89
|
+
uint32 maxReferralLifetime,
|
|
90
|
+
bool allowSelfReferrals,
|
|
91
|
+
bool allowRenewals,
|
|
92
|
+
bytes memory data
|
|
73
93
|
)
|
|
94
|
+
public
|
|
95
|
+
returns (DistributorType distributorType)
|
|
96
|
+
{
|
|
97
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
|
98
|
+
distributorType = $._distributionService.createDistributorType(
|
|
99
|
+
name,
|
|
100
|
+
minDiscountPercentage,
|
|
101
|
+
maxDiscountPercentage,
|
|
102
|
+
commissionPercentage,
|
|
103
|
+
maxReferralCount,
|
|
104
|
+
maxReferralLifetime,
|
|
105
|
+
allowSelfReferrals,
|
|
106
|
+
allowRenewals,
|
|
107
|
+
data);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function createDistributor(
|
|
111
|
+
address distributor,
|
|
112
|
+
DistributorType distributorType,
|
|
113
|
+
bytes memory data
|
|
114
|
+
)
|
|
115
|
+
public
|
|
116
|
+
returns(NftId distributorNftId)
|
|
117
|
+
{
|
|
118
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
|
119
|
+
require($._distributorNftId[distributor].eqz(), "ERROR:DST-030:ALREADY_DISTRIBUTOR");
|
|
120
|
+
|
|
121
|
+
distributorNftId = $._distributionService.createDistributor(
|
|
122
|
+
distributor,
|
|
123
|
+
distributorType,
|
|
124
|
+
data);
|
|
125
|
+
|
|
126
|
+
$._distributorNftId[distributor] = distributorNftId;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function updateDistributorType(
|
|
130
|
+
NftId distributorNftId,
|
|
131
|
+
DistributorType distributorType,
|
|
132
|
+
bytes memory data
|
|
133
|
+
)
|
|
134
|
+
public
|
|
135
|
+
// TODO figure out what we need for authz
|
|
136
|
+
// and add it
|
|
137
|
+
{
|
|
138
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
|
139
|
+
$._distributionService.updateDistributorType(
|
|
140
|
+
distributorNftId,
|
|
141
|
+
distributorType,
|
|
142
|
+
data);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* @dev lets distributors create referral codes.
|
|
147
|
+
* referral codes need to be unique
|
|
148
|
+
*/
|
|
149
|
+
function _createReferral(
|
|
150
|
+
NftId distributorNftId,
|
|
151
|
+
string memory code,
|
|
152
|
+
UFixed discountPercentage,
|
|
153
|
+
uint32 maxReferrals,
|
|
154
|
+
Timestamp expiryAt,
|
|
155
|
+
bytes memory data
|
|
156
|
+
)
|
|
157
|
+
internal
|
|
158
|
+
returns (ReferralId referralId)
|
|
159
|
+
{
|
|
160
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
|
161
|
+
referralId = $._distributionService.createReferral(
|
|
162
|
+
distributorNftId,
|
|
163
|
+
code,
|
|
164
|
+
discountPercentage,
|
|
165
|
+
maxReferrals,
|
|
166
|
+
expiryAt,
|
|
167
|
+
data);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function isDistributor(address candidate)
|
|
171
|
+
public
|
|
172
|
+
view
|
|
173
|
+
returns (bool)
|
|
174
|
+
{
|
|
175
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
|
176
|
+
return $._distributorNftId[candidate].gtz();
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function getDistributorNftId(address distributor)
|
|
180
|
+
public
|
|
181
|
+
view
|
|
182
|
+
returns (NftId distributorNftId)
|
|
183
|
+
{
|
|
184
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
|
185
|
+
return $._distributorNftId[distributor];
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function getDiscountPercentage(string memory referralCode)
|
|
74
189
|
external
|
|
75
190
|
view
|
|
76
|
-
|
|
77
|
-
|
|
191
|
+
returns (
|
|
192
|
+
UFixed discountPercentage,
|
|
193
|
+
ReferralStatus status
|
|
194
|
+
)
|
|
78
195
|
{
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
(feeAmount,) = FeeLib.calculateFee(fee, netPremiumAmount);
|
|
196
|
+
ReferralId referralId = getReferralId(referralCode);
|
|
197
|
+
return _getInstanceReader().getDiscountPercentage(referralId);
|
|
82
198
|
}
|
|
83
199
|
|
|
84
200
|
|
|
201
|
+
function getReferralId(
|
|
202
|
+
string memory referralCode
|
|
203
|
+
)
|
|
204
|
+
public
|
|
205
|
+
view
|
|
206
|
+
returns (ReferralId referralId)
|
|
207
|
+
{
|
|
208
|
+
return ReferralLib.toReferralId(
|
|
209
|
+
getNftId(),
|
|
210
|
+
referralCode);
|
|
211
|
+
}
|
|
212
|
+
|
|
85
213
|
function calculateRenewalFeeAmount(
|
|
86
214
|
ReferralId referralId,
|
|
87
215
|
uint256 netPremiumAmount
|
|
@@ -95,33 +223,18 @@ abstract contract Distribution is
|
|
|
95
223
|
return 0 * netPremiumAmount;
|
|
96
224
|
}
|
|
97
225
|
|
|
98
|
-
function processSale(
|
|
99
|
-
ReferralId referralId,
|
|
100
|
-
uint256 feeAmount
|
|
101
|
-
)
|
|
102
|
-
external
|
|
103
|
-
restricted()
|
|
104
|
-
virtual override
|
|
105
|
-
{
|
|
106
|
-
// default is no action
|
|
107
|
-
}
|
|
108
|
-
|
|
109
226
|
function processRenewal(
|
|
110
227
|
ReferralId referralId,
|
|
111
228
|
uint256 feeAmount
|
|
112
229
|
)
|
|
113
230
|
external
|
|
231
|
+
onlyOwner
|
|
114
232
|
restricted()
|
|
115
233
|
virtual override
|
|
116
234
|
{
|
|
117
235
|
// default is no action
|
|
118
236
|
}
|
|
119
237
|
|
|
120
|
-
function referralIsValid(ReferralId referralId) external view returns (bool isValid) {
|
|
121
|
-
// default is invalid
|
|
122
|
-
return false;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
238
|
function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
|
|
126
239
|
InstanceReader reader = getInstance().getInstanceReader();
|
|
127
240
|
setupInfo = reader.getDistributionSetupInfo(getNftId());
|
|
@@ -133,18 +246,35 @@ abstract contract Distribution is
|
|
|
133
246
|
}
|
|
134
247
|
|
|
135
248
|
function _getInitialSetupInfo() internal view returns (ISetup.DistributionSetupInfo memory setupInfo) {
|
|
249
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
|
136
250
|
return ISetup.DistributionSetupInfo(
|
|
137
251
|
zeroNftId(),
|
|
138
|
-
_tokenHandler,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
address(this)
|
|
252
|
+
$._tokenHandler,
|
|
253
|
+
$._minDistributionOwnerFee,
|
|
254
|
+
$._distributionFee,
|
|
255
|
+
address(this),
|
|
256
|
+
0
|
|
142
257
|
);
|
|
143
258
|
}
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
function _nftTransferFrom(address from, address to, uint256 tokenId) internal virtual override {
|
|
262
|
+
// keep track of distributor nft owner
|
|
263
|
+
emit LogDistributorUpdated(to, msg.sender);
|
|
264
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
|
265
|
+
$._distributorNftId[from] = zeroNftId();
|
|
266
|
+
$._distributorNftId[to] = toNftId(tokenId);
|
|
267
|
+
}
|
|
144
268
|
|
|
145
269
|
|
|
146
270
|
/// @dev returns true iff the component needs to be called when selling/renewing policis
|
|
147
271
|
function isVerifying() external view returns (bool verifying) {
|
|
148
|
-
return
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function _getDistributionStorage() private pure returns (DistributionStorage storage $) {
|
|
276
|
+
assembly {
|
|
277
|
+
$.slot := DISTRIBUTION_STORAGE_LOCATION_V1
|
|
278
|
+
}
|
|
149
279
|
}
|
|
150
280
|
}
|