@etherisc/gif-next 0.0.2-ebbe63d → 0.0.2-efdb520-159
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 +220 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +174 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +174 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +356 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +279 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
- package/artifacts/contracts/components/Pool.sol/Pool.json +387 -0
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
- package/artifacts/contracts/components/Product.sol/Product.json +305 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +4 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +105 -0
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +4 -0
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +105 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +128 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +42 -0
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +76 -0
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +89 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +128 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +37 -0
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +50 -0
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +63 -0
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +4 -0
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +10 -0
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +4 -0
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +10 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2022 -0
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +24 -0
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +50 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +4 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2288 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +313 -0
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +333 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +10 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +333 -0
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +276 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +276 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +188 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +10 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +188 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +134 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.json +182 -0
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +221 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.json +10 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +261 -0
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +261 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +10 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +149 -0
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +149 -0
- package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +10 -0
- package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.json +10 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +538 -0
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +538 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +519 -0
- package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.json +300 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +477 -0
- package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IService.sol/IService.json +300 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +499 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +685 -0
- package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.json +300 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +597 -0
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +4 -0
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +452 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +305 -0
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +4 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.json +472 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +24 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +121 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +121 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +95 -0
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +387 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +82 -0
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
- package/artifacts/contracts/test/TestService.sol/TestService.json +407 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +222 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +230 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +92 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +236 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +453 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.json +78 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
- package/contracts/components/BaseComponent.sol +89 -0
- package/contracts/components/IBaseComponent.sol +19 -0
- package/contracts/components/IPoolComponent.sol +57 -0
- package/contracts/components/IProductComponent.sol +19 -0
- package/contracts/components/Pool.sol +174 -0
- package/contracts/components/Product.sol +117 -0
- package/contracts/experiment/errors/Require.sol +38 -0
- package/contracts/experiment/errors/Revert.sol +44 -0
- package/contracts/experiment/inheritance/A.sol +53 -0
- package/contracts/experiment/inheritance/B.sol +28 -0
- package/contracts/experiment/inheritance/C.sol +34 -0
- package/contracts/experiment/inheritance/IA.sol +13 -0
- package/contracts/experiment/inheritance/IB.sol +10 -0
- package/contracts/experiment/inheritance/IC.sol +12 -0
- package/contracts/experiment/statemachine/Dummy.sol +27 -0
- package/contracts/experiment/statemachine/ISM.sol +25 -0
- package/contracts/experiment/statemachine/README.md +112 -0
- package/contracts/experiment/statemachine/SM.sol +57 -0
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
- package/contracts/experiment/types/TypeA.sol +47 -0
- package/contracts/experiment/types/TypeB.sol +29 -0
- package/contracts/instance/IInstance.sol +50 -0
- package/contracts/instance/IInstanceLinked.sol +8 -0
- package/contracts/instance/IServiceLinked.sol +12 -0
- package/contracts/instance/Instance.sol +62 -0
- package/contracts/instance/InstanceBase.sol +74 -0
- package/contracts/instance/module/access/Access.sol +149 -0
- package/contracts/instance/module/access/IAccess.sol +53 -0
- package/contracts/instance/module/bundle/BundleModule.sol +228 -0
- package/contracts/instance/module/bundle/IBundle.sol +53 -0
- package/contracts/instance/module/component/ComponentModule.sol +104 -0
- package/contracts/instance/module/component/IComponent.sol +53 -0
- package/contracts/instance/module/lifecycle/ILifecycle.sol +47 -0
- package/contracts/instance/module/lifecycle/LifecycleModule.sol +89 -0
- package/contracts/instance/module/policy/IPolicy.sol +60 -0
- package/contracts/instance/module/policy/PolicyModule.sol +84 -0
- package/contracts/instance/module/pool/IPoolModule.sol +41 -0
- package/contracts/instance/module/pool/PoolModule.sol +87 -0
- package/contracts/instance/module/product/IProductModule.sol +6 -0
- package/contracts/instance/module/product/ProductModule.sol +8 -0
- package/contracts/instance/module/treasury/ITreasury.sol +104 -0
- package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
- package/contracts/instance/module/treasury/TreasuryModule.sol +148 -0
- package/contracts/instance/service/ComponentOwnerService.sol +174 -0
- package/contracts/instance/service/ComponentServiceBase.sol +41 -0
- package/contracts/instance/service/IComponentOwnerService.sol +22 -0
- package/contracts/instance/service/IPoolService.sol +30 -0
- package/contracts/instance/service/IProductService.sol +58 -0
- package/contracts/instance/service/IService.sol +15 -0
- package/contracts/instance/service/PoolService.sol +98 -0
- package/contracts/instance/service/ProductService.sol +358 -0
- package/contracts/instance/service/ServiceBase.sol +39 -0
- package/contracts/registry/ChainNft.sol +159 -0
- package/contracts/registry/IChainNft.sol +21 -0
- package/contracts/registry/IRegistry.sol +57 -0
- package/contracts/registry/IRegistryLinked.sol +8 -0
- package/contracts/registry/Registry.sol +381 -0
- package/contracts/shared/ERC165.sol +21 -0
- package/contracts/shared/IOwnable.sol +6 -0
- package/contracts/shared/IRegisterable.sol +24 -0
- package/contracts/shared/IVersionable.sol +52 -0
- package/contracts/shared/Registerable.sol +86 -0
- package/contracts/shared/Versionable.sol +92 -0
- package/contracts/test/TestFee.sol +25 -0
- package/contracts/test/TestPool.sol +22 -0
- package/contracts/test/TestProduct.sol +44 -0
- package/contracts/test/TestRegisterable.sol +19 -0
- package/contracts/test/TestRoleId.sol +14 -0
- package/contracts/test/TestService.sol +35 -0
- package/contracts/{Dip.sol → test/TestToken.sol} +5 -5
- package/contracts/test/TestVersion.sol +47 -0
- package/contracts/test/TestVersionable.sol +20 -0
- package/contracts/types/AddressSet.sol +58 -0
- package/contracts/types/Blocknumber.sol +118 -0
- package/contracts/types/ChainId.sol +38 -0
- package/contracts/types/Fee.sol +32 -0
- package/contracts/types/NftId.sol +57 -0
- package/contracts/types/NftIdSet.sol +60 -0
- package/contracts/types/ObjectType.sol +115 -0
- package/contracts/types/RoleId.sol +36 -0
- package/contracts/types/StateId.sol +95 -0
- package/contracts/types/Timestamp.sol +123 -0
- package/contracts/types/UFixed.sol +206 -0
- package/contracts/types/Version.sol +91 -0
- package/package.json +24 -9
- package/artifacts/contracts/Dip.sol/DIP.dbg.json +0 -4
- package/artifacts/contracts/Dip.sol/DIP.json +0 -338
- package/artifacts/contracts/Lock.sol/Lock.dbg.json +0 -4
- package/artifacts/contracts/Lock.sol/Lock.json +0 -74
- package/contracts/Lock.sol +0 -34
@@ -0,0 +1,228 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegistry} from "../../../registry/IRegistry.sol";
|
5
|
+
|
6
|
+
import {LifecycleModule} from "../lifecycle/LifecycleModule.sol";
|
7
|
+
import {IProductService} from "../../service/IProductService.sol";
|
8
|
+
import {IPoolService} from "../../service/IPoolService.sol";
|
9
|
+
|
10
|
+
import {NftId} from "../../../types/NftId.sol";
|
11
|
+
import {LibNftIdSet} from "../../../types/NftIdSet.sol";
|
12
|
+
import {ObjectType, PRODUCT, ORACLE, POOL, BUNDLE, POLICY} from "../../../types/ObjectType.sol";
|
13
|
+
import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, REVOKED, DECLINED} from "../../../types/StateId.sol";
|
14
|
+
import {Timestamp, blockTimestamp, zeroTimestamp} from "../../../types/Timestamp.sol";
|
15
|
+
import {Blocknumber, blockNumber} from "../../../types/Blocknumber.sol";
|
16
|
+
|
17
|
+
import {ILifecycleModule} from "../lifecycle/ILifecycle.sol";
|
18
|
+
import {IBundleModule} from "./IBundle.sol";
|
19
|
+
|
20
|
+
abstract contract BundleModule is
|
21
|
+
IBundleModule
|
22
|
+
{
|
23
|
+
|
24
|
+
using LibNftIdSet for LibNftIdSet.Set;
|
25
|
+
|
26
|
+
mapping(NftId bundleNftId => BundleInfo info) private _bundleInfo;
|
27
|
+
mapping(NftId bundleNftId => LibNftIdSet.Set policies) private _collateralizedPolicies;
|
28
|
+
mapping(NftId bundleNftId => mapping(NftId policyNftId => uint256 amount)) private _collateralizationAmount;
|
29
|
+
|
30
|
+
LifecycleModule private _lifecycleModule;
|
31
|
+
|
32
|
+
modifier onlyBundlePoolService() {
|
33
|
+
require(
|
34
|
+
msg.sender == address(this.getPoolService()),
|
35
|
+
"ERROR:BDL-001:NOT_POOL_SERVICE"
|
36
|
+
);
|
37
|
+
_;
|
38
|
+
}
|
39
|
+
|
40
|
+
modifier onlyBundleProductService() {
|
41
|
+
require(
|
42
|
+
msg.sender == address(this.getProductService()),
|
43
|
+
"ERROR:BDL-002:NOT_PRODUCT_SERVICE"
|
44
|
+
);
|
45
|
+
_;
|
46
|
+
}
|
47
|
+
|
48
|
+
modifier onlyPoolOrProductService() {
|
49
|
+
require(
|
50
|
+
msg.sender == address(this.getPoolService())
|
51
|
+
|| msg.sender == address(this.getProductService()),
|
52
|
+
"ERROR:BDL-003:NOT_POOL_OR_PRODUCT_SERVICE"
|
53
|
+
);
|
54
|
+
_;
|
55
|
+
}
|
56
|
+
|
57
|
+
constructor() {
|
58
|
+
_lifecycleModule = LifecycleModule(address(this));
|
59
|
+
}
|
60
|
+
|
61
|
+
function createBundleInfo(
|
62
|
+
NftId bundleNftId,
|
63
|
+
NftId poolNftId,
|
64
|
+
uint256 amount,
|
65
|
+
uint256 lifetime,
|
66
|
+
bytes calldata filter
|
67
|
+
)
|
68
|
+
external
|
69
|
+
onlyBundlePoolService
|
70
|
+
override
|
71
|
+
{
|
72
|
+
|
73
|
+
_bundleInfo[bundleNftId] = BundleInfo(
|
74
|
+
bundleNftId,
|
75
|
+
poolNftId,
|
76
|
+
_lifecycleModule.getInitialState(BUNDLE()),
|
77
|
+
filter,
|
78
|
+
amount, // capital
|
79
|
+
0, // locked capital
|
80
|
+
amount, // balance
|
81
|
+
blockTimestamp(), // createdAt
|
82
|
+
blockTimestamp().addSeconds(lifetime), // expiredAt
|
83
|
+
zeroTimestamp(), // closedAt
|
84
|
+
blockNumber() // updatedIn
|
85
|
+
);
|
86
|
+
|
87
|
+
// TODO add logging
|
88
|
+
}
|
89
|
+
|
90
|
+
function setBundleInfo(BundleInfo memory bundleInfo)
|
91
|
+
external
|
92
|
+
override
|
93
|
+
onlyPoolOrProductService
|
94
|
+
{
|
95
|
+
_bundleInfo[bundleInfo.nftId] = bundleInfo;
|
96
|
+
}
|
97
|
+
|
98
|
+
// function updateBundleState(
|
99
|
+
// NftId bundleNftId,
|
100
|
+
// StateId newState
|
101
|
+
// )
|
102
|
+
// external
|
103
|
+
// // add authz (both product and pool service)
|
104
|
+
// override
|
105
|
+
// {
|
106
|
+
// BundleInfo storage info = _bundleInfo[bundleNftId];
|
107
|
+
// info.state = newState;
|
108
|
+
// info.updatedIn = blockNumber();
|
109
|
+
// }
|
110
|
+
|
111
|
+
// function extendBundle(
|
112
|
+
// NftId bundleNftId,
|
113
|
+
// uint256 lifetimeExtension
|
114
|
+
// )
|
115
|
+
// external
|
116
|
+
// onlyBundlePoolService
|
117
|
+
// override
|
118
|
+
// {
|
119
|
+
// BundleInfo storage info = _bundleInfo[bundleNftId];
|
120
|
+
// info.expiredAt = info.expiredAt.addSeconds(lifetimeExtension);
|
121
|
+
// info.updatedIn = blockNumber();
|
122
|
+
// }
|
123
|
+
|
124
|
+
// function closeBundle(
|
125
|
+
// NftId bundleNftId
|
126
|
+
// )
|
127
|
+
// external
|
128
|
+
// onlyBundlePoolService
|
129
|
+
// override
|
130
|
+
// {
|
131
|
+
// BundleInfo storage info = _bundleInfo[bundleNftId];
|
132
|
+
// info.state = CLOSED();
|
133
|
+
// info.closedAt = blockTimestamp();
|
134
|
+
// info.updatedIn = blockNumber();
|
135
|
+
// }
|
136
|
+
|
137
|
+
// function processStake(
|
138
|
+
// NftId nftId,
|
139
|
+
// uint256 amount
|
140
|
+
// )
|
141
|
+
// external
|
142
|
+
// onlyBundlePoolService
|
143
|
+
// override
|
144
|
+
// {
|
145
|
+
// BundleInfo storage info = _bundleInfo[nftId];
|
146
|
+
// info.capitalAmount += amount;
|
147
|
+
// info.balanceAmount += amount;
|
148
|
+
// info.updatedIn = blockNumber();
|
149
|
+
// }
|
150
|
+
|
151
|
+
// function processUnstake(
|
152
|
+
// NftId nftId,
|
153
|
+
// uint256 amount
|
154
|
+
// )
|
155
|
+
// external
|
156
|
+
// onlyBundlePoolService
|
157
|
+
// override
|
158
|
+
// {
|
159
|
+
// BundleInfo storage info = _bundleInfo[nftId];
|
160
|
+
// // TODO fix book keeping in a way that provides
|
161
|
+
// // continuous infor regarding profitability
|
162
|
+
// // this is needed to properly apply performance fees
|
163
|
+
// info.capitalAmount -= amount;
|
164
|
+
// info.balanceAmount -= amount;
|
165
|
+
// info.updatedIn = blockNumber();
|
166
|
+
// }
|
167
|
+
|
168
|
+
function collateralizePolicy(
|
169
|
+
NftId bundleNftId,
|
170
|
+
NftId policyNftId,
|
171
|
+
uint256 collateralAmount
|
172
|
+
)
|
173
|
+
external
|
174
|
+
onlyBundleProductService
|
175
|
+
override
|
176
|
+
{
|
177
|
+
_collateralizationAmount[bundleNftId][policyNftId] = collateralAmount;
|
178
|
+
_collateralizedPolicies[bundleNftId].add(policyNftId);
|
179
|
+
}
|
180
|
+
|
181
|
+
function releasePolicy(
|
182
|
+
NftId bundleNftId,
|
183
|
+
NftId policyNftId
|
184
|
+
)
|
185
|
+
external
|
186
|
+
onlyBundleProductService
|
187
|
+
override
|
188
|
+
returns(uint256 collateralAmount)
|
189
|
+
{
|
190
|
+
// BundleInfo storage info = _bundleInfo[bundleNftId];
|
191
|
+
// info.lockedAmount -= collateralAmount;
|
192
|
+
// info.updatedIn = blockNumber();
|
193
|
+
|
194
|
+
collateralAmount = _collateralizationAmount[bundleNftId][policyNftId];
|
195
|
+
delete _collateralizationAmount[bundleNftId][policyNftId];
|
196
|
+
_collateralizedPolicies[bundleNftId].remove(policyNftId);
|
197
|
+
}
|
198
|
+
|
199
|
+
// function addPremium(NftId bundleNftId, uint256 amount)
|
200
|
+
// external
|
201
|
+
// onlyBundleProductService
|
202
|
+
// override
|
203
|
+
// {
|
204
|
+
// BundleInfo storage info = _bundleInfo[bundleNftId];
|
205
|
+
// info.capitalAmount += amount;
|
206
|
+
// info.balanceAmount += amount;
|
207
|
+
// info.updatedIn = blockNumber();
|
208
|
+
// }
|
209
|
+
|
210
|
+
// function subtractPayout(NftId bundleNftId, NftId policyNftId, uint256 amount)
|
211
|
+
// external
|
212
|
+
// onlyBundleProductService
|
213
|
+
// override
|
214
|
+
// {
|
215
|
+
// BundleInfo storage info = _bundleInfo[bundleNftId];
|
216
|
+
// info.capitalAmount -= amount;
|
217
|
+
// info.lockedAmount -= amount;
|
218
|
+
// info.balanceAmount -= amount;
|
219
|
+
// info.updatedIn = blockNumber();
|
220
|
+
|
221
|
+
// // deduct amount from sum insured for this policy
|
222
|
+
// _collateralizationAmount[bundleNftId][policyNftId] -= amount;
|
223
|
+
// }
|
224
|
+
|
225
|
+
function getBundleInfo(NftId bundleNftId) external view override returns(BundleInfo memory bundleInfo) {
|
226
|
+
return _bundleInfo[bundleNftId];
|
227
|
+
}
|
228
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegistry} from "../../../registry/IRegistry.sol";
|
5
|
+
import {IInstance} from "../../IInstance.sol";
|
6
|
+
import {NftId} from "../../../types/NftId.sol";
|
7
|
+
import {StateId} from "../../../types/StateId.sol";
|
8
|
+
import {Timestamp} from "../../../types/Timestamp.sol";
|
9
|
+
import {Blocknumber} from "../../../types/Blocknumber.sol";
|
10
|
+
|
11
|
+
import {IProductService} from "../../service/IProductService.sol";
|
12
|
+
import {IPoolService} from "../../service/IPoolService.sol";
|
13
|
+
|
14
|
+
interface IBundle {
|
15
|
+
|
16
|
+
struct BundleInfo {
|
17
|
+
NftId nftId;
|
18
|
+
NftId poolNftId;
|
19
|
+
StateId state; // active, paused, closed (expriy only implicit)
|
20
|
+
bytes filter; // required conditions for applications to be considered for collateralization by this bundle
|
21
|
+
uint256 capitalAmount; // net investment capital amount (<= balance)
|
22
|
+
uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
|
23
|
+
uint256 balanceAmount; // total amount of funds: net investment capital + net premiums - payouts
|
24
|
+
Timestamp createdAt;
|
25
|
+
Timestamp expiredAt; // no new policies
|
26
|
+
Timestamp closedAt;
|
27
|
+
Blocknumber updatedIn;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
interface IBundleModule is IBundle {
|
32
|
+
|
33
|
+
function createBundleInfo(
|
34
|
+
NftId bundleNftId,
|
35
|
+
NftId poolNftId,
|
36
|
+
uint256 amount,
|
37
|
+
uint256 lifetime,
|
38
|
+
bytes calldata filter
|
39
|
+
) external;
|
40
|
+
|
41
|
+
function setBundleInfo(BundleInfo memory bundleInfo) external;
|
42
|
+
function collateralizePolicy(NftId bundleNftId, NftId policyNftId, uint256 amount) external;
|
43
|
+
function releasePolicy(NftId bundleNftId, NftId policyNftId) external returns(uint256 collateralAmount);
|
44
|
+
|
45
|
+
function getBundleInfo(NftId bundleNftId) external view returns(BundleInfo memory bundleInfo);
|
46
|
+
|
47
|
+
// repeat registry linked signature
|
48
|
+
function getRegistry() external view returns (IRegistry registry);
|
49
|
+
|
50
|
+
// repeat service linked signatures to avoid linearization issues
|
51
|
+
function getProductService() external returns(IProductService);
|
52
|
+
function getPoolService() external returns(IPoolService);
|
53
|
+
}
|
@@ -0,0 +1,104 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
|
6
|
+
import {IRegistry} from "../../../registry/IRegistry.sol";
|
7
|
+
import {IInstance} from "../../IInstance.sol";
|
8
|
+
|
9
|
+
import {LifecycleModule} from "../lifecycle/LifecycleModule.sol";
|
10
|
+
import {IComponent, IComponentModule} from "./IComponent.sol";
|
11
|
+
import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
|
12
|
+
import {ObjectType, PRODUCT, ORACLE, POOL} from "../../../types/ObjectType.sol";
|
13
|
+
import {StateId, ACTIVE, PAUSED} from "../../../types/StateId.sol";
|
14
|
+
import {NftId, NftIdLib, zeroNftId} from "../../../types/NftId.sol";
|
15
|
+
import {Fee, zeroFee} from "../../../types/Fee.sol";
|
16
|
+
// import {IBaseComponent} from "../../../components/IBaseComponent.sol";
|
17
|
+
|
18
|
+
abstract contract ComponentModule is
|
19
|
+
IComponentModule
|
20
|
+
{
|
21
|
+
using NftIdLib for NftId;
|
22
|
+
|
23
|
+
mapping(NftId nftId => ComponentInfo info) private _componentInfo;
|
24
|
+
NftId[] private _nftIds;
|
25
|
+
|
26
|
+
mapping(ObjectType cType => bytes32 role) private _componentOwnerRole;
|
27
|
+
|
28
|
+
// TODO maybe move this to Instance contract as internal variable?
|
29
|
+
LifecycleModule private _lifecycleModule;
|
30
|
+
|
31
|
+
modifier onlyComponentOwnerService() {
|
32
|
+
require(
|
33
|
+
msg.sender == address(this.getComponentOwnerService()),
|
34
|
+
"ERROR:CMP-001:NOT_OWNER_SERVICE"
|
35
|
+
);
|
36
|
+
_;
|
37
|
+
}
|
38
|
+
|
39
|
+
constructor() {
|
40
|
+
address componentAddress = address(this);
|
41
|
+
_lifecycleModule = LifecycleModule(componentAddress);
|
42
|
+
}
|
43
|
+
|
44
|
+
function registerComponent(
|
45
|
+
NftId nftId,
|
46
|
+
ObjectType objectType,
|
47
|
+
IERC20Metadata token
|
48
|
+
) external override onlyComponentOwnerService {
|
49
|
+
|
50
|
+
// create component info
|
51
|
+
_componentInfo[nftId] = ComponentInfo(
|
52
|
+
nftId,
|
53
|
+
_lifecycleModule.getInitialState(objectType),
|
54
|
+
token
|
55
|
+
);
|
56
|
+
|
57
|
+
_nftIds.push(nftId);
|
58
|
+
|
59
|
+
// TODO add logging
|
60
|
+
}
|
61
|
+
|
62
|
+
function setComponentInfo(
|
63
|
+
ComponentInfo memory info
|
64
|
+
) external onlyComponentOwnerService returns (NftId nftId) {
|
65
|
+
nftId = info.nftId;
|
66
|
+
require(
|
67
|
+
nftId.gtz() && _componentInfo[nftId].nftId.eq(nftId),
|
68
|
+
"ERROR:CMP-006:COMPONENT_UNKNOWN"
|
69
|
+
);
|
70
|
+
|
71
|
+
// TODO decide if state changes should have explicit functions and not
|
72
|
+
// just a generic setXYZInfo and implicit state transitions
|
73
|
+
// when in doubt go for the explicit approach ...
|
74
|
+
ObjectType objectType = this.getRegistry().getObjectInfo(nftId).objectType;
|
75
|
+
_lifecycleModule.checkAndLogTransition(
|
76
|
+
nftId,
|
77
|
+
objectType,
|
78
|
+
_componentInfo[nftId].state,
|
79
|
+
info.state
|
80
|
+
);
|
81
|
+
_componentInfo[nftId] = info;
|
82
|
+
}
|
83
|
+
|
84
|
+
function getComponentCount()
|
85
|
+
external
|
86
|
+
view
|
87
|
+
override
|
88
|
+
returns (uint256 numberOfCompnents)
|
89
|
+
{
|
90
|
+
return _nftIds.length;
|
91
|
+
}
|
92
|
+
|
93
|
+
function getComponentId(
|
94
|
+
uint256 idx
|
95
|
+
) external view override returns (NftId componentNftId) {
|
96
|
+
return _nftIds[idx];
|
97
|
+
}
|
98
|
+
|
99
|
+
function getComponentInfo(
|
100
|
+
NftId nftId
|
101
|
+
) external view override returns (ComponentInfo memory) {
|
102
|
+
return _componentInfo[nftId];
|
103
|
+
}
|
104
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
|
6
|
+
|
7
|
+
import {IRegistry} from "../../../registry/IRegistry.sol";
|
8
|
+
import {IInstance} from "../../IInstance.sol";
|
9
|
+
import {StateId} from "../../../types/StateId.sol";
|
10
|
+
import {NftId} from "../../../types/NftId.sol";
|
11
|
+
import {ObjectType} from "../../../types/ObjectType.sol";
|
12
|
+
import {RoleId} from "../../../types/RoleId.sol";
|
13
|
+
import {Fee} from "../../../types/Fee.sol";
|
14
|
+
import {UFixed} from "../../../types/UFixed.sol";
|
15
|
+
|
16
|
+
import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
|
17
|
+
// import {IComponentBase} from "../../../components/IComponentBase.sol";
|
18
|
+
|
19
|
+
interface IComponent {
|
20
|
+
// component dynamic info (static info kept in registry)
|
21
|
+
struct ComponentInfo {
|
22
|
+
NftId nftId;
|
23
|
+
StateId state;
|
24
|
+
IERC20Metadata token;
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
interface IComponentModule is IComponent {
|
29
|
+
function getRegistry() external view returns (IRegistry registry);
|
30
|
+
|
31
|
+
function registerComponent(
|
32
|
+
NftId nftId,
|
33
|
+
ObjectType objectType,
|
34
|
+
IERC20Metadata token
|
35
|
+
) external;
|
36
|
+
|
37
|
+
function setComponentInfo(
|
38
|
+
ComponentInfo memory info
|
39
|
+
) external returns (NftId componentNftId);
|
40
|
+
|
41
|
+
function getComponentInfo(
|
42
|
+
NftId nftId
|
43
|
+
) external view returns (ComponentInfo memory info);
|
44
|
+
|
45
|
+
function getComponentCount() external view returns (uint256 numberOfCompnents);
|
46
|
+
|
47
|
+
function getComponentId(uint256 idx) external view returns (NftId nftId);
|
48
|
+
|
49
|
+
// repeat service linked signaturea to avoid linearization issues
|
50
|
+
function getComponentOwnerService() external view returns(IComponentOwnerService);
|
51
|
+
|
52
|
+
function hasRole(RoleId role, address member) external view returns (bool);
|
53
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {ObjectType} from "../../../types/ObjectType.sol";
|
5
|
+
import {StateId, toStateId, zeroStateId} from "../../../types/StateId.sol";
|
6
|
+
import {NftId} from "../../../types/NftId.sol";
|
7
|
+
|
8
|
+
interface ILifecycle {
|
9
|
+
event LogComponentStateChanged(
|
10
|
+
NftId nftId,
|
11
|
+
ObjectType objectType,
|
12
|
+
StateId fromStateId,
|
13
|
+
StateId toStateId
|
14
|
+
);
|
15
|
+
event LogBundleStateChanged(
|
16
|
+
NftId nftId,
|
17
|
+
StateId fromStateId,
|
18
|
+
StateId toStateId
|
19
|
+
);
|
20
|
+
event LogPolicyStateChanged(
|
21
|
+
NftId nftId,
|
22
|
+
StateId fromStateId,
|
23
|
+
StateId toStateId
|
24
|
+
);
|
25
|
+
// event LogClaimStateChanged(NftId nftId, ClaimId claimId, StateId fromStateId, StateId toStateId);
|
26
|
+
// event LogPayoutStateChanged(NftId nftId, ClaimId claimId, PayoutId payoutId, StateId fromStateId, StateId toStateId);
|
27
|
+
|
28
|
+
error ErrorNoLifecycle(NftId nftId, ObjectType objectType);
|
29
|
+
error ErrorInvalidStateTransition(
|
30
|
+
NftId nftId,
|
31
|
+
ObjectType objectType,
|
32
|
+
StateId fromStateId,
|
33
|
+
StateId toStateId
|
34
|
+
);
|
35
|
+
}
|
36
|
+
|
37
|
+
interface ILifecycleModule is ILifecycle {
|
38
|
+
function getInitialState(
|
39
|
+
ObjectType objectType
|
40
|
+
) external view returns (StateId);
|
41
|
+
|
42
|
+
function isValidTransition(
|
43
|
+
ObjectType objectType,
|
44
|
+
StateId fromId,
|
45
|
+
StateId toId
|
46
|
+
) external view returns (bool);
|
47
|
+
}
|
@@ -0,0 +1,89 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {NftId} from "../../../types/NftId.sol";
|
5
|
+
import {ObjectType, PRODUCT, ORACLE, POOL, BUNDLE, POLICY} from "../../../types/ObjectType.sol";
|
6
|
+
import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, UNDERWRITTEN, REVOKED, DECLINED} from "../../../types/StateId.sol";
|
7
|
+
import {ILifecycleModule} from "./ILifecycle.sol";
|
8
|
+
|
9
|
+
contract LifecycleModule is ILifecycleModule {
|
10
|
+
mapping(ObjectType objectType => StateId initialState)
|
11
|
+
private _initialState;
|
12
|
+
|
13
|
+
mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
|
14
|
+
private _isValidTransition;
|
15
|
+
|
16
|
+
constructor() {
|
17
|
+
_setupComponentLifecycle(PRODUCT());
|
18
|
+
_setupComponentLifecycle(ORACLE());
|
19
|
+
_setupComponentLifecycle(POOL());
|
20
|
+
|
21
|
+
_setupBundleLifecycle();
|
22
|
+
_setupPolicyLifecycle();
|
23
|
+
}
|
24
|
+
|
25
|
+
function checkAndLogTransition(
|
26
|
+
NftId nftId,
|
27
|
+
ObjectType objectType,
|
28
|
+
StateId fromId,
|
29
|
+
StateId toId
|
30
|
+
) public returns (StateId) // add only currentcontract? would that work?
|
31
|
+
{
|
32
|
+
if (!_isValidTransition[objectType][fromId][toId]) {
|
33
|
+
revert ErrorInvalidStateTransition(nftId, objectType, fromId, toId);
|
34
|
+
}
|
35
|
+
|
36
|
+
if (objectType == POLICY()) {
|
37
|
+
emit LogPolicyStateChanged(nftId, fromId, toId);
|
38
|
+
} else if (objectType == BUNDLE()) {
|
39
|
+
emit LogBundleStateChanged(nftId, fromId, toId);
|
40
|
+
} else if (
|
41
|
+
objectType == PRODUCT() ||
|
42
|
+
objectType == ORACLE() ||
|
43
|
+
objectType == POOL()
|
44
|
+
) {
|
45
|
+
emit LogComponentStateChanged(nftId, objectType, fromId, toId);
|
46
|
+
} else {
|
47
|
+
revert ErrorNoLifecycle(nftId, objectType);
|
48
|
+
}
|
49
|
+
|
50
|
+
return toId;
|
51
|
+
}
|
52
|
+
|
53
|
+
function getInitialState(
|
54
|
+
ObjectType objectType
|
55
|
+
) public view returns (StateId) {
|
56
|
+
return _initialState[objectType];
|
57
|
+
}
|
58
|
+
|
59
|
+
function isValidTransition(
|
60
|
+
ObjectType objectType,
|
61
|
+
StateId fromId,
|
62
|
+
StateId toId
|
63
|
+
) public view returns (bool) {
|
64
|
+
return _isValidTransition[objectType][fromId][toId];
|
65
|
+
}
|
66
|
+
|
67
|
+
function _setupComponentLifecycle(ObjectType objectType) internal {
|
68
|
+
_initialState[objectType] = ACTIVE();
|
69
|
+
_isValidTransition[objectType][ACTIVE()][PAUSED()] = true;
|
70
|
+
_isValidTransition[objectType][PAUSED()][ACTIVE()] = true;
|
71
|
+
_isValidTransition[objectType][PAUSED()][ARCHIVED()] = true;
|
72
|
+
}
|
73
|
+
|
74
|
+
function _setupBundleLifecycle() internal {
|
75
|
+
_initialState[BUNDLE()] = ACTIVE();
|
76
|
+
_isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
|
77
|
+
_isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
|
78
|
+
_isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
|
79
|
+
}
|
80
|
+
|
81
|
+
function _setupPolicyLifecycle() internal {
|
82
|
+
_initialState[POLICY()] = APPLIED();
|
83
|
+
_isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
|
84
|
+
_isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
|
85
|
+
_isValidTransition[POLICY()][APPLIED()][UNDERWRITTEN()] = true;
|
86
|
+
_isValidTransition[POLICY()][UNDERWRITTEN()][ACTIVE()] = true;
|
87
|
+
_isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
|
88
|
+
}
|
89
|
+
}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegistry} from "../../../registry/IRegistry.sol";
|
5
|
+
import {IInstance} from "../../IInstance.sol";
|
6
|
+
import {IProductService} from "../../service/IProductService.sol";
|
7
|
+
import {NftId} from "../../../types/NftId.sol";
|
8
|
+
import {StateId} from "../../../types/StateId.sol";
|
9
|
+
import {Timestamp} from "../../../types/Timestamp.sol";
|
10
|
+
import {Blocknumber} from "../../../types/Blocknumber.sol";
|
11
|
+
|
12
|
+
// TODO check if there is value to introuce IContract and let IPolicy derive from IContract
|
13
|
+
interface IPolicy {
|
14
|
+
struct PolicyInfo {
|
15
|
+
NftId nftId;
|
16
|
+
NftId productNftId;
|
17
|
+
NftId bundleNftId;
|
18
|
+
address beneficiary;
|
19
|
+
StateId state; // applied, withdrawn, rejected, active, closed
|
20
|
+
uint256 sumInsuredAmount;
|
21
|
+
uint256 premiumAmount;
|
22
|
+
uint256 premiumPaidAmount;
|
23
|
+
uint256 lifetime;
|
24
|
+
bytes data;
|
25
|
+
Timestamp createdAt;
|
26
|
+
Timestamp activatedAt; // time of underwriting
|
27
|
+
Timestamp expiredAt; // no new claims (activatedAt + lifetime)
|
28
|
+
Timestamp closedAt; // no locked capital
|
29
|
+
Blocknumber updatedIn; // write log entries in a way to support backtracking of all state changes
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
interface IPolicyModule is IPolicy {
|
34
|
+
function createApplication(
|
35
|
+
NftId productNftId,
|
36
|
+
NftId policyNftId,
|
37
|
+
uint256 sumInsuredAmount,
|
38
|
+
uint256 premiumAmount,
|
39
|
+
uint256 lifetime,
|
40
|
+
NftId bundleNftId
|
41
|
+
) external;
|
42
|
+
|
43
|
+
function setPolicyInfo(PolicyInfo memory policyInfo) external;
|
44
|
+
|
45
|
+
// function underwrite(NftId nftId) external;
|
46
|
+
|
47
|
+
// function processPremium(NftId nftId, uint256 amount) external;
|
48
|
+
|
49
|
+
// function activate(NftId nftId, Timestamp activateAt) external;
|
50
|
+
|
51
|
+
function getPolicyInfo(
|
52
|
+
NftId nftId
|
53
|
+
) external view returns (PolicyInfo memory info);
|
54
|
+
|
55
|
+
// repeat registry linked signature
|
56
|
+
function getRegistry() external view returns (IRegistry registry);
|
57
|
+
|
58
|
+
// repeat service linked signature to avoid linearization issues
|
59
|
+
function getProductService() external returns(IProductService);
|
60
|
+
}
|