@etherisc/gif-next 0.0.2-c8cedfe-604 → 0.0.2-c9b0563-536
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 +63 -1
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +656 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +311 -132
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → components/IComponent.sol/IComponent.json} +171 -158
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +445 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +522 -58
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +596 -5
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +306 -182
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +329 -155
- 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/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/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1629 -93
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +125 -19
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +185 -642
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +231 -114
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +164 -66
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +316 -104
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +48 -43
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +138 -16
- 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/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
- 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/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1102 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +449 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +176 -40
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +34 -25
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IBundleService.sol/IBundleService.json} +295 -46
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -18
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +766 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -82
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +25 -245
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1227 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +505 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +806 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +437 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +856 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +437 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +195 -224
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +221 -93
- 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 +208 -329
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +75 -112
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +51 -112
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +13 -29
- 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/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -5
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +13 -18
- 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 +19 -6
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +19 -6
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -11
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +26 -18
- 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/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 +19 -11
- 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 +44 -36
- 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/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- 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/NftIdSet.sol/LibNftIdSet.json +26 -3
- 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/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/VersionPartLib.dbg.json +1 -1
- package/contracts/components/Component.sol +216 -0
- package/contracts/components/Distribution.sol +39 -52
- package/contracts/components/IComponent.sol +43 -0
- package/contracts/components/IDistributionComponent.sol +4 -3
- package/contracts/components/IPoolComponent.sol +7 -18
- package/contracts/components/IProductComponent.sol +7 -3
- package/contracts/components/Pool.sol +59 -109
- package/contracts/components/Product.sol +77 -108
- package/contracts/instance/BundleManager.sol +125 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +49 -10
- package/contracts/instance/IInstanceService.sol +15 -4
- package/contracts/instance/Instance.sol +71 -245
- package/contracts/instance/InstanceAccessManager.sol +88 -78
- package/contracts/instance/InstanceReader.sol +29 -26
- package/contracts/instance/InstanceService.sol +355 -81
- package/contracts/instance/InstanceServiceManager.sol +10 -12
- package/contracts/instance/ObjectManager.sol +84 -0
- package/contracts/instance/base/ComponentService.sol +134 -0
- package/contracts/instance/module/IAccess.sol +27 -17
- package/contracts/instance/module/IBundle.sol +1 -0
- package/contracts/instance/module/ISetup.sol +3 -0
- package/contracts/instance/service/BundleService.sol +293 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/DistributionService.sol +44 -34
- package/contracts/instance/service/DistributionServiceManager.sol +10 -12
- package/contracts/instance/service/IBundleService.sol +44 -0
- package/contracts/instance/service/IPolicyService.sol +94 -0
- package/contracts/instance/service/IPoolService.sol +6 -23
- package/contracts/instance/service/IProductService.sol +6 -73
- package/contracts/instance/service/PolicyService.sol +538 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +110 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +233 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +35 -31
- package/contracts/registry/IRegistryService.sol +45 -13
- package/contracts/registry/Registry.sol +206 -243
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +83 -220
- package/contracts/registry/RegistryServiceManager.sol +18 -36
- package/contracts/registry/ReleaseManager.sol +332 -0
- package/contracts/registry/TokenRegistry.sol +8 -7
- package/contracts/shared/IRegisterable.sol +1 -3
- package/contracts/shared/IService.sol +2 -1
- package/contracts/shared/NftOwnable.sol +7 -4
- package/contracts/shared/ProxyManager.sol +1 -1
- package/contracts/shared/Registerable.sol +10 -14
- package/contracts/shared/Service.sol +14 -8
- package/contracts/test/TestService.sol +3 -2
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/RoleId.sol +10 -8
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/contracts/components/BaseComponent.sol +0 -91
- package/contracts/components/IBaseComponent.sol +0 -25
- package/contracts/instance/AccessManagedSimple.sol +0 -115
- package/contracts/instance/AccessManagerSimple.sol +0 -692
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/base/ComponentServiceBase.sol +0 -39
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/service/ComponentOwnerService.sol +0 -317
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -0,0 +1,216 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
5
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
6
|
+
import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
|
7
|
+
|
8
|
+
import {IComponent} from "./IComponent.sol";
|
9
|
+
import {IProductService} from "../instance/service/IProductService.sol";
|
10
|
+
import {IInstanceService} from "../instance/IInstanceService.sol";
|
11
|
+
import {IInstance} from "../instance/IInstance.sol";
|
12
|
+
import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
|
13
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
14
|
+
import {NftId} from "../types/NftId.sol";
|
15
|
+
import {ObjectType, INSTANCE, PRODUCT} from "../types/ObjectType.sol";
|
16
|
+
import {VersionPart} from "../types/Version.sol";
|
17
|
+
import {Registerable} from "../shared/Registerable.sol";
|
18
|
+
import {RoleId, RoleIdLib} from "../types/RoleId.sol";
|
19
|
+
import {IAccess} from "../instance/module/IAccess.sol";
|
20
|
+
|
21
|
+
// TODO discuss to inherit from oz accessmanaged
|
22
|
+
// TODO make contract upgradeable
|
23
|
+
// then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
|
24
|
+
// same pattern as for Service which is also upgradeable
|
25
|
+
abstract contract Component is
|
26
|
+
Registerable,
|
27
|
+
IComponent,
|
28
|
+
AccessManagedUpgradeable
|
29
|
+
{
|
30
|
+
// keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Component.sol")) - 1)) & ~bytes32(uint256(0xff));
|
31
|
+
bytes32 public constant CONTRACT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
|
32
|
+
|
33
|
+
struct ComponentStorage {
|
34
|
+
IInstance _instance; // instance for this component
|
35
|
+
string _name; // unique (per instance) component name
|
36
|
+
IERC20Metadata _token; // token for this component
|
37
|
+
address _wallet; // wallet for this component (default = component contract itself)
|
38
|
+
IInstanceService _instanceService; // instance service for this component
|
39
|
+
|
40
|
+
NftId _productNftId; // only relevant for components that are linked to a aproduct
|
41
|
+
IProductService _productService; // product service for component, might not be relevant for some component types (eg oracles)
|
42
|
+
}
|
43
|
+
|
44
|
+
|
45
|
+
modifier onlyProductService() {
|
46
|
+
if(msg.sender != address(_getComponentStorage()._productService)) {
|
47
|
+
revert ErrorComponentNotProductService(msg.sender);
|
48
|
+
}
|
49
|
+
_;
|
50
|
+
}
|
51
|
+
|
52
|
+
constructor(
|
53
|
+
address registry,
|
54
|
+
NftId instanceNftId,
|
55
|
+
string memory name,
|
56
|
+
address token,
|
57
|
+
ObjectType componentType,
|
58
|
+
bool isInterceptor,
|
59
|
+
address initialOwner,
|
60
|
+
bytes memory data
|
61
|
+
) {
|
62
|
+
_initializeComponent(registry, instanceNftId, name, token, componentType, isInterceptor, initialOwner, data);
|
63
|
+
}
|
64
|
+
|
65
|
+
function _getComponentStorage() private pure returns (ComponentStorage storage $) {
|
66
|
+
assembly {
|
67
|
+
$.slot := CONTRACT_LOCATION_V1
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
function _initializeComponent(
|
72
|
+
address registry,
|
73
|
+
NftId instanceNftId,
|
74
|
+
string memory name,
|
75
|
+
address token,
|
76
|
+
ObjectType componentType,
|
77
|
+
bool isInterceptor,
|
78
|
+
address initialOwner,
|
79
|
+
bytes memory data
|
80
|
+
)
|
81
|
+
internal
|
82
|
+
initializer
|
83
|
+
virtual
|
84
|
+
{
|
85
|
+
ComponentStorage storage $ = _getComponentStorage();
|
86
|
+
_initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, data);
|
87
|
+
|
88
|
+
// set unique name of component
|
89
|
+
$._name = name;
|
90
|
+
|
91
|
+
// set and check linked instance
|
92
|
+
IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
|
93
|
+
$._instance = IInstance(instanceInfo.objectAddress);
|
94
|
+
if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
|
95
|
+
revert ErrorComponentNotInstance(instanceNftId, instanceInfo.objectAddress);
|
96
|
+
}
|
97
|
+
|
98
|
+
// initialize AccessManagedUpgradeable
|
99
|
+
__AccessManaged_init($._instance.authority());
|
100
|
+
|
101
|
+
// set linked services
|
102
|
+
VersionPart gifVersion = $._instance.getMajorVersion();
|
103
|
+
$._instanceService = IInstanceService(getRegistry().getServiceAddress(INSTANCE(), gifVersion));
|
104
|
+
$._productService = IProductService(getRegistry().getServiceAddress(PRODUCT(), gifVersion));
|
105
|
+
|
106
|
+
// set wallet and token
|
107
|
+
$._wallet = address(this);
|
108
|
+
$._token = IERC20Metadata(token);
|
109
|
+
|
110
|
+
_registerInterface(type(IComponent).interfaceId);
|
111
|
+
}
|
112
|
+
|
113
|
+
function lock() external onlyOwner override {
|
114
|
+
_getComponentStorage()._instanceService.setTargetLocked(getName(), true);
|
115
|
+
}
|
116
|
+
|
117
|
+
function unlock() external onlyOwner override {
|
118
|
+
_getComponentStorage()._instanceService.setTargetLocked(getName(), false);
|
119
|
+
}
|
120
|
+
|
121
|
+
// only product service may set product nft id during registration of product setup
|
122
|
+
function setProductNftId(NftId productNftId)
|
123
|
+
external
|
124
|
+
override
|
125
|
+
onlyProductService()
|
126
|
+
{
|
127
|
+
ComponentStorage storage $ = _getComponentStorage();
|
128
|
+
|
129
|
+
if($._productNftId.gtz()) {
|
130
|
+
revert ErrorComponentProductNftAlreadySet();
|
131
|
+
}
|
132
|
+
|
133
|
+
$._productNftId = productNftId;
|
134
|
+
}
|
135
|
+
|
136
|
+
/// @dev Sets the wallet address for the component.
|
137
|
+
/// if the current wallet has tokens, these will be transferred.
|
138
|
+
/// if the new wallet address is externally owned, an approval from the
|
139
|
+
/// owner of the external wallet for the component to move all tokens must exist.
|
140
|
+
function setWallet(address newWallet) external override onlyOwner {
|
141
|
+
ComponentStorage storage $ = _getComponentStorage();
|
142
|
+
|
143
|
+
address currentWallet = $._wallet;
|
144
|
+
uint256 currentBalance = $._token.balanceOf(currentWallet);
|
145
|
+
|
146
|
+
// checks
|
147
|
+
if (newWallet == address(0)) {
|
148
|
+
revert ErrorComponentWalletAddressZero();
|
149
|
+
}
|
150
|
+
if (newWallet == currentWallet) {
|
151
|
+
revert ErrorComponentWalletAddressIsSameAsCurrent(newWallet);
|
152
|
+
}
|
153
|
+
|
154
|
+
if (currentBalance > 0) {
|
155
|
+
if (currentWallet == address(this)) {
|
156
|
+
// move tokens from component smart contract to external wallet
|
157
|
+
} else {
|
158
|
+
// move tokens from external wallet to component smart contract or another external wallet
|
159
|
+
uint256 allowance = $._token.allowance(currentWallet, address(this));
|
160
|
+
if (allowance < currentBalance) {
|
161
|
+
revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
|
162
|
+
}
|
163
|
+
}
|
164
|
+
}
|
165
|
+
|
166
|
+
// effects
|
167
|
+
$._wallet = newWallet;
|
168
|
+
emit LogComponentWalletAddressChanged(newWallet);
|
169
|
+
|
170
|
+
// interactions
|
171
|
+
if (currentBalance > 0) {
|
172
|
+
// transfer tokens from current wallet to new wallet
|
173
|
+
if (currentWallet == address(this)) {
|
174
|
+
// transferFrom requires self allowance too
|
175
|
+
$._token.approve(address(this), currentBalance);
|
176
|
+
}
|
177
|
+
|
178
|
+
SafeERC20.safeTransferFrom($._token, currentWallet, newWallet, currentBalance);
|
179
|
+
emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
|
180
|
+
}
|
181
|
+
}
|
182
|
+
|
183
|
+
function getWallet()
|
184
|
+
public
|
185
|
+
view
|
186
|
+
override
|
187
|
+
returns (address walletAddress)
|
188
|
+
{
|
189
|
+
return _getComponentStorage()._wallet;
|
190
|
+
}
|
191
|
+
|
192
|
+
function getToken() public view override returns (IERC20Metadata token) {
|
193
|
+
return _getComponentStorage()._token;
|
194
|
+
}
|
195
|
+
|
196
|
+
function getInstance() public view override returns (IInstance instance) {
|
197
|
+
return _getComponentStorage()._instance;
|
198
|
+
}
|
199
|
+
|
200
|
+
function getName() public view override returns(string memory name) {
|
201
|
+
return _getComponentStorage()._name;
|
202
|
+
}
|
203
|
+
|
204
|
+
function getProductNftId() public view override returns (NftId productNftId) {
|
205
|
+
return _getComponentStorage()._productNftId;
|
206
|
+
}
|
207
|
+
|
208
|
+
function getInstanceService() public view returns (IInstanceService) {
|
209
|
+
return _getComponentStorage()._instanceService;
|
210
|
+
}
|
211
|
+
|
212
|
+
function getProductService() public view returns (IProductService) {
|
213
|
+
return _getComponentStorage()._productService;
|
214
|
+
}
|
215
|
+
|
216
|
+
}
|
@@ -7,7 +7,7 @@ import {IProductService} from "../instance/service/IProductService.sol";
|
|
7
7
|
import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
|
8
8
|
import {ReferralId} from "../types/Referral.sol";
|
9
9
|
import {Fee, FeeLib} from "../types/Fee.sol";
|
10
|
-
import {
|
10
|
+
import {Component} from "./Component.sol";
|
11
11
|
import {IDistributionComponent} from "./IDistributionComponent.sol";
|
12
12
|
import {IRegistry} from "../registry/IRegistry.sol";
|
13
13
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
@@ -16,52 +16,54 @@ import {Registerable} from "../shared/Registerable.sol";
|
|
16
16
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
17
17
|
import {InstanceReader} from "../instance/InstanceReader.sol";
|
18
18
|
|
19
|
-
contract Distribution is
|
20
|
-
|
19
|
+
abstract contract Distribution is
|
20
|
+
Component,
|
21
21
|
IDistributionComponent
|
22
22
|
{
|
23
23
|
using NftIdLib for NftId;
|
24
24
|
|
25
|
-
Fee internal _initialDistributionFee;
|
26
25
|
bool internal _isVerifying;
|
26
|
+
Fee internal _initialDistributionFee;
|
27
27
|
|
28
|
-
|
29
|
-
IProductService private _productService;
|
28
|
+
TokenHandler internal _tokenHandler;
|
30
29
|
|
31
|
-
|
32
|
-
require(
|
33
|
-
msg.sender == address(_productService),
|
34
|
-
"ERROR:POL-002:NOT_PRODUCT_SERVICE");
|
35
|
-
_;
|
36
|
-
}
|
30
|
+
IDistributionService private _distributionService;
|
37
31
|
|
38
32
|
constructor(
|
39
33
|
address registry,
|
40
34
|
NftId instanceNftId,
|
41
35
|
// TODO refactor into tokenNftId
|
36
|
+
string memory name,
|
42
37
|
address token,
|
43
38
|
bool verifying,
|
44
39
|
Fee memory distributionFee,
|
45
|
-
address initialOwner
|
46
|
-
|
47
|
-
|
48
|
-
|
40
|
+
address initialOwner,
|
41
|
+
bytes memory data
|
42
|
+
) Component (
|
43
|
+
registry,
|
44
|
+
instanceNftId,
|
45
|
+
name, token,
|
46
|
+
DISTRIBUTION(),
|
47
|
+
true,
|
48
|
+
initialOwner,
|
49
|
+
data
|
50
|
+
) {
|
49
51
|
_isVerifying = verifying;
|
50
52
|
_initialDistributionFee = distributionFee;
|
51
53
|
|
52
|
-
|
53
|
-
|
54
|
-
// _productService = _instance.getProductService();
|
54
|
+
_tokenHandler = new TokenHandler(token);
|
55
|
+
_distributionService = getInstance().getDistributionService();
|
55
56
|
|
56
57
|
_registerInterface(type(IDistributionComponent).interfaceId);
|
57
58
|
}
|
58
59
|
|
59
|
-
|
60
60
|
function setFees(
|
61
61
|
Fee memory distributionFee
|
62
62
|
)
|
63
63
|
external
|
64
64
|
override
|
65
|
+
onlyOwner
|
66
|
+
restricted()
|
65
67
|
{
|
66
68
|
_distributionService.setFees(distributionFee);
|
67
69
|
}
|
@@ -99,7 +101,8 @@ contract Distribution is
|
|
99
101
|
uint256 feeAmount
|
100
102
|
)
|
101
103
|
external
|
102
|
-
|
104
|
+
onlyOwner
|
105
|
+
restricted()
|
103
106
|
virtual override
|
104
107
|
{
|
105
108
|
// default is no action
|
@@ -110,7 +113,8 @@ contract Distribution is
|
|
110
113
|
uint256 feeAmount
|
111
114
|
)
|
112
115
|
external
|
113
|
-
|
116
|
+
onlyOwner
|
117
|
+
restricted()
|
114
118
|
virtual override
|
115
119
|
{
|
116
120
|
// default is no action
|
@@ -121,46 +125,29 @@ contract Distribution is
|
|
121
125
|
return false;
|
122
126
|
}
|
123
127
|
|
124
|
-
function
|
128
|
+
function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
|
129
|
+
InstanceReader reader = getInstance().getInstanceReader();
|
130
|
+
setupInfo = reader.getDistributionSetupInfo(getNftId());
|
131
|
+
|
132
|
+
// fallback to initial setup info (wallet is always != address(0))
|
133
|
+
if(setupInfo.wallet == address(0)) {
|
134
|
+
setupInfo = _getInitialSetupInfo();
|
135
|
+
}
|
136
|
+
}
|
137
|
+
|
138
|
+
function _getInitialSetupInfo() internal view returns (ISetup.DistributionSetupInfo memory setupInfo) {
|
125
139
|
return ISetup.DistributionSetupInfo(
|
126
|
-
|
127
|
-
|
140
|
+
zeroNftId(),
|
141
|
+
_tokenHandler,
|
128
142
|
_initialDistributionFee,
|
129
143
|
_isVerifying,
|
130
144
|
address(this)
|
131
145
|
);
|
132
146
|
}
|
133
|
-
|
134
|
-
function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
|
135
|
-
InstanceReader reader = _instance.getInstanceReader();
|
136
|
-
return reader.getDistributionSetupInfo(getNftId());
|
137
|
-
}
|
138
147
|
|
139
148
|
|
140
149
|
/// @dev returns true iff the component needs to be called when selling/renewing policis
|
141
150
|
function isVerifying() external view returns (bool verifying) {
|
142
151
|
return _isVerifying;
|
143
152
|
}
|
144
|
-
|
145
|
-
// from IRegisterable
|
146
|
-
|
147
|
-
function getInitialInfo()
|
148
|
-
public
|
149
|
-
view
|
150
|
-
override (IRegisterable, Registerable)
|
151
|
-
returns(IRegistry.ObjectInfo memory, bytes memory)
|
152
|
-
{
|
153
|
-
(
|
154
|
-
IRegistry.ObjectInfo memory info,
|
155
|
-
bytes memory data
|
156
|
-
) = super.getInitialInfo();
|
157
|
-
|
158
|
-
return (
|
159
|
-
info,
|
160
|
-
abi.encode(
|
161
|
-
_initialDistributionFee,
|
162
|
-
_isVerifying
|
163
|
-
)
|
164
|
-
);
|
165
|
-
}
|
166
153
|
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
|
6
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
7
|
+
import {IInstance} from "../instance/IInstance.sol";
|
8
|
+
import {IInstanceService} from "../instance/IInstanceService.sol";
|
9
|
+
import {IProductService} from "../instance/service/IProductService.sol";
|
10
|
+
import {NftId} from "../types/NftId.sol";
|
11
|
+
|
12
|
+
interface IComponent is IRegisterable {
|
13
|
+
|
14
|
+
error ErrorComponentNotInstance(NftId instanceNftId, address instance);
|
15
|
+
error ErrorComponentProductNftAlreadySet();
|
16
|
+
error ErrorComponentWalletAddressZero();
|
17
|
+
error ErrorComponentWalletAddressIsSameAsCurrent(address newWallet);
|
18
|
+
error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
|
19
|
+
error ErrorComponentUnauthorized(address caller, uint64 requiredRoleIdNum);
|
20
|
+
error ErrorComponentNotProductService(address caller);
|
21
|
+
|
22
|
+
event LogComponentWalletAddressChanged(address newWallet);
|
23
|
+
event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
|
24
|
+
|
25
|
+
function getName() external view returns (string memory name);
|
26
|
+
|
27
|
+
// TODO remove and replace with accessmanaged target locking mechanism
|
28
|
+
function lock() external;
|
29
|
+
function unlock() external;
|
30
|
+
|
31
|
+
function getToken() external view returns (IERC20Metadata token);
|
32
|
+
|
33
|
+
function setWallet(address walletAddress) external;
|
34
|
+
function getWallet() external view returns (address walletAddress);
|
35
|
+
|
36
|
+
function getInstance() external view returns (IInstance instance);
|
37
|
+
|
38
|
+
function setProductNftId(NftId productNftId) external;
|
39
|
+
function getProductNftId() external view returns (NftId productNftId);
|
40
|
+
|
41
|
+
function getInstanceService() external view returns (IInstanceService);
|
42
|
+
function getProductService() external view returns (IProductService);
|
43
|
+
}
|
@@ -2,13 +2,14 @@
|
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
4
|
import {Fee} from "../types/Fee.sol";
|
5
|
+
import {IComponent} from "./IComponent.sol";
|
6
|
+
import {ISetup} from "../instance/module/ISetup.sol";
|
5
7
|
import {ReferralId} from "../types/Referral.sol";
|
6
8
|
import {NftId} from "../types/NftId.sol";
|
7
|
-
import {ISetup} from "../instance/module/ISetup.sol";
|
8
9
|
|
9
|
-
interface IDistributionComponent {
|
10
|
+
interface IDistributionComponent is IComponent {
|
10
11
|
|
11
|
-
function
|
12
|
+
function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
|
12
13
|
|
13
14
|
function setFees(
|
14
15
|
Fee memory distributionFee
|
@@ -1,35 +1,24 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {NftId} from "../types/NftId.sol";
|
5
4
|
import {Fee} from "../types/Fee.sol";
|
5
|
+
import {IComponent} from "./IComponent.sol";
|
6
|
+
import {ISetup} from "../instance/module/ISetup.sol";
|
7
|
+
import {NftId} from "../types/NftId.sol";
|
6
8
|
import {UFixed} from "../types/UFixed.sol";
|
7
9
|
|
8
|
-
interface IPoolComponent {
|
10
|
+
interface IPoolComponent is IComponent {
|
9
11
|
|
10
12
|
event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
|
11
13
|
|
14
|
+
function getSetupInfo() external view returns (ISetup.PoolSetupInfo memory setupInfo);
|
15
|
+
|
12
16
|
function setFees(
|
13
17
|
Fee memory poolFee,
|
14
18
|
Fee memory stakingFee,
|
15
19
|
Fee memory performanceFee
|
16
20
|
) external;
|
17
21
|
|
18
|
-
/**
|
19
|
-
* @dev creates a new bundle for this pool.
|
20
|
-
*/
|
21
|
-
function createBundle(
|
22
|
-
Fee memory fee,
|
23
|
-
uint256 initialAmount,
|
24
|
-
uint256 lifetime,
|
25
|
-
bytes memory filter
|
26
|
-
) external returns(NftId bundleNftId);
|
27
|
-
|
28
|
-
function setBundleFee(
|
29
|
-
NftId policyNftId,
|
30
|
-
Fee memory fee
|
31
|
-
) external;
|
32
|
-
|
33
22
|
/**
|
34
23
|
* @dev this is a callback function that is called by the product service when underwriting a policy.
|
35
24
|
* the pool has the option to check the details and object to underwriting by reverting.
|
@@ -55,7 +44,7 @@ interface IPoolComponent {
|
|
55
44
|
view
|
56
45
|
returns (bool isMatching);
|
57
46
|
|
58
|
-
function
|
47
|
+
function isConfirmingApplication() external view returns (bool isConfirmingApplication);
|
59
48
|
|
60
49
|
function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
|
61
50
|
|
@@ -2,11 +2,15 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {Fee} from "../types/Fee.sol";
|
5
|
+
import {IComponent} from "./IComponent.sol";
|
6
|
+
import {ISetup} from "../instance/module/ISetup.sol";
|
5
7
|
import {NftId} from "../types/NftId.sol";
|
6
8
|
import {ReferralId} from "../types/Referral.sol";
|
7
9
|
import {RiskId} from "../types/RiskId.sol";
|
8
10
|
|
9
|
-
interface IProductComponent {
|
11
|
+
interface IProductComponent is IComponent {
|
12
|
+
|
13
|
+
function getSetupInfo() external view returns (ISetup.ProductSetupInfo memory setupInfo);
|
10
14
|
|
11
15
|
function setFees(
|
12
16
|
Fee memory productFee,
|
@@ -18,8 +22,8 @@ interface IProductComponent {
|
|
18
22
|
RiskId riskId,
|
19
23
|
uint256 lifetime,
|
20
24
|
bytes memory applicationData,
|
21
|
-
|
22
|
-
|
25
|
+
NftId bundleNftId,
|
26
|
+
ReferralId referralId
|
23
27
|
) external view returns (uint256 premiumAmount);
|
24
28
|
|
25
29
|
function calculateNetPremium(
|