@etherisc/gif-next 0.0.2-ebbe63d → 0.0.2-efdb520-159
Sign up to get free protection for your applications and to get access to all the features.
- 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,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
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
/*
|
5
|
+
# chisel session for user defined types
|
6
|
+
|
7
|
+
import {TypeA, toTypeA} from "./contracts/experiment/types/TypeA.sol";
|
8
|
+
TypeA a = toTypeA(1);
|
9
|
+
TypeA b = toTypeA(2);
|
10
|
+
uint(a.toInt())
|
11
|
+
uint(b.toInt())
|
12
|
+
a == b
|
13
|
+
a != b
|
14
|
+
|
15
|
+
import {TypeB, toTypeB} from "./contracts/experiment/types/TypeB.sol";
|
16
|
+
TypeB x = toTypeB(33);
|
17
|
+
uint(x.toInt())
|
18
|
+
a == x; // -> error
|
19
|
+
a.toInt() == x.toInt() // -> no error
|
20
|
+
*/
|
21
|
+
|
22
|
+
// bytes5 allows for chain ids up to 13 digits
|
23
|
+
type TypeA is uint248;
|
24
|
+
|
25
|
+
// type bindings
|
26
|
+
using {eqTypeA as ==, neTypeA as !=, TypeALib.toInt} for TypeA global;
|
27
|
+
|
28
|
+
// general pure free functions
|
29
|
+
function toTypeA(uint256 typeA) pure returns (TypeA) {
|
30
|
+
return TypeA.wrap(uint248(typeA));
|
31
|
+
}
|
32
|
+
|
33
|
+
// pure free functions for operators
|
34
|
+
function eqTypeA(TypeA a, TypeA b) pure returns (bool isSame) {
|
35
|
+
return TypeA.unwrap(a) == TypeA.unwrap(b);
|
36
|
+
}
|
37
|
+
|
38
|
+
function neTypeA(TypeA a, TypeA b) pure returns (bool isDifferent) {
|
39
|
+
return TypeA.unwrap(a) != TypeA.unwrap(b);
|
40
|
+
}
|
41
|
+
|
42
|
+
// library functions that operate on user defined type
|
43
|
+
library TypeALib {
|
44
|
+
function toInt(TypeA typeA) internal pure returns (uint256) {
|
45
|
+
return uint256(TypeA.unwrap(typeA));
|
46
|
+
}
|
47
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
// bytes5 allows for chain ids up to 13 digits
|
5
|
+
type TypeB is uint248;
|
6
|
+
|
7
|
+
// type bindings
|
8
|
+
using {eqTypeB as ==, addTypeB as +, TypeBLib.toInt} for TypeB global;
|
9
|
+
|
10
|
+
// general pure free functions
|
11
|
+
function toTypeB(uint256 x) pure returns (TypeB) {
|
12
|
+
return TypeB.wrap(uint248(x));
|
13
|
+
}
|
14
|
+
|
15
|
+
// pure free functions for operators
|
16
|
+
function eqTypeB(TypeB a, TypeB b) pure returns (bool isSame) {
|
17
|
+
return TypeB.unwrap(a) == TypeB.unwrap(b);
|
18
|
+
}
|
19
|
+
|
20
|
+
function addTypeB(TypeB a, TypeB b) pure returns (TypeB sum) {
|
21
|
+
return TypeB.wrap(TypeB.unwrap(a) + TypeB.unwrap(b));
|
22
|
+
}
|
23
|
+
|
24
|
+
// library functions that operate on user defined type
|
25
|
+
library TypeBLib {
|
26
|
+
function toInt(TypeB b) internal pure returns (uint256) {
|
27
|
+
return uint256(TypeB.unwrap(b));
|
28
|
+
}
|
29
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
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 {ILifecycleModule} from "./module/lifecycle/ILifecycle.sol";
|
14
|
+
import {IComponentModule} from "./module/component/IComponent.sol";
|
15
|
+
import {IPolicyModule} from "./module/policy/IPolicy.sol";
|
16
|
+
import {IPoolModule} from "./module/pool/IPoolModule.sol";
|
17
|
+
import {IBundleModule} from "./module/bundle/IBundle.sol";
|
18
|
+
import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
|
19
|
+
|
20
|
+
import {IRegistry, IRegistryLinked} from "../registry/IRegistryLinked.sol";
|
21
|
+
import {IServiceLinked} from "./IServiceLinked.sol";
|
22
|
+
|
23
|
+
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
24
|
+
import {IProductService} from "./service/IProductService.sol";
|
25
|
+
import {IPoolService} from "./service/IPoolService.sol";
|
26
|
+
|
27
|
+
|
28
|
+
// solhint-disable-next-line no-empty-blocks
|
29
|
+
interface IInstance is
|
30
|
+
IERC165,
|
31
|
+
IVersionable,
|
32
|
+
IRegisterable,
|
33
|
+
IAccessModule,
|
34
|
+
ILifecycleModule,
|
35
|
+
IPolicyModule,
|
36
|
+
IPoolModule,
|
37
|
+
IBundleModule,
|
38
|
+
IComponentModule,
|
39
|
+
ITreasuryModule,
|
40
|
+
IServiceLinked
|
41
|
+
{
|
42
|
+
function getRegistry() external view override (IBundleModule, IComponentModule, IPolicyModule, IRegisterable) returns (IRegistry registry);
|
43
|
+
function hasRole(RoleId role, address member) external view override (IAccessModule, IComponentModule) returns (bool hasRole);
|
44
|
+
|
45
|
+
function getComponentOwnerService() external view override (IServiceLinked, IComponentModule) returns(IComponentOwnerService);
|
46
|
+
function getProductService() external view override (IServiceLinked, IBundleModule, IPolicyModule) returns(IProductService);
|
47
|
+
function getPoolService() external view override (IServiceLinked, IBundleModule, IPoolModule) returns(IPoolService);
|
48
|
+
|
49
|
+
function getOwner() external view override (IOwnable, IAccessModule) returns(address owner);
|
50
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
5
|
+
import {IProductService} from "./service/IProductService.sol";
|
6
|
+
import {IPoolService} from "./service/IPoolService.sol";
|
7
|
+
|
8
|
+
interface IServiceLinked {
|
9
|
+
function getComponentOwnerService() external view returns(IComponentOwnerService service);
|
10
|
+
function getProductService() external view returns(IProductService service);
|
11
|
+
function getPoolService() external view returns(IPoolService service);
|
12
|
+
}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {NftId} from "../types/NftId.sol";
|
5
|
+
import {RoleId} from "../types/RoleId.sol";
|
6
|
+
|
7
|
+
import {InstanceBase} from "./InstanceBase.sol";
|
8
|
+
import {AccessModule} from "./module/access/Access.sol";
|
9
|
+
import {LifecycleModule} from "./module/lifecycle/LifecycleModule.sol";
|
10
|
+
import {ComponentModule} from "./module/component/ComponentModule.sol";
|
11
|
+
import {PolicyModule} from "./module/policy/PolicyModule.sol";
|
12
|
+
import {PoolModule} from "./module/pool/PoolModule.sol";
|
13
|
+
import {BundleModule} from "./module/bundle/BundleModule.sol";
|
14
|
+
import {TreasuryModule} from "./module/treasury/TreasuryModule.sol";
|
15
|
+
|
16
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
17
|
+
import {Registerable} from "../shared/Registerable.sol";
|
18
|
+
import {IAccessModule} from "./module/access/IAccess.sol";
|
19
|
+
import {IBundleModule} from "./module/bundle/IBundle.sol";
|
20
|
+
import {IComponentModule} from "./module/component/IComponent.sol";
|
21
|
+
import {IPoolModule} from "./module/pool/IPoolModule.sol";
|
22
|
+
import {IPolicyModule} from "./module/policy/IPolicy.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
|
+
contract Instance is
|
30
|
+
InstanceBase,
|
31
|
+
AccessModule,
|
32
|
+
BundleModule,
|
33
|
+
ComponentModule,
|
34
|
+
LifecycleModule,
|
35
|
+
PolicyModule,
|
36
|
+
PoolModule,
|
37
|
+
TreasuryModule
|
38
|
+
{
|
39
|
+
constructor(
|
40
|
+
address registry,
|
41
|
+
NftId registryNftId
|
42
|
+
)
|
43
|
+
InstanceBase(registry, registryNftId)
|
44
|
+
AccessModule()
|
45
|
+
BundleModule()
|
46
|
+
ComponentModule()
|
47
|
+
PolicyModule()
|
48
|
+
PoolModule()
|
49
|
+
TreasuryModule()
|
50
|
+
{
|
51
|
+
}
|
52
|
+
|
53
|
+
function getRegistry() public view override (Registerable, IBundleModule, IComponentModule, IPolicyModule) returns (IRegistry registry) { return super.getRegistry(); }
|
54
|
+
|
55
|
+
function hasRole(RoleId role, address member) public view override (AccessModule, IComponentModule) returns (bool) { return super.hasRole(role, member); }
|
56
|
+
|
57
|
+
function getComponentOwnerService() external view override (IComponentModule, IServiceLinked) returns(IComponentOwnerService service) { return _componentOwnerService; }
|
58
|
+
function getProductService() external view override (IBundleModule, IPolicyModule, IServiceLinked) returns(IProductService service) { return _productService; }
|
59
|
+
function getPoolService() external view override (IBundleModule, IPoolModule, IServiceLinked) returns(IPoolService service) { return _poolService; }
|
60
|
+
|
61
|
+
function getOwner() public view override (IAccessModule, Registerable) returns(address owner) { return super.getOwner(); }
|
62
|
+
}
|
@@ -0,0 +1,74 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {Versionable} from "../shared/Versionable.sol";
|
5
|
+
import {Registerable} from "../shared/Registerable.sol";
|
6
|
+
// import {IRegistry} from "../registry/IRegistry.sol";
|
7
|
+
|
8
|
+
// import {IInstance} from "./IInstance.sol";
|
9
|
+
import {ObjectType, INSTANCE} from "../types/ObjectType.sol";
|
10
|
+
import {NftId} from "../types/NftId.sol";
|
11
|
+
import {Version, VersionPart, toVersion, toVersionPart} from "../types/Version.sol";
|
12
|
+
|
13
|
+
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
14
|
+
import {IProductService} from "./service/IProductService.sol";
|
15
|
+
import {IPoolService} from "./service/IPoolService.sol";
|
16
|
+
|
17
|
+
import {IServiceLinked} from "./IServiceLinked.sol";
|
18
|
+
import {IInstance} from "./IInstance.sol";
|
19
|
+
|
20
|
+
abstract contract InstanceBase is
|
21
|
+
Versionable,
|
22
|
+
Registerable,
|
23
|
+
IServiceLinked
|
24
|
+
{
|
25
|
+
IComponentOwnerService internal _componentOwnerService;
|
26
|
+
IProductService internal _productService;
|
27
|
+
IPoolService internal _poolService;
|
28
|
+
|
29
|
+
constructor(
|
30
|
+
address registry,
|
31
|
+
NftId registryNftId
|
32
|
+
)
|
33
|
+
Registerable(registry, registryNftId)
|
34
|
+
Versionable()
|
35
|
+
{
|
36
|
+
_registerInterface(type(IInstance).interfaceId);
|
37
|
+
_linkToServicesInRegistry();
|
38
|
+
}
|
39
|
+
|
40
|
+
// from versionable
|
41
|
+
function getVersion()
|
42
|
+
public
|
43
|
+
pure
|
44
|
+
virtual override
|
45
|
+
returns(Version)
|
46
|
+
{
|
47
|
+
return toVersion(
|
48
|
+
toVersionPart(3),
|
49
|
+
toVersionPart(0),
|
50
|
+
toVersionPart(0));
|
51
|
+
}
|
52
|
+
|
53
|
+
// from registerable
|
54
|
+
function getType() external pure override returns (ObjectType objectType) {
|
55
|
+
return INSTANCE();
|
56
|
+
}
|
57
|
+
|
58
|
+
|
59
|
+
// internal / private functions
|
60
|
+
function _linkToServicesInRegistry() internal {
|
61
|
+
VersionPart majorVersion = getVersion().toMajorPart();
|
62
|
+
_componentOwnerService = IComponentOwnerService(_getAndCheck("ComponentOwnerService", majorVersion));
|
63
|
+
_productService = IProductService(_getAndCheck("ProductService", majorVersion));
|
64
|
+
_poolService = IPoolService(_getAndCheck("PoolService", majorVersion));
|
65
|
+
}
|
66
|
+
|
67
|
+
function _getAndCheck(string memory serviceName, VersionPart majorVersion) internal view returns (address serviceAddress) {
|
68
|
+
serviceAddress = _registry.getServiceAddress(serviceName, majorVersion);
|
69
|
+
require(
|
70
|
+
serviceAddress != address(0),
|
71
|
+
"ERROR:INS-001:NOT_REGISTERED"
|
72
|
+
);
|
73
|
+
}
|
74
|
+
}
|
@@ -0,0 +1,149 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
// role admin handling of oz doesn't fit nft ownability
|
5
|
+
// import {AccessControlEnumerable} from "@openzeppelin/contracts/access/AccessControlEnumerable.sol";
|
6
|
+
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
7
|
+
|
8
|
+
import {RoleId, toRoleId} from "../../../types/RoleId.sol";
|
9
|
+
import {DISTRIBUTOR_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../../../types/RoleId.sol";
|
10
|
+
import {DISTRIBUTOR_OWNER_ROLE_NAME, ORACLE_OWNER_ROLE_NAME, POOL_OWNER_ROLE_NAME, PRODUCT_OWNER_ROLE_NAME} from "../../../types/RoleId.sol";
|
11
|
+
import {IAccessModule} from "./IAccess.sol";
|
12
|
+
|
13
|
+
abstract contract AccessModule is IAccessModule {
|
14
|
+
|
15
|
+
using EnumerableSet for EnumerableSet.AddressSet;
|
16
|
+
|
17
|
+
mapping(RoleId role => RoleInfo info) private _info;
|
18
|
+
RoleId[] private _roles;
|
19
|
+
|
20
|
+
mapping(RoleId role => mapping(address member => bool isMember))
|
21
|
+
private _isRoleMember;
|
22
|
+
mapping(RoleId role => EnumerableSet.AddressSet members) private _roleMembers;
|
23
|
+
|
24
|
+
modifier onlyAccessOwner() {
|
25
|
+
require(
|
26
|
+
msg.sender == this.getOwner(),
|
27
|
+
"ERROR:ACS-001:NOT_OWNER");
|
28
|
+
_;
|
29
|
+
}
|
30
|
+
|
31
|
+
modifier onlyExistingRole(RoleId role) {
|
32
|
+
require(
|
33
|
+
_info[role].id == role,
|
34
|
+
"ERROR:ACS-002:ROLE_NOT_EXISTING");
|
35
|
+
_;
|
36
|
+
}
|
37
|
+
|
38
|
+
constructor() {
|
39
|
+
_createRole(DISTRIBUTOR_OWNER_ROLE(), DISTRIBUTOR_OWNER_ROLE_NAME());
|
40
|
+
_createRole(ORACLE_OWNER_ROLE(), ORACLE_OWNER_ROLE_NAME());
|
41
|
+
_createRole(POOL_OWNER_ROLE(), POOL_OWNER_ROLE_NAME());
|
42
|
+
_createRole(PRODUCT_OWNER_ROLE(), PRODUCT_OWNER_ROLE_NAME());
|
43
|
+
}
|
44
|
+
|
45
|
+
function createRole(
|
46
|
+
string memory roleName
|
47
|
+
) public override onlyAccessOwner returns (RoleId role) {
|
48
|
+
role = toRoleId(roleName);
|
49
|
+
require(
|
50
|
+
!roleExists(role),
|
51
|
+
"ERROR:ACS-010:ROLE_ALREADY_EXISTS");
|
52
|
+
|
53
|
+
_createRole(role, roleName);
|
54
|
+
}
|
55
|
+
|
56
|
+
function setRoleState(RoleId role, bool active) external override onlyExistingRole(role) onlyAccessOwner {
|
57
|
+
RoleInfo memory info = _info[role];
|
58
|
+
info.isActive = active;
|
59
|
+
_setRoleInfo(info);
|
60
|
+
|
61
|
+
emit LogAccessRoleStateSet(role, active);
|
62
|
+
}
|
63
|
+
|
64
|
+
function grantRole(
|
65
|
+
RoleId role,
|
66
|
+
address member
|
67
|
+
) external override onlyExistingRole(role) onlyAccessOwner {
|
68
|
+
require(_info[role].isActive, "ERROR:ACS-040:ROLE_NOT_ACTIVE");
|
69
|
+
|
70
|
+
_isRoleMember[role][member] = true;
|
71
|
+
_roleMembers[role].add(member);
|
72
|
+
|
73
|
+
emit LogAccessRoleGranted(role, member, _isRoleMember[role][member]);
|
74
|
+
}
|
75
|
+
|
76
|
+
function revokeRole(
|
77
|
+
RoleId role,
|
78
|
+
address member
|
79
|
+
) external override onlyExistingRole(role) onlyAccessOwner {
|
80
|
+
delete _isRoleMember[role][member];
|
81
|
+
_roleMembers[role].remove(member);
|
82
|
+
|
83
|
+
emit LogAccessRoleGranted(role, member, false);
|
84
|
+
}
|
85
|
+
|
86
|
+
function roleExists(RoleId role) public view virtual override returns (bool) {
|
87
|
+
return _info[role].id == role;
|
88
|
+
}
|
89
|
+
|
90
|
+
function hasRole(
|
91
|
+
RoleId role,
|
92
|
+
address member
|
93
|
+
) public view virtual override returns (bool) {
|
94
|
+
return _isRoleMember[role][member];
|
95
|
+
}
|
96
|
+
|
97
|
+
function getRoleId(string memory roleName) external pure override returns (RoleId role) {
|
98
|
+
return toRoleId(roleName);
|
99
|
+
}
|
100
|
+
|
101
|
+
function getRoleInfo(
|
102
|
+
RoleId role
|
103
|
+
) external view override returns (RoleInfo memory info) {
|
104
|
+
return _info[role];
|
105
|
+
}
|
106
|
+
|
107
|
+
function getRole(
|
108
|
+
uint256 idx
|
109
|
+
) external view override returns (RoleId role) {
|
110
|
+
return _roles[idx];
|
111
|
+
}
|
112
|
+
|
113
|
+
function getRoleCount() external view override returns (uint256 roles) {
|
114
|
+
return _roles.length;
|
115
|
+
}
|
116
|
+
|
117
|
+
function getRoleMemberCount(
|
118
|
+
RoleId role
|
119
|
+
) public view override returns (uint256 roleMembers) {
|
120
|
+
return _roleMembers[role].length();
|
121
|
+
}
|
122
|
+
|
123
|
+
function getRoleMember(
|
124
|
+
RoleId role,
|
125
|
+
uint256 idx
|
126
|
+
) public view override returns (address roleMembers) {
|
127
|
+
return _roleMembers[role].at(idx);
|
128
|
+
}
|
129
|
+
|
130
|
+
function _createRole(
|
131
|
+
RoleId role,
|
132
|
+
string memory roleName
|
133
|
+
) internal {
|
134
|
+
RoleInfo memory info = RoleInfo(role, roleName, true);
|
135
|
+
_setRoleInfo(info);
|
136
|
+
|
137
|
+
emit LogAccessRoleCreated(role, roleName);
|
138
|
+
}
|
139
|
+
|
140
|
+
function _setRoleInfo(
|
141
|
+
RoleInfo memory info
|
142
|
+
) internal {
|
143
|
+
RoleId role = info.id;
|
144
|
+
_info[role] = info;
|
145
|
+
if(!roleExists(role)) {
|
146
|
+
_roles.push(role);
|
147
|
+
}
|
148
|
+
}
|
149
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {RoleId} from "../../../types/RoleId.sol";
|
5
|
+
|
6
|
+
interface IAccess {
|
7
|
+
struct RoleInfo {
|
8
|
+
RoleId id;
|
9
|
+
string name;
|
10
|
+
bool isActive;
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
interface IAccessModule is
|
15
|
+
IAccess
|
16
|
+
{
|
17
|
+
event LogAccessRoleCreated(RoleId role, string roleName);
|
18
|
+
event LogAccessRoleStateSet(RoleId role, bool active);
|
19
|
+
event LogAccessRoleGranted(RoleId role, address member, bool isMember);
|
20
|
+
|
21
|
+
function createRole(string memory roleName) external returns (RoleId role);
|
22
|
+
|
23
|
+
function setRoleState(RoleId role, bool active) external;
|
24
|
+
|
25
|
+
function grantRole(RoleId role, address member) external;
|
26
|
+
|
27
|
+
function revokeRole(RoleId role, address member) external;
|
28
|
+
|
29
|
+
function roleExists(RoleId role) external view returns (bool);
|
30
|
+
|
31
|
+
function hasRole(RoleId role, address member) external view returns (bool);
|
32
|
+
|
33
|
+
function getRoleCount() external view returns (uint256 roles);
|
34
|
+
|
35
|
+
function getRole(uint256 idx) external view returns (RoleId role);
|
36
|
+
|
37
|
+
function getRoleId(string memory roleName) external pure returns (RoleId role);
|
38
|
+
|
39
|
+
function getRoleInfo(
|
40
|
+
RoleId role
|
41
|
+
) external view returns (RoleInfo memory info);
|
42
|
+
|
43
|
+
function getRoleMemberCount(
|
44
|
+
RoleId role
|
45
|
+
) external view returns (uint256 roleMembers);
|
46
|
+
|
47
|
+
function getRoleMember(
|
48
|
+
RoleId role,
|
49
|
+
uint256 idx
|
50
|
+
) external view returns (address roleMember);
|
51
|
+
|
52
|
+
function getOwner() external view returns (address owner);
|
53
|
+
}
|