@etherisc/gif-next 0.0.2-af8c650-079 → 0.0.2-b060f43-287
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 +242 -11
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +302 -23
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +744 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +217 -23
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +90 -171
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +615 -63
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +620 -70
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/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 +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -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/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +889 -1208
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +485 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2472 -1202
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +572 -122
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +959 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +512 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +540 -0
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -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/module/{pool/IPoolModule.sol/IPool.json → 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/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +401 -65
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +204 -58
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +401 -49
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +334 -51
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +629 -51
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +552 -78
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -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 +377 -37
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -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 +487 -123
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +517 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -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 +2 -2
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → shared}/IService.sol/IService.json +175 -54
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +222 -54
- 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 +78 -14
- 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 +204 -36
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
- 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 +103 -23
- 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/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 +4 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
- 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/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 +4 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -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 +15 -2
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
- 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/BaseComponent.sol +75 -32
- package/contracts/components/Distribution.sol +163 -0
- package/contracts/components/IBaseComponent.sol +15 -3
- package/contracts/components/IDistributionComponent.sol +44 -0
- package/contracts/components/IPoolComponent.sol +19 -10
- package/contracts/components/IProductComponent.sol +25 -9
- package/contracts/components/Pool.sol +126 -33
- package/contracts/components/Product.sol +204 -32
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
- package/contracts/instance/BundleManager.sol +129 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IAccessManagerSimple.sol +391 -0
- package/contracts/instance/IInstance.sol +49 -46
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +32 -0
- package/contracts/instance/Instance.sol +438 -49
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceBase.sol +33 -63
- package/contracts/instance/InstanceReader.sol +315 -0
- package/contracts/instance/InstanceService.sol +234 -0
- package/contracts/instance/InstanceServiceManager.sol +57 -0
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +134 -0
- package/contracts/instance/base/IInstanceBase.sol +23 -0
- package/contracts/instance/base/IKeyValueStore.sol +49 -0
- package/contracts/instance/base/ILifecycle.sol +30 -0
- package/contracts/instance/base/KeyValueStore.sol +172 -0
- package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
- package/contracts/instance/module/IAccess.sol +38 -0
- package/contracts/instance/module/IBundle.sol +20 -0
- package/contracts/instance/module/IDistribution.sol +39 -0
- package/contracts/instance/module/IPolicy.sol +45 -0
- package/contracts/instance/module/IRisk.sol +11 -0
- package/contracts/instance/module/ISetup.sol +46 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ComponentOwnerService.sol +244 -98
- package/contracts/instance/service/DistributionService.sol +88 -0
- package/contracts/instance/service/DistributionServiceManager.sol +54 -0
- package/contracts/instance/service/IComponentOwnerService.sol +1 -3
- package/contracts/instance/service/IDistributionService.sol +12 -0
- package/contracts/instance/service/IPoolService.sol +24 -3
- package/contracts/instance/service/IProductService.sol +59 -7
- package/contracts/instance/service/PoolService.sol +207 -43
- package/contracts/instance/service/PoolServiceManager.sol +54 -0
- package/contracts/instance/service/ProductService.sol +350 -135
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +80 -37
- package/contracts/registry/IRegistry.sol +49 -25
- package/contracts/registry/IRegistryService.sol +50 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +337 -270
- package/contracts/registry/RegistryService.sol +358 -0
- package/contracts/registry/RegistryServiceManager.sol +80 -0
- package/contracts/registry/TokenRegistry.sol +111 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +8 -15
- package/contracts/{instance/service → shared}/IService.sol +3 -3
- package/contracts/shared/IVersionable.sol +55 -11
- package/contracts/shared/NftOwnable.sol +134 -0
- package/contracts/shared/ProxyManager.sol +94 -0
- package/contracts/shared/Registerable.sol +63 -59
- package/contracts/shared/RegisterableUpgradable.sol +16 -0
- package/contracts/shared/Service.sol +55 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +113 -55
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestRoleId.sol +2 -2
- package/contracts/test/TestService.sol +5 -13
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +10 -5
- package/contracts/types/Key32.sol +50 -0
- package/contracts/types/NftId.sol +16 -1
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +51 -14
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +65 -11
- package/contracts/types/StateId.sol +12 -2
- package/contracts/types/Timestamp.sol +7 -3
- package/contracts/types/UFixed.sol +128 -12
- package/contracts/types/Version.sol +13 -1
- package/package.json +4 -3
- 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/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
- 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 -276
- 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 -276
- 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/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
- 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/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/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
- 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/experiment/statemachine/README.md +0 -112
- package/contracts/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/IServiceLinked.sol +0 -12
- 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 -228
- package/contracts/instance/module/bundle/IBundle.sol +0 -53
- 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 -103
- package/contracts/instance/module/component/IComponent.sol +0 -53
- package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
- package/contracts/instance/module/policy/IPolicy.sol +0 -60
- package/contracts/instance/module/policy/PolicyModule.sol +0 -84
- 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/ComponentServiceBase.sol +0 -41
- package/contracts/instance/service/ServiceBase.sol +0 -39
- 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,315 @@
|
|
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 {DistributorType} from "../types/DistributorType.sol";
|
7
|
+
import {Fee, FeeLib} from "../types/Fee.sol";
|
8
|
+
import {Key32} from "../types/Key32.sol";
|
9
|
+
import {NftId} from "../types/NftId.sol";
|
10
|
+
import {ObjectType, DISTRIBUTOR, DISTRIBUTION, INSTANCE, PRODUCT, POLICY, POOL, TREASURY, BUNDLE} from "../types/ObjectType.sol";
|
11
|
+
import {ReferralId, ReferralStatus, ReferralLib, REFERRAL_OK, REFERRAL_ERROR_UNKNOWN, REFERRAL_ERROR_EXPIRED, REFERRAL_ERROR_EXHAUSTED} from "../types/Referral.sol";
|
12
|
+
import {Registerable} from "../shared/Registerable.sol";
|
13
|
+
import {RiskId} from "../types/RiskId.sol";
|
14
|
+
import {UFixed, MathLib, UFixedLib} from "../types/UFixed.sol";
|
15
|
+
import {Version} from "../types/Version.sol";
|
16
|
+
import {StateId} from "../types/StateId.sol";
|
17
|
+
|
18
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
19
|
+
import {IBundle} from "../instance/module/IBundle.sol";
|
20
|
+
import {IDistribution} from "../instance/module/IDistribution.sol";
|
21
|
+
import {IInstance} from "./IInstance.sol";
|
22
|
+
import {IKeyValueStore} from "../instance/base/IKeyValueStore.sol";
|
23
|
+
import {IPolicy} from "../instance/module/IPolicy.sol";
|
24
|
+
import {IRisk} from "../instance/module/IRisk.sol";
|
25
|
+
import {ISetup} from "../instance/module/ISetup.sol";
|
26
|
+
import {ITreasury} from "../instance/module/ITreasury.sol";
|
27
|
+
import {TimestampLib} from "../types/Timestamp.sol";
|
28
|
+
|
29
|
+
|
30
|
+
contract InstanceReader {
|
31
|
+
bool private _initialized;
|
32
|
+
|
33
|
+
IRegistry internal _registry;
|
34
|
+
NftId internal _instanceNftId;
|
35
|
+
IInstance internal _instance;
|
36
|
+
IKeyValueStore internal _store;
|
37
|
+
|
38
|
+
constructor(
|
39
|
+
address registry,
|
40
|
+
NftId instanceNftId
|
41
|
+
)
|
42
|
+
{
|
43
|
+
initialize(registry, instanceNftId);
|
44
|
+
}
|
45
|
+
|
46
|
+
function initialize(address registry, NftId instanceNftId) public {
|
47
|
+
require(!_initialized, "ERROR:CRD-000:ALREADY_INITIALIZED");
|
48
|
+
|
49
|
+
require(
|
50
|
+
address(registry) != address(0),
|
51
|
+
"ERROR:CRD-001:REGISTRY_ZERO");
|
52
|
+
|
53
|
+
require(
|
54
|
+
instanceNftId.gtz(),
|
55
|
+
"ERROR:CRD-002:NFT_ID_ZERO");
|
56
|
+
|
57
|
+
_registry = IRegistry(registry);
|
58
|
+
_instanceNftId = instanceNftId;
|
59
|
+
IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(_instanceNftId);
|
60
|
+
|
61
|
+
require(
|
62
|
+
instanceInfo.objectType == INSTANCE(),
|
63
|
+
"ERROR:CRD-003:PARENT_NOT_INSTANCE");
|
64
|
+
|
65
|
+
_instance = IInstance(instanceInfo.objectAddress);
|
66
|
+
_store = IKeyValueStore(instanceInfo.objectAddress);
|
67
|
+
|
68
|
+
_initialized = true;
|
69
|
+
}
|
70
|
+
|
71
|
+
|
72
|
+
// module specific functions
|
73
|
+
|
74
|
+
function getPolicyInfo(NftId policyNftId)
|
75
|
+
public
|
76
|
+
view
|
77
|
+
returns (IPolicy.PolicyInfo memory info)
|
78
|
+
{
|
79
|
+
bytes memory data = _store.getData(toPolicyKey(policyNftId));
|
80
|
+
if (data.length > 0) {
|
81
|
+
return abi.decode(data, (IPolicy.PolicyInfo));
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
function getPolicyState(NftId policyNftId)
|
86
|
+
public
|
87
|
+
view
|
88
|
+
returns (StateId state)
|
89
|
+
{
|
90
|
+
return _instance.getState(toPolicyKey(policyNftId));
|
91
|
+
}
|
92
|
+
|
93
|
+
function getRiskInfo(RiskId riskId)
|
94
|
+
public
|
95
|
+
view
|
96
|
+
returns (IRisk.RiskInfo memory info)
|
97
|
+
{
|
98
|
+
bytes memory data = _store.getData(riskId.toKey32());
|
99
|
+
if (data.length > 0) {
|
100
|
+
return abi.decode(data, (IRisk.RiskInfo));
|
101
|
+
}
|
102
|
+
}
|
103
|
+
|
104
|
+
function getTokenHandler(NftId productNftId)
|
105
|
+
public
|
106
|
+
view
|
107
|
+
returns (address tokenHandler)
|
108
|
+
{
|
109
|
+
bytes memory data = _store.getData(toTreasuryKey(productNftId));
|
110
|
+
|
111
|
+
if (data.length > 0) {
|
112
|
+
ITreasury.TreasuryInfo memory info = abi.decode(data, (ITreasury.TreasuryInfo));
|
113
|
+
return address(info.tokenHandler);
|
114
|
+
}
|
115
|
+
}
|
116
|
+
|
117
|
+
function getTreasuryInfo(NftId productNftId)
|
118
|
+
public
|
119
|
+
view
|
120
|
+
returns (ITreasury.TreasuryInfo memory info)
|
121
|
+
{
|
122
|
+
bytes memory data = _store.getData(toTreasuryKey(productNftId));
|
123
|
+
if (data.length > 0) {
|
124
|
+
return abi.decode(data, (ITreasury.TreasuryInfo));
|
125
|
+
}
|
126
|
+
}
|
127
|
+
|
128
|
+
function getBundleInfo(NftId bundleNftId)
|
129
|
+
public
|
130
|
+
view
|
131
|
+
returns (IBundle.BundleInfo memory info)
|
132
|
+
{
|
133
|
+
bytes memory data = _store.getData(toBundleKey(bundleNftId));
|
134
|
+
if (data.length > 0) {
|
135
|
+
return abi.decode(data, (IBundle.BundleInfo));
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
function getDistributorTypeInfo(DistributorType distributorType)
|
140
|
+
public
|
141
|
+
view
|
142
|
+
returns (IDistribution.DistributorTypeInfo memory info)
|
143
|
+
{
|
144
|
+
bytes memory data = _store.getData(distributorType.toKey32());
|
145
|
+
if (data.length > 0) {
|
146
|
+
return abi.decode(data, (IDistribution.DistributorTypeInfo));
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
function getDistributorInfo(NftId distributorNftId)
|
151
|
+
public
|
152
|
+
view
|
153
|
+
returns (IDistribution.DistributorInfo memory info)
|
154
|
+
{
|
155
|
+
bytes memory data = _store.getData(toDistributorKey(distributorNftId));
|
156
|
+
if (data.length > 0) {
|
157
|
+
return abi.decode(data, (IDistribution.DistributorInfo));
|
158
|
+
}
|
159
|
+
}
|
160
|
+
|
161
|
+
function getDistributionSetupInfo(NftId distributionNftId)
|
162
|
+
public
|
163
|
+
view
|
164
|
+
returns (ISetup.DistributionSetupInfo memory info)
|
165
|
+
{
|
166
|
+
bytes memory data = _store.getData(toDistributionKey(distributionNftId));
|
167
|
+
if (data.length > 0) {
|
168
|
+
return abi.decode(data, (ISetup.DistributionSetupInfo));
|
169
|
+
}
|
170
|
+
}
|
171
|
+
|
172
|
+
function getPoolSetupInfo(NftId poolNftId)
|
173
|
+
public
|
174
|
+
view
|
175
|
+
returns (ISetup.PoolSetupInfo memory info)
|
176
|
+
{
|
177
|
+
bytes memory data = _store.getData(toPoolKey(poolNftId));
|
178
|
+
if (data.length > 0) {
|
179
|
+
return abi.decode(data, (ISetup.PoolSetupInfo));
|
180
|
+
}
|
181
|
+
}
|
182
|
+
|
183
|
+
function getProductSetupInfo(NftId productNftId)
|
184
|
+
public
|
185
|
+
view
|
186
|
+
returns (ISetup.ProductSetupInfo memory info)
|
187
|
+
{
|
188
|
+
bytes memory data = _store.getData(toProductKey(productNftId));
|
189
|
+
if (data.length > 0) {
|
190
|
+
return abi.decode(data, (ISetup.ProductSetupInfo));
|
191
|
+
}
|
192
|
+
}
|
193
|
+
|
194
|
+
function getReferralInfo(ReferralId referralId)
|
195
|
+
public
|
196
|
+
view
|
197
|
+
returns (IDistribution.ReferralInfo memory info)
|
198
|
+
{
|
199
|
+
bytes memory data = _store.getData(referralId.toKey32());
|
200
|
+
if (data.length > 0) {
|
201
|
+
return abi.decode(data, (IDistribution.ReferralInfo));
|
202
|
+
}
|
203
|
+
}
|
204
|
+
|
205
|
+
|
206
|
+
function getMetadata(Key32 key)
|
207
|
+
public
|
208
|
+
view
|
209
|
+
returns (IKeyValueStore.Metadata memory metadata)
|
210
|
+
{
|
211
|
+
return _store.getMetadata(key);
|
212
|
+
}
|
213
|
+
|
214
|
+
|
215
|
+
function toReferralId(
|
216
|
+
NftId distributionNftId,
|
217
|
+
string memory referralCode
|
218
|
+
)
|
219
|
+
public
|
220
|
+
pure
|
221
|
+
returns (ReferralId referralId)
|
222
|
+
{
|
223
|
+
return ReferralLib.toReferralId(
|
224
|
+
distributionNftId,
|
225
|
+
referralCode);
|
226
|
+
}
|
227
|
+
|
228
|
+
|
229
|
+
function getDiscountPercentage(ReferralId referralId)
|
230
|
+
public
|
231
|
+
view
|
232
|
+
returns (
|
233
|
+
UFixed discountPercentage,
|
234
|
+
ReferralStatus status
|
235
|
+
)
|
236
|
+
{
|
237
|
+
IDistribution.ReferralInfo memory info = getReferralInfo(
|
238
|
+
referralId);
|
239
|
+
|
240
|
+
if (info.expiryAt.eqz()) {
|
241
|
+
return (
|
242
|
+
UFixedLib.zero(),
|
243
|
+
REFERRAL_ERROR_UNKNOWN());
|
244
|
+
}
|
245
|
+
|
246
|
+
if (info.expiryAt < TimestampLib.blockTimestamp()) {
|
247
|
+
return (
|
248
|
+
UFixedLib.zero(),
|
249
|
+
REFERRAL_ERROR_EXPIRED());
|
250
|
+
}
|
251
|
+
|
252
|
+
if (info.usedReferrals >= info.maxReferrals) {
|
253
|
+
return (
|
254
|
+
UFixedLib.zero(),
|
255
|
+
REFERRAL_ERROR_EXHAUSTED());
|
256
|
+
}
|
257
|
+
|
258
|
+
return (
|
259
|
+
info.discountPercentage,
|
260
|
+
REFERRAL_OK()
|
261
|
+
);
|
262
|
+
}
|
263
|
+
|
264
|
+
|
265
|
+
function toTreasuryKey(NftId productNftId) public pure returns (Key32) {
|
266
|
+
return productNftId.toKey32(TREASURY());
|
267
|
+
}
|
268
|
+
|
269
|
+
|
270
|
+
function toPolicyKey(NftId policyNftId) public pure returns (Key32) {
|
271
|
+
return policyNftId.toKey32(POLICY());
|
272
|
+
}
|
273
|
+
|
274
|
+
|
275
|
+
function toDistributorKey(NftId distributorNftId) public pure returns (Key32) {
|
276
|
+
return distributorNftId.toKey32(DISTRIBUTOR());
|
277
|
+
}
|
278
|
+
|
279
|
+
function toDistributionKey(NftId distributionNftId) public pure returns (Key32) {
|
280
|
+
return distributionNftId.toKey32(DISTRIBUTION());
|
281
|
+
}
|
282
|
+
|
283
|
+
function toBundleKey(NftId poolNftId) public pure returns (Key32) {
|
284
|
+
return poolNftId.toKey32(BUNDLE());
|
285
|
+
}
|
286
|
+
|
287
|
+
function toPoolKey(NftId poolNftId) public pure returns (Key32) {
|
288
|
+
return poolNftId.toKey32(POOL());
|
289
|
+
}
|
290
|
+
|
291
|
+
function toProductKey(NftId productNftId) public pure returns (Key32) {
|
292
|
+
return productNftId.toKey32(PRODUCT());
|
293
|
+
}
|
294
|
+
|
295
|
+
// low level function
|
296
|
+
function getInstance() external view returns (IInstance instance) {
|
297
|
+
return _instance;
|
298
|
+
}
|
299
|
+
|
300
|
+
function getInstanceStore() external view returns (IKeyValueStore store) {
|
301
|
+
return _store;
|
302
|
+
}
|
303
|
+
|
304
|
+
function getInstanceNftId() external view returns (NftId nftId) {
|
305
|
+
return _instanceNftId;
|
306
|
+
}
|
307
|
+
|
308
|
+
function toUFixed(uint256 value, int8 exp) public pure returns (UFixed) {
|
309
|
+
return UFixedLib.toUFixed(value, exp);
|
310
|
+
}
|
311
|
+
|
312
|
+
function toInt(UFixed value) public pure returns (uint256) {
|
313
|
+
return UFixedLib.toInt(value);
|
314
|
+
}
|
315
|
+
}
|
@@ -0,0 +1,234 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
|
5
|
+
import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
|
6
|
+
|
7
|
+
import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
|
8
|
+
import {InstanceAccessManager} from "./InstanceAccessManager.sol";
|
9
|
+
import {Instance} from "./Instance.sol";
|
10
|
+
import {IInstanceService} from "./IInstanceService.sol";
|
11
|
+
import {InstanceReader} from "./InstanceReader.sol";
|
12
|
+
import {BundleManager} from "./BundleManager.sol";
|
13
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
14
|
+
import {Registry} from "../registry/Registry.sol";
|
15
|
+
import {RegistryService} from "../registry/RegistryService.sol";
|
16
|
+
import {Service} from "../../contracts/shared/Service.sol";
|
17
|
+
import {IService} from "../shared/IService.sol";
|
18
|
+
import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
19
|
+
import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
|
20
|
+
import {RoleId} from "../types/RoleId.sol";
|
21
|
+
import {VersionLib} from "../types/Version.sol";
|
22
|
+
import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../types/RoleId.sol";
|
23
|
+
|
24
|
+
contract InstanceService is Service, IInstanceService {
|
25
|
+
|
26
|
+
address internal _registryAddress;
|
27
|
+
address internal _accessManagerMaster;
|
28
|
+
address internal _instanceMaster;
|
29
|
+
address internal _instanceReaderMaster;
|
30
|
+
address internal _instanceBundleManagerMaster;
|
31
|
+
|
32
|
+
// TODO update to real hash when instance is stable
|
33
|
+
bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
|
34
|
+
string public constant NAME = "InstanceService";
|
35
|
+
|
36
|
+
function createInstanceClone()
|
37
|
+
external
|
38
|
+
returns (
|
39
|
+
AccessManagerUpgradeableInitializeable clonedAccessManager,
|
40
|
+
Instance clonedInstance,
|
41
|
+
NftId clonedInstanceNftId,
|
42
|
+
InstanceReader clonedInstanceReader,
|
43
|
+
BundleManager clonedBundleManager
|
44
|
+
)
|
45
|
+
{
|
46
|
+
address instanceOwner = msg.sender;
|
47
|
+
Registry registry = Registry(_registryAddress);
|
48
|
+
NftId registryNftId = registry.getNftId(_registryAddress);
|
49
|
+
address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
50
|
+
RegistryService registryService = RegistryService(registryServiceAddress);
|
51
|
+
|
52
|
+
// initially set the authority of the access managar to this (being the instance service).
|
53
|
+
// This will allow the instance service to bootstrap the authorizations of the instance
|
54
|
+
// and then transfer the ownership of the access manager to the instance owner once everything is setup
|
55
|
+
clonedAccessManager = AccessManagerUpgradeableInitializeable(Clones.clone(_accessManagerMaster));
|
56
|
+
clonedAccessManager.__AccessManagerUpgradeableInitializeable_init(address(this));
|
57
|
+
|
58
|
+
clonedInstance = Instance(Clones.clone(_instanceMaster));
|
59
|
+
clonedInstance.initialize(address(clonedAccessManager), _registryAddress, registryNftId, msg.sender);
|
60
|
+
( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
|
61
|
+
clonedInstanceNftId = info.nftId;
|
62
|
+
|
63
|
+
clonedInstanceReader = InstanceReader(Clones.clone(address(_instanceReaderMaster)));
|
64
|
+
clonedInstanceReader.initialize(_registryAddress, clonedInstanceNftId);
|
65
|
+
clonedInstance.setInstanceReader(clonedInstanceReader);
|
66
|
+
|
67
|
+
clonedBundleManager = BundleManager(Clones.clone(_instanceBundleManagerMaster));
|
68
|
+
clonedBundleManager.initialize(address(clonedAccessManager), _registryAddress, clonedInstanceNftId);
|
69
|
+
clonedInstance.setBundleManager(clonedBundleManager);
|
70
|
+
|
71
|
+
// TODO amend setters with instance specific , policy manager ...
|
72
|
+
|
73
|
+
_grantInitialAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
|
74
|
+
|
75
|
+
// to complete setup switch instance ownership to the instance owner
|
76
|
+
// TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
|
77
|
+
clonedAccessManager.grantRole(ADMIN_ROLE().toInt(), instanceOwner, 0);
|
78
|
+
clonedAccessManager.revokeRole(ADMIN_ROLE().toInt(), address(this));
|
79
|
+
|
80
|
+
emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
|
81
|
+
}
|
82
|
+
|
83
|
+
function _grantInitialAuthorizations(AccessManagerUpgradeable clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
|
84
|
+
// configure authorization for distribution service on instance
|
85
|
+
address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
86
|
+
clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE().toInt(), distributionServiceAddress, 0);
|
87
|
+
bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
|
88
|
+
instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
|
89
|
+
instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
|
90
|
+
clonedAccessManager.setTargetFunctionRole(
|
91
|
+
address(clonedInstance),
|
92
|
+
instanceDistributionServiceSelectors,
|
93
|
+
DISTRIBUTION_SERVICE_ROLE().toInt());
|
94
|
+
|
95
|
+
// configure authorization for pool service on instance
|
96
|
+
address poolServiceAddress = _registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
97
|
+
clonedAccessManager.grantRole(POOL_SERVICE_ROLE().toInt(), address(poolServiceAddress), 0);
|
98
|
+
bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
|
99
|
+
instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
|
100
|
+
instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
|
101
|
+
instancePoolServiceSelectors[2] = clonedInstance.createBundle.selector;
|
102
|
+
instancePoolServiceSelectors[3] = clonedInstance.updateBundle.selector;
|
103
|
+
clonedAccessManager.setTargetFunctionRole(
|
104
|
+
address(clonedInstance),
|
105
|
+
instancePoolServiceSelectors,
|
106
|
+
POOL_SERVICE_ROLE().toInt());
|
107
|
+
|
108
|
+
// configure authorization for pool service on bundle manager
|
109
|
+
bytes4[] memory bundleManagerPoolServiceSelectors = new bytes4[](5);
|
110
|
+
bundleManagerPoolServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
|
111
|
+
bundleManagerPoolServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
|
112
|
+
bundleManagerPoolServiceSelectors[2] = clonedBundleManager.add.selector;
|
113
|
+
bundleManagerPoolServiceSelectors[3] = clonedBundleManager.lock.selector;
|
114
|
+
bundleManagerPoolServiceSelectors[4] = clonedBundleManager.unlock.selector;
|
115
|
+
clonedAccessManager.setTargetFunctionRole(
|
116
|
+
address(clonedBundleManager),
|
117
|
+
bundleManagerPoolServiceSelectors,
|
118
|
+
POOL_SERVICE_ROLE().toInt());
|
119
|
+
|
120
|
+
// configure authorization for product service on instance
|
121
|
+
address productServiceAddress = _registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
122
|
+
clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE().toInt(), address(productServiceAddress), 0);
|
123
|
+
bytes4[] memory instanceProductServiceSelectors = new bytes4[](9);
|
124
|
+
instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
|
125
|
+
instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
|
126
|
+
instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
|
127
|
+
instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
|
128
|
+
instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
|
129
|
+
instanceProductServiceSelectors[5] = clonedInstance.createPolicy.selector;
|
130
|
+
instanceProductServiceSelectors[6] = clonedInstance.updatePolicy.selector;
|
131
|
+
instanceProductServiceSelectors[7] = clonedInstance.updatePolicyState.selector;
|
132
|
+
clonedAccessManager.setTargetFunctionRole(
|
133
|
+
address(clonedInstance),
|
134
|
+
instanceProductServiceSelectors,
|
135
|
+
PRODUCT_SERVICE_ROLE().toInt());
|
136
|
+
}
|
137
|
+
|
138
|
+
function setMasterInstance(address accessManagerAddress, address instanceAddress, address instanceReaderAddress, address bundleManagerAddress) external onlyOwner {
|
139
|
+
require( _accessManagerMaster == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
|
140
|
+
require( _instanceMaster == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
|
141
|
+
require( _instanceBundleManagerMaster == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
|
142
|
+
|
143
|
+
require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
|
144
|
+
require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
|
145
|
+
require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
|
146
|
+
require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
|
147
|
+
|
148
|
+
Instance instance = Instance(instanceAddress);
|
149
|
+
InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
|
150
|
+
BundleManager bundleManager = BundleManager(bundleManagerAddress);
|
151
|
+
|
152
|
+
require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
|
153
|
+
require(instanceReader.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
|
154
|
+
require(bundleManager.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
|
155
|
+
|
156
|
+
_accessManagerMaster = accessManagerAddress;
|
157
|
+
_instanceMaster = instanceAddress;
|
158
|
+
_instanceReaderMaster = instanceReaderAddress;
|
159
|
+
_instanceBundleManagerMaster = bundleManagerAddress;
|
160
|
+
}
|
161
|
+
|
162
|
+
function upgradeInstanceReader(NftId instanceNftId) external {
|
163
|
+
// TODO: ensure this is done by instance owner
|
164
|
+
// TODO: upgrade instance reader of this instance to latest (set above here)
|
165
|
+
}
|
166
|
+
|
167
|
+
function getInstanceReaderMaster() external view returns (address) {
|
168
|
+
return _instanceReaderMaster;
|
169
|
+
}
|
170
|
+
|
171
|
+
function getInstanceMaster() external view returns (address) {
|
172
|
+
return _instanceMaster;
|
173
|
+
}
|
174
|
+
|
175
|
+
function getAccessManagerMaster() external view returns (address) {
|
176
|
+
return _accessManagerMaster;
|
177
|
+
}
|
178
|
+
|
179
|
+
function getBundleManagerMaster() external view returns (address) {
|
180
|
+
return _instanceBundleManagerMaster;
|
181
|
+
}
|
182
|
+
|
183
|
+
// From IService
|
184
|
+
function getName() public pure override(IService, Service) returns(string memory) {
|
185
|
+
return NAME;
|
186
|
+
}
|
187
|
+
|
188
|
+
/// @dev top level initializer
|
189
|
+
// 1) registry is non upgradeable -> don't need a proxy and uses constructor !
|
190
|
+
// 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
|
191
|
+
// 3) deploy registry -> pass registry service address as constructor argument
|
192
|
+
// registry is getting instantiated and locked to registry service address forever
|
193
|
+
function _initialize(
|
194
|
+
address owner,
|
195
|
+
bytes memory data
|
196
|
+
)
|
197
|
+
internal
|
198
|
+
initializer
|
199
|
+
virtual override
|
200
|
+
{
|
201
|
+
// bytes memory encodedConstructorArguments = abi.encode(
|
202
|
+
// _registryAddress);
|
203
|
+
|
204
|
+
// bytes memory instanceCreationCode = ContractDeployerLib.getCreationCode(
|
205
|
+
// instanceByteCodeWithInitCode,
|
206
|
+
// encodedConstructorArguments);
|
207
|
+
|
208
|
+
// address instanceAddress = ContractDeployerLib.deploy(
|
209
|
+
// instanceCreationCode,
|
210
|
+
// INSTANCE_CREATION_CODE_HASH);
|
211
|
+
|
212
|
+
address initialOwner = address(0);
|
213
|
+
(_registryAddress, initialOwner) = abi.decode(data, (address, address));
|
214
|
+
// TODO while InstanceService is not deployed in InstanceServiceManager constructor
|
215
|
+
// owner is InstanceServiceManager deployer
|
216
|
+
_initializeService(_registryAddress, owner);
|
217
|
+
|
218
|
+
_registerInterface(type(IService).interfaceId);
|
219
|
+
_registerInterface(type(IInstanceService).interfaceId);
|
220
|
+
}
|
221
|
+
|
222
|
+
function hasRole(address account, RoleId role, NftId instanceNftId) external view returns (bool) {
|
223
|
+
IRegistry.ObjectInfo memory instanceObjectInfo = getRegistry().getObjectInfo(instanceNftId);
|
224
|
+
address instanceAddress = instanceObjectInfo.objectAddress;
|
225
|
+
Instance instance = Instance(instanceAddress);
|
226
|
+
AccessManagerUpgradeable accessManager = AccessManagerUpgradeable(instance.authority());
|
227
|
+
(bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
|
228
|
+
if (executionDelay > 0) {
|
229
|
+
return false;
|
230
|
+
}
|
231
|
+
return isMember;
|
232
|
+
}
|
233
|
+
}
|
234
|
+
|
@@ -0,0 +1,57 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {Instance} from "./Instance.sol";
|
5
|
+
import {IVersionable} from "../shared/IVersionable.sol";
|
6
|
+
import {ProxyManager} from "../shared/ProxyManager.sol";
|
7
|
+
import {InstanceService} from "./InstanceService.sol";
|
8
|
+
import {Registry} from "../registry/Registry.sol";
|
9
|
+
import {RegistryService} from "../registry/RegistryService.sol";
|
10
|
+
import {VersionLib} from "../types/Version.sol";
|
11
|
+
|
12
|
+
contract InstanceServiceManager is ProxyManager {
|
13
|
+
|
14
|
+
InstanceService private _instanceService;
|
15
|
+
|
16
|
+
/// @dev initializes proxy manager with instance service implementation and deploys instance
|
17
|
+
constructor(
|
18
|
+
address registryAddress
|
19
|
+
)
|
20
|
+
ProxyManager()
|
21
|
+
{
|
22
|
+
InstanceService instSrv = new InstanceService();
|
23
|
+
// bytes memory initCode = type(InstanceService).creationCode;
|
24
|
+
bytes memory data = abi.encode(registryAddress, address(this));
|
25
|
+
IVersionable versionable = deploy(
|
26
|
+
address(instSrv),
|
27
|
+
data);
|
28
|
+
|
29
|
+
_instanceService = InstanceService(address(versionable));
|
30
|
+
|
31
|
+
Registry registry = Registry(registryAddress);
|
32
|
+
address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
33
|
+
RegistryService registryService = RegistryService(registryServiceAddress);
|
34
|
+
// TODO this must have a role or own nft to register service
|
35
|
+
//registryService.registerService(_instanceService);
|
36
|
+
// RegistryService registryService = _instanceService.getRegistryService();
|
37
|
+
|
38
|
+
// TODO no nft to link yet
|
39
|
+
// link ownership of instance service manager ot nft owner of instance service
|
40
|
+
//_linkToNftOwnable(
|
41
|
+
// address(registryAddress),
|
42
|
+
// address(_instanceService));
|
43
|
+
|
44
|
+
// implies that after this constructor call only upgrade functionality is available
|
45
|
+
_isDeployed = true;
|
46
|
+
}
|
47
|
+
|
48
|
+
//--- view functions ----------------------------------------------------//
|
49
|
+
function getInstanceService()
|
50
|
+
external
|
51
|
+
view
|
52
|
+
returns (InstanceService instanceService)
|
53
|
+
{
|
54
|
+
return _instanceService;
|
55
|
+
}
|
56
|
+
|
57
|
+
}
|