@etherisc/gif-next 0.0.2-39ffd9f → 0.0.2-3a9a497-101
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 +92 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +48 -53
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +48 -53
- 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/{IProduct.sol → IProductComponent.sol}/IProductComponent.json +139 -52
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +218 -44
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +144 -70
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
- 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 +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 +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1414 -289
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/{access/IAccess.sol/IAccessComponentTypeRoles.json → IServiceLinked.sol/IServiceLinked.json} +14 -14
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1554 -348
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → InstanceBase.sol/InstanceBase.json} +128 -142
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
- 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/compensation/CompensationModule.sol/CompensationModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +10 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +4 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +10 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +10 -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/{component → module/component}/IComponent.sol/IComponent.json +1 -1
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponentModule.json +40 -97
- 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/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +142 -112
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +142 -112
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +57 -57
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +50 -63
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +10 -0
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.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 +533 -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 +533 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +491 -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/{component/IComponent.sol/IComponentContract.json → service/IService.sol/IService.json} +148 -27
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +471 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +673 -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 +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +103 -77
- 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 +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +194 -69
- 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/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
- package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +18 -63
- 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/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +18 -63
- 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 +119 -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 +379 -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 +218 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +206 -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 +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +218 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
- 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 +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +58 -58
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.json +139 -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 +162 -10
- package/contracts/components/Product.sol +75 -13
- 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/instance/IInstance.sol +43 -8
- package/contracts/instance/IInstanceLinked.sol +8 -0
- package/contracts/instance/IServiceLinked.sol +12 -0
- package/contracts/instance/Instance.sol +45 -43
- package/contracts/instance/InstanceBase.sol +71 -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/compensation/CompensationModule.sol +8 -0
- package/contracts/instance/module/compensation/ICompensation.sol +10 -0
- package/contracts/instance/module/component/ComponentModule.sol +103 -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/risk/IRisk.sol +10 -0
- package/contracts/instance/module/risk/RiskModule.sol +8 -0
- package/contracts/instance/module/treasury/ITreasury.sol +103 -0
- package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
- package/contracts/instance/module/treasury/TreasuryModule.sol +152 -0
- package/contracts/instance/service/ComponentOwnerService.sol +171 -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 +123 -0
- package/contracts/instance/service/ProductService.sol +355 -0
- package/contracts/instance/service/ServiceBase.sol +39 -0
- package/contracts/registry/ChainNft.sol +61 -37
- package/contracts/registry/IRegistry.sol +27 -50
- package/contracts/registry/IRegistryLinked.sol +8 -0
- package/contracts/registry/Registry.sol +281 -109
- 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 +89 -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 +32 -0
- package/contracts/test/TestToken.sol +26 -0
- package/contracts/test/TestVersion.sol +44 -0
- package/contracts/test/TestVersionable.sol +17 -0
- package/contracts/types/AddressSet.sol +58 -0
- package/contracts/types/Fee.sol +51 -0
- package/contracts/types/NftId.sol +7 -1
- 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 +22 -1
- package/contracts/types/UFixed.sol +15 -14
- package/contracts/types/Version.sol +95 -0
- package/package.json +13 -6
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
- package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
- package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
- package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
- package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
- package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
- package/contracts/components/Component.sol +0 -60
- package/contracts/components/IPool.sol +0 -9
- package/contracts/components/IProduct.sol +0 -9
- package/contracts/instance/access/Access.sol +0 -165
- package/contracts/instance/access/IAccess.sol +0 -63
- package/contracts/instance/component/ComponentModule.sol +0 -213
- package/contracts/instance/component/IComponent.sol +0 -73
- package/contracts/instance/policy/IPolicy.sol +0 -51
- package/contracts/instance/policy/PolicyModule.sol +0 -91
- package/contracts/instance/pool/IPoolModule.sol +0 -29
- package/contracts/instance/pool/PoolModule.sol +0 -73
- package/contracts/instance/product/IProductService.sol +0 -36
- package/contracts/instance/product/ProductService.sol +0 -112
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import {NftId} from "../types/NftId.sol";
|
|
5
|
+
import {Fee} from "../types/Fee.sol";
|
|
6
|
+
import {UFixed} from "../types/UFixed.sol";
|
|
7
|
+
import {IBaseComponent} from "./IBaseComponent.sol";
|
|
8
|
+
|
|
9
|
+
interface IPoolComponent is IBaseComponent {
|
|
10
|
+
|
|
11
|
+
event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @dev creates a new bundle for this pool.
|
|
15
|
+
*/
|
|
16
|
+
function createBundle(
|
|
17
|
+
uint256 initialAmount,
|
|
18
|
+
uint256 lifetime,
|
|
19
|
+
bytes memory filter
|
|
20
|
+
) external returns(NftId bundleNftId);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @dev this is a callback function that is called by the product service when underwriting a policy.
|
|
24
|
+
* the pool has the option to check the details and object to underwriting by reverting.
|
|
25
|
+
* the function is only called for "active" pools that ask to be involved/notified
|
|
26
|
+
* by product related state changes.
|
|
27
|
+
*/
|
|
28
|
+
function underwrite(
|
|
29
|
+
NftId policyNftId,
|
|
30
|
+
bytes memory policyData,
|
|
31
|
+
bytes memory bundleFilter,
|
|
32
|
+
uint256 collateralizationAmount
|
|
33
|
+
) external;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @dev returns true iff the policy application data in policyData matches
|
|
37
|
+
* with the bundle filter criteria encoded in bundleFilter.
|
|
38
|
+
*/
|
|
39
|
+
function policyMatchesBundle(
|
|
40
|
+
bytes memory policyData,
|
|
41
|
+
bytes memory bundleFilter
|
|
42
|
+
)
|
|
43
|
+
external
|
|
44
|
+
view
|
|
45
|
+
returns (bool isMatching);
|
|
46
|
+
|
|
47
|
+
function isVerifying() external view returns (bool verifying);
|
|
48
|
+
|
|
49
|
+
function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
|
|
50
|
+
|
|
51
|
+
function getStakingFee() external view returns (Fee memory stakingFee);
|
|
52
|
+
|
|
53
|
+
function getPerformanceFee()
|
|
54
|
+
external
|
|
55
|
+
view
|
|
56
|
+
returns (Fee memory performanceFee);
|
|
57
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import {NftId} from "../types/NftId.sol";
|
|
5
|
+
import {Fee} from "../types/Fee.sol";
|
|
6
|
+
import {IBaseComponent} from "./IBaseComponent.sol";
|
|
7
|
+
|
|
8
|
+
interface IProductComponent is IBaseComponent {
|
|
9
|
+
function setFees(
|
|
10
|
+
Fee memory policyFee,
|
|
11
|
+
Fee memory processingFee
|
|
12
|
+
) external;
|
|
13
|
+
|
|
14
|
+
function getPoolNftId() external view returns (NftId poolNftId);
|
|
15
|
+
|
|
16
|
+
function getPolicyFee() external view returns (Fee memory policyFee);
|
|
17
|
+
|
|
18
|
+
function getProcessingFee() external view returns (Fee memory processingFee);
|
|
19
|
+
}
|
|
@@ -1,22 +1,174 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
pragma solidity ^0.8.19;
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import {ObjectType, POOL} from "../types/ObjectType.sol";
|
|
5
|
+
import {IProductService} from "../instance/service/IProductService.sol";
|
|
6
|
+
import {IPoolService} from "../instance/service/IPoolService.sol";
|
|
7
|
+
import {NftId} from "../types/NftId.sol";
|
|
8
|
+
import {Fee} from "../types/Fee.sol";
|
|
9
|
+
import {UFixed} from "../types/UFixed.sol";
|
|
10
|
+
import {IPoolComponent} from "./IPoolComponent.sol";
|
|
11
|
+
import {BaseComponent} from "./BaseComponent.sol";
|
|
12
|
+
|
|
13
|
+
contract Pool is BaseComponent, IPoolComponent {
|
|
14
|
+
|
|
15
|
+
bool internal _isVerifying;
|
|
16
|
+
UFixed internal _collateralizationLevel;
|
|
17
|
+
|
|
18
|
+
// may be used to interact with instance by derived contracts
|
|
19
|
+
IPoolService internal _poolService;
|
|
20
|
+
|
|
21
|
+
// only relevant to protect callback functions for "active" pools
|
|
22
|
+
IProductService private _productService;
|
|
23
|
+
|
|
24
|
+
modifier onlyPoolService() {
|
|
25
|
+
require(
|
|
26
|
+
msg.sender == address(_poolService),
|
|
27
|
+
"ERROR:POL-001:NOT_POOL_SERVICE");
|
|
28
|
+
_;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
modifier onlyProductService() {
|
|
32
|
+
require(
|
|
33
|
+
msg.sender == address(_productService),
|
|
34
|
+
"ERROR:POL-002:NOT_PRODUCT_SERVICE");
|
|
35
|
+
_;
|
|
36
|
+
}
|
|
6
37
|
|
|
7
|
-
contract Pool is Component, IPoolComponent {
|
|
8
38
|
constructor(
|
|
9
39
|
address registry,
|
|
10
|
-
|
|
11
|
-
|
|
40
|
+
NftId instanceNftId,
|
|
41
|
+
// TODO refactor into tokenNftId
|
|
42
|
+
address token,
|
|
43
|
+
bool verifying,
|
|
44
|
+
UFixed collateralizationLevel
|
|
45
|
+
)
|
|
46
|
+
BaseComponent(registry, instanceNftId, token)
|
|
47
|
+
{
|
|
48
|
+
_isVerifying = verifying;
|
|
49
|
+
// TODO add validation
|
|
50
|
+
_collateralizationLevel = collateralizationLevel;
|
|
12
51
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
52
|
+
_poolService = _instance.getPoolService();
|
|
53
|
+
_productService = _instance.getProductService();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function createBundle(
|
|
57
|
+
uint256 initialAmount,
|
|
58
|
+
uint256 lifetime,
|
|
59
|
+
bytes memory filter
|
|
60
|
+
)
|
|
61
|
+
external
|
|
62
|
+
virtual override
|
|
63
|
+
returns(NftId bundleNftId)
|
|
64
|
+
{
|
|
65
|
+
address owner = msg.sender;
|
|
66
|
+
bundleNftId = _poolService.createBundle(
|
|
67
|
+
owner,
|
|
68
|
+
initialAmount,
|
|
69
|
+
lifetime,
|
|
70
|
+
filter
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
// TODO add logging
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @dev see {IPool.underwrite}.
|
|
78
|
+
* Default implementation that only writes a {LogUnderwrittenByPool} entry.
|
|
79
|
+
*/
|
|
80
|
+
function underwrite(
|
|
81
|
+
NftId policyNftId,
|
|
82
|
+
bytes memory policyData,
|
|
83
|
+
bytes memory bundleFilter,
|
|
84
|
+
uint256 collateralizationAmount
|
|
85
|
+
)
|
|
86
|
+
external
|
|
87
|
+
onlyProductService
|
|
88
|
+
virtual override
|
|
89
|
+
{
|
|
90
|
+
_underwrite(policyNftId, policyData, bundleFilter, collateralizationAmount);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @dev see {IPoolComponent.policyMatchesBundle}.
|
|
95
|
+
* Default implementation always returns true
|
|
96
|
+
*/
|
|
97
|
+
function policyMatchesBundle(
|
|
98
|
+
bytes memory, // policyData
|
|
99
|
+
bytes memory // bundleFilter
|
|
100
|
+
)
|
|
101
|
+
public
|
|
102
|
+
view
|
|
103
|
+
virtual override
|
|
104
|
+
returns (bool isMatching)
|
|
105
|
+
{
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
function isVerifying() external view override returns (bool verifying) {
|
|
111
|
+
return _isVerifying;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
|
|
115
|
+
return _collateralizationLevel;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function _underwrite(
|
|
119
|
+
NftId policyNftId,
|
|
120
|
+
bytes memory policyData,
|
|
121
|
+
bytes memory bundleFilter,
|
|
122
|
+
uint256 collateralizationAmount
|
|
123
|
+
)
|
|
124
|
+
internal
|
|
125
|
+
{
|
|
126
|
+
require(
|
|
127
|
+
policyMatchesBundle(policyData, bundleFilter),
|
|
128
|
+
"ERROR:POL-020:POLICY_BUNDLE_MISMATCH"
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
emit LogUnderwrittenByPool(policyNftId, collateralizationAmount, address(this));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function _createBundle(
|
|
135
|
+
address bundleOwner,
|
|
136
|
+
uint256 amount,
|
|
137
|
+
uint256 lifetime,
|
|
138
|
+
bytes calldata filter
|
|
139
|
+
)
|
|
140
|
+
internal
|
|
141
|
+
returns(NftId bundleNftId)
|
|
142
|
+
{
|
|
143
|
+
bundleNftId = _poolService.createBundle(
|
|
144
|
+
bundleOwner,
|
|
145
|
+
amount,
|
|
146
|
+
lifetime,
|
|
147
|
+
filter
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// from pool component
|
|
152
|
+
function getStakingFee()
|
|
153
|
+
external
|
|
154
|
+
view
|
|
155
|
+
override
|
|
156
|
+
returns (Fee memory stakingFee)
|
|
157
|
+
{
|
|
158
|
+
return _instance.getPoolSetup(getNftId()).stakingFee;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function getPerformanceFee()
|
|
162
|
+
external
|
|
163
|
+
view
|
|
164
|
+
override
|
|
165
|
+
returns (Fee memory performanceFee)
|
|
166
|
+
{
|
|
167
|
+
return _instance.getPoolSetup(getNftId()).performanceFee;
|
|
16
168
|
}
|
|
17
169
|
|
|
18
170
|
// from registerable
|
|
19
|
-
function
|
|
20
|
-
return
|
|
171
|
+
function getType() public pure override returns (ObjectType) {
|
|
172
|
+
return POOL();
|
|
21
173
|
}
|
|
22
174
|
}
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
pragma solidity ^0.8.19;
|
|
3
3
|
|
|
4
|
-
import {IProductService} from "../instance/
|
|
5
|
-
import {
|
|
6
|
-
import {IProductComponent} from "./IProduct.sol";
|
|
4
|
+
import {IProductService} from "../instance/service/IProductService.sol";
|
|
5
|
+
import {IProductComponent} from "./IProductComponent.sol";
|
|
7
6
|
import {NftId} from "../types/NftId.sol";
|
|
7
|
+
import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
|
|
8
|
+
import {Timestamp} from "../types/Timestamp.sol";
|
|
9
|
+
import {Fee} from "../types/Fee.sol";
|
|
10
|
+
import {BaseComponent} from "./BaseComponent.sol";
|
|
8
11
|
|
|
9
|
-
contract Product is
|
|
12
|
+
contract Product is BaseComponent, IProductComponent {
|
|
10
13
|
IProductService private _productService;
|
|
11
14
|
address private _pool;
|
|
12
15
|
|
|
13
16
|
constructor(
|
|
14
17
|
address registry,
|
|
15
|
-
|
|
18
|
+
NftId instanceNftid,
|
|
19
|
+
address token,
|
|
16
20
|
address pool
|
|
17
|
-
)
|
|
21
|
+
) BaseComponent(registry, instanceNftid, token) {
|
|
22
|
+
// TODO add validation
|
|
18
23
|
_productService = _instance.getProductService();
|
|
19
24
|
_pool = pool;
|
|
20
25
|
}
|
|
@@ -35,21 +40,78 @@ contract Product is Component, IProductComponent {
|
|
|
35
40
|
);
|
|
36
41
|
}
|
|
37
42
|
|
|
38
|
-
function _underwrite(
|
|
39
|
-
|
|
43
|
+
function _underwrite(
|
|
44
|
+
NftId policyNftId,
|
|
45
|
+
bool requirePremiumPayment,
|
|
46
|
+
Timestamp activateAt
|
|
47
|
+
)
|
|
48
|
+
internal
|
|
49
|
+
{
|
|
50
|
+
_productService.underwrite(
|
|
51
|
+
policyNftId,
|
|
52
|
+
requirePremiumPayment,
|
|
53
|
+
activateAt);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function _collectPremium(
|
|
57
|
+
NftId policyNftId,
|
|
58
|
+
Timestamp activateAt
|
|
59
|
+
)
|
|
60
|
+
internal
|
|
61
|
+
{
|
|
62
|
+
_productService.collectPremium(
|
|
63
|
+
policyNftId,
|
|
64
|
+
activateAt);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function _activate(
|
|
68
|
+
NftId policyNftId,
|
|
69
|
+
Timestamp activateAt
|
|
70
|
+
)
|
|
71
|
+
internal
|
|
72
|
+
{
|
|
73
|
+
_productService.activate(
|
|
74
|
+
policyNftId,
|
|
75
|
+
activateAt);
|
|
40
76
|
}
|
|
41
77
|
|
|
42
78
|
function getPoolNftId() external view override returns (NftId poolNftId) {
|
|
43
79
|
return _registry.getNftId(_pool);
|
|
44
80
|
}
|
|
45
81
|
|
|
46
|
-
// from
|
|
47
|
-
function
|
|
48
|
-
|
|
82
|
+
// from product component
|
|
83
|
+
function setFees(
|
|
84
|
+
Fee memory policyFee,
|
|
85
|
+
Fee memory processingFee
|
|
86
|
+
)
|
|
87
|
+
external
|
|
88
|
+
onlyOwner
|
|
89
|
+
override
|
|
90
|
+
{
|
|
91
|
+
_productService.setFees(policyFee, processingFee);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
function getPolicyFee()
|
|
96
|
+
external
|
|
97
|
+
view
|
|
98
|
+
override
|
|
99
|
+
returns (Fee memory policyFee)
|
|
100
|
+
{
|
|
101
|
+
return _instance.getProductSetup(getNftId()).policyFee;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function getProcessingFee()
|
|
105
|
+
external
|
|
106
|
+
view
|
|
107
|
+
override
|
|
108
|
+
returns (Fee memory processingFee)
|
|
109
|
+
{
|
|
110
|
+
return _instance.getProductSetup(getNftId()).processingFee;
|
|
49
111
|
}
|
|
50
112
|
|
|
51
113
|
// from registerable
|
|
52
|
-
function
|
|
53
|
-
return
|
|
114
|
+
function getType() public pure override returns (ObjectType) {
|
|
115
|
+
return PRODUCT();
|
|
54
116
|
}
|
|
55
117
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
|
|
7
|
+
contract LifeCycleModule {
|
|
8
|
+
mapping(ObjectType objectType => StateId initialState)
|
|
9
|
+
private _initialState;
|
|
10
|
+
|
|
11
|
+
mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
|
|
12
|
+
private _isValidTransition;
|
|
13
|
+
|
|
14
|
+
function getInitialState(
|
|
15
|
+
ObjectType objectType
|
|
16
|
+
) external view returns (StateId) {
|
|
17
|
+
return _initialState[objectType];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function isValidTransition(
|
|
21
|
+
ObjectType objectType,
|
|
22
|
+
StateId fromId,
|
|
23
|
+
StateId toId
|
|
24
|
+
) external view returns (bool) {
|
|
25
|
+
return _isValidTransition[objectType][fromId][toId];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import {StateId} from "../../types/StateId.sol";
|
|
5
|
+
|
|
6
|
+
interface ISMEE {
|
|
7
|
+
error ErrorInitialStateUndefined();
|
|
8
|
+
error ErrorStartStateUndefined();
|
|
9
|
+
error ErrorNextStateUndefined();
|
|
10
|
+
error ErrorStateChangeInvalid(StateId currentStateId, StateId newStateId);
|
|
11
|
+
|
|
12
|
+
event LogInitialStateSet(StateId initialStateId);
|
|
13
|
+
event LogStateChanged(StateId oldStateId, StateId newStateId);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface ISM is ISMEE {
|
|
17
|
+
function changeToState(StateId newStateId) external;
|
|
18
|
+
|
|
19
|
+
function isValidTransition(
|
|
20
|
+
StateId currentStateId,
|
|
21
|
+
StateId newStateId
|
|
22
|
+
) external view returns (bool isValid);
|
|
23
|
+
|
|
24
|
+
function getState() external view returns (StateId currentStateId);
|
|
25
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# State Machines
|
|
2
|
+
|
|
3
|
+
Most GIF objects have a life cycle defined by a state machine.
|
|
4
|
+
|
|
5
|
+
For each object type the set of possible states is defined together with its initial state and the set of valid state transitions.
|
|
6
|
+
|
|
7
|
+
## Object Types without States
|
|
8
|
+
|
|
9
|
+
* Protocol
|
|
10
|
+
* Chains
|
|
11
|
+
* Registries (both chain and main registry)
|
|
12
|
+
|
|
13
|
+
## Object Types with States
|
|
14
|
+
|
|
15
|
+
* Tokens
|
|
16
|
+
* Instances
|
|
17
|
+
* Products
|
|
18
|
+
* Oracles
|
|
19
|
+
* Pools
|
|
20
|
+
* Bundles
|
|
21
|
+
* Policies
|
|
22
|
+
* Claim (non-NFT)
|
|
23
|
+
* Payout (non-NFT)
|
|
24
|
+
|
|
25
|
+
### Simple State Machine
|
|
26
|
+
|
|
27
|
+
Valid states
|
|
28
|
+
|
|
29
|
+
* Active (initial state)
|
|
30
|
+
* Paused
|
|
31
|
+
* Archived (final state)
|
|
32
|
+
|
|
33
|
+
Valid state transitions:
|
|
34
|
+
|
|
35
|
+
* Active -> Paused
|
|
36
|
+
* Paused -> Active
|
|
37
|
+
* Paused -> Archived
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
Candidate object types for simple state machine
|
|
41
|
+
|
|
42
|
+
* Token
|
|
43
|
+
* Instance
|
|
44
|
+
* Product
|
|
45
|
+
* Oracle
|
|
46
|
+
* Pool
|
|
47
|
+
|
|
48
|
+
To discuss:
|
|
49
|
+
|
|
50
|
+
* Archived is final state
|
|
51
|
+
* What mechanism should exist to revert an unintended transition to 'Archived' state. Should there be such a mechanism?
|
|
52
|
+
* What mechanism should exist when the NFT of such an object is burned prematurely. Should there be such a mechanism
|
|
53
|
+
|
|
54
|
+
### Bundle State Machine
|
|
55
|
+
|
|
56
|
+
Valid states
|
|
57
|
+
|
|
58
|
+
* Active (initial state)
|
|
59
|
+
* Paused
|
|
60
|
+
* Expired (implicit state)
|
|
61
|
+
* Closed (final state)
|
|
62
|
+
|
|
63
|
+
Expired is not an explicit state.
|
|
64
|
+
A bundle is expired for block.timestamp >= expiredAt
|
|
65
|
+
|
|
66
|
+
### Policy State Machine
|
|
67
|
+
|
|
68
|
+
Valid states
|
|
69
|
+
|
|
70
|
+
* Applied (initial state)
|
|
71
|
+
* Revoked (final state)
|
|
72
|
+
* Declined (final state)
|
|
73
|
+
* Active
|
|
74
|
+
* Expired (implicit state)
|
|
75
|
+
* Closed (final state)
|
|
76
|
+
|
|
77
|
+
Expired is not an explicit state.
|
|
78
|
+
A policy is expired for block.timestamp >= expiredAt
|
|
79
|
+
|
|
80
|
+
To discuss:
|
|
81
|
+
|
|
82
|
+
* Should 'Closed' be less explicit using a closedAt state variable?
|
|
83
|
+
* Or even more lighweight? ie. block.timestamp >= expiredAt and no open claims
|
|
84
|
+
|
|
85
|
+
Valid state transitions:
|
|
86
|
+
|
|
87
|
+
* Applied -> Revoked
|
|
88
|
+
* Applied -> Declined
|
|
89
|
+
* Applied -> Active
|
|
90
|
+
* Active -> Closed (needs to be expired)
|
|
91
|
+
|
|
92
|
+
### Claim State Machine
|
|
93
|
+
|
|
94
|
+
Valid states
|
|
95
|
+
* Applied (initial state)
|
|
96
|
+
* Confirmed
|
|
97
|
+
* Declined (final state)
|
|
98
|
+
* Closed (final state)
|
|
99
|
+
|
|
100
|
+
Valid state transitions:
|
|
101
|
+
* Applied -> Confirmed
|
|
102
|
+
* Applied -> Declined
|
|
103
|
+
* Confirmed -> Closed
|
|
104
|
+
|
|
105
|
+
### Payout State Machine
|
|
106
|
+
|
|
107
|
+
Valid states
|
|
108
|
+
* Expected
|
|
109
|
+
* PaidOut
|
|
110
|
+
|
|
111
|
+
Valid state transitions:
|
|
112
|
+
* Expected -> PaidOut
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import {StateId, toStateId, zeroStateId} from "../../types/StateId.sol";
|
|
5
|
+
import {ISM} from "./ISM.sol";
|
|
6
|
+
|
|
7
|
+
contract SM is ISM {
|
|
8
|
+
mapping(StateId currentState => mapping(StateId newState => bool isValid))
|
|
9
|
+
private _isValidTransition;
|
|
10
|
+
|
|
11
|
+
StateId internal _state;
|
|
12
|
+
|
|
13
|
+
function setInitialState(StateId initialStateId) internal {
|
|
14
|
+
if (initialStateId == zeroStateId()) {
|
|
15
|
+
revert ErrorInitialStateUndefined();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
_state = initialStateId;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function addTransition(
|
|
22
|
+
StateId currentStateId,
|
|
23
|
+
StateId nextStateId
|
|
24
|
+
) internal {
|
|
25
|
+
if (currentStateId == zeroStateId()) {
|
|
26
|
+
revert ErrorStartStateUndefined();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (nextStateId == zeroStateId()) {
|
|
30
|
+
revert ErrorNextStateUndefined();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
_isValidTransition[currentStateId][nextStateId] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function changeToState(StateId newStateId) external override {
|
|
37
|
+
if (!_isValidTransition[_state][newStateId]) {
|
|
38
|
+
revert ErrorStateChangeInvalid(_state, newStateId);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
StateId stateOld = _state;
|
|
42
|
+
_state = newStateId;
|
|
43
|
+
|
|
44
|
+
emit LogStateChanged(stateOld, _state);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function isValidTransition(
|
|
48
|
+
StateId currentStateId,
|
|
49
|
+
StateId newStateId
|
|
50
|
+
) external view override returns (bool isValid) {
|
|
51
|
+
return _isValidTransition[currentStateId][newStateId];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function getState() external view override returns (StateId state) {
|
|
55
|
+
return _state;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import {StateId, toStateId} from "../../types/StateId.sol";
|
|
5
|
+
import {SM} from "./SM.sol";
|
|
6
|
+
|
|
7
|
+
contract SimpleStateMachine is SM {
|
|
8
|
+
uint8 public constant STATE_ACTIVE = 10;
|
|
9
|
+
uint8 public constant STATE_PAUSED = 20;
|
|
10
|
+
uint8 public constant STATE_ARCHIVED = 30;
|
|
11
|
+
|
|
12
|
+
constructor() {
|
|
13
|
+
addTransition(ACTIVE(), PAUSED());
|
|
14
|
+
addTransition(PAUSED(), ACTIVE());
|
|
15
|
+
addTransition(PAUSED(), ARCHIVED());
|
|
16
|
+
|
|
17
|
+
setInitialState(ACTIVE());
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function ACTIVE() public pure returns (StateId stateId) {
|
|
21
|
+
return toStateId(STATE_ACTIVE);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function PAUSED() public pure returns (StateId stateId) {
|
|
25
|
+
return toStateId(STATE_PAUSED);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function ARCHIVED() public pure returns (StateId stateId) {
|
|
29
|
+
return toStateId(STATE_ARCHIVED);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,18 +1,53 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
pragma solidity ^0.8.19;
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import {IAccessModule} from "./access/IAccess.sol";
|
|
6
|
-
import {IComponentModule} from "./component/IComponent.sol";
|
|
7
|
-
import {IProductModule} from "./product/IProductService.sol";
|
|
8
|
-
import {IPolicyModule} from "./policy/IPolicy.sol";
|
|
9
|
-
import {IPoolModule} from "./pool/IPoolModule.sol";
|
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
|
10
5
|
|
|
6
|
+
|
|
7
|
+
import {IVersionable} from "../shared/IVersionable.sol";
|
|
8
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
|
9
|
+
import {IOwnable} from "../shared/IOwnable.sol";
|
|
10
|
+
import {RoleId} from "../types/RoleId.sol";
|
|
11
|
+
|
|
12
|
+
import {IAccessModule} from "./module/access/IAccess.sol";
|
|
13
|
+
import {IBundleModule} from "./module/bundle/IBundle.sol";
|
|
14
|
+
import {ICompensationModule} from "./module/compensation/ICompensation.sol";
|
|
15
|
+
import {ILifecycleModule} from "./module/lifecycle/ILifecycle.sol";
|
|
16
|
+
import {IComponentModule} from "./module/component/IComponent.sol";
|
|
17
|
+
import {IPolicyModule} from "./module/policy/IPolicy.sol";
|
|
18
|
+
import {IPoolModule} from "./module/pool/IPoolModule.sol";
|
|
19
|
+
import {IRiskModule} from "./module/risk/IRisk.sol";
|
|
20
|
+
import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
|
|
21
|
+
|
|
22
|
+
import {IRegistry, IRegistryLinked} from "../registry/IRegistryLinked.sol";
|
|
23
|
+
import {IServiceLinked} from "./IServiceLinked.sol";
|
|
24
|
+
|
|
25
|
+
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
|
26
|
+
import {IProductService} from "./service/IProductService.sol";
|
|
27
|
+
import {IPoolService} from "./service/IPoolService.sol";
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
// solhint-disable-next-line no-empty-blocks
|
|
11
31
|
interface IInstance is
|
|
32
|
+
IERC165,
|
|
33
|
+
IVersionable,
|
|
12
34
|
IRegisterable,
|
|
13
35
|
IAccessModule,
|
|
36
|
+
ILifecycleModule,
|
|
14
37
|
IPolicyModule,
|
|
15
38
|
IPoolModule,
|
|
39
|
+
IBundleModule,
|
|
16
40
|
IComponentModule,
|
|
17
|
-
|
|
18
|
-
|
|
41
|
+
ITreasuryModule,
|
|
42
|
+
ICompensationModule,
|
|
43
|
+
IServiceLinked
|
|
44
|
+
{
|
|
45
|
+
function getRegistry() external view override (IBundleModule, IComponentModule, IPolicyModule, IRegisterable) returns (IRegistry registry);
|
|
46
|
+
function hasRole(RoleId role, address member) external view override (IAccessModule, IComponentModule) returns (bool hasRole);
|
|
47
|
+
|
|
48
|
+
function getComponentOwnerService() external view override (IServiceLinked, IComponentModule) returns(IComponentOwnerService);
|
|
49
|
+
function getProductService() external view override (IServiceLinked, IBundleModule, IPolicyModule) returns(IProductService);
|
|
50
|
+
function getPoolService() external view override (IServiceLinked, IBundleModule, IPoolModule) returns(IPoolService);
|
|
51
|
+
|
|
52
|
+
function getOwner() external view override (IOwnable, IAccessModule) returns(address owner);
|
|
53
|
+
}
|