@etherisc/gif-next 0.0.2-de0a1d3-009 → 0.0.2-e37834a-021
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 +40 -25
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +80 -41
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +101 -61
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +43 -40
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -163
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +6 -185
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -163
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +150 -126
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +110 -52
- 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/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +198 -74
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +285 -178
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +59 -53
- 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/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IService.sol/IService.json +45 -42
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +62 -69
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +55 -62
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +2 -2
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +29 -9
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +28 -8
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +2 -2
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +138 -11
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +138 -11
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +165 -93
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +87 -68
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +45 -61
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +45 -42
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +45 -42
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +45 -42
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +89 -70
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +117 -98
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +141 -12
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +293 -40
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +668 -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 +483 -120
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +885 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +460 -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/IOwnable.sol/IOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +43 -40
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -2
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +132 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +344 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +76 -37
- 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 +4 -27
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +1 -1
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +101 -61
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +150 -126
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +115 -58
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +93 -39
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +81 -75
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +15 -38
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/BaseComponent.sol +12 -27
- package/contracts/components/Distribution.sol +29 -6
- package/contracts/components/IBaseComponent.sol +2 -2
- package/contracts/components/IDistributionComponent.sol +1 -2
- package/contracts/components/IPoolComponent.sol +3 -10
- package/contracts/components/IProductComponent.sol +2 -3
- package/contracts/components/Pool.sol +84 -73
- package/contracts/components/Product.sol +85 -13
- package/contracts/instance/IInstance.sol +4 -3
- package/contracts/instance/Instance.sol +14 -3
- package/contracts/instance/base/ComponentServiceBase.sol +13 -6
- package/contracts/instance/base/IInstanceBase.sol +3 -2
- package/contracts/instance/base/InstanceBase.sol +6 -8
- package/contracts/instance/base/ServiceBase.sol +19 -13
- package/contracts/instance/module/component/ComponentModule.sol +5 -4
- package/contracts/instance/module/component/IComponent.sol +2 -2
- package/contracts/instance/module/pool/IPoolModule.sol +4 -3
- package/contracts/instance/module/pool/PoolModule.sol +12 -7
- package/contracts/instance/module/treasury/ITreasury.sol +7 -5
- package/contracts/instance/module/treasury/TokenHandler.sol +2 -2
- package/contracts/instance/module/treasury/TreasuryModule.sol +21 -28
- package/contracts/instance/service/ComponentOwnerService.sol +181 -66
- package/contracts/instance/service/DistributionService.sol +6 -11
- package/contracts/instance/service/IComponentOwnerService.sol +0 -2
- package/contracts/instance/service/PoolService.sol +19 -19
- package/contracts/instance/service/ProductService.sol +25 -24
- package/contracts/registry/ChainNft.sol +43 -15
- package/contracts/registry/IChainNft.sol +3 -2
- package/contracts/registry/IRegistry.sol +44 -28
- package/contracts/registry/IRegistryService.sol +29 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +382 -273
- package/contracts/registry/RegistryService.sol +375 -0
- package/contracts/registry/RegistryServiceManager.sol +52 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +1 -1
- package/contracts/shared/IRegisterable.sol +7 -9
- package/contracts/shared/IVersionable.sol +40 -9
- package/contracts/shared/NftOwnable.sol +87 -0
- package/contracts/shared/ProxyManager.sol +103 -0
- package/contracts/shared/Registerable.sol +74 -43
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +108 -60
- package/contracts/test/TestDistribution.sol +3 -2
- package/contracts/test/TestPool.sol +4 -2
- package/contracts/test/TestProduct.sol +4 -2
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestService.sol +5 -11
- package/contracts/types/Version.sol +1 -0
- package/package.json +1 -1
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
- package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.dbg.json +0 -4
- package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.json +0 -724
- package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.dbg.json +0 -4
- package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.json +0 -248
- package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
- package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.dbg.json +0 -4
- package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.json +0 -228
- package/contracts/experiment/statemachine/README.md +0 -112
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/registry/RegistryUpgradeable.sol +0 -473
- package/contracts/shared/Proxy.sol +0 -94
- package/contracts/shared/VersionableUpgradeable.sol +0 -133
@@ -1,41 +1,60 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
+
import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
|
4
6
|
import {IRisk} from "../instance/module/risk/IRisk.sol";
|
5
7
|
import {ITreasury} from "../instance/module/treasury/ITreasury.sol";
|
6
8
|
import {IProductService} from "../instance/service/IProductService.sol";
|
7
9
|
import {IProductComponent} from "./IProductComponent.sol";
|
8
|
-
import {NftId} from "../types/NftId.sol";
|
10
|
+
import {NftId, zeroNftId} from "../types/NftId.sol";
|
9
11
|
import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
|
10
12
|
import {ReferralId} from "../types/ReferralId.sol";
|
11
13
|
import {RiskId, RiskIdLib} from "../types/RiskId.sol";
|
12
14
|
import {StateId} from "../types/StateId.sol";
|
13
15
|
import {Timestamp} from "../types/Timestamp.sol";
|
14
|
-
import {Fee} from "../types/Fee.sol";
|
16
|
+
import {Fee, FeeLib} from "../types/Fee.sol";
|
15
17
|
import {BaseComponent} from "./BaseComponent.sol";
|
16
18
|
|
19
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
20
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
21
|
+
import {Registerable} from "../shared/Registerable.sol";
|
22
|
+
|
23
|
+
import {IPool} from "../instance/module/pool/IPoolModule.sol";
|
24
|
+
import {Pool} from "../components/Pool.sol";
|
25
|
+
|
17
26
|
contract Product is BaseComponent, IProductComponent {
|
18
27
|
IProductService internal _productService;
|
19
|
-
|
28
|
+
Pool internal _pool;
|
20
29
|
address internal _distribution;
|
21
30
|
Fee internal _initialProductFee;
|
22
31
|
Fee internal _initialProcessingFee;
|
23
32
|
|
33
|
+
NftId internal _poolNftId;
|
34
|
+
NftId internal _distributionNftId;
|
35
|
+
|
24
36
|
constructor(
|
25
37
|
address registry,
|
26
38
|
NftId instanceNftid,
|
27
39
|
address token,
|
40
|
+
bool isInterceptor,
|
28
41
|
address pool,
|
29
42
|
address distribution,
|
30
43
|
Fee memory productFee,
|
31
|
-
Fee memory processingFee
|
32
|
-
|
44
|
+
Fee memory processingFee,
|
45
|
+
address initialOwner
|
46
|
+
) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
|
33
47
|
// TODO add validation
|
34
48
|
_productService = _instance.getProductService();
|
35
|
-
_pool = pool;
|
49
|
+
_pool = Pool(pool);
|
36
50
|
_distribution = distribution;
|
37
51
|
_initialProductFee = productFee;
|
38
|
-
_initialProcessingFee = processingFee;
|
52
|
+
_initialProcessingFee = processingFee;
|
53
|
+
|
54
|
+
_poolNftId = getRegistry().getNftId(address(_pool));
|
55
|
+
_distributionNftId = getRegistry().getNftId(_distribution);
|
56
|
+
|
57
|
+
_registerInterface(type(IProductComponent).interfaceId);
|
39
58
|
}
|
40
59
|
|
41
60
|
|
@@ -172,11 +191,11 @@ contract Product is BaseComponent, IProductComponent {
|
|
172
191
|
}
|
173
192
|
|
174
193
|
function getPoolNftId() external view override returns (NftId poolNftId) {
|
175
|
-
return
|
194
|
+
return getRegistry().getNftId(address(_pool));
|
176
195
|
}
|
177
196
|
|
178
197
|
function getDistributionNftId() external view override returns (NftId distributionNftId) {
|
179
|
-
return
|
198
|
+
return getRegistry().getNftId(_distribution);
|
180
199
|
}
|
181
200
|
|
182
201
|
// from product component
|
@@ -191,7 +210,7 @@ contract Product is BaseComponent, IProductComponent {
|
|
191
210
|
_productService.setFees(productFee, processingFee);
|
192
211
|
}
|
193
212
|
|
194
|
-
|
213
|
+
// TODO delete, call instance intead
|
195
214
|
function getProductFee()
|
196
215
|
external
|
197
216
|
view
|
@@ -220,8 +239,61 @@ contract Product is BaseComponent, IProductComponent {
|
|
220
239
|
}
|
221
240
|
}
|
222
241
|
|
223
|
-
// from
|
224
|
-
|
225
|
-
|
242
|
+
// from IRegisterable
|
243
|
+
|
244
|
+
// TODO used only once, occupies space
|
245
|
+
function getInitialInfo()
|
246
|
+
public
|
247
|
+
view
|
248
|
+
override (IRegisterable, Registerable)
|
249
|
+
returns (IRegistry.ObjectInfo memory, bytes memory)
|
250
|
+
{
|
251
|
+
// from Registerable
|
252
|
+
(
|
253
|
+
IRegistry.ObjectInfo memory productInfo,
|
254
|
+
bytes memory data
|
255
|
+
) = super.getInitialInfo();
|
256
|
+
|
257
|
+
// TODO read pool & distribution fees
|
258
|
+
// 1) from pool -> the only option -> pool must be registered first?
|
259
|
+
// 2) from instance -> all fees are set into instance at product registration which is ongoing here
|
260
|
+
// checks are done in registryProduct() where THIS function is called
|
261
|
+
//require(getRegistry().getObjectInfo(_poolNftId).objectType == POOL(), "POOL_NOT_REGISTERED");
|
262
|
+
//require(getRegistry().getObjectInfo(_distributionNftId).objectType == DISTRIBUTION(), "DISTRIBUTION_NOT_REGISTERED");
|
263
|
+
|
264
|
+
// from PoolComponent
|
265
|
+
(
|
266
|
+
IRegistry.ObjectInfo memory poolInfo,
|
267
|
+
bytes memory poolData
|
268
|
+
) = _pool.getInitialInfo();
|
269
|
+
|
270
|
+
(
|
271
|
+
/*IPool.PoolInfo memory info*/,
|
272
|
+
/*address wallet*/,
|
273
|
+
/*IERC20Metadata token*/,
|
274
|
+
Fee memory initialPoolFee,
|
275
|
+
Fee memory initialStakingFee,
|
276
|
+
Fee memory initialPerformanceFee
|
277
|
+
) = abi.decode(poolData, (IPool.PoolInfo, address, IERC20Metadata, Fee, Fee, Fee));
|
278
|
+
|
279
|
+
// TODO from DistributionComponent
|
280
|
+
|
281
|
+
return (
|
282
|
+
productInfo,
|
283
|
+
abi.encode(
|
284
|
+
ITreasury.TreasuryInfo(
|
285
|
+
_poolNftId,
|
286
|
+
_distributionNftId,
|
287
|
+
_token,
|
288
|
+
_initialProductFee,
|
289
|
+
_initialProcessingFee,
|
290
|
+
initialPoolFee,
|
291
|
+
initialStakingFee,
|
292
|
+
initialPerformanceFee,
|
293
|
+
FeeLib.zeroFee()//_instance.getDistributionFee(_distributionNftId)
|
294
|
+
),
|
295
|
+
_wallet
|
296
|
+
)
|
297
|
+
);
|
226
298
|
}
|
227
299
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {IERC165} from "@
|
4
|
+
import {IERC165} from "@openzeppelin5/contracts/utils/introspection/IERC165.sol";
|
5
5
|
|
6
6
|
import {IVersionable} from "../shared/IVersionable.sol";
|
7
7
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
@@ -18,7 +18,7 @@ import {IRiskModule} from "./module/risk/IRisk.sol";
|
|
18
18
|
import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
|
19
19
|
|
20
20
|
import {IKeyValueStore} from "./base/IKeyValueStore.sol";
|
21
|
-
import {IRegistry
|
21
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
22
22
|
|
23
23
|
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
24
24
|
import {IDistributionService} from "./service/IDistributionService.sol";
|
@@ -45,7 +45,8 @@ interface IInstance is
|
|
45
45
|
function getOwner() external view override (IOwnable, IAccessModule) returns(address owner);
|
46
46
|
|
47
47
|
function getKeyValueStore() external view override (IInstanceBase) returns (IKeyValueStore keyValueStore);
|
48
|
-
|
48
|
+
|
49
|
+
function getComponentOwnerService() external view override (IInstanceBase, IComponentModule, IPoolModule, ITreasuryModule) returns(IComponentOwnerService);
|
49
50
|
function getDistributionService() external view override returns(IDistributionService);
|
50
51
|
function getProductService() external view override (IInstanceBase, IBundleModule, IPolicyModule) returns(IProductService);
|
51
52
|
function getPoolService() external view override (IInstanceBase, IBundleModule, IPoolModule) returns(IPoolService);
|
@@ -22,6 +22,7 @@ import {IComponentModule} from "./module/component/IComponent.sol";
|
|
22
22
|
import {IPoolModule} from "./module/pool/IPoolModule.sol";
|
23
23
|
import {IPolicyModule} from "./module/policy/IPolicy.sol";
|
24
24
|
import {IInstanceBase} from "./base/IInstanceBase.sol";
|
25
|
+
import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
|
25
26
|
|
26
27
|
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
27
28
|
import {IDistributionService} from "./service/IDistributionService.sol";
|
@@ -43,9 +44,10 @@ contract Instance is
|
|
43
44
|
{
|
44
45
|
constructor(
|
45
46
|
address registry,
|
46
|
-
NftId registryNftId
|
47
|
+
NftId registryNftId,
|
48
|
+
address initialOwner
|
47
49
|
)
|
48
|
-
InstanceBase(registry, registryNftId)
|
50
|
+
InstanceBase(registry, registryNftId, initialOwner)
|
49
51
|
AccessModule()
|
50
52
|
BundleModule()
|
51
53
|
DistributionModule()
|
@@ -62,10 +64,19 @@ contract Instance is
|
|
62
64
|
initializeRiskModule(_keyValueStore);
|
63
65
|
}
|
64
66
|
|
67
|
+
modifier onlyComponentOwnerService() override (ComponentModule, PoolModule, TreasuryModule) {
|
68
|
+
require(
|
69
|
+
msg.sender == address(this.getComponentOwnerService()),
|
70
|
+
"ERROR:CMP-001:NOT_REGISTRY_SERVICE"
|
71
|
+
);
|
72
|
+
_;
|
73
|
+
}
|
74
|
+
|
65
75
|
function getRegistry() public view override (Registerable, IPolicyModule) returns (IRegistry registry) { return super.getRegistry(); }
|
76
|
+
|
66
77
|
function getKeyValueStore() public view override (InstanceBase) returns (IKeyValueStore keyValueStore) { return super.getKeyValueStore(); }
|
67
78
|
|
68
|
-
function getComponentOwnerService() external view override (IComponentModule,
|
79
|
+
function getComponentOwnerService() external view override (IInstanceBase, IComponentModule, ITreasuryModule, IPoolModule) returns(IComponentOwnerService service) { return _componentOwnerService; }
|
69
80
|
function getDistributionService() external view override (IInstanceBase) returns(IDistributionService service) { return _distributionService; }
|
70
81
|
function getProductService() external view override (IBundleModule, IPolicyModule, IInstanceBase) returns(IProductService service) { return _productService; }
|
71
82
|
function getPoolService() external view override (IBundleModule, IPoolModule, IInstanceBase) returns(IPoolService service) { return _poolService; }
|
@@ -2,21 +2,23 @@
|
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
|
+
import {IRegistryService} from "../../registry/IRegistryService.sol";
|
5
6
|
import {IInstance} from "../../instance/IInstance.sol";
|
6
7
|
import {ObjectType, INSTANCE, PRODUCT, POOL} from "../../types/ObjectType.sol";
|
7
8
|
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
8
9
|
|
9
10
|
import {ServiceBase} from "./ServiceBase.sol";
|
11
|
+
import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
|
10
12
|
|
11
13
|
abstract contract ComponentServiceBase is ServiceBase {
|
12
14
|
|
13
15
|
constructor(
|
14
16
|
address registry,
|
15
|
-
NftId registryNftId
|
17
|
+
NftId registryNftId,
|
18
|
+
address initialOwner
|
16
19
|
)
|
17
|
-
ServiceBase(registry, registryNftId)
|
18
|
-
// solhint-disable-next-line no-empty-blocks
|
19
20
|
{
|
21
|
+
_initializeServiceBase(registry, registryNftId, initialOwner);
|
20
22
|
}
|
21
23
|
|
22
24
|
|
@@ -30,13 +32,18 @@ abstract contract ComponentServiceBase is ServiceBase {
|
|
30
32
|
IInstance instance
|
31
33
|
)
|
32
34
|
{
|
33
|
-
NftId componentNftId =
|
35
|
+
NftId componentNftId = getRegistry().getNftId(msg.sender);
|
34
36
|
require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
|
35
37
|
|
36
|
-
info =
|
38
|
+
info = getRegistry().getObjectInfo(componentNftId);
|
37
39
|
require(info.objectType == objectType, "OBJECT_TYPE_INVALID");
|
38
40
|
|
39
|
-
address instanceAddress =
|
41
|
+
address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
|
40
42
|
instance = IInstance(instanceAddress);
|
41
43
|
}
|
44
|
+
|
45
|
+
function getRegistryService() public view virtual returns (IRegistryService) {
|
46
|
+
address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
|
47
|
+
return IRegistryService(service);
|
48
|
+
}
|
42
49
|
}
|
@@ -1,10 +1,11 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {Key32} from "../../types/Key32.sol";
|
5
5
|
import {StateId} from "../../types/StateId.sol";
|
6
6
|
|
7
7
|
import {IKeyValueStore} from "./IKeyValueStore.sol";
|
8
|
+
|
8
9
|
import {IComponentOwnerService} from "../service/IComponentOwnerService.sol";
|
9
10
|
import {IDistributionService} from "../service/IDistributionService.sol";
|
10
11
|
import {IProductService} from "../service/IProductService.sol";
|
@@ -15,7 +16,7 @@ interface IInstanceBase {
|
|
15
16
|
function updateState(Key32 key, StateId state) external;
|
16
17
|
function getState(Key32 key) external view returns (StateId state);
|
17
18
|
|
18
|
-
function getComponentOwnerService() external view returns(IComponentOwnerService
|
19
|
+
function getComponentOwnerService() external view returns(IComponentOwnerService);
|
19
20
|
function getDistributionService() external view returns(IDistributionService);
|
20
21
|
function getProductService() external view returns(IProductService service);
|
21
22
|
function getPoolService() external view returns(IPoolService service);
|
@@ -1,5 +1,5 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {Versionable} from "../../shared/Versionable.sol";
|
5
5
|
import {Registerable} from "../../shared/Registerable.sol";
|
@@ -35,11 +35,13 @@ abstract contract InstanceBase is
|
|
35
35
|
|
36
36
|
constructor(
|
37
37
|
address registry,
|
38
|
-
NftId registryNftId
|
38
|
+
NftId registryNftId,
|
39
|
+
address initialOwner
|
39
40
|
)
|
40
|
-
Registerable(registry, registryNftId)
|
41
41
|
Versionable()
|
42
42
|
{
|
43
|
+
bytes memory data = "";
|
44
|
+
_initializeRegisterable(registry, registryNftId, INSTANCE(), true, initialOwner, data);
|
43
45
|
_keyValueStore = new KeyValueStore();
|
44
46
|
|
45
47
|
_registerInterface(type(IInstance).interfaceId);
|
@@ -67,10 +69,6 @@ abstract contract InstanceBase is
|
|
67
69
|
}
|
68
70
|
|
69
71
|
// from registerable
|
70
|
-
function getType() external pure override returns (ObjectType objectType) {
|
71
|
-
return INSTANCE();
|
72
|
-
}
|
73
|
-
|
74
72
|
|
75
73
|
// internal / private functions
|
76
74
|
function _linkToServicesInRegistry() internal {
|
@@ -82,7 +80,7 @@ abstract contract InstanceBase is
|
|
82
80
|
}
|
83
81
|
|
84
82
|
function _getAndCheck(string memory serviceName, VersionPart majorVersion) internal view returns (address serviceAddress) {
|
85
|
-
serviceAddress =
|
83
|
+
serviceAddress = getRegistry().getServiceAddress(serviceName, majorVersion);
|
86
84
|
require(
|
87
85
|
serviceAddress != address(0),
|
88
86
|
"ERROR:INS-001:NOT_REGISTERED"
|
@@ -3,7 +3,7 @@ pragma solidity ^0.8.19;
|
|
3
3
|
|
4
4
|
import {NftId, zeroNftId} from "../../types/NftId.sol";
|
5
5
|
import {ObjectType, SERVICE} from "../../types/ObjectType.sol";
|
6
|
-
import {Version, VersionPart} from "../../types/Version.sol";
|
6
|
+
import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
|
7
7
|
|
8
8
|
import {Registerable} from "../../shared/Registerable.sol";
|
9
9
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
@@ -16,22 +16,28 @@ abstract contract ServiceBase is
|
|
16
16
|
Versionable,
|
17
17
|
IService
|
18
18
|
{
|
19
|
+
function getName() public pure virtual override returns(string memory name);
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
NftId registryNftId
|
23
|
-
)
|
24
|
-
Registerable(registry, registryNftId)
|
25
|
-
Versionable()
|
26
|
-
{
|
27
|
-
_registerInterface(type(IService).interfaceId);
|
21
|
+
function getMajorVersion() public view virtual override returns(VersionPart majorVersion) {
|
22
|
+
return getVersion().toMajorPart();
|
28
23
|
}
|
29
24
|
|
30
|
-
|
31
|
-
|
25
|
+
// from Versionable
|
26
|
+
function getVersion()
|
27
|
+
public
|
28
|
+
pure
|
29
|
+
virtual override (IVersionable, Versionable)
|
30
|
+
returns(Version)
|
31
|
+
{
|
32
|
+
return VersionLib.toVersion(3,0,0);
|
32
33
|
}
|
33
34
|
|
34
|
-
function
|
35
|
-
|
35
|
+
function _initializeServiceBase(address registry, NftId registryNftId, address initialOwner)
|
36
|
+
internal
|
37
|
+
//onlyInitializing //TODO uncomment when "fully" upgradeable
|
38
|
+
{// service must provide its name and version upon registration
|
39
|
+
bytes memory data = abi.encode(getName(), getMajorVersion());
|
40
|
+
_initializeRegisterable(registry, registryNftId, SERVICE(), false, initialOwner, data);
|
41
|
+
_registerInterface(type(IService).interfaceId);
|
36
42
|
}
|
37
43
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC20Metadata} from "@
|
4
|
+
import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
|
6
6
|
import {IComponentModule} from "./IComponent.sol";
|
7
7
|
|
@@ -17,10 +17,11 @@ abstract contract ComponentModule is
|
|
17
17
|
|
18
18
|
NftId[] private _nftIds;
|
19
19
|
|
20
|
-
modifier
|
20
|
+
// TODO try to keep 1 modifier in 1 place...
|
21
|
+
modifier onlyComponentOwnerService() virtual {
|
21
22
|
require(
|
22
23
|
msg.sender == address(this.getComponentOwnerService()),
|
23
|
-
"ERROR:CMP-001:
|
24
|
+
"ERROR:CMP-001:NOT_COMPONENT_OWNER_SERVICE"
|
24
25
|
);
|
25
26
|
_;
|
26
27
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC20Metadata} from "@
|
4
|
+
import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
|
6
6
|
|
7
7
|
import {StateId} from "../../../types/StateId.sol";
|
@@ -6,6 +6,7 @@ import {NftId} from "../../../types/NftId.sol";
|
|
6
6
|
import {UFixed} from "../../../types/UFixed.sol";
|
7
7
|
import {IProductService} from "../../service/IProductService.sol";
|
8
8
|
import {IPoolService} from "../../service/IPoolService.sol";
|
9
|
+
import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
|
9
10
|
|
10
11
|
interface IPool {
|
11
12
|
struct PoolInfo {
|
@@ -17,9 +18,8 @@ interface IPool {
|
|
17
18
|
interface IPoolModule is IPool {
|
18
19
|
|
19
20
|
function registerPool(
|
20
|
-
NftId
|
21
|
-
|
22
|
-
UFixed collateralizationLevel
|
21
|
+
NftId nftId,
|
22
|
+
PoolInfo memory info
|
23
23
|
) external;
|
24
24
|
|
25
25
|
function addBundleToPool(
|
@@ -36,5 +36,6 @@ interface IPoolModule is IPool {
|
|
36
36
|
function getBundleNftId(NftId poolNftId, uint256 index) external view returns (NftId bundleNftId);
|
37
37
|
|
38
38
|
// repeat service linked signatures to avoid linearization issues
|
39
|
+
function getComponentOwnerService() external view returns(IComponentOwnerService);
|
39
40
|
function getPoolService() external returns(IPoolService);
|
40
41
|
}
|
@@ -26,6 +26,16 @@ abstract contract PoolModule is
|
|
26
26
|
// mapping(NftId poolNftId => PoolInfo info) private _poolInfo;
|
27
27
|
mapping(NftId poolNftId => LibNftIdSet.Set bundles) private _bundlesForPool;
|
28
28
|
|
29
|
+
|
30
|
+
// TODO try to keep 1 modifier in 1 place...
|
31
|
+
modifier onlyComponentOwnerService() virtual {
|
32
|
+
require(
|
33
|
+
msg.sender == address(this.getComponentOwnerService()),
|
34
|
+
"ERROR:CMP-001:NOT_COMPONENT_OWNER_SERVICE"
|
35
|
+
);
|
36
|
+
_;
|
37
|
+
}
|
38
|
+
|
29
39
|
modifier poolServiceCallingPool() {
|
30
40
|
require(
|
31
41
|
msg.sender == address(this.getPoolService()),
|
@@ -40,17 +50,12 @@ abstract contract PoolModule is
|
|
40
50
|
|
41
51
|
function registerPool(
|
42
52
|
NftId nftId,
|
43
|
-
|
44
|
-
UFixed collateralizationRate
|
53
|
+
PoolInfo memory info
|
45
54
|
)
|
46
55
|
public
|
56
|
+
onlyComponentOwnerService
|
47
57
|
override
|
48
58
|
{
|
49
|
-
PoolInfo memory info = PoolInfo(
|
50
|
-
isVerifying,
|
51
|
-
collateralizationRate
|
52
|
-
);
|
53
|
-
|
54
59
|
_create(POOL(), nftId, abi.encode(info));
|
55
60
|
}
|
56
61
|
|
@@ -1,10 +1,11 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC20Metadata} from "@
|
4
|
+
import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
import {IDistributionComponent} from "../../../components/IDistributionComponent.sol";
|
6
6
|
import {IPoolComponent} from "../../../components/IPoolComponent.sol";
|
7
7
|
import {IProductComponent} from "../../../components/IProductComponent.sol";
|
8
|
+
import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
|
8
9
|
|
9
10
|
import {NftId} from "../../../types/NftId.sol";
|
10
11
|
import {UFixed} from "../../../types/UFixed.sol";
|
@@ -33,9 +34,8 @@ interface ITreasury {
|
|
33
34
|
interface ITreasuryModule is ITreasury {
|
34
35
|
|
35
36
|
function registerProductSetup(
|
36
|
-
|
37
|
-
|
38
|
-
IDistributionComponent distribution
|
37
|
+
NftId productNftId,
|
38
|
+
TreasuryInfo memory info
|
39
39
|
) external;
|
40
40
|
|
41
41
|
function setTreasuryInfo(
|
@@ -79,4 +79,6 @@ interface ITreasuryModule is ITreasury {
|
|
79
79
|
uint256 a,
|
80
80
|
int8 exp
|
81
81
|
) external pure returns (UFixed);
|
82
|
+
|
83
|
+
function getComponentOwnerService() external view returns(IComponentOwnerService);
|
82
84
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC20Metadata} from "@
|
4
|
+
import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
|
6
6
|
import {NftId} from "../../../types/NftId.sol";
|
7
7
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC20Metadata} from "@
|
4
|
+
import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
import {IDistributionComponent} from "../../../components/IDistributionComponent.sol";
|
6
6
|
import {IPoolComponent} from "../../../components/IPoolComponent.sol";
|
7
7
|
import {IProductComponent} from "../../../components/IProductComponent.sol";
|
@@ -25,48 +25,41 @@ abstract contract TreasuryModule is
|
|
25
25
|
mapping(NftId componentNftId => TokenHandler tokenHandler) internal _tokenHandler;
|
26
26
|
Fee internal _zeroFee;
|
27
27
|
|
28
|
+
modifier onlyComponentOwnerService() virtual {
|
29
|
+
require(
|
30
|
+
msg.sender == address(this.getComponentOwnerService()),
|
31
|
+
"ERROR:CMP-001:NOT_COPONENT_OWNER_SERVICE"
|
32
|
+
);
|
33
|
+
_;
|
34
|
+
}
|
28
35
|
|
29
|
-
function
|
36
|
+
function _initializeTreasuryModule(IKeyValueStore keyValueStore) internal {
|
37
|
+
//_initializeModuleBase(keyValueStore);
|
30
38
|
_initialize(keyValueStore);
|
31
39
|
_zeroFee = FeeLib.zeroFee();
|
32
40
|
}
|
33
41
|
|
34
42
|
function registerProductSetup(
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
43
|
+
NftId productNftId,
|
44
|
+
TreasuryInfo memory setup
|
45
|
+
)
|
46
|
+
external
|
47
|
+
onlyComponentOwnerService
|
39
48
|
{
|
40
|
-
NftId
|
41
|
-
NftId
|
42
|
-
NftId distributionNftId = distribution.getNftId();
|
43
|
-
|
44
|
-
require(productNftId.gtz(), "ERROR:TRS-010:PRODUCT_UNDEFINED");
|
45
|
-
require(poolNftId.gtz(), "ERROR:TRS-011:POOL_UNDEFINED");
|
49
|
+
NftId poolNftId = setup.poolNftId;
|
50
|
+
NftId distributionNftId = setup.distributionNftId;
|
46
51
|
|
47
52
|
require(address(_tokenHandler[productNftId]) == address(0), "ERROR:TRS-012:TOKEN_HANDLER_ALREADY_REGISTERED");
|
48
53
|
require(_productNft[poolNftId].eqz(), "ERROR:TRS-013:POOL_ALREADY_LINKED");
|
49
54
|
require(_productNft[distributionNftId].eqz(), "ERROR:TRS-014:COMPENSATION_ALREADY_LINKED");
|
50
55
|
|
56
|
+
// TODO deploy TokenHandler with separate contract to save space
|
51
57
|
// deploy product specific handler contract
|
52
|
-
|
53
|
-
_tokenHandler[productNftId] = new TokenHandler(productNftId, address(token));
|
58
|
+
_tokenHandler[productNftId] = new TokenHandler(productNftId, address(setup.token));
|
54
59
|
_productNft[distributionNftId] = productNftId;
|
55
60
|
_productNft[poolNftId] = productNftId;
|
56
61
|
|
57
|
-
|
58
|
-
poolNftId,
|
59
|
-
distributionNftId,
|
60
|
-
token,
|
61
|
-
product.getProductFee(),
|
62
|
-
product.getProcessingFee(),
|
63
|
-
pool.getPoolFee(),
|
64
|
-
pool.getStakingFee(),
|
65
|
-
pool.getPerformanceFee(),
|
66
|
-
distribution.getDistributionFee()
|
67
|
-
);
|
68
|
-
|
69
|
-
_create(TREASURY(), productNftId, abi.encode(info));
|
62
|
+
_create(TREASURY(), productNftId, abi.encode(setup));
|
70
63
|
}
|
71
64
|
|
72
65
|
function setTreasuryInfo(
|