@etherisc/gif-next 0.0.2-c83506f-943 → 0.0.2-c8cedfe-604
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 +29 -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/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +15 -2
- 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 +93 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +59 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +137 -80
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +34 -34
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +63 -37
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +152 -28
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +53 -9
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- 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 +636 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -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/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 +1 -2
- package/contracts/components/Product.sol +1 -1
- package/contracts/instance/AccessManagedSimple.sol +5 -4
- package/contracts/instance/AccessManagerSimple.sol +10 -0
- package/contracts/instance/IInstance.sol +6 -1
- package/contracts/instance/IInstanceService.sol +14 -1
- package/contracts/instance/Instance.sol +18 -11
- package/contracts/instance/InstanceAccessManager.sol +1 -1
- package/contracts/instance/InstanceReader.sol +10 -0
- package/contracts/instance/InstanceService.sol +81 -22
- package/contracts/instance/base/ComponentServiceBase.sol +1 -11
- package/contracts/instance/service/DistributionService.sol +96 -0
- package/contracts/instance/service/DistributionServiceManager.sol +53 -0
- package/contracts/registry/IRegistry.sol +39 -2
- package/contracts/registry/IRegistryService.sol +0 -2
- package/contracts/registry/Registry.sol +94 -28
- package/contracts/registry/RegistryService.sol +9 -49
- 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 +6 -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
|
@@ -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();
|
@@ -19,17 +19,18 @@ import {IAccessManagerSimple} from "./IAccessManagerSimple.sol";
|
|
19
19
|
* functions, and ideally only used in `external` functions. See {restricted}.
|
20
20
|
*/
|
21
21
|
abstract contract AccessManagedSimple is Context, IAccessManaged {
|
22
|
+
bool private _initialized;
|
22
23
|
address private _authority;
|
23
24
|
|
24
25
|
bool private _consumingSchedule;
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
*/
|
29
|
-
constructor(address initialAuthority) {
|
27
|
+
function initializeAccessManagedSimple(address initialAuthority) internal {
|
28
|
+
require(!_initialized, "AccessManaged: already initialized");
|
30
29
|
_setAuthority(initialAuthority);
|
30
|
+
_initialized = true;
|
31
31
|
}
|
32
32
|
|
33
|
+
|
33
34
|
/**
|
34
35
|
* @dev Restricts access to a function as defined by the connected Authority for this contract and the
|
35
36
|
* caller and selector of the function that entered the contract.
|
@@ -46,6 +46,8 @@ contract AccessManagerSimple is Context, IAccessManagerSimple {
|
|
46
46
|
uint32 nonce;
|
47
47
|
}
|
48
48
|
|
49
|
+
bool private _initialized;
|
50
|
+
|
49
51
|
uint64 public constant ADMIN_ROLE = type(uint64).min; // 0
|
50
52
|
uint64 public constant PUBLIC_ROLE = type(uint64).max; // 2**64-1
|
51
53
|
|
@@ -67,14 +69,22 @@ contract AccessManagerSimple is Context, IAccessManagerSimple {
|
|
67
69
|
}
|
68
70
|
|
69
71
|
constructor(address initialAdmin) {
|
72
|
+
initialize(initialAdmin);
|
73
|
+
}
|
74
|
+
|
75
|
+
function initialize(address initialAdmin) public {
|
76
|
+
require(!_initialized, "AccessManager: already initialized");
|
77
|
+
|
70
78
|
if (initialAdmin == address(0)) {
|
71
79
|
revert AccessManagerInvalidInitialAdmin(address(0));
|
72
80
|
}
|
73
81
|
|
74
82
|
// admin is active immediately and without any execution delay.
|
75
83
|
_grantRole(ADMIN_ROLE, initialAdmin, 0, 0);
|
84
|
+
_initialized = true;
|
76
85
|
}
|
77
86
|
|
87
|
+
|
78
88
|
// =================================================== GETTERS ====================================================
|
79
89
|
/// @inheritdoc IAccessManagerSimple
|
80
90
|
function canCall(
|
@@ -11,17 +11,22 @@ import {IPoolService} from "./service/IPoolService.sol";
|
|
11
11
|
import {IProductService} from "./service/IProductService.sol";
|
12
12
|
import {ISetup} from "./module/ISetup.sol";
|
13
13
|
import {NftId} from "../types/NftId.sol";
|
14
|
+
import {StateId} from "../types/StateId.sol";
|
14
15
|
|
15
16
|
interface IInstance is IERC165 {
|
16
17
|
|
17
18
|
function getComponentOwnerService() external view returns (IComponentOwnerService);
|
18
19
|
// TODO: renable these when we have the services
|
19
|
-
|
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;
|
27
|
+
function updateDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup, StateId newState) external;
|
28
|
+
function updateDistributionSetupState(NftId distributionNftId, StateId newState) external;
|
29
|
+
|
25
30
|
function createPoolSetup(NftId distributionNftId, ISetup.PoolSetupInfo memory setup) external;
|
26
31
|
|
27
32
|
function getInstanceReader() external view returns (InstanceReader);
|
@@ -10,8 +10,21 @@ import {IRegistry} from "../registry/IRegistry.sol";
|
|
10
10
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
11
11
|
import {IBaseComponent} from "../components/IBaseComponent.sol";
|
12
12
|
|
13
|
+
import {AccessManagerSimple} from "./AccessManagerSimple.sol";
|
14
|
+
import {Instance} from "./Instance.sol";
|
15
|
+
import {InstanceReader} from "./InstanceReader.sol";
|
16
|
+
|
13
17
|
interface IInstanceService is IService {
|
14
18
|
|
15
|
-
|
19
|
+
event LogInstanceCloned(address clonedAccessManagerAddress, address clonedInstanceAddress, address clonedInstanceReaderAddress, NftId clonedInstanceNftId);
|
20
|
+
|
21
|
+
function createInstanceClone()
|
22
|
+
external
|
23
|
+
returns (
|
24
|
+
AccessManagerSimple clonedAccessManager,
|
25
|
+
Instance clonedInstance,
|
26
|
+
NftId instanceNftId,
|
27
|
+
InstanceReader clonedInstanceReader
|
28
|
+
);
|
16
29
|
}
|
17
30
|
|
@@ -25,6 +25,7 @@ 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";
|
28
29
|
import {VersionPart} from "../types/Version.sol";
|
29
30
|
|
30
31
|
contract Instance is
|
@@ -41,6 +42,8 @@ contract Instance is
|
|
41
42
|
|
42
43
|
uint32 public constant EXECUTION_DELAY = 0;
|
43
44
|
|
45
|
+
bool private _initialized;
|
46
|
+
|
44
47
|
mapping(ShortString name => RoleId roleId) internal _role;
|
45
48
|
mapping(RoleId roleId => EnumerableSet.AddressSet roleMembers) internal _roleMembers;
|
46
49
|
RoleId [] internal _roles;
|
@@ -51,16 +54,23 @@ contract Instance is
|
|
51
54
|
InstanceReader internal _instanceReader;
|
52
55
|
|
53
56
|
constructor(address accessManagerAddress, address registryAddress, NftId registryNftId)
|
54
|
-
AccessManagedSimple(accessManagerAddress)
|
55
57
|
{
|
56
|
-
|
58
|
+
initialize(accessManagerAddress, registryAddress, registryNftId, msg.sender);
|
59
|
+
}
|
60
|
+
|
61
|
+
function initialize(address accessManagerAddress, address registryAddress, NftId registryNftId, address initialOwner) public {
|
62
|
+
require(!_initialized, "Contract instance has already been initialized");
|
63
|
+
|
64
|
+
initializeAccessManagedSimple(accessManagerAddress);
|
65
|
+
|
57
66
|
_accessManager = AccessManagerSimple(accessManagerAddress);
|
58
67
|
_createRole(RoleIdLib.toRoleId(ADMIN_ROLE), "AdminRole", false, false);
|
59
68
|
_createRole(RoleIdLib.toRoleId(PUBLIC_ROLE), "PublicRole", false, false);
|
60
69
|
|
61
|
-
_initializeRegisterable(registryAddress, registryNftId, INSTANCE(), false,
|
70
|
+
_initializeRegisterable(registryAddress, registryNftId, INSTANCE(), false, initialOwner, "");
|
62
71
|
|
63
|
-
_registerInterface(type(IInstance).interfaceId);
|
72
|
+
_registerInterface(type(IInstance).interfaceId);
|
73
|
+
_initialized = true;
|
64
74
|
}
|
65
75
|
|
66
76
|
//--- Role ------------------------------------------------------//
|
@@ -408,10 +418,9 @@ contract Instance is
|
|
408
418
|
return ComponentOwnerService(_registry.getServiceAddress("ComponentOwnerService", VersionPart.wrap(3)));
|
409
419
|
}
|
410
420
|
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
// }
|
421
|
+
function getDistributionService() external view returns (IDistributionService) {
|
422
|
+
return IDistributionService(_registry.getServiceAddress("DistributionService", VersionPart.wrap(3)));
|
423
|
+
}
|
415
424
|
|
416
425
|
// TODO reactivate when services are available
|
417
426
|
// function getProductService() external view returns (IProductService) {
|
@@ -424,9 +433,7 @@ contract Instance is
|
|
424
433
|
// }
|
425
434
|
|
426
435
|
function setInstanceReader(InstanceReader instanceReader) external restricted() {
|
427
|
-
|
428
|
-
revert("InstanceReader is set");
|
429
|
-
}
|
436
|
+
require(address(_instanceReader) == address(0), "InstanceReader is set");
|
430
437
|
_instanceReader = instanceReader;
|
431
438
|
}
|
432
439
|
|
@@ -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);
|
@@ -26,6 +26,7 @@ import {TimestampLib} from "../types/Timestamp.sol";
|
|
26
26
|
|
27
27
|
|
28
28
|
contract InstanceReader {
|
29
|
+
bool private _initialized;
|
29
30
|
|
30
31
|
IRegistry internal _registry;
|
31
32
|
NftId internal _instanceNftId;
|
@@ -37,6 +38,12 @@ contract InstanceReader {
|
|
37
38
|
NftId instanceNftId
|
38
39
|
)
|
39
40
|
{
|
41
|
+
initialize(registry, instanceNftId);
|
42
|
+
}
|
43
|
+
|
44
|
+
function initialize(address registry, NftId instanceNftId) public {
|
45
|
+
require(!_initialized, "ERROR:CRD-000:ALREADY_INITIALIZED");
|
46
|
+
|
40
47
|
require(
|
41
48
|
address(registry) != address(0),
|
42
49
|
"ERROR:CRD-001:REGISTRY_ZERO");
|
@@ -55,8 +62,11 @@ contract InstanceReader {
|
|
55
62
|
|
56
63
|
_instance = IInstance(instanceInfo.objectAddress);
|
57
64
|
_store = IKeyValueStore(instanceInfo.objectAddress);
|
65
|
+
|
66
|
+
_initialized = true;
|
58
67
|
}
|
59
68
|
|
69
|
+
|
60
70
|
// module specific functions
|
61
71
|
|
62
72
|
function getPolicyInfo(NftId policyNftId)
|
@@ -7,18 +7,23 @@ import {AccessManagerSimple} from "./AccessManagerSimple.sol";
|
|
7
7
|
import {InstanceAccessManager} from "./InstanceAccessManager.sol";
|
8
8
|
import {Instance} from "./Instance.sol";
|
9
9
|
import {IInstanceService} from "./IInstanceService.sol";
|
10
|
-
import {
|
10
|
+
import {InstanceReader} from "./InstanceReader.sol";
|
11
11
|
import {IRegistry} from "../registry/IRegistry.sol";
|
12
|
+
import {Registry} from "../registry/Registry.sol";
|
13
|
+
import {RegistryService} from "../registry/RegistryService.sol";
|
14
|
+
import {Service} from "../../contracts/shared/Service.sol";
|
12
15
|
import {IService} from "../shared/IService.sol";
|
13
16
|
import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
14
|
-
import {NftId, NftIdLib, zeroNftId} from "
|
17
|
+
import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
|
18
|
+
import {VersionLib} from "../types/Version.sol";
|
19
|
+
import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE} from "../types/RoleId.sol";
|
15
20
|
|
16
21
|
contract InstanceService is Service, IInstanceService {
|
17
22
|
|
18
23
|
address internal _registryAddress;
|
19
24
|
address internal _accessManagerMaster;
|
20
|
-
address internal _instanceAccessManagerMaster;
|
21
25
|
address internal _instanceMaster;
|
26
|
+
address internal _instanceReaderMaster;
|
22
27
|
|
23
28
|
// TODO update to real hash when instance is stable
|
24
29
|
bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
|
@@ -27,31 +32,89 @@ contract InstanceService is Service, IInstanceService {
|
|
27
32
|
function createInstanceClone()
|
28
33
|
external
|
29
34
|
returns (
|
30
|
-
AccessManagerSimple
|
31
|
-
|
32
|
-
|
35
|
+
AccessManagerSimple clonedAccessManager,
|
36
|
+
Instance clonedInstance,
|
37
|
+
NftId instanceNftId,
|
38
|
+
InstanceReader clonedInstanceReader
|
33
39
|
)
|
34
40
|
{
|
35
|
-
|
36
|
-
|
37
|
-
|
41
|
+
address instanceOwner = msg.sender;
|
42
|
+
Registry registry = Registry(_registryAddress);
|
43
|
+
NftId registryNftId = registry.getNftId(_registryAddress);
|
44
|
+
address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
45
|
+
RegistryService registryService = RegistryService(registryServiceAddress);
|
46
|
+
|
47
|
+
// initially set the authority of the access managar to this (being the instance service).
|
48
|
+
// This will allow the instance service to bootstrap the authorizations of the instance
|
49
|
+
// and then transfer the ownership of the access manager to the instance owner once everything is setup
|
50
|
+
clonedAccessManager = AccessManagerSimple(Clones.clone(_accessManagerMaster));
|
51
|
+
clonedAccessManager.initialize(address(this));
|
52
|
+
|
53
|
+
clonedInstance = Instance(Clones.clone(_instanceMaster));
|
54
|
+
clonedInstance.initialize(address(clonedAccessManager), _registryAddress, registryNftId, msg.sender);
|
55
|
+
( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
|
56
|
+
instanceNftId = info.nftId;
|
57
|
+
|
58
|
+
clonedInstanceReader = InstanceReader(Clones.clone(address(_instanceReaderMaster)));
|
59
|
+
clonedInstanceReader.initialize(_registryAddress, instanceNftId);
|
60
|
+
|
61
|
+
_grantInitialAuthorizations(clonedAccessManager, clonedInstance);
|
62
|
+
|
63
|
+
clonedInstance.setInstanceReader(clonedInstanceReader);
|
64
|
+
|
65
|
+
// to complete setup switch instance ownership to the instance owner
|
66
|
+
// TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
|
67
|
+
clonedAccessManager.grantRole(ADMIN_ROLE().toInt(), instanceOwner, 0);
|
68
|
+
clonedAccessManager.revokeRole(ADMIN_ROLE().toInt(), address(this));
|
69
|
+
|
70
|
+
emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), instanceNftId);
|
71
|
+
}
|
72
|
+
|
73
|
+
function _grantInitialAuthorizations(AccessManagerSimple clonedAccessManager, Instance clonedInstance) internal {
|
74
|
+
address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
75
|
+
|
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
|
+
|
86
|
+
function setAccessManagerMaster(address accessManagerMaster) external {
|
87
|
+
require(
|
88
|
+
_accessManagerMaster == address(0),
|
89
|
+
"ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
|
90
|
+
_accessManagerMaster = accessManagerMaster;
|
91
|
+
}
|
92
|
+
|
93
|
+
function setInstanceMaster(address instanceMaster) external {
|
94
|
+
require(
|
95
|
+
_instanceMaster == address(0),
|
96
|
+
"ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
|
97
|
+
_instanceMaster = instanceMaster;
|
38
98
|
}
|
39
99
|
|
40
|
-
function
|
41
|
-
|
100
|
+
function setInstanceReaderMaster(address instanceReaderMaster) external {
|
101
|
+
require(
|
102
|
+
_instanceReaderMaster == address(0),
|
103
|
+
"ERROR:CRD-003:INSTANCE_READER_MASTER_ALREADY_SET");
|
104
|
+
_instanceReaderMaster = instanceReaderMaster;
|
42
105
|
}
|
43
106
|
|
44
|
-
function
|
45
|
-
|
107
|
+
function getInstanceReaderMaster() external view returns (address) {
|
108
|
+
return _instanceReaderMaster;
|
46
109
|
}
|
47
110
|
|
48
|
-
function
|
49
|
-
_instanceMaster
|
111
|
+
function getInstanceMaster() external view returns (address) {
|
112
|
+
return _instanceMaster;
|
50
113
|
}
|
51
114
|
|
52
|
-
function getAccessManagerMaster() external view returns (address) {
|
53
|
-
|
54
|
-
|
115
|
+
function getAccessManagerMaster() external view returns (address) {
|
116
|
+
return _accessManagerMaster;
|
117
|
+
}
|
55
118
|
|
56
119
|
// From IService
|
57
120
|
function getName() public pure override(IService, Service) returns(string memory) {
|
@@ -85,10 +148,6 @@ contract InstanceService is Service, IInstanceService {
|
|
85
148
|
address initialOwner = address(0);
|
86
149
|
(_registryAddress, initialOwner) = abi.decode(data, (address, address));
|
87
150
|
|
88
|
-
// // TODO register instance in registry
|
89
|
-
IRegistry registry = IRegistry(_registryAddress);
|
90
|
-
NftId registryNftId = registry.getNftId(_registryAddress);
|
91
|
-
|
92
151
|
_initializeService(_registryAddress, initialOwner);
|
93
152
|
|
94
153
|
_registerInterface(type(IService).interfaceId);
|
@@ -12,16 +12,6 @@ import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
|
|
12
12
|
|
13
13
|
abstract contract ComponentServiceBase is Service {
|
14
14
|
|
15
|
-
constructor(
|
16
|
-
address registry,
|
17
|
-
NftId registryNftId,
|
18
|
-
address initialOwner
|
19
|
-
)
|
20
|
-
{
|
21
|
-
_initializeService(registry, initialOwner);
|
22
|
-
}
|
23
|
-
|
24
|
-
|
25
15
|
function _getAndVerifyComponentInfoAndInstance(
|
26
16
|
ObjectType objectType
|
27
17
|
)
|
@@ -32,7 +22,7 @@ abstract contract ComponentServiceBase is Service {
|
|
32
22
|
IInstance instance
|
33
23
|
)
|
34
24
|
{
|
35
|
-
NftId componentNftId =
|
25
|
+
NftId componentNftId = _registry.getNftId(msg.sender);
|
36
26
|
require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
|
37
27
|
|
38
28
|
info = getRegistry().getObjectInfo(componentNftId);
|
@@ -0,0 +1,96 @@
|
|
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 {KEEP_STATE} from "../../types/StateId.sol";
|
14
|
+
import {DISTRIBUTION} from "../../types/ObjectType.sol";
|
15
|
+
import {Version, VersionLib} from "../../types/Version.sol";
|
16
|
+
|
17
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
18
|
+
import {Versionable} from "../../shared/Versionable.sol";
|
19
|
+
|
20
|
+
import {IService} from "../../shared/IService.sol";
|
21
|
+
import {Service} from "../../shared/Service.sol";
|
22
|
+
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
23
|
+
import {IDistributionService} from "./IDistributionService.sol";
|
24
|
+
import {Distribution} from "../../components/Distribution.sol";
|
25
|
+
|
26
|
+
string constant DISTRIBUTION_SERVICE_NAME = "DistributionService";
|
27
|
+
|
28
|
+
contract DistributionService is
|
29
|
+
ComponentServiceBase,
|
30
|
+
IDistributionService
|
31
|
+
{
|
32
|
+
using NftIdLib for NftId;
|
33
|
+
|
34
|
+
string public constant NAME = "DistributionService";
|
35
|
+
|
36
|
+
address internal _registryAddress;
|
37
|
+
|
38
|
+
function _initialize(
|
39
|
+
address owner,
|
40
|
+
bytes memory data
|
41
|
+
)
|
42
|
+
internal
|
43
|
+
initializer
|
44
|
+
virtual override
|
45
|
+
{
|
46
|
+
address initialOwner = address(0);
|
47
|
+
(_registryAddress, initialOwner) = abi.decode(data, (address, address));
|
48
|
+
|
49
|
+
// IRegistry registry = IRegistry(_registryAddress);
|
50
|
+
|
51
|
+
_initializeService(_registryAddress, initialOwner);
|
52
|
+
|
53
|
+
_registerInterface(type(IService).interfaceId);
|
54
|
+
_registerInterface(type(IDistributionService).interfaceId);
|
55
|
+
}
|
56
|
+
|
57
|
+
|
58
|
+
function getName() public pure override(IService, Service) returns(string memory name) {
|
59
|
+
return NAME;
|
60
|
+
}
|
61
|
+
|
62
|
+
function register(address distributionComponentAddress)
|
63
|
+
external
|
64
|
+
returns (NftId distributionNftId)
|
65
|
+
{
|
66
|
+
address componentOwner = msg.sender;
|
67
|
+
// TODO validate permission of componentOwner. check if componentOwner has correct permission on instance via InstanceService - DISTRIBUTION_OWNER
|
68
|
+
Distribution distribution = Distribution(distributionComponentAddress);
|
69
|
+
IRegistryService registryService = getRegistryService();
|
70
|
+
(IRegistry.ObjectInfo memory distributionObjInfo, ) = registryService.registerDistribution(
|
71
|
+
distribution,
|
72
|
+
componentOwner
|
73
|
+
);
|
74
|
+
distributionNftId = distributionObjInfo.nftId;
|
75
|
+
|
76
|
+
ISetup.DistributionSetupInfo memory initialSetup = distribution.getInitialSetupInfo();
|
77
|
+
IInstance instance = distribution.getInstance();
|
78
|
+
instance.createDistributionSetup(distributionNftId, initialSetup);
|
79
|
+
}
|
80
|
+
|
81
|
+
function setFees(
|
82
|
+
Fee memory distributionFee
|
83
|
+
)
|
84
|
+
external
|
85
|
+
override
|
86
|
+
{
|
87
|
+
(IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
|
88
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
89
|
+
NftId distributionNftId = info.nftId;
|
90
|
+
|
91
|
+
ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
92
|
+
distSetupInfo.distributionFee = distributionFee;
|
93
|
+
|
94
|
+
instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
|
95
|
+
}
|
96
|
+
}
|