@etherisc/gif-next 0.0.2-ebbe63d → 0.0.2-efdb520-159
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +220 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +174 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +174 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +356 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +279 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
- package/artifacts/contracts/components/Pool.sol/Pool.json +387 -0
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
- package/artifacts/contracts/components/Product.sol/Product.json +305 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +4 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +105 -0
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +4 -0
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +105 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +128 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +42 -0
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +76 -0
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +89 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +128 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +37 -0
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +50 -0
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +63 -0
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +4 -0
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +10 -0
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +4 -0
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +10 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2022 -0
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +24 -0
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +50 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +4 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2288 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +313 -0
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +333 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +10 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +333 -0
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +276 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +276 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +188 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +10 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +188 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +134 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.json +182 -0
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +221 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.json +10 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +261 -0
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +261 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +10 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +149 -0
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +149 -0
- package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +10 -0
- package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.json +10 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +538 -0
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +538 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +519 -0
- package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.json +300 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +477 -0
- package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IService.sol/IService.json +300 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +499 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +685 -0
- package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.json +300 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +597 -0
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +4 -0
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +452 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +305 -0
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +4 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.json +472 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +24 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +121 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +121 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +95 -0
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +387 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +82 -0
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
- package/artifacts/contracts/test/TestService.sol/TestService.json +407 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +222 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +230 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +92 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +236 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +453 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.json +78 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
- package/contracts/components/BaseComponent.sol +89 -0
- package/contracts/components/IBaseComponent.sol +19 -0
- package/contracts/components/IPoolComponent.sol +57 -0
- package/contracts/components/IProductComponent.sol +19 -0
- package/contracts/components/Pool.sol +174 -0
- package/contracts/components/Product.sol +117 -0
- package/contracts/experiment/errors/Require.sol +38 -0
- package/contracts/experiment/errors/Revert.sol +44 -0
- package/contracts/experiment/inheritance/A.sol +53 -0
- package/contracts/experiment/inheritance/B.sol +28 -0
- package/contracts/experiment/inheritance/C.sol +34 -0
- package/contracts/experiment/inheritance/IA.sol +13 -0
- package/contracts/experiment/inheritance/IB.sol +10 -0
- package/contracts/experiment/inheritance/IC.sol +12 -0
- package/contracts/experiment/statemachine/Dummy.sol +27 -0
- package/contracts/experiment/statemachine/ISM.sol +25 -0
- package/contracts/experiment/statemachine/README.md +112 -0
- package/contracts/experiment/statemachine/SM.sol +57 -0
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
- package/contracts/experiment/types/TypeA.sol +47 -0
- package/contracts/experiment/types/TypeB.sol +29 -0
- package/contracts/instance/IInstance.sol +50 -0
- package/contracts/instance/IInstanceLinked.sol +8 -0
- package/contracts/instance/IServiceLinked.sol +12 -0
- package/contracts/instance/Instance.sol +62 -0
- package/contracts/instance/InstanceBase.sol +74 -0
- package/contracts/instance/module/access/Access.sol +149 -0
- package/contracts/instance/module/access/IAccess.sol +53 -0
- package/contracts/instance/module/bundle/BundleModule.sol +228 -0
- package/contracts/instance/module/bundle/IBundle.sol +53 -0
- package/contracts/instance/module/component/ComponentModule.sol +104 -0
- package/contracts/instance/module/component/IComponent.sol +53 -0
- package/contracts/instance/module/lifecycle/ILifecycle.sol +47 -0
- package/contracts/instance/module/lifecycle/LifecycleModule.sol +89 -0
- package/contracts/instance/module/policy/IPolicy.sol +60 -0
- package/contracts/instance/module/policy/PolicyModule.sol +84 -0
- package/contracts/instance/module/pool/IPoolModule.sol +41 -0
- package/contracts/instance/module/pool/PoolModule.sol +87 -0
- package/contracts/instance/module/product/IProductModule.sol +6 -0
- package/contracts/instance/module/product/ProductModule.sol +8 -0
- package/contracts/instance/module/treasury/ITreasury.sol +104 -0
- package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
- package/contracts/instance/module/treasury/TreasuryModule.sol +148 -0
- package/contracts/instance/service/ComponentOwnerService.sol +174 -0
- package/contracts/instance/service/ComponentServiceBase.sol +41 -0
- package/contracts/instance/service/IComponentOwnerService.sol +22 -0
- package/contracts/instance/service/IPoolService.sol +30 -0
- package/contracts/instance/service/IProductService.sol +58 -0
- package/contracts/instance/service/IService.sol +15 -0
- package/contracts/instance/service/PoolService.sol +98 -0
- package/contracts/instance/service/ProductService.sol +358 -0
- package/contracts/instance/service/ServiceBase.sol +39 -0
- package/contracts/registry/ChainNft.sol +159 -0
- package/contracts/registry/IChainNft.sol +21 -0
- package/contracts/registry/IRegistry.sol +57 -0
- package/contracts/registry/IRegistryLinked.sol +8 -0
- package/contracts/registry/Registry.sol +381 -0
- package/contracts/shared/ERC165.sol +21 -0
- package/contracts/shared/IOwnable.sol +6 -0
- package/contracts/shared/IRegisterable.sol +24 -0
- package/contracts/shared/IVersionable.sol +52 -0
- package/contracts/shared/Registerable.sol +86 -0
- package/contracts/shared/Versionable.sol +92 -0
- package/contracts/test/TestFee.sol +25 -0
- package/contracts/test/TestPool.sol +22 -0
- package/contracts/test/TestProduct.sol +44 -0
- package/contracts/test/TestRegisterable.sol +19 -0
- package/contracts/test/TestRoleId.sol +14 -0
- package/contracts/test/TestService.sol +35 -0
- package/contracts/{Dip.sol → test/TestToken.sol} +5 -5
- package/contracts/test/TestVersion.sol +47 -0
- package/contracts/test/TestVersionable.sol +20 -0
- package/contracts/types/AddressSet.sol +58 -0
- package/contracts/types/Blocknumber.sol +118 -0
- package/contracts/types/ChainId.sol +38 -0
- package/contracts/types/Fee.sol +32 -0
- package/contracts/types/NftId.sol +57 -0
- package/contracts/types/NftIdSet.sol +60 -0
- package/contracts/types/ObjectType.sol +115 -0
- package/contracts/types/RoleId.sol +36 -0
- package/contracts/types/StateId.sol +95 -0
- package/contracts/types/Timestamp.sol +123 -0
- package/contracts/types/UFixed.sol +206 -0
- package/contracts/types/Version.sol +91 -0
- package/package.json +24 -9
- package/artifacts/contracts/Dip.sol/DIP.dbg.json +0 -4
- package/artifacts/contracts/Dip.sol/DIP.json +0 -338
- package/artifacts/contracts/Lock.sol/Lock.dbg.json +0 -4
- package/artifacts/contracts/Lock.sol/Lock.json +0 -74
- package/contracts/Lock.sol +0 -34
@@ -0,0 +1,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
|
+
}
|