@etherisc/gif-next 0.0.2-cc4a5cb-898 → 0.0.2-cdac553-411
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 +148 -26
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +176 -23
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +308 -43
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +129 -23
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +36 -172
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -238
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -213
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +391 -96
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +409 -78
- 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/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -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 +238 -1492
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2298 -1144
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1388 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +891 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +492 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +229 -43
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
- 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 +37 -245
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +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/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
- 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/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +375 -79
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +290 -53
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +436 -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 +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +174 -53
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +176 -55
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +179 -58
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +307 -54
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +448 -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 +485 -37
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +853 -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 +597 -122
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1237 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +525 -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/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
- 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/base/InstanceBase.sol/InstanceBase.json → shared/IService.sol/IService.json} +168 -123
- 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/{instance/base/IService.sol/IService.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +215 -73
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/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/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
- 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 +14 -14
- 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 +4 -4
- 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 +2 -2
- 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 +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +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/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 +26 -29
- package/contracts/components/Distribution.sol +52 -18
- package/contracts/components/IBaseComponent.sol +9 -3
- package/contracts/components/IDistributionComponent.sol +5 -6
- package/contracts/components/IPoolComponent.sol +2 -11
- package/contracts/components/IProductComponent.sol +4 -7
- package/contracts/components/Pool.sol +87 -75
- package/contracts/components/Product.sol +111 -41
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/AccessManagedSimple.sol +115 -0
- package/contracts/instance/AccessManagerSimple.sol +692 -0
- package/contracts/instance/IAccessManagerSimple.sol +391 -0
- package/contracts/instance/IInstance.sol +31 -45
- package/contracts/instance/IInstanceService.sol +30 -0
- package/contracts/instance/Instance.sol +426 -57
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceReader.sol +306 -0
- package/contracts/instance/InstanceService.sol +180 -0
- package/contracts/instance/InstanceServiceManager.sol +56 -0
- package/contracts/instance/base/ComponentServiceBase.sol +12 -13
- package/contracts/instance/base/IInstanceBase.sol +3 -2
- package/contracts/instance/base/IKeyValueStore.sol +13 -14
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +49 -38
- package/contracts/instance/base/Lifecycle.sol +1 -1
- 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 +44 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ComponentOwnerService.sol +232 -72
- package/contracts/instance/service/DistributionService.sol +66 -20
- package/contracts/instance/service/DistributionServiceManager.sol +53 -0
- package/contracts/instance/service/IComponentOwnerService.sol +1 -3
- package/contracts/instance/service/IDistributionService.sol +1 -1
- package/contracts/instance/service/IPoolService.sol +1 -1
- package/contracts/instance/service/IProductService.sol +3 -3
- package/contracts/instance/service/PoolService.sol +116 -54
- package/contracts/instance/service/PoolServiceManager.sol +53 -0
- package/contracts/registry/ChainNft.sol +80 -37
- package/contracts/registry/IRegistry.sol +62 -25
- package/contracts/registry/IRegistryService.sol +33 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +374 -266
- package/contracts/registry/RegistryService.sol +399 -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/base → shared}/IService.sol +3 -3
- package/contracts/shared/IVersionable.sol +55 -11
- package/contracts/shared/NftOwnable.sol +136 -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 +54 -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 +1 -1
- package/contracts/test/TestService.sol +5 -13
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +3 -3
- package/contracts/types/Key32.sol +8 -3
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +35 -14
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RoleId.sol +60 -9
- 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 +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/base/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- 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/IAccess.json +0 -10
- 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 -297
- 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 -297
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- 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 -117
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
- 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 -284
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
- 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 -144
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
- 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 -113
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
- 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 -511
- 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 -511
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -858
- 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/shared/Proxy.sol/Proxy.dbg.json +0 -4
- package/artifacts/contracts/shared/Proxy.sol/Proxy.json +0 -178
- package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -405
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -578
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -575
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
- 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/base/InstanceBase.sol +0 -91
- package/contracts/instance/base/ModuleBase.sol +0 -57
- 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 -134
- package/contracts/instance/module/bundle/IBundle.sol +0 -53
- package/contracts/instance/module/component/ComponentModule.sol +0 -70
- package/contracts/instance/module/component/IComponent.sol +0 -28
- package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
- package/contracts/instance/module/distribution/IDistribution.sol +0 -10
- package/contracts/instance/module/policy/IPolicy.sol +0 -63
- package/contracts/instance/module/policy/PolicyModule.sol +0 -91
- package/contracts/instance/module/pool/IPoolModule.sol +0 -40
- package/contracts/instance/module/pool/PoolModule.sol +0 -90
- package/contracts/instance/module/risk/IRisk.sol +0 -26
- package/contracts/instance/module/risk/RiskModule.sol +0 -62
- package/contracts/instance/module/treasury/ITreasury.sol +0 -82
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -138
- package/contracts/instance/service/ProductService.sol +0 -509
- package/contracts/registry/IChainNft.sol +0 -21
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/shared/IOwnable.sol +0 -6
- package/contracts/shared/Proxy.sol +0 -83
- package/contracts/test/TestDistribution.sol +0 -21
- package/contracts/test/TestPool.sol +0 -25
- package/contracts/test/TestProduct.sol +0 -72
- package/contracts/types/ReferralId.sol +0 -48
@@ -5,13 +5,11 @@ import {NftId} from "../../types/NftId.sol";
|
|
5
5
|
import {ObjectType} from "../../types/ObjectType.sol";
|
6
6
|
import {RoleId} from "../../types/RoleId.sol";
|
7
7
|
import {IBaseComponent} from "../../components/IBaseComponent.sol";
|
8
|
-
import {IService} from "
|
8
|
+
import {IService} from "../../shared/IService.sol";
|
9
9
|
|
10
10
|
// TODO rename to registry service
|
11
11
|
interface IComponentOwnerService is IService {
|
12
12
|
|
13
|
-
function register(IBaseComponent component) external returns(NftId componentNftId);
|
14
|
-
|
15
13
|
// TODO move to product/pool services
|
16
14
|
function lock(IBaseComponent component) external;
|
17
15
|
|
@@ -3,7 +3,7 @@ pragma solidity ^0.8.19;
|
|
3
3
|
|
4
4
|
import {NftId} from "../../types/NftId.sol";
|
5
5
|
import {Fee} from "../../types/Fee.sol";
|
6
|
-
import {IService} from "
|
6
|
+
import {IService} from "../../shared/IService.sol";
|
7
7
|
|
8
8
|
interface IDistributionService is IService {
|
9
9
|
function setFees(
|
@@ -3,7 +3,7 @@ pragma solidity ^0.8.19;
|
|
3
3
|
|
4
4
|
import {NftId} from "../../types/NftId.sol";
|
5
5
|
import {Fee} from "../../types/Fee.sol";
|
6
|
-
import {IService} from "
|
6
|
+
import {IService} from "../../shared/IService.sol";
|
7
7
|
|
8
8
|
interface IPoolService is IService {
|
9
9
|
function setFees(
|
@@ -1,11 +1,11 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {IRisk} from "../module/
|
5
|
-
import {IService} from "
|
4
|
+
import {IRisk} from "../module/IRisk.sol";
|
5
|
+
import {IService} from "../../shared/IService.sol";
|
6
6
|
|
7
7
|
import {NftId} from "../../types/NftId.sol";
|
8
|
-
import {ReferralId} from "../../types/
|
8
|
+
import {ReferralId} from "../../types/Referral.sol";
|
9
9
|
import {RiskId} from "../../types/RiskId.sol";
|
10
10
|
import {StateId} from "../../types/StateId.sol";
|
11
11
|
import {Timestamp} from "../../types/Timestamp.sol";
|
@@ -1,47 +1,91 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
+
import {Pool} from "../../components/Pool.sol";
|
4
5
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
6
|
import {IInstance} from "../../instance/IInstance.sol";
|
6
|
-
import {IBundle} from "../../instance/module/
|
7
|
-
import {
|
7
|
+
import {IBundle} from "../../instance/module/IBundle.sol";
|
8
|
+
import {TokenHandler} from "../../instance/module/ITreasury.sol";
|
9
|
+
import {ISetup} from "../module/ISetup.sol";
|
8
10
|
|
9
11
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
10
12
|
import {Versionable} from "../../shared/Versionable.sol";
|
13
|
+
import {INftOwnable} from "../../shared/INftOwnable.sol";
|
11
14
|
|
12
|
-
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
15
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
13
16
|
import {POOL, BUNDLE} from "../../types/ObjectType.sol";
|
14
|
-
import {
|
17
|
+
import {POOL_OWNER_ROLE} from "../../types/RoleId.sol";
|
18
|
+
import {Fee, FeeLib} from "../../types/Fee.sol";
|
15
19
|
import {Version, VersionLib} from "../../types/Version.sol";
|
20
|
+
import {KEEP_STATE} from "../../types/StateId.sol";
|
21
|
+
import {zeroTimestamp} from "../../types/Timestamp.sol";
|
16
22
|
|
23
|
+
import {IService} from "../../shared/IService.sol";
|
24
|
+
import {Service} from "../../shared/Service.sol";
|
17
25
|
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
18
26
|
import {IPoolService} from "./IPoolService.sol";
|
27
|
+
import {IRegistryService} from "../../registry/IRegistryService.sol";
|
28
|
+
import {InstanceService} from "../InstanceService.sol";
|
29
|
+
import {InstanceReader} from "../InstanceReader.sol";
|
19
30
|
|
20
31
|
|
21
|
-
|
32
|
+
string constant POOL_SERVICE_NAME = "PoolService";
|
33
|
+
|
34
|
+
contract PoolService is
|
35
|
+
ComponentServiceBase,
|
36
|
+
IPoolService
|
37
|
+
{
|
22
38
|
using NftIdLib for NftId;
|
23
39
|
|
24
40
|
string public constant NAME = "PoolService";
|
25
41
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
42
|
+
address internal _registryAddress;
|
43
|
+
InstanceService internal _instanceService;
|
44
|
+
|
45
|
+
function _initialize(
|
46
|
+
address owner,
|
47
|
+
bytes memory data
|
48
|
+
)
|
49
|
+
internal
|
50
|
+
initializer
|
51
|
+
virtual override
|
30
52
|
{
|
53
|
+
address initialOwner = address(0);
|
54
|
+
(_registryAddress, initialOwner) = abi.decode(data, (address, address));
|
55
|
+
|
56
|
+
IRegistry registry = IRegistry(_registryAddress);
|
57
|
+
_instanceService = InstanceService(registry.getServiceAddress("InstanceService", getMajorVersion()));
|
58
|
+
|
59
|
+
_initializeService(_registryAddress, initialOwner);
|
60
|
+
|
61
|
+
_registerInterface(type(IService).interfaceId);
|
31
62
|
_registerInterface(type(IPoolService).interfaceId);
|
32
63
|
}
|
33
64
|
|
34
|
-
function
|
35
|
-
|
36
|
-
pure
|
37
|
-
virtual override (IVersionable, Versionable)
|
38
|
-
returns(Version)
|
39
|
-
{
|
40
|
-
return VersionLib.toVersion(3,0,0);
|
65
|
+
function getName() public pure override(Service, IService) returns(string memory name) {
|
66
|
+
return NAME;
|
41
67
|
}
|
42
68
|
|
43
|
-
function
|
44
|
-
|
69
|
+
function register(address poolComponentAddress)
|
70
|
+
external
|
71
|
+
returns (NftId poolNftId)
|
72
|
+
{
|
73
|
+
address componentOwner = msg.sender;
|
74
|
+
Pool pool = Pool(poolComponentAddress);
|
75
|
+
IInstance instance = pool.getInstance();
|
76
|
+
INftOwnable nftOwnable = INftOwnable(address(instance));
|
77
|
+
|
78
|
+
require(_instanceService.hasRole(componentOwner, POOL_OWNER_ROLE(), nftOwnable.getNftId()), "ERROR:POS-001:NOT_POOL_OWNER_ROLE");
|
79
|
+
|
80
|
+
IRegistryService registryService = getRegistryService();
|
81
|
+
(IRegistry.ObjectInfo memory poolObjInfo, ) = registryService.registerPool(
|
82
|
+
pool,
|
83
|
+
componentOwner
|
84
|
+
);
|
85
|
+
poolNftId = poolObjInfo.nftId;
|
86
|
+
|
87
|
+
ISetup.PoolSetupInfo memory initialSetup = pool.getInitialSetupInfo();
|
88
|
+
instance.createPoolSetup(poolNftId, initialSetup);
|
45
89
|
}
|
46
90
|
|
47
91
|
function setFees(
|
@@ -53,13 +97,15 @@ contract PoolService is ComponentServiceBase, IPoolService {
|
|
53
97
|
override
|
54
98
|
{
|
55
99
|
(IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
56
|
-
|
57
|
-
NftId
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
100
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
101
|
+
NftId poolNftId = poolInfo.nftId;
|
102
|
+
|
103
|
+
ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
104
|
+
poolSetupInfo.poolFee = poolFee;
|
105
|
+
poolSetupInfo.stakingFee = stakingFee;
|
106
|
+
poolSetupInfo.performanceFee = performanceFee;
|
107
|
+
|
108
|
+
instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
|
63
109
|
}
|
64
110
|
|
65
111
|
function createBundle(
|
@@ -74,33 +120,43 @@ contract PoolService is ComponentServiceBase, IPoolService {
|
|
74
120
|
returns(NftId bundleNftId)
|
75
121
|
{
|
76
122
|
(IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
77
|
-
|
78
|
-
// register bundle with registry
|
123
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
79
124
|
NftId poolNftId = info.nftId;
|
80
|
-
bundleNftId = _registry.registerObjectForInstance(
|
81
|
-
poolNftId,
|
82
|
-
BUNDLE(),
|
83
|
-
owner,
|
84
|
-
"");
|
85
125
|
|
86
|
-
|
87
|
-
instance.createBundleInfo(
|
88
|
-
bundleNftId,
|
126
|
+
IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
|
89
127
|
poolNftId,
|
90
|
-
|
128
|
+
FeeLib.zeroFee(),
|
129
|
+
filter,
|
130
|
+
stakingAmount,
|
131
|
+
0,
|
91
132
|
stakingAmount,
|
92
133
|
lifetime,
|
93
|
-
|
134
|
+
zeroTimestamp(),
|
135
|
+
zeroTimestamp()
|
136
|
+
);
|
94
137
|
|
95
|
-
//
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
138
|
+
// register bundle with registry
|
139
|
+
bundleNftId = getRegistryService().registerBundle(
|
140
|
+
IRegistry.ObjectInfo(
|
141
|
+
zeroNftId(),
|
142
|
+
poolNftId,
|
143
|
+
BUNDLE(),
|
144
|
+
false, // intercepting property for bundles is defined on pool
|
145
|
+
address(0),
|
146
|
+
owner,
|
147
|
+
abi.encode(bundleInfo)
|
148
|
+
)
|
149
|
+
);
|
150
|
+
|
151
|
+
// create bundle info in instance
|
152
|
+
instance.createBundle(bundleNftId, bundleInfo);
|
100
153
|
|
154
|
+
// TODO add bundle to pool in instance
|
155
|
+
|
101
156
|
// collect capital
|
102
157
|
_processStakingByTreasury(
|
103
|
-
|
158
|
+
instanceReader,
|
159
|
+
zeroNftId(),
|
104
160
|
poolNftId,
|
105
161
|
bundleNftId,
|
106
162
|
stakingAmount);
|
@@ -115,17 +171,24 @@ contract PoolService is ComponentServiceBase, IPoolService {
|
|
115
171
|
external
|
116
172
|
override
|
117
173
|
{
|
118
|
-
(IRegistry.ObjectInfo memory
|
119
|
-
|
174
|
+
(IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
175
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
176
|
+
NftId poolNftId = info.nftId;
|
177
|
+
|
178
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
120
179
|
require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
|
121
|
-
require(
|
180
|
+
require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
|
181
|
+
|
122
182
|
bundleInfo.fee = fee;
|
123
|
-
|
183
|
+
|
184
|
+
instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
124
185
|
}
|
125
186
|
|
126
187
|
|
188
|
+
|
127
189
|
function _processStakingByTreasury(
|
128
|
-
|
190
|
+
InstanceReader instanceReader,
|
191
|
+
NftId productNftId,
|
129
192
|
NftId poolNftId,
|
130
193
|
NftId bundleNftId,
|
131
194
|
uint256 stakingAmount
|
@@ -134,14 +197,13 @@ contract PoolService is ComponentServiceBase, IPoolService {
|
|
134
197
|
{
|
135
198
|
// process token transfer(s)
|
136
199
|
if(stakingAmount > 0) {
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
200
|
+
TokenHandler tokenHandler = TokenHandler(instanceReader.getTokenHandler(productNftId));
|
201
|
+
address bundleOwner = getRegistry().ownerOf(bundleNftId);
|
202
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
203
|
+
|
142
204
|
tokenHandler.transfer(
|
143
205
|
bundleOwner,
|
144
|
-
|
206
|
+
poolInfo.wallet,
|
145
207
|
stakingAmount
|
146
208
|
);
|
147
209
|
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
5
|
+
import {ProxyManager} from "../../shared/ProxyManager.sol";
|
6
|
+
import {PoolService} from "./PoolService.sol";
|
7
|
+
import {Registry} from "../../registry/Registry.sol";
|
8
|
+
import {RegistryService} from "../../registry/RegistryService.sol";
|
9
|
+
import {VersionLib} from "../../types/Version.sol";
|
10
|
+
|
11
|
+
contract PoolServiceManager is ProxyManager {
|
12
|
+
|
13
|
+
PoolService private _poolService;
|
14
|
+
|
15
|
+
/// @dev initializes proxy manager with pool service implementation
|
16
|
+
constructor(
|
17
|
+
address registryAddress
|
18
|
+
)
|
19
|
+
ProxyManager()
|
20
|
+
{
|
21
|
+
PoolService poolSrv = new PoolService();
|
22
|
+
bytes memory data = abi.encode(registryAddress, address(this));
|
23
|
+
IVersionable versionable = deploy(
|
24
|
+
address(poolSrv),
|
25
|
+
data);
|
26
|
+
|
27
|
+
_poolService = PoolService(address(versionable));
|
28
|
+
|
29
|
+
Registry registry = Registry(registryAddress);
|
30
|
+
address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
31
|
+
RegistryService registryService = RegistryService(registryServiceAddress);
|
32
|
+
|
33
|
+
registryService.registerService(_poolService);
|
34
|
+
|
35
|
+
// link ownership of instance service manager ot nft owner of instance service
|
36
|
+
_linkToNftOwnable(
|
37
|
+
address(registryAddress),
|
38
|
+
address(_poolService));
|
39
|
+
|
40
|
+
// implies that after this constructor call only upgrade functionality is available
|
41
|
+
_isDeployed = true;
|
42
|
+
}
|
43
|
+
|
44
|
+
//--- view functions ----------------------------------------------------//
|
45
|
+
function getPoolService()
|
46
|
+
external
|
47
|
+
view
|
48
|
+
returns (PoolService poolService)
|
49
|
+
{
|
50
|
+
return _poolService;
|
51
|
+
}
|
52
|
+
|
53
|
+
}
|
@@ -1,16 +1,31 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {ERC721, ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
|
5
|
-
import {
|
5
|
+
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
import {ITransferInterceptor} from "./ITransferInterceptor.sol";
|
8
|
+
|
9
|
+
contract ChainNft is ERC721Enumerable {
|
10
|
+
|
11
|
+
// constants
|
12
|
+
string public constant NAME = "Dezentralized Insurance Protocol NFT";
|
13
|
+
string public constant SYMBOL = "DIPNFT";
|
10
14
|
|
11
15
|
uint256 public constant PROTOCOL_NFT_ID = 1101;
|
12
16
|
uint256 public constant GLOBAL_REGISTRY_ID = 2101;
|
13
17
|
|
18
|
+
// custom errors
|
19
|
+
error CallerNotRegistry(address caller);
|
20
|
+
error RegistryAddressZero();
|
21
|
+
error NftUriEmpty();
|
22
|
+
error NftUriAlreadySet();
|
23
|
+
|
24
|
+
// contract state
|
25
|
+
|
26
|
+
// remember interceptors
|
27
|
+
mapping(uint256 tokenId => address interceptor) private _interceptor;
|
28
|
+
|
14
29
|
// remember token uri
|
15
30
|
mapping(uint256 tokenId => string uri) private _uri;
|
16
31
|
|
@@ -25,50 +40,79 @@ contract ChainNft is ERC721Enumerable, IChainNft {
|
|
25
40
|
uint256 internal _totalMinted;
|
26
41
|
|
27
42
|
modifier onlyRegistry() {
|
28
|
-
|
43
|
+
if (msg.sender != _registry) { revert CallerNotRegistry(msg.sender); }
|
29
44
|
_;
|
30
45
|
}
|
31
46
|
|
32
47
|
constructor(address registry) ERC721(NAME, SYMBOL) {
|
33
|
-
|
48
|
+
if (registry == address(0)) { revert RegistryAddressZero(); }
|
34
49
|
|
35
50
|
_registry = registry;
|
36
|
-
|
37
51
|
_chainIdInt = block.chainid;
|
38
|
-
_chainIdDigits =
|
52
|
+
_chainIdDigits = 0;
|
53
|
+
|
54
|
+
// count digis
|
55
|
+
uint256 num = _chainIdInt;
|
56
|
+
while (num != 0) {
|
57
|
+
_chainIdDigits++;
|
58
|
+
num /= 10;
|
59
|
+
}
|
60
|
+
|
39
61
|
_chainIdMultiplier = 10 ** _chainIdDigits;
|
40
|
-
_idNext =
|
62
|
+
_idNext = 4;
|
41
63
|
}
|
42
64
|
|
65
|
+
/**
|
66
|
+
* @dev mints a token for a specified token id
|
67
|
+
* not part of the IRegistry interface only needed for
|
68
|
+
* initial registry setup (protocol and global registry objects)
|
69
|
+
*/
|
70
|
+
function mint(address to, uint256 tokenId) external onlyRegistry {
|
71
|
+
_totalMinted++;
|
72
|
+
_safeMint(to, tokenId);
|
73
|
+
}
|
74
|
+
|
75
|
+
|
43
76
|
/**
|
44
77
|
* @dev mints the next token to register new objects
|
78
|
+
* non-zero transferInterceptors are recorded and called during nft token transfers.
|
79
|
+
* the contract receiving such a notification may decides to revert or record the transfer
|
45
80
|
*/
|
46
81
|
function mint(
|
47
82
|
address to,
|
83
|
+
address interceptor,
|
48
84
|
string memory uri
|
49
|
-
)
|
85
|
+
) public onlyRegistry returns (uint256 tokenId) {
|
50
86
|
tokenId = _getNextTokenId();
|
51
87
|
|
88
|
+
if (interceptor != address(0)) {
|
89
|
+
_interceptor[tokenId] = interceptor;
|
90
|
+
}
|
91
|
+
|
52
92
|
if (bytes(uri).length > 0) {
|
53
93
|
_uri[tokenId] = uri;
|
54
94
|
}
|
55
95
|
|
56
|
-
_safeMint(to, tokenId);
|
57
96
|
_totalMinted++;
|
97
|
+
_safeMint(to, tokenId);
|
58
98
|
}
|
59
99
|
|
100
|
+
|
60
101
|
/**
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
102
|
+
* @dev amend the open zeppelin transferFrom function by an interceptor call if such an interceptor is defined for the nft token id
|
103
|
+
* this allows distribution, product and pool components to be notified when distributors, policies and bundles are transferred.
|
104
|
+
*/
|
105
|
+
function transferFrom(address from, address to, uint256 tokenId) public override (ERC721, IERC721) {
|
106
|
+
super.transferFrom(from, to, tokenId);
|
107
|
+
|
108
|
+
if (_interceptor[tokenId] != address(0)) {
|
109
|
+
ITransferInterceptor(_interceptor[tokenId]).nftTransferFrom(from, to, tokenId);
|
110
|
+
}
|
68
111
|
}
|
69
112
|
|
70
|
-
|
71
|
-
|
113
|
+
|
114
|
+
function burn(uint256 tokenId) external onlyRegistry {
|
115
|
+
_requireOwned(tokenId);
|
72
116
|
_burn(tokenId);
|
73
117
|
delete _uri[tokenId];
|
74
118
|
}
|
@@ -76,29 +120,36 @@ contract ChainNft is ERC721Enumerable, IChainNft {
|
|
76
120
|
function setURI(
|
77
121
|
uint256 tokenId,
|
78
122
|
string memory uri
|
79
|
-
) external
|
80
|
-
|
123
|
+
) external onlyRegistry {
|
124
|
+
if (bytes(uri).length == 0) { revert NftUriEmpty(); }
|
125
|
+
if (bytes(_uri[tokenId]).length > 0) { revert NftUriAlreadySet(); }
|
81
126
|
|
82
|
-
|
127
|
+
_requireOwned(tokenId);
|
83
128
|
_uri[tokenId] = uri;
|
84
129
|
}
|
85
130
|
|
86
|
-
function exists(uint256 tokenId) external view
|
87
|
-
return
|
131
|
+
function exists(uint256 tokenId) external view returns (bool) {
|
132
|
+
return _ownerOf(tokenId) != address(0);
|
88
133
|
}
|
89
134
|
|
90
135
|
function tokenURI(
|
91
136
|
uint256 tokenId
|
92
137
|
) public view override returns (string memory) {
|
93
|
-
|
138
|
+
// gif generally does not revert for view functions
|
139
|
+
// this is an exception to keep the openzeppelin nft semantics
|
140
|
+
_requireOwned(tokenId);
|
94
141
|
return _uri[tokenId];
|
95
142
|
}
|
96
143
|
|
97
|
-
function
|
144
|
+
function getInterceptor(uint256 tokenId) external view returns (address) {
|
145
|
+
return _interceptor[tokenId];
|
146
|
+
}
|
147
|
+
|
148
|
+
function getRegistryAddress() external view returns (address) {
|
98
149
|
return _registry;
|
99
150
|
}
|
100
151
|
|
101
|
-
function totalMinted() external view
|
152
|
+
function totalMinted() external view returns (uint256) {
|
102
153
|
return _totalMinted;
|
103
154
|
}
|
104
155
|
|
@@ -148,12 +199,4 @@ contract ChainNft is ERC721Enumerable, IChainNft {
|
|
148
199
|
id = calculateTokenId(_idNext);
|
149
200
|
_idNext++;
|
150
201
|
}
|
151
|
-
|
152
|
-
function _countDigits(uint256 num) private pure returns (uint256 count) {
|
153
|
-
count = 0;
|
154
|
-
while (num != 0) {
|
155
|
-
count++;
|
156
|
-
num /= 10;
|
157
|
-
}
|
158
|
-
}
|
159
202
|
}
|
@@ -1,57 +1,94 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
5
|
|
6
|
+
import {ChainNft} from "./ChainNft.sol";
|
6
7
|
import {NftId} from "../types/NftId.sol";
|
7
8
|
import {ObjectType} from "../types/ObjectType.sol";
|
8
9
|
import {VersionPart} from "../types/Version.sol";
|
9
|
-
import {IChainNft} from "./IChainNft.sol";
|
10
10
|
|
11
11
|
interface IRegistry is IERC165 {
|
12
|
+
|
13
|
+
event LogInitialMajorVersionSet(VersionPart majorVersion);
|
14
|
+
event LogMajorVersionSet(VersionPart majorVersionMax);
|
15
|
+
event LogRegistration(ObjectInfo info);
|
16
|
+
event LogTokenStateSet(address token, VersionPart majorVersion, bool active);
|
17
|
+
event LogServiceNameRegistration(string serviceName, VersionPart majorVersion);
|
18
|
+
|
19
|
+
// supported versions
|
20
|
+
error MajorVersionMaxIncreaseInvalid(VersionPart newMajorVersionMax, VersionPart existingMaxMajorVersion);
|
21
|
+
|
22
|
+
// token whitelisting
|
23
|
+
error TokenNotRegistered(address token);
|
24
|
+
error NotToken(address token);
|
25
|
+
error TokenMajorVersionInvalid(VersionPart majorVersion);
|
26
|
+
|
27
|
+
// register
|
28
|
+
error NotRegistryService();
|
29
|
+
error ZeroParentAddress();
|
30
|
+
error ContractAlreadyRegistered(address objectAddress);
|
31
|
+
error InvalidServiceVersion(VersionPart majorVersion);
|
32
|
+
error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
|
33
|
+
|
34
|
+
// approve
|
35
|
+
error NotOwner(address account);
|
36
|
+
error NotRegisteredContract(NftId registrarNftId);
|
37
|
+
error NotService(NftId registrarNftId);
|
38
|
+
error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
|
39
|
+
|
40
|
+
|
12
41
|
struct ObjectInfo {
|
13
42
|
NftId nftId;
|
14
43
|
NftId parentNftId;
|
15
44
|
ObjectType objectType;
|
45
|
+
bool isInterceptor;
|
16
46
|
address objectAddress;
|
17
47
|
address initialOwner;
|
18
48
|
bytes data;
|
19
|
-
}
|
49
|
+
}// TODO delete nftId and initialOwner(if not used) from struct
|
50
|
+
// TODO strong disagree, keep nftId there (lets keep get object info return object consistent)
|
51
|
+
|
52
|
+
function setMajorVersion(VersionPart newMajorVersionMax) external;
|
53
|
+
|
54
|
+
function register(ObjectInfo memory info) external returns (NftId nftId);
|
20
55
|
|
21
|
-
function
|
56
|
+
function setTokenActive(address token, VersionPart majorVersion, bool active) external;
|
22
57
|
|
23
|
-
function
|
24
|
-
NftId parentNftid,
|
25
|
-
ObjectType objectType,
|
26
|
-
address initialOwner,
|
27
|
-
bytes memory data
|
28
|
-
) external returns (NftId nftId);
|
58
|
+
function getMajorVersionMin() external view returns (VersionPart);
|
29
59
|
|
30
|
-
function
|
60
|
+
function getMajorVersionMax() external view returns (VersionPart);
|
61
|
+
|
62
|
+
function getMajorVersion() external view returns (VersionPart);
|
31
63
|
|
32
64
|
function getObjectCount() external view returns (uint256);
|
33
65
|
|
34
66
|
function getNftId() external view returns (NftId nftId);
|
35
67
|
|
36
|
-
function getNftId(
|
37
|
-
address objectAddress
|
38
|
-
) external view returns (NftId nftId);
|
68
|
+
function getNftId(address objectAddress) external view returns (NftId nftId);
|
39
69
|
|
40
|
-
function
|
41
|
-
NftId nftId
|
42
|
-
) external view returns (ObjectInfo memory info);
|
70
|
+
function ownerOf(NftId nftId) external view returns (address);
|
43
71
|
|
44
|
-
function
|
45
|
-
NftId nftId
|
46
|
-
) external view returns (string memory name);
|
72
|
+
function ownerOf(address contractAddress) external view returns (address);
|
47
73
|
|
48
|
-
function
|
74
|
+
function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory info);
|
49
75
|
|
50
|
-
function
|
76
|
+
function getObjectInfo(address object) external view returns (ObjectInfo memory info);
|
51
77
|
|
52
78
|
function isRegistered(NftId nftId) external view returns (bool);
|
53
79
|
|
54
|
-
function isRegistered(address
|
80
|
+
function isRegistered(address contractAddress) external view returns (bool);
|
81
|
+
|
82
|
+
function isTokenActive(address token, VersionPart majorVersion) external view returns (bool);
|
83
|
+
|
84
|
+
function getServiceName(NftId nftId) external view returns (string memory name);
|
85
|
+
|
86
|
+
function getServiceAddress(
|
87
|
+
string memory serviceName,
|
88
|
+
VersionPart majorVersion
|
89
|
+
) external view returns (address serviceAddress);
|
90
|
+
|
91
|
+
function getChainNft() external view returns (ChainNft);
|
55
92
|
|
56
|
-
function
|
57
|
-
}
|
93
|
+
function getOwner() external view returns (address);
|
94
|
+
}
|