@etherisc/gif-next 0.0.2-bca36d7-613 → 0.0.2-bdd64e2-180
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 +4 -0
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +13 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +75 -15
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +13 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +52 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +112 -13
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +39 -18
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
- 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 +1 -1
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +0 -13
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +1 -1
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +403 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +124 -101
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +34 -47
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +143 -38
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +169 -33
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +71 -11
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +5 -0
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.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/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
- 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 +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +18 -18
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +657 -0
- 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/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +796 -0
- 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/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +309 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -19
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +258 -24
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +20 -44
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +49 -28
- 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 +1 -1
- 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 +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +11 -11
- 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 +2 -2
- 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/DistributorType.sol/DistributorTypeLib.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/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.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/RoleId.sol/RoleIdLib.json +2 -2
- 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/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.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 +22 -3
- package/contracts/components/BaseComponent.sol +8 -3
- package/contracts/components/Distribution.sol +13 -13
- package/contracts/components/IBaseComponent.sol +1 -0
- package/contracts/components/IDistributionComponent.sol +3 -0
- package/contracts/components/Pool.sol +15 -27
- package/contracts/components/Product.sol +1 -1
- package/contracts/instance/AccessManagedSimple.sol +1 -8
- package/contracts/instance/IInstance.sol +15 -4
- package/contracts/instance/Instance.sol +16 -15
- package/contracts/instance/InstanceAccessManager.sol +1 -1
- package/contracts/instance/InstanceReader.sol +17 -1
- package/contracts/instance/InstanceService.sol +51 -7
- package/contracts/instance/base/ComponentServiceBase.sol +2 -10
- package/contracts/instance/module/IBundle.sol +1 -0
- package/contracts/instance/module/ISetup.sol +1 -0
- package/contracts/instance/service/DistributionService.sol +105 -0
- package/contracts/instance/service/DistributionServiceManager.sol +53 -0
- package/contracts/instance/service/PoolService.sol +211 -0
- package/contracts/instance/service/PoolServiceManager.sol +53 -0
- package/contracts/registry/IRegistry.sol +38 -2
- package/contracts/registry/IRegistryService.sol +0 -2
- package/contracts/registry/Registry.sol +94 -28
- package/contracts/registry/RegistryService.sol +2 -47
- package/contracts/registry/RegistryServiceManager.sol +21 -5
- package/contracts/registry/TokenRegistry.sol +111 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/shared/Registerable.sol +1 -0
- package/contracts/types/RoleId.sol +7 -0
- package/contracts/types/StateId.sol +4 -0
- package/contracts/types/Version.sol +4 -1
- package/package.json +1 -1
@@ -11,13 +11,15 @@ import {IInstance} from "../instance/IInstance.sol";
|
|
11
11
|
import {IInstance} from "../instance/IInstance.sol";
|
12
12
|
import {IComponentOwnerService} from "../instance/service/IComponentOwnerService.sol";
|
13
13
|
import {IBaseComponent} from "./IBaseComponent.sol";
|
14
|
-
import {NftId} from "../types/NftId.sol";
|
14
|
+
import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
|
15
15
|
import {ObjectType} from "../types/ObjectType.sol";
|
16
16
|
|
17
17
|
abstract contract BaseComponent is
|
18
18
|
Registerable,
|
19
19
|
IBaseComponent
|
20
20
|
{
|
21
|
+
using NftIdLib for NftId;
|
22
|
+
|
21
23
|
IComponentOwnerService internal _componentOwnerService;
|
22
24
|
|
23
25
|
address internal _deployer;
|
@@ -29,7 +31,6 @@ abstract contract BaseComponent is
|
|
29
31
|
constructor(
|
30
32
|
address registry,
|
31
33
|
NftId instanceNftId,
|
32
|
-
NftId productNftId,
|
33
34
|
address token,
|
34
35
|
ObjectType componentType,
|
35
36
|
bool isInterceptor,
|
@@ -49,7 +50,6 @@ abstract contract BaseComponent is
|
|
49
50
|
_componentOwnerService = _instance.getComponentOwnerService();
|
50
51
|
_wallet = address(this);
|
51
52
|
_token = IERC20Metadata(token);
|
52
|
-
_productNftId = productNftId;
|
53
53
|
|
54
54
|
_registerInterface(type(IBaseComponent).interfaceId);
|
55
55
|
}
|
@@ -80,6 +80,11 @@ abstract contract BaseComponent is
|
|
80
80
|
return _instance;
|
81
81
|
}
|
82
82
|
|
83
|
+
function setProductNftId(NftId productNftId) public override onlyOwner {
|
84
|
+
require(_productNftId.eq(zeroNftId()), "product nft id already set");
|
85
|
+
_productNftId = productNftId;
|
86
|
+
}
|
87
|
+
|
83
88
|
function getProductNftId() public view override returns (NftId productNftId) {
|
84
89
|
return _productNftId;
|
85
90
|
}
|
@@ -38,20 +38,19 @@ contract Distribution is
|
|
38
38
|
constructor(
|
39
39
|
address registry,
|
40
40
|
NftId instanceNftId,
|
41
|
-
NftId productNftId,
|
42
41
|
// TODO refactor into tokenNftId
|
43
42
|
address token,
|
44
43
|
bool verifying,
|
45
44
|
Fee memory distributionFee,
|
46
45
|
address initialOwner
|
47
46
|
)
|
48
|
-
BaseComponent(registry, instanceNftId,
|
47
|
+
BaseComponent(registry, instanceNftId, token, DISTRIBUTION(), true, initialOwner)
|
49
48
|
{
|
50
49
|
_isVerifying = verifying;
|
51
50
|
_initialDistributionFee = distributionFee;
|
52
51
|
|
52
|
+
_distributionService = _instance.getDistributionService();
|
53
53
|
// TODO: reactivate when services are available again
|
54
|
-
// _distributionService = _instance.getDistributionService();
|
55
54
|
// _productService = _instance.getProductService();
|
56
55
|
|
57
56
|
_registerInterface(type(IDistributionComponent).interfaceId);
|
@@ -122,20 +121,21 @@ contract Distribution is
|
|
122
121
|
return false;
|
123
122
|
}
|
124
123
|
|
125
|
-
function
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
}
|
124
|
+
function getInitialSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
|
125
|
+
return ISetup.DistributionSetupInfo(
|
126
|
+
_productNftId,
|
127
|
+
TokenHandler(address(_token)),
|
128
|
+
_initialDistributionFee,
|
129
|
+
_isVerifying,
|
130
|
+
address(this)
|
131
|
+
);
|
132
|
+
}
|
135
133
|
|
134
|
+
function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
|
136
135
|
InstanceReader reader = _instance.getInstanceReader();
|
137
136
|
return reader.getDistributionSetupInfo(getNftId());
|
138
137
|
}
|
138
|
+
|
139
139
|
|
140
140
|
/// @dev returns true iff the component needs to be called when selling/renewing policis
|
141
141
|
function isVerifying() external view returns (bool verifying) {
|
@@ -4,9 +4,12 @@ pragma solidity ^0.8.19;
|
|
4
4
|
import {Fee} from "../types/Fee.sol";
|
5
5
|
import {ReferralId} from "../types/Referral.sol";
|
6
6
|
import {NftId} from "../types/NftId.sol";
|
7
|
+
import {ISetup} from "../instance/module/ISetup.sol";
|
7
8
|
|
8
9
|
interface IDistributionComponent {
|
9
10
|
|
11
|
+
function getInitialSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
|
12
|
+
|
10
13
|
function setFees(
|
11
14
|
Fee memory distributionFee
|
12
15
|
) external;
|
@@ -55,7 +55,6 @@ contract Pool is BaseComponent, IPoolComponent {
|
|
55
55
|
constructor(
|
56
56
|
address registry,
|
57
57
|
NftId instanceNftId,
|
58
|
-
NftId productNftId,
|
59
58
|
// TODO refactor into tokenNftId
|
60
59
|
address token,
|
61
60
|
bool isInterceptor,
|
@@ -66,7 +65,7 @@ contract Pool is BaseComponent, IPoolComponent {
|
|
66
65
|
Fee memory performanceFee,
|
67
66
|
address initialOwner
|
68
67
|
)
|
69
|
-
BaseComponent(registry, instanceNftId,
|
68
|
+
BaseComponent(registry, instanceNftId, token, POOL(), isInterceptor, initialOwner)
|
70
69
|
{
|
71
70
|
_isVerifying = verifying;
|
72
71
|
// TODO add validation
|
@@ -75,8 +74,8 @@ contract Pool is BaseComponent, IPoolComponent {
|
|
75
74
|
_initialStakingFee = stakingFee;
|
76
75
|
_initialPerformanceFee = performanceFee;
|
77
76
|
|
77
|
+
_poolService = _instance.getPoolService();
|
78
78
|
// TODO: reactivate when services are available again
|
79
|
-
// _poolService = _instance.getPoolService();
|
80
79
|
// _productService = _instance.getProductService();
|
81
80
|
|
82
81
|
_registerInterface(type(IPoolComponent).interfaceId);
|
@@ -169,21 +168,19 @@ contract Pool is BaseComponent, IPoolComponent {
|
|
169
168
|
_poolService.setBundleFee(bundleNftId, fee);
|
170
169
|
}
|
171
170
|
|
171
|
+
function getInitialSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
|
172
|
+
return ISetup.PoolSetupInfo(
|
173
|
+
_productNftId,
|
174
|
+
TokenHandler(address(_token)),
|
175
|
+
_collateralizationLevel,
|
176
|
+
_initialPoolFee,
|
177
|
+
_initialStakingFee,
|
178
|
+
_initialPerformanceFee,
|
179
|
+
_isVerifying,
|
180
|
+
_wallet
|
181
|
+
);
|
182
|
+
}
|
172
183
|
function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
|
173
|
-
// TODO fix this
|
174
|
-
if (getNftId().eq(zeroNftId())) {
|
175
|
-
return ISetup.PoolSetupInfo(
|
176
|
-
_productNftId,
|
177
|
-
TokenHandler(address(0)),
|
178
|
-
_collateralizationLevel,
|
179
|
-
_initialPoolFee,
|
180
|
-
_initialStakingFee,
|
181
|
-
_initialPerformanceFee,
|
182
|
-
_isVerifying,
|
183
|
-
_wallet
|
184
|
-
);
|
185
|
-
}
|
186
|
-
|
187
184
|
InstanceReader reader = _instance.getInstanceReader();
|
188
185
|
return reader.getPoolSetupInfo(getNftId());
|
189
186
|
}
|
@@ -206,16 +203,7 @@ contract Pool is BaseComponent, IPoolComponent {
|
|
206
203
|
return (
|
207
204
|
info,
|
208
205
|
abi.encode(
|
209
|
-
|
210
|
-
getProductNftId(),
|
211
|
-
TokenHandler(address(0)),
|
212
|
-
_collateralizationLevel,
|
213
|
-
_initialPoolFee,
|
214
|
-
_initialStakingFee,
|
215
|
-
_initialPerformanceFee,
|
216
|
-
_isVerifying,
|
217
|
-
_wallet
|
218
|
-
)
|
206
|
+
getInitialSetupInfo()
|
219
207
|
)
|
220
208
|
);
|
221
209
|
}
|
@@ -49,7 +49,7 @@ contract Product is BaseComponent, IProductComponent {
|
|
49
49
|
Fee memory productFee,
|
50
50
|
Fee memory processingFee,
|
51
51
|
address initialOwner
|
52
|
-
) BaseComponent(registry, instanceNftid,
|
52
|
+
) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
|
53
53
|
// TODO add validation
|
54
54
|
// TODO: reactivate when services are available again
|
55
55
|
// _productService = _instance.getProductService();
|
@@ -24,14 +24,7 @@ abstract contract AccessManagedSimple is Context, IAccessManaged {
|
|
24
24
|
|
25
25
|
bool private _consumingSchedule;
|
26
26
|
|
27
|
-
|
28
|
-
* @dev Initializes the contract connected to an initial authority.
|
29
|
-
*/
|
30
|
-
constructor(address initialAuthority) {
|
31
|
-
initialize(initialAuthority);
|
32
|
-
}
|
33
|
-
|
34
|
-
function initialize(address initialAuthority) public {
|
27
|
+
function initializeAccessManagedSimple(address initialAuthority) internal {
|
35
28
|
require(!_initialized, "AccessManaged: already initialized");
|
36
29
|
_setAuthority(initialAuthority);
|
37
30
|
_initialized = true;
|
@@ -9,20 +9,31 @@ import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
|
9
9
|
import {IDistributionService} from "./service/IDistributionService.sol";
|
10
10
|
import {IPoolService} from "./service/IPoolService.sol";
|
11
11
|
import {IProductService} from "./service/IProductService.sol";
|
12
|
+
import {IBundle} from "./module/IBundle.sol";
|
12
13
|
import {ISetup} from "./module/ISetup.sol";
|
13
14
|
import {NftId} from "../types/NftId.sol";
|
15
|
+
import {StateId} from "../types/StateId.sol";
|
14
16
|
|
15
17
|
interface IInstance is IERC165 {
|
16
18
|
|
17
19
|
function getComponentOwnerService() external view returns (IComponentOwnerService);
|
18
|
-
|
19
|
-
// function getDistributionService() external view returns (IDistributionService);
|
20
|
+
function getDistributionService() external view returns (IDistributionService);
|
20
21
|
// function getProductService() external view returns (IProductService);
|
21
|
-
|
22
|
+
function getPoolService() external view returns (IPoolService);
|
22
23
|
|
23
24
|
function createProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup) external;
|
25
|
+
|
24
26
|
function createDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup) external;
|
25
|
-
function
|
27
|
+
function updateDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup, StateId newState) external;
|
28
|
+
function updateDistributionSetupState(NftId distributionNftId, StateId newState) external;
|
29
|
+
|
30
|
+
function createPoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup) external;
|
31
|
+
function updatePoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup, StateId newState) external;
|
32
|
+
function updatePoolSetupState(NftId poolNftId, StateId newState) external;
|
33
|
+
|
34
|
+
function createBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle) external;
|
35
|
+
function updateBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle, StateId newState) external;
|
36
|
+
function updateBundleState(NftId bundleNftId, StateId newState) external;
|
26
37
|
|
27
38
|
function getInstanceReader() external view returns (InstanceReader);
|
28
39
|
}
|
@@ -25,6 +25,8 @@ import {ERC165} from "../shared/ERC165.sol";
|
|
25
25
|
import {Registerable} from "../shared/Registerable.sol";
|
26
26
|
import {ComponentOwnerService} from "./service/ComponentOwnerService.sol";
|
27
27
|
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
28
|
+
import {IDistributionService} from "./service/IDistributionService.sol";
|
29
|
+
import {IPoolService} from "./service/IPoolService.sol";
|
28
30
|
import {VersionPart} from "../types/Version.sol";
|
29
31
|
|
30
32
|
contract Instance is
|
@@ -53,7 +55,6 @@ contract Instance is
|
|
53
55
|
InstanceReader internal _instanceReader;
|
54
56
|
|
55
57
|
constructor(address accessManagerAddress, address registryAddress, NftId registryNftId)
|
56
|
-
AccessManagedSimple(accessManagerAddress)
|
57
58
|
{
|
58
59
|
initialize(accessManagerAddress, registryAddress, registryNftId, msg.sender);
|
59
60
|
}
|
@@ -61,6 +62,8 @@ contract Instance is
|
|
61
62
|
function initialize(address accessManagerAddress, address registryAddress, NftId registryNftId, address initialOwner) public {
|
62
63
|
require(!_initialized, "Contract instance has already been initialized");
|
63
64
|
|
65
|
+
initializeAccessManagedSimple(accessManagerAddress);
|
66
|
+
|
64
67
|
_accessManager = AccessManagerSimple(accessManagerAddress);
|
65
68
|
_createRole(RoleIdLib.toRoleId(ADMIN_ROLE), "AdminRole", false, false);
|
66
69
|
_createRole(RoleIdLib.toRoleId(PUBLIC_ROLE), "PublicRole", false, false);
|
@@ -218,16 +221,16 @@ contract Instance is
|
|
218
221
|
}
|
219
222
|
|
220
223
|
//--- PoolSetup ------------------------------------------------------//
|
221
|
-
function createPoolSetup(NftId
|
222
|
-
create(_toNftKey32(
|
224
|
+
function createPoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup) external restricted() {
|
225
|
+
create(_toNftKey32(poolNftId, POOL()), abi.encode(setup));
|
223
226
|
}
|
224
227
|
|
225
|
-
function updatePoolSetup(NftId
|
226
|
-
update(_toNftKey32(
|
228
|
+
function updatePoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup, StateId newState) external restricted() {
|
229
|
+
update(_toNftKey32(poolNftId, POOL()), abi.encode(setup), newState);
|
227
230
|
}
|
228
231
|
|
229
|
-
function updatePoolSetupState(NftId
|
230
|
-
updateState(_toNftKey32(
|
232
|
+
function updatePoolSetupState(NftId poolNftId, StateId newState) external restricted() {
|
233
|
+
updateState(_toNftKey32(poolNftId, POOL()), newState);
|
231
234
|
}
|
232
235
|
|
233
236
|
//--- DistributorType ---------------------------------------------------//
|
@@ -416,20 +419,18 @@ contract Instance is
|
|
416
419
|
return ComponentOwnerService(_registry.getServiceAddress("ComponentOwnerService", VersionPart.wrap(3)));
|
417
420
|
}
|
418
421
|
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
// }
|
422
|
+
function getDistributionService() external view returns (IDistributionService) {
|
423
|
+
return IDistributionService(_registry.getServiceAddress("DistributionService", VersionPart.wrap(3)));
|
424
|
+
}
|
423
425
|
|
424
426
|
// TODO reactivate when services are available
|
425
427
|
// function getProductService() external view returns (IProductService) {
|
426
428
|
// return ProductService(_registry.getServiceAddress("ProductService", VersionPart.wrap(3)));
|
427
429
|
// }
|
428
430
|
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
// }
|
431
|
+
function getPoolService() external view returns (IPoolService) {
|
432
|
+
return IPoolService(_registry.getServiceAddress("PoolService", VersionPart.wrap(3)));
|
433
|
+
}
|
433
434
|
|
434
435
|
function setInstanceReader(InstanceReader instanceReader) external restricted() {
|
435
436
|
require(address(_instanceReader) == address(0), "InstanceReader is set");
|
@@ -79,9 +79,9 @@ contract InstanceAccessManager is
|
|
79
79
|
AccessManagerSimple internal _accessManager;
|
80
80
|
|
81
81
|
constructor(address accessManager)
|
82
|
-
AccessManagedSimple(accessManager)
|
83
82
|
{
|
84
83
|
_accessManager = AccessManagerSimple(accessManager);
|
84
|
+
initializeAccessManagedSimple(accessManager);
|
85
85
|
|
86
86
|
_createRole(RoleIdLib.toRoleId(_accessManager.ADMIN_ROLE()), ADMIN_ROLE_NAME, false, false);
|
87
87
|
_createRole(RoleIdLib.toRoleId(_accessManager.PUBLIC_ROLE()), PUBLIC_ROLE_NAME, false, false);
|
@@ -7,7 +7,7 @@ import {DistributorType} from "../types/DistributorType.sol";
|
|
7
7
|
import {Fee, FeeLib} from "../types/Fee.sol";
|
8
8
|
import {Key32} from "../types/Key32.sol";
|
9
9
|
import {NftId} from "../types/NftId.sol";
|
10
|
-
import {ObjectType, DISTRIBUTOR, DISTRIBUTION, INSTANCE, PRODUCT, POLICY, POOL, TREASURY} from "../types/ObjectType.sol";
|
10
|
+
import {ObjectType, DISTRIBUTOR, DISTRIBUTION, INSTANCE, PRODUCT, POLICY, POOL, TREASURY, BUNDLE} from "../types/ObjectType.sol";
|
11
11
|
import {ReferralId, ReferralStatus, ReferralLib, REFERRAL_OK, REFERRAL_ERROR_UNKNOWN, REFERRAL_ERROR_EXPIRED, REFERRAL_ERROR_EXHAUSTED} from "../types/Referral.sol";
|
12
12
|
import {Registerable} from "../shared/Registerable.sol";
|
13
13
|
import {RiskId} from "../types/RiskId.sol";
|
@@ -15,6 +15,7 @@ import {UFixed, MathLib, UFixedLib} from "../types/UFixed.sol";
|
|
15
15
|
import {Version} from "../types/Version.sol";
|
16
16
|
|
17
17
|
import {IRegistry} from "../registry/IRegistry.sol";
|
18
|
+
import {IBundle} from "../instance/module/IBundle.sol";
|
18
19
|
import {IDistribution} from "../instance/module/IDistribution.sol";
|
19
20
|
import {IInstance} from "./IInstance.sol";
|
20
21
|
import {IKeyValueStore} from "../instance/base/IKeyValueStore.sol";
|
@@ -114,6 +115,17 @@ contract InstanceReader {
|
|
114
115
|
return abi.decode(data, (ITreasury.TreasuryInfo));
|
115
116
|
}
|
116
117
|
}
|
118
|
+
|
119
|
+
function getBundleInfo(NftId bundleNftId)
|
120
|
+
public
|
121
|
+
view
|
122
|
+
returns (IBundle.BundleInfo memory info)
|
123
|
+
{
|
124
|
+
bytes memory data = _store.getData(toBundleKey(bundleNftId));
|
125
|
+
if (data.length > 0) {
|
126
|
+
return abi.decode(data, (IBundle.BundleInfo));
|
127
|
+
}
|
128
|
+
}
|
117
129
|
|
118
130
|
function getDistributorTypeInfo(DistributorType distributorType)
|
119
131
|
public
|
@@ -259,6 +271,10 @@ contract InstanceReader {
|
|
259
271
|
return distributionNftId.toKey32(DISTRIBUTION());
|
260
272
|
}
|
261
273
|
|
274
|
+
function toBundleKey(NftId poolNftId) public pure returns (Key32) {
|
275
|
+
return poolNftId.toKey32(BUNDLE());
|
276
|
+
}
|
277
|
+
|
262
278
|
function toPoolKey(NftId poolNftId) public pure returns (Key32) {
|
263
279
|
return poolNftId.toKey32(POOL());
|
264
280
|
}
|
@@ -15,7 +15,9 @@ import {Service} from "../../contracts/shared/Service.sol";
|
|
15
15
|
import {IService} from "../shared/IService.sol";
|
16
16
|
import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
17
17
|
import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
|
18
|
+
import {RoleId} from "../types/RoleId.sol";
|
18
19
|
import {VersionLib} from "../types/Version.sol";
|
20
|
+
import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE} from "../types/RoleId.sol";
|
19
21
|
|
20
22
|
contract InstanceService is Service, IInstanceService {
|
21
23
|
|
@@ -37,13 +39,17 @@ contract InstanceService is Service, IInstanceService {
|
|
37
39
|
InstanceReader clonedInstanceReader
|
38
40
|
)
|
39
41
|
{
|
42
|
+
address instanceOwner = msg.sender;
|
40
43
|
Registry registry = Registry(_registryAddress);
|
41
44
|
NftId registryNftId = registry.getNftId(_registryAddress);
|
42
45
|
address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
43
46
|
RegistryService registryService = RegistryService(registryServiceAddress);
|
44
47
|
|
48
|
+
// initially set the authority of the access managar to this (being the instance service).
|
49
|
+
// This will allow the instance service to bootstrap the authorizations of the instance
|
50
|
+
// and then transfer the ownership of the access manager to the instance owner once everything is setup
|
45
51
|
clonedAccessManager = AccessManagerSimple(Clones.clone(_accessManagerMaster));
|
46
|
-
clonedAccessManager.initialize(
|
52
|
+
clonedAccessManager.initialize(address(this));
|
47
53
|
|
48
54
|
clonedInstance = Instance(Clones.clone(_instanceMaster));
|
49
55
|
clonedInstance.initialize(address(clonedAccessManager), _registryAddress, registryNftId, msg.sender);
|
@@ -53,9 +59,43 @@ contract InstanceService is Service, IInstanceService {
|
|
53
59
|
clonedInstanceReader = InstanceReader(Clones.clone(address(_instanceReaderMaster)));
|
54
60
|
clonedInstanceReader.initialize(_registryAddress, instanceNftId);
|
55
61
|
|
62
|
+
_grantInitialAuthorizations(clonedAccessManager, clonedInstance);
|
63
|
+
|
64
|
+
clonedInstance.setInstanceReader(clonedInstanceReader);
|
65
|
+
|
66
|
+
// to complete setup switch instance ownership to the instance owner
|
67
|
+
// TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
|
68
|
+
clonedAccessManager.grantRole(ADMIN_ROLE().toInt(), instanceOwner, 0);
|
69
|
+
clonedAccessManager.revokeRole(ADMIN_ROLE().toInt(), address(this));
|
70
|
+
|
56
71
|
emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), instanceNftId);
|
57
72
|
}
|
58
73
|
|
74
|
+
function _grantInitialAuthorizations(AccessManagerSimple clonedAccessManager, Instance clonedInstance) internal {
|
75
|
+
address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
76
|
+
clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE().toInt(), distributionServiceAddress, 0);
|
77
|
+
bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
|
78
|
+
instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
|
79
|
+
instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
|
80
|
+
clonedAccessManager.setTargetFunctionRole(
|
81
|
+
address(clonedInstance),
|
82
|
+
instanceDistributionServiceSelectors,
|
83
|
+
DISTRIBUTION_SERVICE_ROLE().toInt());
|
84
|
+
|
85
|
+
address poolServiceAddress = _registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
86
|
+
clonedAccessManager.grantRole(POOL_SERVICE_ROLE().toInt(), address(poolServiceAddress), 0);
|
87
|
+
bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
|
88
|
+
instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
|
89
|
+
instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
|
90
|
+
instancePoolServiceSelectors[2] = clonedInstance.createBundle.selector;
|
91
|
+
instancePoolServiceSelectors[3] = clonedInstance.updateBundle.selector;
|
92
|
+
clonedAccessManager.setTargetFunctionRole(
|
93
|
+
address(clonedInstance),
|
94
|
+
instancePoolServiceSelectors,
|
95
|
+
POOL_SERVICE_ROLE().toInt());
|
96
|
+
|
97
|
+
}
|
98
|
+
|
59
99
|
function setAccessManagerMaster(address accessManagerMaster) external {
|
60
100
|
require(
|
61
101
|
_accessManagerMaster == address(0),
|
@@ -121,18 +161,22 @@ contract InstanceService is Service, IInstanceService {
|
|
121
161
|
address initialOwner = address(0);
|
122
162
|
(_registryAddress, initialOwner) = abi.decode(data, (address, address));
|
123
163
|
|
124
|
-
// // TODO register instance in registry
|
125
|
-
IRegistry registry = IRegistry(_registryAddress);
|
126
|
-
NftId registryNftId = registry.getNftId(_registryAddress);
|
127
|
-
|
128
164
|
_initializeService(_registryAddress, initialOwner);
|
129
165
|
|
130
166
|
_registerInterface(type(IService).interfaceId);
|
131
167
|
_registerInterface(type(IInstanceService).interfaceId);
|
132
168
|
}
|
133
169
|
|
134
|
-
function
|
135
|
-
|
170
|
+
function hasRole(address account, RoleId role, NftId instanceNftId) external view returns (bool) {
|
171
|
+
IRegistry.ObjectInfo memory instanceObjectInfo = getRegistry().getObjectInfo(instanceNftId);
|
172
|
+
address instanceAddress = instanceObjectInfo.objectAddress;
|
173
|
+
Instance instance = Instance(instanceAddress);
|
174
|
+
AccessManagerSimple accessManager = AccessManagerSimple(instance.authority());
|
175
|
+
(bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
|
176
|
+
if (executionDelay > 0) {
|
177
|
+
return false;
|
178
|
+
}
|
179
|
+
return isMember;
|
136
180
|
}
|
137
181
|
}
|
138
182
|
|
@@ -12,15 +12,7 @@ import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
|
|
12
12
|
|
13
13
|
abstract contract ComponentServiceBase is Service {
|
14
14
|
|
15
|
-
|
16
|
-
address registry,
|
17
|
-
NftId registryNftId,
|
18
|
-
address initialOwner
|
19
|
-
)
|
20
|
-
{
|
21
|
-
_initializeService(registry, initialOwner);
|
22
|
-
}
|
23
|
-
|
15
|
+
error CallerIsNotComponentOwner();
|
24
16
|
|
25
17
|
function _getAndVerifyComponentInfoAndInstance(
|
26
18
|
ObjectType objectType
|
@@ -32,7 +24,7 @@ abstract contract ComponentServiceBase is Service {
|
|
32
24
|
IInstance instance
|
33
25
|
)
|
34
26
|
{
|
35
|
-
NftId componentNftId =
|
27
|
+
NftId componentNftId = _registry.getNftId(msg.sender);
|
36
28
|
require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
|
37
29
|
|
38
30
|
info = getRegistry().getObjectInfo(componentNftId);
|
@@ -13,6 +13,7 @@ interface IBundle {
|
|
13
13
|
uint256 capitalAmount; // net investment capital + net premiums - payouts
|
14
14
|
uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
|
15
15
|
uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
|
16
|
+
uint256 lifetime;
|
16
17
|
Timestamp expiredAt; // no new policies
|
17
18
|
Timestamp closedAt; // no open policies, locked amount = 0
|
18
19
|
}
|
@@ -5,6 +5,7 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
|
|
5
5
|
|
6
6
|
import {Fee} from "../../types/Fee.sol";
|
7
7
|
import {NftId} from "../../types/NftId.sol";
|
8
|
+
import {LibNftIdSet} from "../../types/NftIdSet.sol";
|
8
9
|
import {UFixed} from "../../types/UFixed.sol";
|
9
10
|
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
10
11
|
|
@@ -0,0 +1,105 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
|
+
import {IRegistryService} from "../../registry/IRegistryService.sol";
|
6
|
+
import {IInstance} from "../../instance/IInstance.sol";
|
7
|
+
import {InstanceReader} from "../../instance/InstanceReader.sol";
|
8
|
+
import {ISetup} from "../../instance/module/ISetup.sol";
|
9
|
+
import {ITreasury} from "../../instance/module/ITreasury.sol";
|
10
|
+
|
11
|
+
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
12
|
+
import {Fee} from "../../types/Fee.sol";
|
13
|
+
import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
|
14
|
+
import {KEEP_STATE} from "../../types/StateId.sol";
|
15
|
+
import {DISTRIBUTION} from "../../types/ObjectType.sol";
|
16
|
+
import {Version, VersionLib} from "../../types/Version.sol";
|
17
|
+
|
18
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
19
|
+
import {Versionable} from "../../shared/Versionable.sol";
|
20
|
+
|
21
|
+
import {IService} from "../../shared/IService.sol";
|
22
|
+
import {Service} from "../../shared/Service.sol";
|
23
|
+
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
24
|
+
import {IDistributionService} from "./IDistributionService.sol";
|
25
|
+
import {Distribution} from "../../components/Distribution.sol";
|
26
|
+
import {InstanceService} from "../InstanceService.sol";
|
27
|
+
import {Instance} from "../Instance.sol";
|
28
|
+
import {INftOwnable} from "../../shared/INftOwnable.sol";
|
29
|
+
|
30
|
+
string constant DISTRIBUTION_SERVICE_NAME = "DistributionService";
|
31
|
+
|
32
|
+
contract DistributionService is
|
33
|
+
ComponentServiceBase,
|
34
|
+
IDistributionService
|
35
|
+
{
|
36
|
+
using NftIdLib for NftId;
|
37
|
+
|
38
|
+
string public constant NAME = "DistributionService";
|
39
|
+
|
40
|
+
address internal _registryAddress;
|
41
|
+
InstanceService internal _instanceService;
|
42
|
+
|
43
|
+
function _initialize(
|
44
|
+
address owner,
|
45
|
+
bytes memory data
|
46
|
+
)
|
47
|
+
internal
|
48
|
+
initializer
|
49
|
+
virtual override
|
50
|
+
{
|
51
|
+
address initialOwner = address(0);
|
52
|
+
(_registryAddress, initialOwner) = abi.decode(data, (address, address));
|
53
|
+
|
54
|
+
IRegistry registry = IRegistry(_registryAddress);
|
55
|
+
_instanceService = InstanceService(registry.getServiceAddress("InstanceService", getMajorVersion()));
|
56
|
+
|
57
|
+
_initializeService(_registryAddress, initialOwner);
|
58
|
+
|
59
|
+
_registerInterface(type(IService).interfaceId);
|
60
|
+
_registerInterface(type(IDistributionService).interfaceId);
|
61
|
+
}
|
62
|
+
|
63
|
+
|
64
|
+
function getName() public pure override(IService, Service) returns(string memory name) {
|
65
|
+
return NAME;
|
66
|
+
}
|
67
|
+
|
68
|
+
function register(address distributionComponentAddress)
|
69
|
+
external
|
70
|
+
returns (NftId distributionNftId)
|
71
|
+
{
|
72
|
+
address componentOwner = msg.sender;
|
73
|
+
Distribution distribution = Distribution(distributionComponentAddress);
|
74
|
+
IInstance instance = distribution.getInstance();
|
75
|
+
INftOwnable nftOwnable = INftOwnable(address(instance));
|
76
|
+
|
77
|
+
require(_instanceService.hasRole(componentOwner, DISTRIBUTION_OWNER_ROLE(), nftOwnable.getNftId()), "ERROR:DIS-001:NOT_DISTRIBUTION_OWNER_ROLE");
|
78
|
+
|
79
|
+
IRegistryService registryService = getRegistryService();
|
80
|
+
(IRegistry.ObjectInfo memory distributionObjInfo, ) = registryService.registerDistribution(
|
81
|
+
distribution,
|
82
|
+
componentOwner
|
83
|
+
);
|
84
|
+
distributionNftId = distributionObjInfo.nftId;
|
85
|
+
|
86
|
+
ISetup.DistributionSetupInfo memory initialSetup = distribution.getInitialSetupInfo();
|
87
|
+
instance.createDistributionSetup(distributionNftId, initialSetup);
|
88
|
+
}
|
89
|
+
|
90
|
+
function setFees(
|
91
|
+
Fee memory distributionFee
|
92
|
+
)
|
93
|
+
external
|
94
|
+
override
|
95
|
+
{
|
96
|
+
(IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
|
97
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
98
|
+
NftId distributionNftId = info.nftId;
|
99
|
+
|
100
|
+
ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
101
|
+
distSetupInfo.distributionFee = distributionFee;
|
102
|
+
|
103
|
+
instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
|
104
|
+
}
|
105
|
+
}
|