@etherisc/gif-next 0.0.2-ebbe63d → 0.0.2-ed4dd55
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 +95 -1
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +179 -0
- package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/InstanceLinked.json +35 -0
- package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +179 -0
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +192 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
- package/artifacts/contracts/components/Pool.sol/Pool.json +195 -0
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
- package/artifacts/contracts/components/Product.sol/Product.json +213 -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/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 +892 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +4 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1009 -0
- package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +400 -0
- package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/access/IAccess.sol/IAccess.json +10 -0
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +4 -0
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +35 -0
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +4 -0
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +50 -0
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +336 -0
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +327 -0
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +105 -0
- package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/instance/component/IComponent.sol/IComponent.json +10 -0
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +4 -0
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +179 -0
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +245 -0
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +94 -0
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +24 -0
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.json +10 -0
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +231 -0
- package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +231 -0
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +4 -0
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.json +10 -0
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +149 -0
- package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +162 -0
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +4 -0
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +75 -0
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +114 -0
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +4 -0
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +75 -0
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +125 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +534 -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/IOwnable.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +24 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +166 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +279 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +49 -0
- package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +4 -0
- package/artifacts/contracts/registry/Registry.sol/Registerable.json +166 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +4 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.json +305 -0
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +60 -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 +10 -0
- package/contracts/components/Component.sol +62 -0
- package/contracts/components/IPool.sol +9 -0
- package/contracts/components/IProduct.sol +11 -0
- package/contracts/components/Pool.sol +29 -0
- package/contracts/components/Product.sol +65 -0
- package/contracts/experiment/inheritance/A.sol +56 -0
- package/contracts/experiment/inheritance/B.sol +23 -0
- package/contracts/experiment/inheritance/C.sol +28 -0
- package/contracts/experiment/inheritance/IA.sol +18 -0
- package/contracts/experiment/inheritance/IB.sol +9 -0
- package/contracts/experiment/inheritance/IC.sol +11 -0
- package/contracts/experiment/types/TypeA.sol +42 -0
- package/contracts/experiment/types/TypeB.sol +24 -0
- package/contracts/instance/IInstance.sol +20 -0
- package/contracts/instance/Instance.sol +63 -0
- package/contracts/instance/access/Access.sol +218 -0
- package/contracts/instance/access/IAccess.sol +83 -0
- package/contracts/instance/component/ComponentModule.sol +259 -0
- package/contracts/instance/component/IComponent.sol +94 -0
- package/contracts/instance/policy/IPolicy.sol +66 -0
- package/contracts/instance/policy/PolicyModule.sol +106 -0
- package/contracts/instance/pool/IPoolModule.sol +40 -0
- package/contracts/instance/pool/PoolModule.sol +83 -0
- package/contracts/instance/product/IProductService.sol +45 -0
- package/contracts/instance/product/ProductService.sol +105 -0
- package/contracts/registry/ChainNft.sol +173 -0
- package/contracts/registry/IChainNft.sol +18 -0
- package/contracts/registry/IRegistry.sol +68 -0
- package/contracts/registry/Registry.sol +176 -0
- package/contracts/types/ChainId.sol +24 -0
- package/contracts/types/NftId.sol +25 -0
- package/package.json +7 -6
- 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/Dip.sol +0 -26
- package/contracts/Lock.sol +0 -34
@@ -0,0 +1,56 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IA, ISharedA} from "./IA.sol";
|
5
|
+
import {B} from "./B.sol";
|
6
|
+
import {C} from "./C.sol";
|
7
|
+
|
8
|
+
/*
|
9
|
+
|
10
|
+
# dependency graph
|
11
|
+
|
12
|
+
B <...+
|
13
|
+
^ |
|
14
|
+
| |
|
15
|
+
A --> C
|
16
|
+
|
17
|
+
- A is the main contract
|
18
|
+
- A provides functionality implemented by modules B and C
|
19
|
+
- B and C rely on functionality shared by A
|
20
|
+
- C accesses functionality of module B
|
21
|
+
|
22
|
+
# chisel session
|
23
|
+
|
24
|
+
import {A} from "./contracts/experiment/A.sol";
|
25
|
+
A a = new A();
|
26
|
+
uint(a.getA())
|
27
|
+
uint(a.getB()))
|
28
|
+
uint(a.getC())
|
29
|
+
uint(a.getAfromB())
|
30
|
+
uint(a.getAfromC())
|
31
|
+
uint(a.getBfromC())
|
32
|
+
a.setA(100);
|
33
|
+
a.setB(10);
|
34
|
+
a.setC(20);
|
35
|
+
*/
|
36
|
+
|
37
|
+
contract AShared is ISharedA {
|
38
|
+
|
39
|
+
uint256 private _x;
|
40
|
+
|
41
|
+
constructor() {
|
42
|
+
_x = 42;
|
43
|
+
}
|
44
|
+
|
45
|
+
function getA() external view override returns(uint256) { return _x; }
|
46
|
+
function setA(uint256 newA) external override { _x = newA; }
|
47
|
+
}
|
48
|
+
|
49
|
+
contract A is
|
50
|
+
AShared,
|
51
|
+
B,
|
52
|
+
C,
|
53
|
+
IA
|
54
|
+
{
|
55
|
+
|
56
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {ISharedA} from "./IA.sol";
|
5
|
+
import {IB} from "./IB.sol";
|
6
|
+
|
7
|
+
abstract contract B is ISharedA, IB {
|
8
|
+
|
9
|
+
// names of private variables can be re-used in inheritance
|
10
|
+
uint256 private _x;
|
11
|
+
|
12
|
+
constructor() {
|
13
|
+
_x = 1;
|
14
|
+
}
|
15
|
+
|
16
|
+
// access own state
|
17
|
+
function getB() external view override returns(uint256) { return _x; }
|
18
|
+
function setB(uint256 newB) external override { _x = newB; }
|
19
|
+
|
20
|
+
// access state from parent contract A
|
21
|
+
function getAfromB() external view override returns(uint256) { return this.getA(); }
|
22
|
+
|
23
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {ISharedA} from "./IA.sol";
|
5
|
+
import {IB} from "./IB.sol";
|
6
|
+
import {IC} from "./IC.sol";
|
7
|
+
|
8
|
+
abstract contract C is ISharedA, IC {
|
9
|
+
|
10
|
+
uint256 private _x;
|
11
|
+
|
12
|
+
constructor() {
|
13
|
+
_x = 2;
|
14
|
+
}
|
15
|
+
|
16
|
+
// access own state
|
17
|
+
function getC() external view override returns(uint256) { return _x; }
|
18
|
+
function setC(uint256 newC) external override { _x = newC; }
|
19
|
+
|
20
|
+
// access state from parent contract A
|
21
|
+
function getAfromC() external view override returns(uint256) { return this.getA(); }
|
22
|
+
|
23
|
+
// access state from other module B
|
24
|
+
function getBfromC() external view override returns(uint256) {
|
25
|
+
IB b = IB(address(this));
|
26
|
+
return b.getB();
|
27
|
+
}
|
28
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IB} from "./IB.sol";
|
5
|
+
import {IC} from "./IC.sol";
|
6
|
+
|
7
|
+
interface ISharedA {
|
8
|
+
|
9
|
+
function getA() external view returns(uint256);
|
10
|
+
function setA(uint256 newA) external;
|
11
|
+
}
|
12
|
+
|
13
|
+
interface IA is
|
14
|
+
ISharedA,
|
15
|
+
IB,
|
16
|
+
IC
|
17
|
+
{
|
18
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
interface IC {
|
5
|
+
|
6
|
+
function getAfromC() external view returns(uint256);
|
7
|
+
function getBfromC() external view returns(uint256);
|
8
|
+
|
9
|
+
function getC() external view returns(uint256);
|
10
|
+
function setC(uint256 newA) external;
|
11
|
+
}
|
@@ -0,0 +1,42 @@
|
|
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 {
|
27
|
+
eqTypeA as ==,
|
28
|
+
neTypeA as !=,
|
29
|
+
TypeALib.toInt
|
30
|
+
} for TypeA global;
|
31
|
+
|
32
|
+
// general pure free functions
|
33
|
+
function toTypeA(uint256 typeA) pure returns(TypeA) { return TypeA.wrap(uint248(typeA)); }
|
34
|
+
|
35
|
+
// pure free functions for operators
|
36
|
+
function eqTypeA(TypeA a, TypeA b) pure returns(bool isSame) { return TypeA.unwrap(a) == TypeA.unwrap(b); }
|
37
|
+
function neTypeA(TypeA a, TypeA b) pure returns(bool isDifferent) { return TypeA.unwrap(a) != TypeA.unwrap(b); }
|
38
|
+
|
39
|
+
// library functions that operate on user defined type
|
40
|
+
library TypeALib {
|
41
|
+
function toInt(TypeA typeA) internal pure returns(uint256) { return uint256(TypeA.unwrap(typeA)); }
|
42
|
+
}
|
@@ -0,0 +1,24 @@
|
|
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 {
|
9
|
+
eqTypeB as ==,
|
10
|
+
addTypeB as +,
|
11
|
+
TypeBLib.toInt
|
12
|
+
} for TypeB global;
|
13
|
+
|
14
|
+
// general pure free functions
|
15
|
+
function toTypeB(uint256 x) pure returns(TypeB) { return TypeB.wrap(uint248(x)); }
|
16
|
+
|
17
|
+
// pure free functions for operators
|
18
|
+
function eqTypeB(TypeB a, TypeB b) pure returns(bool isSame) { return TypeB.unwrap(a) == TypeB.unwrap(b); }
|
19
|
+
function addTypeB(TypeB a, TypeB b) pure returns(TypeB sum) { return TypeB.wrap(TypeB.unwrap(a) + TypeB.unwrap(b)); }
|
20
|
+
|
21
|
+
// library functions that operate on user defined type
|
22
|
+
library TypeBLib {
|
23
|
+
function toInt(TypeB b) internal pure returns(uint256) { return uint256(TypeB.unwrap(b)); }
|
24
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegisterable} from "../registry/IRegistry.sol";
|
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";
|
10
|
+
|
11
|
+
|
12
|
+
interface IInstance is
|
13
|
+
IRegisterable,
|
14
|
+
IAccessModule,
|
15
|
+
IPolicyModule,
|
16
|
+
IPoolModule,
|
17
|
+
IComponentModule,
|
18
|
+
IProductModule
|
19
|
+
{ }
|
20
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {Registerable} from "../registry/Registry.sol";
|
5
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
6
|
+
|
7
|
+
import {IAccessModule, AccessModule} from "./access/Access.sol";
|
8
|
+
import {ComponentModule} from "./component/ComponentModule.sol";
|
9
|
+
import {ProductModule} from "./product/ProductService.sol";
|
10
|
+
import {PolicyModule} from "./policy/PolicyModule.sol";
|
11
|
+
import {PoolModule} from "./pool/PoolModule.sol";
|
12
|
+
|
13
|
+
import {IInstance} from "./IInstance.sol";
|
14
|
+
|
15
|
+
contract Instance is
|
16
|
+
Registerable,
|
17
|
+
AccessModule,
|
18
|
+
ComponentModule,
|
19
|
+
PolicyModule,
|
20
|
+
PoolModule,
|
21
|
+
ProductModule,
|
22
|
+
IInstance
|
23
|
+
{
|
24
|
+
|
25
|
+
constructor(
|
26
|
+
address registry,
|
27
|
+
address componentOwnerService,
|
28
|
+
address productService
|
29
|
+
)
|
30
|
+
Registerable(registry)
|
31
|
+
AccessModule()
|
32
|
+
ComponentModule(componentOwnerService)
|
33
|
+
PolicyModule(productService)
|
34
|
+
ProductModule(productService)
|
35
|
+
PoolModule(productService)
|
36
|
+
{ }
|
37
|
+
|
38
|
+
// from registerable
|
39
|
+
function register() external override returns(uint256 id) {
|
40
|
+
require(address(_registry) != address(0), "ERROR:PRD-001:REGISTRY_ZERO");
|
41
|
+
return _registry.register(address(this));
|
42
|
+
}
|
43
|
+
|
44
|
+
// from registerable
|
45
|
+
function getParentNftId() public view override returns(uint256) {
|
46
|
+
// TODO add self registry and exchange 0 for_registry.getNftId();
|
47
|
+
// define parent tree for all registerables
|
48
|
+
// eg 0 <- chain(mainnet) <- global registry <- chain registry <- instance <- component <- policy/bundle
|
49
|
+
return 0;
|
50
|
+
}
|
51
|
+
|
52
|
+
// from registerable
|
53
|
+
function getType() external view override returns(uint256 objectType) {
|
54
|
+
return _registry.INSTANCE();
|
55
|
+
}
|
56
|
+
|
57
|
+
// from registerable
|
58
|
+
function getData() external view override returns(bytes memory data) {
|
59
|
+
return bytes(abi.encode(0));
|
60
|
+
}
|
61
|
+
|
62
|
+
|
63
|
+
}
|
@@ -0,0 +1,218 @@
|
|
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 {IAccessModule} from "./IAccess.sol";
|
9
|
+
|
10
|
+
|
11
|
+
abstract contract AccessModule is
|
12
|
+
IAccessModule
|
13
|
+
{
|
14
|
+
string constant public PRODUCT_OWNER = "ProductOwner";
|
15
|
+
string constant public ORACLE_OWNER = "OracleOwner";
|
16
|
+
string constant public POOL_OWNER = "PoolOwner";
|
17
|
+
|
18
|
+
using EnumerableSet for EnumerableSet.AddressSet;
|
19
|
+
|
20
|
+
event LogAccessRoleGranted(bytes32 role, address member, bool isMember);
|
21
|
+
|
22
|
+
mapping(bytes32 role => RoleInfo info) private _info;
|
23
|
+
bytes32 [] private _roles;
|
24
|
+
|
25
|
+
bytes32 private immutable _productOwnerRole;
|
26
|
+
bytes32 private immutable _oracleOwnerRole;
|
27
|
+
bytes32 private immutable _poolOwnerRole;
|
28
|
+
|
29
|
+
mapping(bytes32 role => mapping(address member => bool isMember)) private _isRoleMember;
|
30
|
+
mapping(bytes32 role => EnumerableSet.AddressSet) private _roleMembers;
|
31
|
+
|
32
|
+
modifier onlyOwner() {
|
33
|
+
require(msg.sender == this.getOwner(), "ERROR:ACM-001:NOT_OWNER");
|
34
|
+
_;
|
35
|
+
}
|
36
|
+
|
37
|
+
constructor() {
|
38
|
+
_productOwnerRole = _createRole(PRODUCT_OWNER);
|
39
|
+
_oracleOwnerRole = _createRole(ORACLE_OWNER);
|
40
|
+
_poolOwnerRole = _createRole(POOL_OWNER);
|
41
|
+
}
|
42
|
+
|
43
|
+
function PRODUCT_OWNER_ROLE() public view override returns(bytes32 role) { return _productOwnerRole; }
|
44
|
+
function ORACLE_OWNER_ROLE() public view override returns(bytes32 role) { return _oracleOwnerRole; }
|
45
|
+
function POOL_OWNER_ROLE() public view override returns(bytes32 role) { return _poolOwnerRole; }
|
46
|
+
|
47
|
+
|
48
|
+
function createRole(string memory roleName)
|
49
|
+
external
|
50
|
+
override
|
51
|
+
onlyOwner
|
52
|
+
returns(bytes32 role)
|
53
|
+
{
|
54
|
+
return _createRole(roleName);
|
55
|
+
}
|
56
|
+
|
57
|
+
function _createRole(string memory roleName)
|
58
|
+
internal
|
59
|
+
returns(bytes32 role)
|
60
|
+
{
|
61
|
+
RoleInfo memory info = RoleInfo(
|
62
|
+
0,
|
63
|
+
roleName,
|
64
|
+
true
|
65
|
+
);
|
66
|
+
|
67
|
+
role = _setRoleInfo(info);
|
68
|
+
|
69
|
+
|
70
|
+
}
|
71
|
+
|
72
|
+
// TODO move to module
|
73
|
+
function disableRole(bytes32 role)
|
74
|
+
external
|
75
|
+
override
|
76
|
+
onlyOwner
|
77
|
+
{
|
78
|
+
RoleInfo memory info = _info[role];
|
79
|
+
require(info.id == role, "ERROR:AOS-001:ROLE_DOES_NOT_EXIST");
|
80
|
+
|
81
|
+
info.isActive = false;
|
82
|
+
_setRoleInfo(info);
|
83
|
+
|
84
|
+
|
85
|
+
}
|
86
|
+
|
87
|
+
// TODO move to module
|
88
|
+
function enableRole(bytes32 role)
|
89
|
+
external
|
90
|
+
override
|
91
|
+
onlyOwner
|
92
|
+
{
|
93
|
+
RoleInfo memory info = _info[role];
|
94
|
+
require(info.id == role, "ERROR:AOS-002:ROLE_DOES_NOT_EXIST");
|
95
|
+
|
96
|
+
info.isActive = true;
|
97
|
+
_setRoleInfo(info);
|
98
|
+
|
99
|
+
|
100
|
+
}
|
101
|
+
|
102
|
+
function grantRole(bytes32 role, address member)
|
103
|
+
external
|
104
|
+
override
|
105
|
+
onlyOwner
|
106
|
+
{
|
107
|
+
require(_info[role].id == role, "ERROR:ACM-010:ROLE_NOT_EXISTING");
|
108
|
+
require(_info[role].isActive, "ERROR:ACM-011:ROLE_NOT_ACTIVE");
|
109
|
+
|
110
|
+
_isRoleMember[role][member] = true;
|
111
|
+
_roleMembers[role].add(member);
|
112
|
+
|
113
|
+
emit LogAccessRoleGranted(role, member, _isRoleMember[role][member]);
|
114
|
+
}
|
115
|
+
|
116
|
+
|
117
|
+
function revokeRole(bytes32 role, address member)
|
118
|
+
external
|
119
|
+
override
|
120
|
+
onlyOwner
|
121
|
+
{
|
122
|
+
require(_info[role].id == role, "ERROR:ACM-020:ROLE_NOT_EXISTING");
|
123
|
+
|
124
|
+
_isRoleMember[role][member] = false;
|
125
|
+
_roleMembers[role].remove(member);
|
126
|
+
|
127
|
+
|
128
|
+
}
|
129
|
+
|
130
|
+
|
131
|
+
function hasRole(bytes32 role, address member)
|
132
|
+
external
|
133
|
+
view
|
134
|
+
override
|
135
|
+
returns(bool)
|
136
|
+
{
|
137
|
+
return _isRoleMember[role][member];
|
138
|
+
}
|
139
|
+
|
140
|
+
|
141
|
+
function getRoleInfo(bytes32 role)
|
142
|
+
external
|
143
|
+
override
|
144
|
+
view
|
145
|
+
returns(RoleInfo memory info)
|
146
|
+
{
|
147
|
+
return _info[role];
|
148
|
+
}
|
149
|
+
|
150
|
+
|
151
|
+
function getRole(uint256 idx)
|
152
|
+
external
|
153
|
+
override
|
154
|
+
view
|
155
|
+
returns(bytes32 role)
|
156
|
+
{
|
157
|
+
return _roles[idx];
|
158
|
+
}
|
159
|
+
|
160
|
+
|
161
|
+
function getRoleCount()
|
162
|
+
external
|
163
|
+
override
|
164
|
+
view
|
165
|
+
returns(uint256 roles)
|
166
|
+
{
|
167
|
+
return _roles.length;
|
168
|
+
}
|
169
|
+
|
170
|
+
function getRoleMemberCount(bytes32 role)
|
171
|
+
public
|
172
|
+
override
|
173
|
+
view
|
174
|
+
returns(uint256 roleMembers)
|
175
|
+
{
|
176
|
+
return _roleMembers[role].length();
|
177
|
+
}
|
178
|
+
|
179
|
+
function getRoleMember(bytes32 role, uint256 idx)
|
180
|
+
public
|
181
|
+
override
|
182
|
+
view
|
183
|
+
returns(address roleMembers)
|
184
|
+
{
|
185
|
+
return _roleMembers[role].at(idx);
|
186
|
+
}
|
187
|
+
|
188
|
+
function getRoleForName(string memory roleName)
|
189
|
+
public
|
190
|
+
override
|
191
|
+
pure
|
192
|
+
returns(bytes32 role)
|
193
|
+
{
|
194
|
+
return keccak256(abi.encode(roleName));
|
195
|
+
}
|
196
|
+
|
197
|
+
|
198
|
+
function _setRoleInfo(RoleInfo memory info)
|
199
|
+
internal
|
200
|
+
returns(bytes32 role)
|
201
|
+
{
|
202
|
+
role = info.id;
|
203
|
+
|
204
|
+
if(role == bytes32(0)) {
|
205
|
+
role = getRoleForName(info.name);
|
206
|
+
// TODO check that this is a new role id
|
207
|
+
|
208
|
+
info.id = role;
|
209
|
+
_roles.push(role);
|
210
|
+
|
211
|
+
|
212
|
+
}
|
213
|
+
|
214
|
+
_info[role] = info;
|
215
|
+
|
216
|
+
|
217
|
+
}
|
218
|
+
}
|
@@ -0,0 +1,83 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IOwnable, IRegistryLinked} from "../../registry/IRegistry.sol";
|
5
|
+
|
6
|
+
interface IAccess {
|
7
|
+
|
8
|
+
struct RoleInfo {
|
9
|
+
bytes32 id;
|
10
|
+
string name;
|
11
|
+
bool isActive;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
interface IAccessCheckRole {
|
16
|
+
|
17
|
+
function hasRole(bytes32 role, address member)
|
18
|
+
external
|
19
|
+
view
|
20
|
+
returns(bool);
|
21
|
+
}
|
22
|
+
|
23
|
+
interface IAccessComponentTypeRoles {
|
24
|
+
function PRODUCT_OWNER_ROLE() external view returns(bytes32 role);
|
25
|
+
function ORACLE_OWNER_ROLE() external view returns(bytes32 role);
|
26
|
+
function POOL_OWNER_ROLE() external view returns(bytes32 role);
|
27
|
+
}
|
28
|
+
|
29
|
+
|
30
|
+
interface IAccessModule is
|
31
|
+
IOwnable,
|
32
|
+
IRegistryLinked,
|
33
|
+
IAccess,
|
34
|
+
IAccessComponentTypeRoles,
|
35
|
+
IAccessCheckRole
|
36
|
+
{
|
37
|
+
|
38
|
+
function createRole(string memory roleName)
|
39
|
+
external
|
40
|
+
returns(bytes32 role);
|
41
|
+
|
42
|
+
function enableRole(bytes32 role)
|
43
|
+
external;
|
44
|
+
|
45
|
+
function disableRole(bytes32 role)
|
46
|
+
external;
|
47
|
+
|
48
|
+
function grantRole(bytes32 role, address member)
|
49
|
+
external;
|
50
|
+
|
51
|
+
function revokeRole(bytes32 role, address member)
|
52
|
+
external;
|
53
|
+
|
54
|
+
function getRole(uint256 idx)
|
55
|
+
external
|
56
|
+
view
|
57
|
+
returns(bytes32 role);
|
58
|
+
|
59
|
+
function getRoleInfo(bytes32 role)
|
60
|
+
external
|
61
|
+
view
|
62
|
+
returns(RoleInfo memory info);
|
63
|
+
|
64
|
+
function getRoleForName(string memory roleName)
|
65
|
+
external
|
66
|
+
pure
|
67
|
+
returns(bytes32 role);
|
68
|
+
|
69
|
+
function getRoleCount()
|
70
|
+
external
|
71
|
+
view
|
72
|
+
returns(uint256 roles);
|
73
|
+
|
74
|
+
function getRoleMemberCount(bytes32 role)
|
75
|
+
external
|
76
|
+
view
|
77
|
+
returns(uint256 roleMembers);
|
78
|
+
|
79
|
+
function getRoleMember(bytes32 role, uint256 idx)
|
80
|
+
external
|
81
|
+
view
|
82
|
+
returns(address roleMembers);
|
83
|
+
}
|