@etherisc/gif-next 0.0.2-f08d150-296 → 0.0.2-f29e479-370
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 +314 -11
- 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 +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +1346 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/IComponent.sol/IComponent.json} +284 -223
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +900 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +607 -76
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +587 -60
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +1092 -157
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +1028 -87
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1713 -1095
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +509 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2449 -1257
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +984 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1386 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1046 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +693 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +552 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +45 -127
- 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 +55 -245
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
- package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +869 -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 +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1096 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1318 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +769 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +473 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +633 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +671 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +583 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +136 -165
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +139 -232
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1120 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +717 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +416 -160
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +649 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +401 -297
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +466 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +890 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +470 -103
- 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 +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1177 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
- 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 +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
- 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 +4 -0
- package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → shared/INftOwnable.sol/INftOwnable.json} +38 -74
- 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 +100 -33
- 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 +4 -0
- package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/IService.sol/IService.json} +121 -152
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +16 -125
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +251 -0
- 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 +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +582 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +256 -25
- 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 +4 -0
- package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → shared/Service.sol/Service.json} +220 -159
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +29 -115
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +272 -26
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +281 -139
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
- 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 +38 -140
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
- 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 +4 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
- 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 +26 -3
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
- 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 +4 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
- 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 +15 -2
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/{experiment/types/TypeB.sol/TypeBLib.json → types/UFixed.sol/MathLib.json} +4 -4
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/Component.sol +241 -0
- package/contracts/components/Distribution.sol +287 -0
- package/contracts/components/IComponent.sol +54 -0
- package/contracts/components/IDistributionComponent.sol +92 -0
- package/contracts/components/IPoolComponent.sol +65 -35
- package/contracts/components/IProductComponent.sol +29 -9
- package/contracts/components/Pool.sol +180 -100
- package/contracts/components/Product.sol +210 -42
- package/contracts/instance/BundleManager.sol +125 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +85 -45
- package/contracts/instance/IInstanceService.sol +59 -0
- package/contracts/instance/Instance.sol +276 -53
- package/contracts/instance/InstanceAccessManager.sol +297 -0
- package/contracts/instance/InstanceReader.sol +293 -0
- package/contracts/instance/InstanceService.sol +476 -0
- package/contracts/instance/InstanceServiceManager.sol +54 -0
- package/contracts/instance/ObjectManager.sol +84 -0
- package/contracts/instance/base/ComponentService.sol +134 -0
- package/contracts/instance/base/IKeyValueStore.sol +13 -13
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +53 -37
- package/contracts/instance/base/Lifecycle.sol +16 -11
- package/contracts/instance/module/IAccess.sol +47 -0
- package/contracts/instance/module/IBundle.sol +20 -0
- package/contracts/instance/module/IDistribution.sol +40 -0
- package/contracts/instance/module/IPolicy.sol +47 -0
- package/contracts/instance/module/IRisk.sol +11 -0
- package/contracts/instance/module/ISetup.sol +48 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ApplicationService.sol +268 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +298 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ClaimService.sol +151 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +375 -0
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +54 -0
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +83 -0
- package/contracts/instance/service/IPolicyService.sol +89 -0
- package/contracts/instance/service/IPoolService.sol +8 -18
- package/contracts/instance/service/IProductService.sol +21 -39
- package/contracts/instance/service/PolicyService.sol +476 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +78 -92
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +168 -289
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +79 -36
- package/contracts/registry/IRegistry.sol +66 -24
- package/contracts/registry/IRegistryService.sol +67 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +366 -283
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +283 -0
- package/contracts/registry/RegistryServiceManager.sol +62 -0
- package/contracts/registry/ReleaseManager.sol +322 -0
- package/contracts/registry/TokenRegistry.sol +116 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +14 -8
- package/contracts/shared/INftOwnable.sol +23 -0
- package/contracts/shared/IPolicyHolder.sol +26 -0
- package/contracts/shared/IRegisterable.sol +10 -19
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +18 -0
- package/contracts/shared/IVersionable.sol +38 -37
- package/contracts/shared/NftOwnable.sol +120 -0
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +169 -0
- package/contracts/shared/Registerable.sol +54 -66
- package/contracts/shared/RegistryLinked.sol +48 -0
- package/contracts/shared/Service.sol +58 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +38 -68
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestRoleId.sol +1 -1
- package/contracts/test/TestService.sol +7 -14
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +10 -5
- package/contracts/types/Key32.sol +8 -3
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +55 -14
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +62 -10
- package/contracts/types/StateId.sol +5 -1
- package/contracts/types/Timestamp.sol +7 -3
- package/contracts/types/UFixed.sol +128 -12
- package/contracts/types/Version.sol +13 -1
- package/package.json +6 -5
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -174
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- 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/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +0 -300
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -63
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -300
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +0 -326
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -296
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -296
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -523
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
- package/contracts/components/BaseComponent.sol +0 -88
- package/contracts/components/IBaseComponent.sol +0 -19
- 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/README.md +0 -112
- 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
- package/contracts/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/base/ComponentServiceBase.sol +0 -42
- package/contracts/instance/base/IInstanceBase.sol +0 -14
- package/contracts/instance/base/IService.sol +0 -15
- package/contracts/instance/base/InstanceBase.sol +0 -80
- package/contracts/instance/base/ModuleBase.sol +0 -52
- package/contracts/instance/base/ServiceBase.sol +0 -37
- package/contracts/instance/module/access/Access.sol +0 -149
- package/contracts/instance/module/access/IAccess.sol +0 -53
- package/contracts/instance/module/bundle/BundleModule.sol +0 -136
- package/contracts/instance/module/bundle/IBundle.sol +0 -58
- package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
- package/contracts/instance/module/compensation/ICompensation.sol +0 -10
- package/contracts/instance/module/component/ComponentModule.sol +0 -95
- package/contracts/instance/module/component/IComponent.sol +0 -53
- package/contracts/instance/module/policy/IPolicy.sol +0 -60
- package/contracts/instance/module/policy/PolicyModule.sol +0 -76
- package/contracts/instance/module/pool/IPoolModule.sol +0 -41
- package/contracts/instance/module/pool/PoolModule.sol +0 -87
- package/contracts/instance/module/risk/IRisk.sol +0 -10
- package/contracts/instance/module/risk/RiskModule.sol +0 -8
- package/contracts/instance/module/treasury/ITreasury.sol +0 -103
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
- package/contracts/instance/service/ComponentOwnerService.sol +0 -170
- package/contracts/instance/service/IComponentOwnerService.sol +0 -22
- package/contracts/registry/IChainNft.sol +0 -21
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/shared/IOwnable.sol +0 -6
- package/contracts/test/TestPool.sol +0 -22
- package/contracts/test/TestProduct.sol +0 -44
@@ -0,0 +1,241 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
5
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
6
|
+
import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
|
7
|
+
|
8
|
+
import {IComponent} from "./IComponent.sol";
|
9
|
+
import {IProductService} from "../instance/service/IProductService.sol";
|
10
|
+
import {IInstanceService} from "../instance/IInstanceService.sol";
|
11
|
+
import {IInstance} from "../instance/IInstance.sol";
|
12
|
+
import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
|
13
|
+
import {InstanceReader} from "../instance/InstanceReader.sol";
|
14
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
15
|
+
import {NftId} from "../types/NftId.sol";
|
16
|
+
import {ObjectType, INSTANCE, PRODUCT} from "../types/ObjectType.sol";
|
17
|
+
import {VersionPart} from "../types/Version.sol";
|
18
|
+
import {Registerable} from "../shared/Registerable.sol";
|
19
|
+
import {RoleId, RoleIdLib} from "../types/RoleId.sol";
|
20
|
+
import {IAccess} from "../instance/module/IAccess.sol";
|
21
|
+
import {VersionPart} from "../types/Version.sol";
|
22
|
+
|
23
|
+
// TODO discuss to inherit from oz accessmanaged
|
24
|
+
// then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
|
25
|
+
// same pattern as for Service which is also upgradeable
|
26
|
+
abstract contract Component is
|
27
|
+
Registerable,
|
28
|
+
IComponent,
|
29
|
+
AccessManagedUpgradeable
|
30
|
+
{
|
31
|
+
// keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Component.sol")) - 1)) & ~bytes32(uint256(0xff));
|
32
|
+
bytes32 public constant CONTRACT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
|
33
|
+
|
34
|
+
struct ComponentStorage {
|
35
|
+
IInstance _instance; // instance for this component
|
36
|
+
InstanceReader _instanceReader; // instance reader for this component
|
37
|
+
string _name; // unique (per instance) component name
|
38
|
+
IERC20Metadata _token; // token for this component
|
39
|
+
address _wallet; // wallet for this component (default = component contract itself)
|
40
|
+
bool _isNftInterceptor; // declares if component is involved in nft transfers
|
41
|
+
IInstanceService _instanceService; // instance service for this component
|
42
|
+
|
43
|
+
NftId _productNftId; // only relevant for components that are linked to a aproduct
|
44
|
+
IProductService _productService; // product service for component, might not be relevant for some component types (eg oracles)
|
45
|
+
}
|
46
|
+
|
47
|
+
|
48
|
+
modifier onlyChainNft() {
|
49
|
+
if(msg.sender != getRegistry().getChainNftAddress()) {
|
50
|
+
revert ErrorComponentNotChainNft(msg.sender);
|
51
|
+
}
|
52
|
+
_;
|
53
|
+
}
|
54
|
+
|
55
|
+
|
56
|
+
modifier onlyProductService() {
|
57
|
+
if(msg.sender != address(_getComponentStorage()._productService)) {
|
58
|
+
revert ErrorComponentNotProductService(msg.sender);
|
59
|
+
}
|
60
|
+
_;
|
61
|
+
}
|
62
|
+
|
63
|
+
function _getComponentStorage() private pure returns (ComponentStorage storage $) {
|
64
|
+
assembly {
|
65
|
+
$.slot := CONTRACT_LOCATION_V1
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
function initializeComponent(
|
70
|
+
address registry,
|
71
|
+
NftId instanceNftId,
|
72
|
+
string memory name,
|
73
|
+
address token,
|
74
|
+
ObjectType componentType,
|
75
|
+
bool isInterceptor,
|
76
|
+
address initialOwner,
|
77
|
+
bytes memory data
|
78
|
+
)
|
79
|
+
public
|
80
|
+
virtual
|
81
|
+
onlyInitializing()
|
82
|
+
{
|
83
|
+
ComponentStorage storage $ = _getComponentStorage();
|
84
|
+
initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, data);
|
85
|
+
|
86
|
+
// set unique name of component
|
87
|
+
$._name = name;
|
88
|
+
$._isNftInterceptor = isInterceptor;
|
89
|
+
|
90
|
+
// set and check linked instance
|
91
|
+
IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
|
92
|
+
$._instance = IInstance(instanceInfo.objectAddress);
|
93
|
+
if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
|
94
|
+
revert ErrorComponentNotInstance(instanceNftId, instanceInfo.objectAddress);
|
95
|
+
}
|
96
|
+
|
97
|
+
// initialize AccessManagedUpgradeable
|
98
|
+
__AccessManaged_init($._instance.authority());
|
99
|
+
|
100
|
+
// set linked services
|
101
|
+
VersionPart gifVersion = $._instance.getMajorVersion();
|
102
|
+
$._instanceService = IInstanceService(getRegistry().getServiceAddress(INSTANCE(), gifVersion));
|
103
|
+
$._instanceReader = $._instance.getInstanceReader();
|
104
|
+
$._productService = IProductService(getRegistry().getServiceAddress(PRODUCT(), gifVersion));
|
105
|
+
|
106
|
+
// set wallet and token
|
107
|
+
$._wallet = address(this);
|
108
|
+
$._token = IERC20Metadata(token);
|
109
|
+
|
110
|
+
registerInterface(type(IComponent).interfaceId);
|
111
|
+
}
|
112
|
+
|
113
|
+
/// @dev callback function for nft transfers. may only be called by chain nft contract.
|
114
|
+
/// default implementation is empty. overriding functions MUST add onlyChainNft modifier
|
115
|
+
function nftTransferFrom(address from, address to, uint256 tokenId)
|
116
|
+
external
|
117
|
+
virtual override
|
118
|
+
onlyChainNft()
|
119
|
+
{ }
|
120
|
+
|
121
|
+
function lock() external onlyOwner override {
|
122
|
+
_getComponentStorage()._instanceService.setTargetLocked(getName(), true);
|
123
|
+
}
|
124
|
+
|
125
|
+
function unlock() external onlyOwner override {
|
126
|
+
_getComponentStorage()._instanceService.setTargetLocked(getName(), false);
|
127
|
+
}
|
128
|
+
|
129
|
+
// only product service may set product nft id during registration of product setup
|
130
|
+
function setProductNftId(NftId productNftId)
|
131
|
+
external
|
132
|
+
override
|
133
|
+
onlyProductService()
|
134
|
+
{
|
135
|
+
ComponentStorage storage $ = _getComponentStorage();
|
136
|
+
|
137
|
+
if($._productNftId.gtz()) {
|
138
|
+
revert ErrorComponentProductNftAlreadySet();
|
139
|
+
}
|
140
|
+
|
141
|
+
$._productNftId = productNftId;
|
142
|
+
}
|
143
|
+
|
144
|
+
/// @dev Sets the wallet address for the component.
|
145
|
+
/// if the current wallet has tokens, these will be transferred.
|
146
|
+
/// if the new wallet address is externally owned, an approval from the
|
147
|
+
/// owner of the external wallet for the component to move all tokens must exist.
|
148
|
+
function setWallet(address newWallet)
|
149
|
+
external
|
150
|
+
override
|
151
|
+
onlyOwner
|
152
|
+
{
|
153
|
+
ComponentStorage storage $ = _getComponentStorage();
|
154
|
+
|
155
|
+
address currentWallet = $._wallet;
|
156
|
+
uint256 currentBalance = $._token.balanceOf(currentWallet);
|
157
|
+
|
158
|
+
// checks
|
159
|
+
if (newWallet == address(0)) {
|
160
|
+
revert ErrorComponentWalletAddressZero();
|
161
|
+
}
|
162
|
+
if (newWallet == currentWallet) {
|
163
|
+
revert ErrorComponentWalletAddressIsSameAsCurrent(newWallet);
|
164
|
+
}
|
165
|
+
|
166
|
+
if (currentBalance > 0) {
|
167
|
+
if (currentWallet == address(this)) {
|
168
|
+
// move tokens from component smart contract to external wallet
|
169
|
+
} else {
|
170
|
+
// move tokens from external wallet to component smart contract or another external wallet
|
171
|
+
uint256 allowance = $._token.allowance(currentWallet, address(this));
|
172
|
+
if (allowance < currentBalance) {
|
173
|
+
revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
|
174
|
+
}
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
// effects
|
179
|
+
$._wallet = newWallet;
|
180
|
+
emit LogComponentWalletAddressChanged(newWallet);
|
181
|
+
|
182
|
+
// interactions
|
183
|
+
if (currentBalance > 0) {
|
184
|
+
// transfer tokens from current wallet to new wallet
|
185
|
+
if (currentWallet == address(this)) {
|
186
|
+
// transferFrom requires self allowance too
|
187
|
+
$._token.approve(address(this), currentBalance);
|
188
|
+
}
|
189
|
+
|
190
|
+
SafeERC20.safeTransferFrom($._token, currentWallet, newWallet, currentBalance);
|
191
|
+
emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
|
192
|
+
}
|
193
|
+
}
|
194
|
+
|
195
|
+
function getWallet()
|
196
|
+
public
|
197
|
+
view
|
198
|
+
override
|
199
|
+
returns (address walletAddress)
|
200
|
+
{
|
201
|
+
return _getComponentStorage()._wallet;
|
202
|
+
}
|
203
|
+
|
204
|
+
function getToken() public view override returns (IERC20Metadata token) {
|
205
|
+
return _getComponentStorage()._token;
|
206
|
+
}
|
207
|
+
|
208
|
+
function isNftInterceptor() public view override returns(bool isInterceptor) {
|
209
|
+
return _getComponentStorage()._isNftInterceptor;
|
210
|
+
}
|
211
|
+
|
212
|
+
function getInstance() public view override returns (IInstance instance) {
|
213
|
+
return _getComponentStorage()._instance;
|
214
|
+
}
|
215
|
+
|
216
|
+
function getInstanceReader() public view returns (InstanceReader reader) {
|
217
|
+
return _getComponentStorage()._instanceReader;
|
218
|
+
}
|
219
|
+
|
220
|
+
function getServiceAddress(ObjectType domain) public view returns (address service) {
|
221
|
+
VersionPart majorVersion = getInstance().getMajorVersion();
|
222
|
+
return getRegistry().getServiceAddress(domain, majorVersion);
|
223
|
+
}
|
224
|
+
|
225
|
+
function getName() public view override returns(string memory name) {
|
226
|
+
return _getComponentStorage()._name;
|
227
|
+
}
|
228
|
+
|
229
|
+
function getProductNftId() public view override returns (NftId productNftId) {
|
230
|
+
return _getComponentStorage()._productNftId;
|
231
|
+
}
|
232
|
+
|
233
|
+
function getInstanceService() public view returns (IInstanceService) {
|
234
|
+
return _getComponentStorage()._instanceService;
|
235
|
+
}
|
236
|
+
|
237
|
+
function getProductService() public view returns (IProductService) {
|
238
|
+
return _getComponentStorage()._productService;
|
239
|
+
}
|
240
|
+
|
241
|
+
}
|
@@ -0,0 +1,287 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {DISTRIBUTION} from "../types/ObjectType.sol";
|
5
|
+
import {IDistributionService} from "../instance/service/IDistributionService.sol";
|
6
|
+
import {IProductService} from "../instance/service/IProductService.sol";
|
7
|
+
import {NftId, zeroNftId, NftIdLib, toNftId} from "../types/NftId.sol";
|
8
|
+
import {ReferralId, ReferralStatus, ReferralLib} from "../types/Referral.sol";
|
9
|
+
import {Fee, FeeLib} from "../types/Fee.sol";
|
10
|
+
import {Component} from "./Component.sol";
|
11
|
+
import {IDistribution} from "../instance/module/IDistribution.sol";
|
12
|
+
import {IDistributionComponent} from "./IDistributionComponent.sol";
|
13
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
14
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
15
|
+
import {ISetup} from "../instance/module/ISetup.sol";
|
16
|
+
import {Registerable} from "../shared/Registerable.sol";
|
17
|
+
import {TokenHandler} from "../shared/TokenHandler.sol";
|
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
|
+
|
24
|
+
|
25
|
+
abstract contract Distribution is
|
26
|
+
Component,
|
27
|
+
IDistributionComponent
|
28
|
+
{
|
29
|
+
// keccak256(abi.encode(uint256(keccak256("etherisc.storage.Distribution")) - 1)) & ~bytes32(uint256(0xff));
|
30
|
+
bytes32 public constant DISTRIBUTION_STORAGE_LOCATION_V1 = 0xaab7c5ea03d290056d6c060e0833d3ebcbe647f7694616a2ec52738a64b2f900;
|
31
|
+
|
32
|
+
struct DistributionStorage {
|
33
|
+
Fee _distributionFee;
|
34
|
+
TokenHandler _tokenHandler;
|
35
|
+
IDistributionService _distributionService;
|
36
|
+
mapping(address distributor => NftId distributorNftId) _distributorNftId;
|
37
|
+
}
|
38
|
+
|
39
|
+
function initializeDistribution(
|
40
|
+
address registry,
|
41
|
+
NftId instanceNftId,
|
42
|
+
string memory name,
|
43
|
+
address token,
|
44
|
+
Fee memory distributionFee,
|
45
|
+
address initialOwner,
|
46
|
+
bytes memory data
|
47
|
+
)
|
48
|
+
public
|
49
|
+
virtual
|
50
|
+
onlyInitializing()
|
51
|
+
{
|
52
|
+
initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, data);
|
53
|
+
|
54
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
55
|
+
// TODO add validation
|
56
|
+
$._distributionFee = distributionFee;
|
57
|
+
$._tokenHandler = new TokenHandler(token);
|
58
|
+
$._distributionService = getInstance().getDistributionService();
|
59
|
+
|
60
|
+
registerInterface(type(IDistributionComponent).interfaceId);
|
61
|
+
}
|
62
|
+
|
63
|
+
function setFees(
|
64
|
+
Fee memory distributionFee
|
65
|
+
)
|
66
|
+
external
|
67
|
+
override
|
68
|
+
onlyOwner
|
69
|
+
restricted()
|
70
|
+
{
|
71
|
+
_getDistributionStorage()._distributionService.setFees(distributionFee);
|
72
|
+
}
|
73
|
+
|
74
|
+
function getDistributionFee() external view returns (Fee memory distributionFee) {
|
75
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
76
|
+
return $._distributionFee;
|
77
|
+
}
|
78
|
+
|
79
|
+
function createDistributorType(
|
80
|
+
string memory name,
|
81
|
+
UFixed minDiscountPercentage,
|
82
|
+
UFixed maxDiscountPercentage,
|
83
|
+
UFixed commissionPercentage,
|
84
|
+
uint32 maxReferralCount,
|
85
|
+
uint32 maxReferralLifetime,
|
86
|
+
bool allowSelfReferrals,
|
87
|
+
bool allowRenewals,
|
88
|
+
bytes memory data
|
89
|
+
)
|
90
|
+
public
|
91
|
+
returns (DistributorType distributorType)
|
92
|
+
{
|
93
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
94
|
+
distributorType = $._distributionService.createDistributorType(
|
95
|
+
name,
|
96
|
+
minDiscountPercentage,
|
97
|
+
maxDiscountPercentage,
|
98
|
+
commissionPercentage,
|
99
|
+
maxReferralCount,
|
100
|
+
maxReferralLifetime,
|
101
|
+
allowSelfReferrals,
|
102
|
+
allowRenewals,
|
103
|
+
data);
|
104
|
+
}
|
105
|
+
|
106
|
+
function createDistributor(
|
107
|
+
address distributor,
|
108
|
+
DistributorType distributorType,
|
109
|
+
bytes memory data
|
110
|
+
)
|
111
|
+
public
|
112
|
+
returns(NftId distributorNftId)
|
113
|
+
{
|
114
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
115
|
+
require($._distributorNftId[distributor].eqz(), "ERROR:DST-030:ALREADY_DISTRIBUTOR");
|
116
|
+
|
117
|
+
distributorNftId = $._distributionService.createDistributor(
|
118
|
+
distributor,
|
119
|
+
distributorType,
|
120
|
+
data);
|
121
|
+
|
122
|
+
$._distributorNftId[distributor] = distributorNftId;
|
123
|
+
}
|
124
|
+
|
125
|
+
function updateDistributorType(
|
126
|
+
NftId distributorNftId,
|
127
|
+
DistributorType distributorType,
|
128
|
+
bytes memory data
|
129
|
+
)
|
130
|
+
public
|
131
|
+
// TODO figure out what we need for authz
|
132
|
+
// and add it
|
133
|
+
{
|
134
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
135
|
+
$._distributionService.updateDistributorType(
|
136
|
+
distributorNftId,
|
137
|
+
distributorType,
|
138
|
+
data);
|
139
|
+
}
|
140
|
+
|
141
|
+
/**
|
142
|
+
* @dev lets distributors create referral codes.
|
143
|
+
* referral codes need to be unique
|
144
|
+
*/
|
145
|
+
function _createReferral(
|
146
|
+
NftId distributorNftId,
|
147
|
+
string memory code,
|
148
|
+
UFixed discountPercentage,
|
149
|
+
uint32 maxReferrals,
|
150
|
+
Timestamp expiryAt,
|
151
|
+
bytes memory data
|
152
|
+
)
|
153
|
+
internal
|
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);
|
164
|
+
}
|
165
|
+
|
166
|
+
function isDistributor(address candidate)
|
167
|
+
public
|
168
|
+
view
|
169
|
+
returns (bool)
|
170
|
+
{
|
171
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
172
|
+
return $._distributorNftId[candidate].gtz();
|
173
|
+
}
|
174
|
+
|
175
|
+
function getDistributorNftId(address distributor)
|
176
|
+
public
|
177
|
+
view
|
178
|
+
returns (NftId distributorNftId)
|
179
|
+
{
|
180
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
181
|
+
return $._distributorNftId[distributor];
|
182
|
+
}
|
183
|
+
|
184
|
+
function getDiscountPercentage(string memory referralCode)
|
185
|
+
external
|
186
|
+
view
|
187
|
+
returns (
|
188
|
+
UFixed discountPercentage,
|
189
|
+
ReferralStatus status
|
190
|
+
)
|
191
|
+
{
|
192
|
+
ReferralId referralId = getReferralId(referralCode);
|
193
|
+
return getInstanceReader().getDiscountPercentage(referralId);
|
194
|
+
}
|
195
|
+
|
196
|
+
|
197
|
+
function getReferralId(
|
198
|
+
string memory referralCode
|
199
|
+
)
|
200
|
+
public
|
201
|
+
view
|
202
|
+
returns (ReferralId referralId)
|
203
|
+
{
|
204
|
+
return ReferralLib.toReferralId(
|
205
|
+
getNftId(),
|
206
|
+
referralCode);
|
207
|
+
}
|
208
|
+
|
209
|
+
function calculateRenewalFeeAmount(
|
210
|
+
ReferralId referralId,
|
211
|
+
uint256 netPremiumAmount
|
212
|
+
)
|
213
|
+
external
|
214
|
+
view
|
215
|
+
virtual override
|
216
|
+
returns (uint256 feeAmount)
|
217
|
+
{
|
218
|
+
// default is no fees
|
219
|
+
return 0 * netPremiumAmount;
|
220
|
+
}
|
221
|
+
|
222
|
+
function processSale(
|
223
|
+
ReferralId referralId,
|
224
|
+
uint256 premiumAmount
|
225
|
+
)
|
226
|
+
external
|
227
|
+
onlyOwner
|
228
|
+
restricted()
|
229
|
+
virtual override
|
230
|
+
{
|
231
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
232
|
+
$._distributionService.processSale(referralId, premiumAmount);
|
233
|
+
}
|
234
|
+
|
235
|
+
function processRenewal(
|
236
|
+
ReferralId referralId,
|
237
|
+
uint256 feeAmount
|
238
|
+
)
|
239
|
+
external
|
240
|
+
onlyOwner
|
241
|
+
restricted()
|
242
|
+
virtual override
|
243
|
+
{
|
244
|
+
// default is no action
|
245
|
+
}
|
246
|
+
|
247
|
+
function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
|
248
|
+
InstanceReader reader = getInstance().getInstanceReader();
|
249
|
+
setupInfo = reader.getDistributionSetupInfo(getNftId());
|
250
|
+
|
251
|
+
// fallback to initial setup info (wallet is always != address(0))
|
252
|
+
if(setupInfo.wallet == address(0)) {
|
253
|
+
setupInfo = _getInitialSetupInfo();
|
254
|
+
}
|
255
|
+
}
|
256
|
+
|
257
|
+
function _getInitialSetupInfo() internal view returns (ISetup.DistributionSetupInfo memory setupInfo) {
|
258
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
259
|
+
return ISetup.DistributionSetupInfo(
|
260
|
+
zeroNftId(),
|
261
|
+
$._tokenHandler,
|
262
|
+
$._distributionFee,
|
263
|
+
address(this)
|
264
|
+
);
|
265
|
+
}
|
266
|
+
|
267
|
+
|
268
|
+
function nftTransferFrom(address from, address to, uint256 tokenId) external virtual override (Component, ITransferInterceptor) {
|
269
|
+
// keep track of distributor nft owner
|
270
|
+
emit LogDistributorUpdated(to, msg.sender);
|
271
|
+
DistributionStorage storage $ = _getDistributionStorage();
|
272
|
+
$._distributorNftId[from] = zeroNftId();
|
273
|
+
$._distributorNftId[to] = toNftId(tokenId);
|
274
|
+
}
|
275
|
+
|
276
|
+
|
277
|
+
/// @dev returns true iff the component needs to be called when selling/renewing policis
|
278
|
+
function isVerifying() external view returns (bool verifying) {
|
279
|
+
return true;
|
280
|
+
}
|
281
|
+
|
282
|
+
function _getDistributionStorage() private pure returns (DistributionStorage storage $) {
|
283
|
+
assembly {
|
284
|
+
$.slot := DISTRIBUTION_STORAGE_LOCATION_V1
|
285
|
+
}
|
286
|
+
}
|
287
|
+
}
|
@@ -0,0 +1,54 @@
|
|
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
|
+
function lock() external;
|
34
|
+
function unlock() external;
|
35
|
+
|
36
|
+
function getToken() external view returns (IERC20Metadata token);
|
37
|
+
|
38
|
+
function setWallet(address walletAddress) external;
|
39
|
+
function getWallet() external view returns (address walletAddress);
|
40
|
+
|
41
|
+
function isNftInterceptor() external view returns(bool isInterceptor);
|
42
|
+
|
43
|
+
function getInstance() external view returns (IInstance instance);
|
44
|
+
|
45
|
+
/// @dev returns the service address for the specified domain
|
46
|
+
/// gets address via lookup from registry using the major version form the linked instance
|
47
|
+
function getServiceAddress(ObjectType domain) external view returns (address service);
|
48
|
+
|
49
|
+
function setProductNftId(NftId productNftId) external;
|
50
|
+
function getProductNftId() external view returns (NftId productNftId);
|
51
|
+
|
52
|
+
function getInstanceService() external view returns (IInstanceService);
|
53
|
+
function getProductService() external view returns (IProductService);
|
54
|
+
}
|
@@ -0,0 +1,92 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {Fee} from "../types/Fee.sol";
|
5
|
+
import {IComponent} from "./IComponent.sol";
|
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 {
|
14
|
+
|
15
|
+
event LogDistributorUpdated(address to, address caller);
|
16
|
+
|
17
|
+
function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
|
18
|
+
|
19
|
+
function setFees(
|
20
|
+
Fee memory distributionFee
|
21
|
+
) external;
|
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
|
+
|
61
|
+
function calculateRenewalFeeAmount(
|
62
|
+
ReferralId referralId,
|
63
|
+
uint256 netPremiumAmount
|
64
|
+
) external view returns (uint256 feeAmount);
|
65
|
+
|
66
|
+
/// @dev callback from product service when selling a policy for a specific referralId
|
67
|
+
/// the used referral id and the collected fee are provided as parameters
|
68
|
+
/// the component implementation can then process this information accordingly
|
69
|
+
function processSale(
|
70
|
+
ReferralId referralId,
|
71
|
+
uint256 feeAmount
|
72
|
+
) external;
|
73
|
+
|
74
|
+
/// @dev callback from product service when a policy is renews for a specific referralId
|
75
|
+
function processRenewal(
|
76
|
+
ReferralId referralId,
|
77
|
+
uint256 feeAmount
|
78
|
+
) external;
|
79
|
+
|
80
|
+
function getDiscountPercentage(
|
81
|
+
string memory referralCode
|
82
|
+
) external view returns (UFixed discountPercentage, ReferralStatus status);
|
83
|
+
|
84
|
+
function getDistributionFee() external view returns (Fee memory distibutionFee);
|
85
|
+
|
86
|
+
function getReferralId(
|
87
|
+
string memory referralCode
|
88
|
+
) external returns (ReferralId referralId);
|
89
|
+
|
90
|
+
/// @dev returns true iff the component needs to be called when selling/renewing policis
|
91
|
+
function isVerifying() external view returns (bool verifying);
|
92
|
+
}
|