@etherisc/gif-next 0.0.2-de0a1d3-009 → 0.0.2-e37834a-021
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -25
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +80 -41
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +101 -61
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +43 -40
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -163
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +6 -185
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -163
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +150 -126
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +110 -52
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +198 -74
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +285 -178
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +59 -53
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IService.sol/IService.json +45 -42
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +62 -69
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +55 -62
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +2 -2
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +29 -9
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +28 -8
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +2 -2
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +138 -11
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +138 -11
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +165 -93
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +87 -68
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +45 -61
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +45 -42
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +45 -42
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +45 -42
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +89 -70
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +117 -98
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +141 -12
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +293 -40
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +668 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +483 -120
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +885 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +460 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +43 -40
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -2
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +132 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +344 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +76 -37
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/shared/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +4 -27
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +1 -1
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +101 -61
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +150 -126
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +115 -58
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +93 -39
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +81 -75
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +15 -38
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/BaseComponent.sol +12 -27
- package/contracts/components/Distribution.sol +29 -6
- package/contracts/components/IBaseComponent.sol +2 -2
- package/contracts/components/IDistributionComponent.sol +1 -2
- package/contracts/components/IPoolComponent.sol +3 -10
- package/contracts/components/IProductComponent.sol +2 -3
- package/contracts/components/Pool.sol +84 -73
- package/contracts/components/Product.sol +85 -13
- package/contracts/instance/IInstance.sol +4 -3
- package/contracts/instance/Instance.sol +14 -3
- package/contracts/instance/base/ComponentServiceBase.sol +13 -6
- package/contracts/instance/base/IInstanceBase.sol +3 -2
- package/contracts/instance/base/InstanceBase.sol +6 -8
- package/contracts/instance/base/ServiceBase.sol +19 -13
- package/contracts/instance/module/component/ComponentModule.sol +5 -4
- package/contracts/instance/module/component/IComponent.sol +2 -2
- package/contracts/instance/module/pool/IPoolModule.sol +4 -3
- package/contracts/instance/module/pool/PoolModule.sol +12 -7
- package/contracts/instance/module/treasury/ITreasury.sol +7 -5
- package/contracts/instance/module/treasury/TokenHandler.sol +2 -2
- package/contracts/instance/module/treasury/TreasuryModule.sol +21 -28
- package/contracts/instance/service/ComponentOwnerService.sol +181 -66
- package/contracts/instance/service/DistributionService.sol +6 -11
- package/contracts/instance/service/IComponentOwnerService.sol +0 -2
- package/contracts/instance/service/PoolService.sol +19 -19
- package/contracts/instance/service/ProductService.sol +25 -24
- package/contracts/registry/ChainNft.sol +43 -15
- package/contracts/registry/IChainNft.sol +3 -2
- package/contracts/registry/IRegistry.sol +44 -28
- package/contracts/registry/IRegistryService.sol +29 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +382 -273
- package/contracts/registry/RegistryService.sol +375 -0
- package/contracts/registry/RegistryServiceManager.sol +52 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +1 -1
- package/contracts/shared/IRegisterable.sol +7 -9
- package/contracts/shared/IVersionable.sol +40 -9
- package/contracts/shared/NftOwnable.sol +87 -0
- package/contracts/shared/ProxyManager.sol +103 -0
- package/contracts/shared/Registerable.sol +74 -43
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +108 -60
- package/contracts/test/TestDistribution.sol +3 -2
- package/contracts/test/TestPool.sol +4 -2
- package/contracts/test/TestProduct.sol +4 -2
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestService.sol +5 -11
- package/contracts/types/Version.sol +1 -0
- package/package.json +1 -1
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
- package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.dbg.json +0 -4
- package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.json +0 -724
- package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.dbg.json +0 -4
- package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.json +0 -248
- package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
- package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.dbg.json +0 -4
- package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.json +0 -228
- package/contracts/experiment/statemachine/README.md +0 -112
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/registry/RegistryUpgradeable.sol +0 -473
- package/contracts/shared/Proxy.sol +0 -94
- package/contracts/shared/VersionableUpgradeable.sol +0 -133
@@ -1,12 +1,12 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC20Metadata} from "@
|
4
|
+
import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
|
6
6
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
7
7
|
import {IInstance} from "../IInstance.sol";
|
8
8
|
|
9
|
-
import {ITreasuryModule} from "../module/treasury/ITreasury.sol";
|
9
|
+
import {ITreasury, ITreasuryModule} from "../module/treasury/ITreasury.sol";
|
10
10
|
import {TreasuryModule} from "../module/treasury/TreasuryModule.sol";
|
11
11
|
import {IComponent, IComponentModule} from "../module/component/IComponent.sol";
|
12
12
|
import {IBaseComponent} from "../../components/IBaseComponent.sol";
|
@@ -16,18 +16,23 @@ import {IVersionable} from "../../shared/IVersionable.sol";
|
|
16
16
|
import {Versionable} from "../../shared/Versionable.sol";
|
17
17
|
|
18
18
|
import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
|
19
|
-
import {ObjectType, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
|
19
|
+
import {ObjectType, TOKEN, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
|
20
20
|
import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
|
21
21
|
import {Key32} from "../../types/Key32.sol";
|
22
22
|
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
23
23
|
import {Fee} from "../../types/Fee.sol";
|
24
24
|
import {Version, VersionLib} from "../../types/Version.sol";
|
25
|
+
import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
|
25
26
|
|
26
27
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
27
28
|
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
28
29
|
import {IProductComponent} from "../../components/IProductComponent.sol";
|
29
|
-
import {
|
30
|
+
import {IService} from "../base/IService.sol";
|
30
31
|
import {IComponentOwnerService} from "./IComponentOwnerService.sol";
|
32
|
+
import {ServiceBase} from "../base/ServiceBase.sol";
|
33
|
+
import {IPool, IPoolModule} from "../module/pool/IPoolModule.sol";
|
34
|
+
|
35
|
+
import {IRegistryService} from "../../registry/IRegistryService.sol";
|
31
36
|
|
32
37
|
contract ComponentOwnerService is
|
33
38
|
ServiceBase,
|
@@ -35,32 +40,35 @@ contract ComponentOwnerService is
|
|
35
40
|
{
|
36
41
|
using NftIdLib for NftId;
|
37
42
|
|
43
|
+
error MissingTypeRole();
|
44
|
+
error WalletIsZero();
|
45
|
+
error InvalidToken();
|
46
|
+
error InvalidPool();
|
47
|
+
error InvalidDistribution();
|
48
|
+
error InvalidPoolsInstance();
|
49
|
+
error InvalidDistributionsInstance();
|
50
|
+
|
51
|
+
error CollateralizationLevelIsZero();
|
52
|
+
|
38
53
|
string public constant NAME = "ComponentOwnerService";
|
39
54
|
|
40
55
|
modifier onlyRegisteredComponent(IBaseComponent component) {
|
41
|
-
NftId nftId =
|
56
|
+
NftId nftId = getRegistry().getNftId(address(component));
|
42
57
|
require(nftId.gtz(), "ERROR:COS-001:COMPONENT_UNKNOWN");
|
43
58
|
_;
|
44
59
|
}
|
45
60
|
|
46
61
|
constructor(
|
47
62
|
address registry,
|
48
|
-
NftId registryNftId
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
}
|
53
|
-
|
54
|
-
function getVersion()
|
55
|
-
public
|
56
|
-
pure
|
57
|
-
virtual override (IVersionable, Versionable)
|
58
|
-
returns(Version)
|
63
|
+
NftId registryNftId,
|
64
|
+
address initialOwner
|
65
|
+
)
|
59
66
|
{
|
60
|
-
|
67
|
+
_initializeServiceBase(registry, registryNftId, initialOwner);
|
68
|
+
_registerInterface(type(IComponentOwnerService).interfaceId);
|
61
69
|
}
|
62
70
|
|
63
|
-
function getName()
|
71
|
+
function getName() public pure override(IService, ServiceBase) returns(string memory name) {
|
64
72
|
return NAME;
|
65
73
|
}
|
66
74
|
|
@@ -81,58 +89,49 @@ contract ComponentOwnerService is
|
|
81
89
|
}
|
82
90
|
}
|
83
91
|
|
84
|
-
function
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
require(
|
89
|
-
msg.sender == address(component),
|
90
|
-
"ERROR:COS-003:NOT_COMPONENT"
|
91
|
-
);
|
92
|
+
function getRegistryService() public view virtual returns (IRegistryService) {
|
93
|
+
address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
|
94
|
+
return IRegistryService(service);
|
95
|
+
}
|
92
96
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
"ERROR:CMP-004:TYPE_ROLE_MISSING"
|
99
|
-
);
|
97
|
+
// TODO if user passes type BUNDLE??? -> registerComponent() must catch this
|
98
|
+
function register(
|
99
|
+
IBaseComponent component,
|
100
|
+
ObjectType componentType
|
101
|
+
) external returns (NftId nftId) {
|
100
102
|
|
101
|
-
|
102
|
-
|
103
|
+
// TODO some info parameters from component and from register may differ -> getObjectInfo() after registration?
|
104
|
+
(
|
105
|
+
IRegistry.ObjectInfo memory info,
|
106
|
+
bytes memory data
|
107
|
+
) = getRegistryService().registerComponent(component, componentType, msg.sender);
|
103
108
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
component.getWallet());
|
108
|
-
|
109
|
-
// component type specific registration actions
|
110
|
-
if (component.getType() == PRODUCT()) {
|
111
|
-
IProductComponent product = IProductComponent(address(component));
|
109
|
+
NftId instanceNftId = info.parentNftId;
|
110
|
+
address instancAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
|
111
|
+
IInstance instance = IInstance(instancAddress);
|
112
112
|
|
113
|
-
|
114
|
-
|
115
|
-
|
113
|
+
RoleId typeRole = getRoleForType(componentType);
|
114
|
+
if(instance.hasRole(typeRole, msg.sender) == false) {
|
115
|
+
revert MissingTypeRole();
|
116
|
+
}
|
116
117
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
distribution
|
118
|
+
// component type specific registration actions
|
119
|
+
if (componentType == PRODUCT()) {
|
120
|
+
_registerProduct(
|
121
|
+
info.nftId,
|
122
|
+
instanceNftId,
|
123
|
+
instance,
|
124
|
+
data
|
125
125
|
);
|
126
|
-
} else if (
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
// TODO add compensation
|
126
|
+
} else if (componentType == POOL()) {
|
127
|
+
_registerPool(
|
128
|
+
info.nftId,
|
129
|
+
instanceNftId,
|
130
|
+
instance,
|
131
|
+
data
|
132
|
+
);
|
133
|
+
}
|
134
|
+
// TODO add distribution and oracle
|
136
135
|
}
|
137
136
|
|
138
137
|
function lock(
|
@@ -154,4 +153,120 @@ contract ComponentOwnerService is
|
|
154
153
|
Key32 key = nftId.toKey32(COMPONENT());
|
155
154
|
instance.updateState(key, ACTIVE());
|
156
155
|
}
|
157
|
-
|
156
|
+
|
157
|
+
// Internals
|
158
|
+
|
159
|
+
function _registerProduct(
|
160
|
+
NftId nftId,
|
161
|
+
NftId instanceNftId,
|
162
|
+
IInstance instance,
|
163
|
+
bytes memory data
|
164
|
+
)
|
165
|
+
internal
|
166
|
+
{
|
167
|
+
(
|
168
|
+
ITreasury.TreasuryInfo memory info,
|
169
|
+
address wallet
|
170
|
+
) = abi.decode(data, (ITreasury.TreasuryInfo, address));
|
171
|
+
|
172
|
+
IRegistry _registry = getRegistry();
|
173
|
+
|
174
|
+
if(wallet == address(0)) {
|
175
|
+
revert WalletIsZero();
|
176
|
+
}
|
177
|
+
|
178
|
+
IRegistry.ObjectInfo memory tokenInfo = _registry.getObjectInfo(address(info.token));
|
179
|
+
|
180
|
+
if(tokenInfo.objectType != TOKEN()) {
|
181
|
+
revert InvalidToken();
|
182
|
+
}
|
183
|
+
|
184
|
+
IRegistry.ObjectInfo memory poolInfo = _registry.getObjectInfo(info.poolNftId);
|
185
|
+
|
186
|
+
if(poolInfo.objectType != POOL()) {
|
187
|
+
revert InvalidPool();
|
188
|
+
}
|
189
|
+
|
190
|
+
if(poolInfo.parentNftId != instanceNftId) {
|
191
|
+
revert InvalidPoolsInstance();
|
192
|
+
}
|
193
|
+
// TODO pool have the same token
|
194
|
+
//ITreasury.PoolSetup memory poolSetup = instance.getPoolSetup(info.poolNftId);
|
195
|
+
//require(tokenInfo.objectAddress == address(poolSetup.token), "ERROR:COS-018:PRODUCT_POOL_TOKEN_MISMATCH");
|
196
|
+
// TODO pool is not linked
|
197
|
+
|
198
|
+
IRegistry.ObjectInfo memory distributionInfo = _registry.getObjectInfo(info.distributionNftId);
|
199
|
+
|
200
|
+
if(distributionInfo.objectType != DISTRIBUTION()) {
|
201
|
+
revert InvalidDistribution();
|
202
|
+
}
|
203
|
+
|
204
|
+
if(distributionInfo.parentNftId != instanceNftId) {
|
205
|
+
revert InvalidDistributionsInstance();
|
206
|
+
}
|
207
|
+
// TODO distribution have the same token
|
208
|
+
// TODO distribution is not linked
|
209
|
+
|
210
|
+
// component module
|
211
|
+
instance.registerComponent(
|
212
|
+
nftId,
|
213
|
+
info.token,
|
214
|
+
wallet // TODO move wallet into TreasuryInfo?
|
215
|
+
);
|
216
|
+
|
217
|
+
// treasury module
|
218
|
+
instance.registerProductSetup(
|
219
|
+
nftId,
|
220
|
+
info
|
221
|
+
);
|
222
|
+
}
|
223
|
+
|
224
|
+
function _registerPool(
|
225
|
+
NftId nftId,
|
226
|
+
NftId instanceNftId,
|
227
|
+
IInstance instance,
|
228
|
+
bytes memory data
|
229
|
+
)
|
230
|
+
internal
|
231
|
+
{
|
232
|
+
(
|
233
|
+
IPool.PoolInfo memory info,
|
234
|
+
address wallet,
|
235
|
+
IERC20Metadata token,
|
236
|
+
/*poolFee*/,
|
237
|
+
/*stakingFee*/,
|
238
|
+
/*performanceFee*/
|
239
|
+
) = abi.decode(data, (IPool.PoolInfo, address, IERC20Metadata, Fee, Fee, Fee));
|
240
|
+
|
241
|
+
IRegistry _registry = getRegistry();
|
242
|
+
|
243
|
+
if(wallet == address(0)) {
|
244
|
+
revert WalletIsZero();
|
245
|
+
}
|
246
|
+
|
247
|
+
ObjectType tokenType = _registry.getObjectInfo(address(token)).objectType;
|
248
|
+
|
249
|
+
if(tokenType != TOKEN()) {
|
250
|
+
revert InvalidToken();
|
251
|
+
}
|
252
|
+
|
253
|
+
if(UFixedMathLib.eqz(info.collateralizationLevel)) {
|
254
|
+
revert CollateralizationLevelIsZero();
|
255
|
+
}
|
256
|
+
|
257
|
+
// TODO add more validations
|
258
|
+
|
259
|
+
// component module
|
260
|
+
instance.registerComponent(
|
261
|
+
nftId,
|
262
|
+
token,
|
263
|
+
wallet
|
264
|
+
);
|
265
|
+
|
266
|
+
// pool module
|
267
|
+
instance.registerPool(
|
268
|
+
nftId,
|
269
|
+
info
|
270
|
+
);
|
271
|
+
}
|
272
|
+
}
|
@@ -13,6 +13,8 @@ import {Version, VersionLib} from "../../types/Version.sol";
|
|
13
13
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
14
14
|
import {Versionable} from "../../shared/Versionable.sol";
|
15
15
|
|
16
|
+
import {IService} from "../base/IService.sol";
|
17
|
+
import {ServiceBase} from "../base/ServiceBase.sol";
|
16
18
|
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
17
19
|
import {IDistributionService} from "./IDistributionService.sol";
|
18
20
|
|
@@ -24,22 +26,15 @@ contract DistributionService is
|
|
24
26
|
|
25
27
|
constructor(
|
26
28
|
address registry,
|
27
|
-
NftId registryNftId
|
28
|
-
|
29
|
+
NftId registryNftId,
|
30
|
+
address initialOwner
|
31
|
+
) ComponentServiceBase(registry, registryNftId, initialOwner)
|
29
32
|
{
|
30
33
|
_registerInterface(type(IDistributionService).interfaceId);
|
31
34
|
}
|
32
35
|
|
33
|
-
function getVersion()
|
34
|
-
public
|
35
|
-
pure
|
36
|
-
virtual override (IVersionable, Versionable)
|
37
|
-
returns(Version)
|
38
|
-
{
|
39
|
-
return VersionLib.toVersion(3,0,0);
|
40
|
-
}
|
41
36
|
|
42
|
-
function getName()
|
37
|
+
function getName() public pure override(IService, ServiceBase) returns(string memory name) {
|
43
38
|
return NAME;
|
44
39
|
}
|
45
40
|
|
@@ -10,8 +10,6 @@ import {IService} from "../base/IService.sol";
|
|
10
10
|
// TODO rename to registry service
|
11
11
|
interface IComponentOwnerService is IService {
|
12
12
|
|
13
|
-
function register(IBaseComponent component) external returns(NftId componentNftId);
|
14
|
-
|
15
13
|
// TODO move to product/pool services
|
16
14
|
function lock(IBaseComponent component) external;
|
17
15
|
|
@@ -9,11 +9,13 @@ import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/tr
|
|
9
9
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
10
10
|
import {Versionable} from "../../shared/Versionable.sol";
|
11
11
|
|
12
|
-
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
12
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
13
13
|
import {POOL, BUNDLE} from "../../types/ObjectType.sol";
|
14
14
|
import {Fee} from "../../types/Fee.sol";
|
15
15
|
import {Version, VersionLib} from "../../types/Version.sol";
|
16
16
|
|
17
|
+
import {IService} from "../base/IService.sol";
|
18
|
+
import {ServiceBase} from "../base/ServiceBase.sol";
|
17
19
|
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
18
20
|
import {IPoolService} from "./IPoolService.sol";
|
19
21
|
|
@@ -25,22 +27,14 @@ contract PoolService is ComponentServiceBase, IPoolService {
|
|
25
27
|
|
26
28
|
constructor(
|
27
29
|
address registry,
|
28
|
-
NftId registryNftId
|
29
|
-
|
30
|
+
NftId registryNftId,
|
31
|
+
address initialOwner
|
32
|
+
) ComponentServiceBase(registry, registryNftId, initialOwner)
|
30
33
|
{
|
31
34
|
_registerInterface(type(IPoolService).interfaceId);
|
32
35
|
}
|
33
36
|
|
34
|
-
function
|
35
|
-
public
|
36
|
-
pure
|
37
|
-
virtual override (IVersionable, Versionable)
|
38
|
-
returns(Version)
|
39
|
-
{
|
40
|
-
return VersionLib.toVersion(3,0,0);
|
41
|
-
}
|
42
|
-
|
43
|
-
function getName() external pure override returns(string memory name) {
|
37
|
+
function getName() public pure override(IService, ServiceBase) returns(string memory name) {
|
44
38
|
return NAME;
|
45
39
|
}
|
46
40
|
|
@@ -77,11 +71,17 @@ contract PoolService is ComponentServiceBase, IPoolService {
|
|
77
71
|
|
78
72
|
// register bundle with registry
|
79
73
|
NftId poolNftId = info.nftId;
|
80
|
-
bundleNftId =
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
74
|
+
bundleNftId = getRegistryService().registerBundle(
|
75
|
+
IRegistry.ObjectInfo(
|
76
|
+
zeroNftId(),
|
77
|
+
poolNftId,
|
78
|
+
BUNDLE(),
|
79
|
+
false, // intercepting property for bundles is defined on pool
|
80
|
+
address(0),
|
81
|
+
owner,
|
82
|
+
""
|
83
|
+
)
|
84
|
+
);
|
85
85
|
|
86
86
|
// create bundle info in instance
|
87
87
|
instance.createBundleInfo(
|
@@ -136,7 +136,7 @@ contract PoolService is ComponentServiceBase, IPoolService {
|
|
136
136
|
if(stakingAmount > 0) {
|
137
137
|
NftId productNftId = instance.getProductNftId(poolNftId);
|
138
138
|
TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
|
139
|
-
address bundleOwner =
|
139
|
+
address bundleOwner = getRegistry().ownerOf(bundleNftId);
|
140
140
|
address poolWallet = instance.getComponentWallet(poolNftId);
|
141
141
|
|
142
142
|
tokenHandler.transfer(
|
@@ -3,6 +3,7 @@ pragma solidity ^0.8.19;
|
|
3
3
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
5
|
import {IProductComponent} from "../../components/IProductComponent.sol";
|
6
|
+
import {Product} from "../../components/Product.sol";
|
6
7
|
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
7
8
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
8
9
|
import {IInstance} from "../../instance/IInstance.sol";
|
@@ -21,13 +22,15 @@ import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
|
|
21
22
|
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
22
23
|
import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
|
23
24
|
import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
|
24
|
-
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
25
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
25
26
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
26
27
|
import {ReferralId} from "../../types/ReferralId.sol";
|
27
28
|
import {RiskId} from "../../types/RiskId.sol";
|
28
29
|
import {StateId} from "../../types/StateId.sol";
|
29
30
|
import {Version, VersionLib} from "../../types/Version.sol";
|
30
31
|
|
32
|
+
import {IService} from "../base/IService.sol";
|
33
|
+
import {ServiceBase} from "../base/ServiceBase.sol";
|
31
34
|
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
32
35
|
import {IProductService} from "./IProductService.sol";
|
33
36
|
|
@@ -41,22 +44,15 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
41
44
|
|
42
45
|
constructor(
|
43
46
|
address registry,
|
44
|
-
NftId registryNftId
|
45
|
-
|
47
|
+
NftId registryNftId,
|
48
|
+
address initialOwner
|
49
|
+
) ComponentServiceBase(registry, registryNftId, initialOwner)
|
46
50
|
{
|
47
51
|
_registerInterface(type(IProductService).interfaceId);
|
48
52
|
}
|
49
53
|
|
50
|
-
function getVersion()
|
51
|
-
public
|
52
|
-
pure
|
53
|
-
virtual override (IVersionable, Versionable)
|
54
|
-
returns(Version)
|
55
|
-
{
|
56
|
-
return VersionLib.toVersion(3,0,0);
|
57
|
-
}
|
58
54
|
|
59
|
-
function getName()
|
55
|
+
function getName() public pure override(IService, ServiceBase) returns(string memory name) {
|
60
56
|
return NAME;
|
61
57
|
}
|
62
58
|
|
@@ -110,10 +106,10 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
110
106
|
);
|
111
107
|
}
|
112
108
|
|
113
|
-
function _getAndVerifyInstanceAndProduct() internal view returns (
|
109
|
+
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
114
110
|
IRegistry.ObjectInfo memory productInfo;
|
115
111
|
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
116
|
-
product =
|
112
|
+
product = Product(productInfo.objectAddress);
|
117
113
|
}
|
118
114
|
|
119
115
|
function calculatePremium(
|
@@ -135,7 +131,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
135
131
|
uint256 distributionFeeAmount
|
136
132
|
)
|
137
133
|
{
|
138
|
-
|
134
|
+
Product product = _getAndVerifyInstanceAndProduct();
|
139
135
|
uint256 netPremiumAmount = product.calculateNetPremium(
|
140
136
|
sumInsuredAmount,
|
141
137
|
riskId,
|
@@ -162,7 +158,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
162
158
|
|
163
159
|
function _calculateFeeAmounts(
|
164
160
|
uint256 netPremiumAmount,
|
165
|
-
|
161
|
+
Product product,
|
166
162
|
NftId bundleNftId,
|
167
163
|
ReferralId referralId
|
168
164
|
)
|
@@ -184,7 +180,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
184
180
|
(poolFeeAmount,) = FeeLib.calculateFee(treasuryInfo.poolFee, netPremiumAmount);
|
185
181
|
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
186
182
|
|
187
|
-
IRegistry.ObjectInfo memory distributionInfo =
|
183
|
+
IRegistry.ObjectInfo memory distributionInfo = getRegistry().getObjectInfo(treasuryInfo.distributionNftId);
|
188
184
|
IDistributionComponent distribution = IDistributionComponent(distributionInfo.objectAddress);
|
189
185
|
distributionFeeAmount = distribution.calculateFeeAmount(referralId, netPremiumAmount);
|
190
186
|
}
|
@@ -202,11 +198,16 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
202
198
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
203
199
|
// TODO add validations (see create bundle in pool service)
|
204
200
|
|
205
|
-
policyNftId =
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
201
|
+
policyNftId = getRegistryService().registerPolicy(
|
202
|
+
IRegistry.ObjectInfo(
|
203
|
+
zeroNftId(),
|
204
|
+
productInfo.nftId,
|
205
|
+
POLICY(),
|
206
|
+
false, // intercepting property for policies is defined on product
|
207
|
+
address(0),
|
208
|
+
applicationOwner,
|
209
|
+
""
|
210
|
+
)
|
210
211
|
);
|
211
212
|
|
212
213
|
(uint256 premiumAmount,,,,) = calculatePremium(
|
@@ -283,7 +284,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
283
284
|
)
|
284
285
|
internal
|
285
286
|
{
|
286
|
-
address poolAddress =
|
287
|
+
address poolAddress = getRegistry().getObjectInfo(treasuryInfo.poolNftId).objectAddress;
|
287
288
|
IPoolComponent pool = IPoolComponent(poolAddress);
|
288
289
|
pool.underwrite(
|
289
290
|
policyNftId,
|
@@ -480,7 +481,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
480
481
|
// process token transfer(s)
|
481
482
|
if(premiumAmount > 0) {
|
482
483
|
TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
|
483
|
-
address policyOwner =
|
484
|
+
address policyOwner = getRegistry().ownerOf(policyNftId);
|
484
485
|
address poolWallet = instance.getComponentWallet(treasuryInfo.poolNftId);
|
485
486
|
netPremiumAmount = premiumAmount;
|
486
487
|
Fee memory productFee = treasuryInfo.productFee;
|
@@ -1,8 +1,11 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {ERC721, ERC721Enumerable} from "@openzeppelin5/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
|
5
|
+
import {IERC721} from "@openzeppelin5/contracts/token/ERC721/IERC721.sol";
|
3
6
|
|
4
|
-
import {ERC721, ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
|
5
7
|
import {IChainNft} from "./IChainNft.sol";
|
8
|
+
import {ITransferInterceptor} from "./ITransferInterceptor.sol";
|
6
9
|
|
7
10
|
contract ChainNft is ERC721Enumerable, IChainNft {
|
8
11
|
string public constant NAME = "Dezentralized Insurance Protocol Registry";
|
@@ -11,6 +14,9 @@ contract ChainNft is ERC721Enumerable, IChainNft {
|
|
11
14
|
uint256 public constant PROTOCOL_NFT_ID = 1101;
|
12
15
|
uint256 public constant GLOBAL_REGISTRY_ID = 2101;
|
13
16
|
|
17
|
+
// remember interceptors
|
18
|
+
mapping(uint256 tokenId => address interceptor) private _interceptor;
|
19
|
+
|
14
20
|
// remember token uri
|
15
21
|
mapping(uint256 tokenId => string uri) private _uri;
|
16
22
|
|
@@ -37,18 +43,36 @@ contract ChainNft is ERC721Enumerable, IChainNft {
|
|
37
43
|
_chainIdInt = block.chainid;
|
38
44
|
_chainIdDigits = _countDigits(_chainIdInt);
|
39
45
|
_chainIdMultiplier = 10 ** _chainIdDigits;
|
40
|
-
_idNext =
|
46
|
+
_idNext = 4;
|
41
47
|
}
|
42
48
|
|
49
|
+
/**
|
50
|
+
* @dev mints a token for a specified token id
|
51
|
+
* not part of the IRegistry interface only needed for
|
52
|
+
* initial registry setup (protocol and global registry objects)
|
53
|
+
*/
|
54
|
+
function mint(address to, uint256 tokenId) external onlyRegistry {
|
55
|
+
_totalMinted++;
|
56
|
+
_safeMint(to, tokenId);
|
57
|
+
}
|
58
|
+
|
59
|
+
|
43
60
|
/**
|
44
61
|
* @dev mints the next token to register new objects
|
62
|
+
* non-zero transferInterceptors are recorded and called during nft token transfers.
|
63
|
+
* the contract receiving such a notification may decides to revert or record the transfer
|
45
64
|
*/
|
46
65
|
function mint(
|
47
66
|
address to,
|
67
|
+
address interceptor,
|
48
68
|
string memory uri
|
49
|
-
)
|
69
|
+
) public onlyRegistry returns (uint256 tokenId) {
|
50
70
|
tokenId = _getNextTokenId();
|
51
71
|
|
72
|
+
if (interceptor != address(0)) {
|
73
|
+
_interceptor[tokenId] = interceptor;
|
74
|
+
}
|
75
|
+
|
52
76
|
if (bytes(uri).length > 0) {
|
53
77
|
_uri[tokenId] = uri;
|
54
78
|
}
|
@@ -57,18 +81,22 @@ contract ChainNft is ERC721Enumerable, IChainNft {
|
|
57
81
|
_totalMinted++;
|
58
82
|
}
|
59
83
|
|
84
|
+
|
60
85
|
/**
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
86
|
+
* @dev amend the open zeppelin transferFrom function by an interceptor call if such an interceptor is defined for the nft token id
|
87
|
+
* this allows distribution, product and pool components to be notified when distributors, policies and bundles are transferred.
|
88
|
+
*/
|
89
|
+
function transferFrom(address from, address to, uint256 tokenId) public override (ERC721, IERC721) {
|
90
|
+
super.transferFrom(from, to, tokenId);
|
91
|
+
|
92
|
+
if (_interceptor[tokenId] != address(0)) {
|
93
|
+
ITransferInterceptor(_interceptor[tokenId]).nftTransferFrom(from, to, tokenId);
|
94
|
+
}
|
68
95
|
}
|
69
96
|
|
97
|
+
|
70
98
|
function burn(uint256 tokenId) external override onlyRegistry {
|
71
|
-
|
99
|
+
_requireOwned(tokenId);
|
72
100
|
_burn(tokenId);
|
73
101
|
delete _uri[tokenId];
|
74
102
|
}
|
@@ -79,18 +107,18 @@ contract ChainNft is ERC721Enumerable, IChainNft {
|
|
79
107
|
) external override onlyRegistry {
|
80
108
|
require(bytes(uri).length > 0, "ERROR:CRG-011:URI_EMPTY");
|
81
109
|
|
82
|
-
|
110
|
+
_requireOwned(tokenId);
|
83
111
|
_uri[tokenId] = uri;
|
84
112
|
}
|
85
113
|
|
86
114
|
function exists(uint256 tokenId) external view override returns (bool) {
|
87
|
-
return
|
115
|
+
return _ownerOf(tokenId) != address(0);
|
88
116
|
}
|
89
117
|
|
90
118
|
function tokenURI(
|
91
119
|
uint256 tokenId
|
92
120
|
) public view override returns (string memory) {
|
93
|
-
|
121
|
+
_requireOwned(tokenId);
|
94
122
|
return _uri[tokenId];
|
95
123
|
}
|
96
124
|
|