@etherisc/gif-next 0.0.2-ebbe63d → 0.0.2-f9905e1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. package/README.md +95 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +179 -0
  4. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +4 -0
  5. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +35 -0
  6. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +179 -0
  8. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +192 -0
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +195 -0
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
  13. package/artifacts/contracts/components/Product.sol/Product.json +213 -0
  14. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +4 -0
  15. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +128 -0
  16. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +4 -0
  17. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +42 -0
  18. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +76 -0
  20. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +89 -0
  22. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +128 -0
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +4 -0
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +37 -0
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +4 -0
  27. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +50 -0
  28. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +4 -0
  29. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +63 -0
  30. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +4 -0
  31. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +10 -0
  32. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +10 -0
  34. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
  35. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +892 -0
  36. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +4 -0
  37. package/artifacts/contracts/instance/Instance.sol/Instance.json +1009 -0
  38. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +4 -0
  39. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +400 -0
  40. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +4 -0
  41. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.json +10 -0
  42. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +4 -0
  43. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +35 -0
  44. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +4 -0
  45. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +50 -0
  46. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  47. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +336 -0
  48. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  49. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +327 -0
  50. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +4 -0
  51. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +105 -0
  52. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +4 -0
  53. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.json +10 -0
  54. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +4 -0
  55. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +179 -0
  56. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  57. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +245 -0
  58. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +94 -0
  60. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +4 -0
  61. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +24 -0
  62. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  63. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.json +10 -0
  64. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  65. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +231 -0
  66. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  67. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +231 -0
  68. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  69. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.json +10 -0
  70. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +149 -0
  72. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +162 -0
  74. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +4 -0
  75. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +75 -0
  76. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +114 -0
  78. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +75 -0
  80. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +125 -0
  82. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +4 -0
  83. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +24 -0
  84. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +4 -0
  85. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +166 -0
  86. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +4 -0
  87. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +271 -0
  88. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +4 -0
  89. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +49 -0
  90. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +4 -0
  91. package/artifacts/contracts/registry/Registry.sol/Registerable.json +166 -0
  92. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +4 -0
  93. package/artifacts/contracts/registry/Registry.sol/Registry.json +289 -0
  94. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +4 -0
  95. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +60 -0
  96. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
  97. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
  98. package/contracts/components/Component.sol +62 -0
  99. package/contracts/components/IPool.sol +9 -0
  100. package/contracts/components/IProduct.sol +11 -0
  101. package/contracts/components/Pool.sol +29 -0
  102. package/contracts/components/Product.sol +65 -0
  103. package/contracts/experiment/inheritance/A.sol +56 -0
  104. package/contracts/experiment/inheritance/B.sol +23 -0
  105. package/contracts/experiment/inheritance/C.sol +28 -0
  106. package/contracts/experiment/inheritance/IA.sol +18 -0
  107. package/contracts/experiment/inheritance/IB.sol +9 -0
  108. package/contracts/experiment/inheritance/IC.sol +11 -0
  109. package/contracts/experiment/types/TypeA.sol +42 -0
  110. package/contracts/experiment/types/TypeB.sol +24 -0
  111. package/contracts/instance/IInstance.sol +20 -0
  112. package/contracts/instance/Instance.sol +63 -0
  113. package/contracts/instance/access/Access.sol +218 -0
  114. package/contracts/instance/access/IAccess.sol +83 -0
  115. package/contracts/instance/component/ComponentModule.sol +259 -0
  116. package/contracts/instance/component/IComponent.sol +94 -0
  117. package/contracts/instance/policy/IPolicy.sol +66 -0
  118. package/contracts/instance/policy/PolicyModule.sol +106 -0
  119. package/contracts/instance/pool/IPoolModule.sol +40 -0
  120. package/contracts/instance/pool/PoolModule.sol +83 -0
  121. package/contracts/instance/product/IProductService.sol +45 -0
  122. package/contracts/instance/product/ProductService.sol +105 -0
  123. package/contracts/registry/IRegistry.sol +66 -0
  124. package/contracts/registry/Registry.sol +197 -0
  125. package/contracts/types/ChainId.sol +24 -0
  126. package/package.json +7 -6
  127. package/artifacts/contracts/Dip.sol/DIP.dbg.json +0 -4
  128. package/artifacts/contracts/Dip.sol/DIP.json +0 -338
  129. package/artifacts/contracts/Lock.sol/Lock.dbg.json +0 -4
  130. package/artifacts/contracts/Lock.sol/Lock.json +0 -74
  131. package/contracts/Dip.sol +0 -26
  132. package/contracts/Lock.sol +0 -34
@@ -0,0 +1,62 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry, IRegisterable, IRegistryLinked} from "../registry/IRegistry.sol";
5
+ import {Registerable} from "../registry/Registry.sol";
6
+ import {IInstance} from "../instance/IInstance.sol";
7
+
8
+ import {IInstanceLinked, IComponent, IComponentContract, IComponentModule, IComponentOwnerService} from "../instance/component/IComponent.sol";
9
+
10
+
11
+ contract InstanceLinked is
12
+ IInstanceLinked
13
+ {
14
+ IInstance internal _instance;
15
+
16
+ constructor(address instance) {
17
+ _instance = IInstance(instance);
18
+ }
19
+
20
+ // function setInstance(address instance) public override {
21
+ // require(address(_instance) == address(0), "ERROR:RGL-001:INSTANCE_ALREADY_SET");
22
+ // _instance = IInstance(instance);
23
+ // }
24
+
25
+ function getInstance() public view override returns(IInstance instance) {
26
+ return _instance;
27
+ }
28
+ }
29
+
30
+
31
+ abstract contract Component is
32
+ Registerable,
33
+ InstanceLinked,
34
+ IComponentContract
35
+ {
36
+
37
+ address private _deployer;
38
+
39
+ constructor(address registry, address instance)
40
+ Registerable(registry)
41
+ InstanceLinked(instance)
42
+ { }
43
+
44
+ // from registerable
45
+ function register()
46
+ public
47
+ override
48
+ returns(uint256 componentId)
49
+ {
50
+ require(msg.sender == getInitialOwner(), "");
51
+ require(address(_registry) != address(0), "ERROR:PRD-001:REGISTRY_ZERO");
52
+ require(_registry.isRegistered(address(_instance)), "ERROR:PRD-002:INSTANCE_NOT_REGISTERED");
53
+
54
+ IComponentOwnerService cos = _instance.getComponentOwnerService();
55
+ componentId = cos.register(this);
56
+ }
57
+
58
+ // from registerable
59
+ function getParentNftId() public view override returns(uint256) {
60
+ return getInstance().getNftId();
61
+ }
62
+ }
@@ -0,0 +1,9 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IComponentContract} from "../instance/component/IComponent.sol";
5
+
6
+ // just marker interface for now
7
+ interface IPoolComponent is
8
+ IComponentContract
9
+ { }
@@ -0,0 +1,11 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IComponentContract} from "../instance/component/IComponent.sol";
5
+
6
+ interface IProductComponent is
7
+ IComponentContract
8
+ {
9
+
10
+ function getPoolNftId() external view returns(uint256 poolNftId);
11
+ }
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IPoolComponent} from "./IPool.sol";
5
+ import {Component} from "./Component.sol";
6
+
7
+
8
+ contract Pool is
9
+ Component,
10
+ IPoolComponent
11
+ {
12
+
13
+ constructor(
14
+ address registry,
15
+ address instance
16
+ )
17
+ Component(registry, instance)
18
+ { }
19
+
20
+ // from registerable
21
+ function getType() public view override returns(uint256) {
22
+ return _registry.POOL();
23
+ }
24
+
25
+ // from registerable
26
+ function getData() external view override returns(bytes memory data) {
27
+ return bytes(abi.encode(getInstance().getNftId()));
28
+ }
29
+ }
@@ -0,0 +1,65 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IProductService} from "../instance/product/IProductService.sol";
5
+ import {Component} from "./Component.sol";
6
+ import {IProductComponent} from "./IProduct.sol";
7
+
8
+
9
+ contract Product is
10
+ Component,
11
+ IProductComponent
12
+ {
13
+ IProductService private _productService;
14
+ address private _pool;
15
+
16
+ constructor(
17
+ address registry,
18
+ address instance,
19
+ address pool
20
+ )
21
+ Component(registry, instance)
22
+ {
23
+ _productService = _instance.getProductService();
24
+ _pool = pool;
25
+ }
26
+
27
+ function _createApplication(
28
+ address applicationOwner,
29
+ uint256 sumInsuredAmount,
30
+ uint256 premiumAmount,
31
+ uint256 lifetime,
32
+ uint256 bundleNftId
33
+ )
34
+ internal
35
+ returns(uint256 nftId)
36
+ {
37
+ nftId = _productService.createApplication(
38
+ applicationOwner,
39
+ sumInsuredAmount,
40
+ premiumAmount,
41
+ lifetime,
42
+ bundleNftId
43
+ );
44
+ }
45
+
46
+ function _underwrite(uint256 nftId)
47
+ internal
48
+ {
49
+ _productService.underwrite(nftId);
50
+ }
51
+
52
+ function getPoolNftId() external view override returns(uint256 poolNftId) {
53
+ return _registry.getNftId(_pool);
54
+ }
55
+
56
+ // from registerable
57
+ function getType() public view override returns(uint256) {
58
+ return _registry.PRODUCT();
59
+ }
60
+
61
+ // from registerable
62
+ function getData() external view override returns(bytes memory data) {
63
+ return bytes(abi.encode(getInstance().getNftId()));
64
+ }
65
+ }
@@ -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,9 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ interface IB {
5
+
6
+ function getAfromB() external view returns(uint256);
7
+ function getB() external view returns(uint256);
8
+ function setB(uint256 newA) external;
9
+ }
@@ -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
+ IComponentModule,
16
+ IProductModule,
17
+ IPolicyModule,
18
+ IPoolModule
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
+ }