@etherisc/gif-next 0.0.2-9141c0d → 0.0.2-a380f15

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.
Files changed (147) 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 +213 -0
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
  13. package/artifacts/contracts/components/Product.sol/Product.json +231 -0
  14. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +4 -0
  15. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +105 -0
  16. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +4 -0
  17. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +105 -0
  18. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +128 -0
  20. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +42 -0
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +76 -0
  24. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +4 -0
  25. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +89 -0
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +4 -0
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +128 -0
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +4 -0
  29. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +37 -0
  30. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +4 -0
  31. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +50 -0
  32. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +63 -0
  34. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +10 -0
  36. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +4 -0
  37. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +10 -0
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +892 -0
  40. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +4 -0
  41. package/artifacts/contracts/instance/Instance.sol/Instance.json +1067 -0
  42. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +4 -0
  43. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +400 -0
  44. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +4 -0
  45. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.json +10 -0
  46. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +4 -0
  47. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +35 -0
  48. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +4 -0
  49. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +50 -0
  50. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  51. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +336 -0
  52. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  53. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +327 -0
  54. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +4 -0
  55. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +147 -0
  56. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +4 -0
  57. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.json +10 -0
  58. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +4 -0
  59. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +179 -0
  60. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  61. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +245 -0
  62. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +94 -0
  64. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +4 -0
  65. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +24 -0
  66. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  67. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.json +10 -0
  68. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  69. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +231 -0
  70. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +231 -0
  72. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  73. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.json +10 -0
  74. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  75. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +149 -0
  76. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +162 -0
  78. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +75 -0
  80. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +114 -0
  82. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +75 -0
  84. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +167 -0
  86. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
  87. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +534 -0
  88. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +4 -0
  89. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +452 -0
  90. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +4 -0
  91. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +24 -0
  92. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +4 -0
  93. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +166 -0
  94. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +4 -0
  95. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +279 -0
  96. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +4 -0
  97. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +49 -0
  98. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +4 -0
  99. package/artifacts/contracts/registry/Registry.sol/Registerable.json +166 -0
  100. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +4 -0
  101. package/artifacts/contracts/registry/Registry.sol/Registry.json +347 -0
  102. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +4 -0
  103. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +60 -0
  104. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
  105. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
  106. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
  107. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +92 -0
  108. package/contracts/components/Component.sol +62 -0
  109. package/contracts/components/IPool.sol +9 -0
  110. package/contracts/components/IProduct.sol +12 -0
  111. package/contracts/components/Pool.sol +29 -0
  112. package/contracts/components/Product.sol +66 -0
  113. package/contracts/experiment/errors/Require.sol +33 -0
  114. package/contracts/experiment/errors/Revert.sol +39 -0
  115. package/contracts/experiment/inheritance/A.sol +56 -0
  116. package/contracts/experiment/inheritance/B.sol +23 -0
  117. package/contracts/experiment/inheritance/C.sol +28 -0
  118. package/contracts/experiment/inheritance/IA.sol +18 -0
  119. package/contracts/experiment/inheritance/IB.sol +9 -0
  120. package/contracts/experiment/inheritance/IC.sol +11 -0
  121. package/contracts/experiment/types/TypeA.sol +42 -0
  122. package/contracts/experiment/types/TypeB.sol +24 -0
  123. package/contracts/instance/IInstance.sol +20 -0
  124. package/contracts/instance/Instance.sol +64 -0
  125. package/contracts/instance/access/Access.sol +218 -0
  126. package/contracts/instance/access/IAccess.sol +83 -0
  127. package/contracts/instance/component/ComponentModule.sol +248 -0
  128. package/contracts/instance/component/IComponent.sol +95 -0
  129. package/contracts/instance/policy/IPolicy.sol +66 -0
  130. package/contracts/instance/policy/PolicyModule.sol +107 -0
  131. package/contracts/instance/pool/IPoolModule.sol +41 -0
  132. package/contracts/instance/pool/PoolModule.sol +86 -0
  133. package/contracts/instance/product/IProductService.sol +46 -0
  134. package/contracts/instance/product/ProductService.sol +108 -0
  135. package/contracts/registry/ChainNft.sol +173 -0
  136. package/contracts/registry/IChainNft.sol +18 -0
  137. package/contracts/registry/IRegistry.sol +70 -0
  138. package/contracts/registry/Registry.sol +182 -0
  139. package/contracts/types/ChainId.sol +30 -0
  140. package/contracts/types/NftId.sol +35 -0
  141. package/package.json +7 -6
  142. package/artifacts/contracts/Dip.sol/DIP.dbg.json +0 -4
  143. package/artifacts/contracts/Dip.sol/DIP.json +0 -338
  144. package/artifacts/contracts/Lock.sol/Lock.dbg.json +0 -4
  145. package/artifacts/contracts/Lock.sol/Lock.json +0 -74
  146. package/contracts/Dip.sol +0 -26
  147. package/contracts/Lock.sol +0 -34
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IComponentContract} from "../instance/component/IComponent.sol";
5
+ import {NftId} from "../types/NftId.sol";
6
+
7
+ interface IProductComponent is
8
+ IComponentContract
9
+ {
10
+
11
+ function getPoolNftId() external view returns(NftId poolNftId);
12
+ }
@@ -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,66 @@
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
+ import {NftId} from "../types/NftId.sol";
8
+
9
+
10
+ contract Product is
11
+ Component,
12
+ IProductComponent
13
+ {
14
+ IProductService private _productService;
15
+ address private _pool;
16
+
17
+ constructor(
18
+ address registry,
19
+ address instance,
20
+ address pool
21
+ )
22
+ Component(registry, instance)
23
+ {
24
+ _productService = _instance.getProductService();
25
+ _pool = pool;
26
+ }
27
+
28
+ function _createApplication(
29
+ address applicationOwner,
30
+ uint256 sumInsuredAmount,
31
+ uint256 premiumAmount,
32
+ uint256 lifetime,
33
+ NftId bundleNftId
34
+ )
35
+ internal
36
+ returns(NftId nftId)
37
+ {
38
+ nftId = _productService.createApplication(
39
+ applicationOwner,
40
+ sumInsuredAmount,
41
+ premiumAmount,
42
+ lifetime,
43
+ bundleNftId
44
+ );
45
+ }
46
+
47
+ function _underwrite(NftId nftId)
48
+ internal
49
+ {
50
+ _productService.underwrite(nftId);
51
+ }
52
+
53
+ function getPoolNftId() external view override returns(NftId poolNftId) {
54
+ return _registry.getNftId(_pool);
55
+ }
56
+
57
+ // from registerable
58
+ function getType() public view override returns(uint256) {
59
+ return _registry.PRODUCT();
60
+ }
61
+
62
+ // from registerable
63
+ function getData() external view override returns(bytes memory data) {
64
+ return bytes(abi.encode(getInstance().getNftId()));
65
+ }
66
+ }
@@ -0,0 +1,33 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ contract Require {
5
+
6
+ error AsmallerThanB_S();
7
+ error AsmallerThanB_M(uint a);
8
+ error AsmallerThanB_L(uint a, uint b);
9
+
10
+ uint256 private _b;
11
+
12
+ constructor() {
13
+ _b = 42;
14
+ }
15
+
16
+ function isAlargerThanBRequire_S(uint a) external view returns(bool isLarger) {
17
+ require(a > _b, "ERROR:ABC-001");
18
+
19
+ return true;
20
+ }
21
+
22
+ function isAlargerThanBRequire_M(uint a) external view returns(bool isLarger) {
23
+ require(a > _b, "ERROR:ABC-002:A_IS_SMALLER");
24
+
25
+ return true;
26
+ }
27
+
28
+ function isAlargerThanBRequire_L(uint a) external view returns(bool isLarger) {
29
+ require(a > _b, "ERROR:ABC-003:A_IS_SMALLER_THAN_B");
30
+
31
+ return true;
32
+ }
33
+ }
@@ -0,0 +1,39 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ contract Revert {
5
+
6
+ error AsmallerThanB_S();
7
+ error AsmallerThanB_M(uint a);
8
+ error AsmallerThanB_L(uint a, uint b);
9
+
10
+ uint256 private _b;
11
+
12
+ constructor() {
13
+ _b = 42;
14
+ }
15
+
16
+ function isAlargerThanBRevert_S(uint a) external view returns(bool isLarger) {
17
+ if(a <= _b) {
18
+ revert AsmallerThanB_S();
19
+ }
20
+
21
+ return true;
22
+ }
23
+
24
+ function isAlargerThanBRevert_M(uint a) external view returns(bool isLarger) {
25
+ if(a <= _b) {
26
+ revert AsmallerThanB_M(a);
27
+ }
28
+
29
+ return true;
30
+ }
31
+
32
+ function isAlargerThanBRevert_L(uint a) external view returns(bool isLarger) {
33
+ if(a <= _b) {
34
+ revert AsmallerThanB_L(a, _b);
35
+ }
36
+
37
+ return true;
38
+ }
39
+ }
@@ -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
+ IPolicyModule,
16
+ IPoolModule,
17
+ IComponentModule,
18
+ IProductModule
19
+ { }
20
+
@@ -0,0 +1,64 @@
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
+ import {NftId, toNftId} from "../types/NftId.sol";
15
+
16
+ contract Instance is
17
+ Registerable,
18
+ AccessModule,
19
+ ComponentModule,
20
+ PolicyModule,
21
+ PoolModule,
22
+ ProductModule,
23
+ IInstance
24
+ {
25
+
26
+ constructor(
27
+ address registry,
28
+ address componentOwnerService,
29
+ address productService
30
+ )
31
+ Registerable(registry)
32
+ AccessModule()
33
+ ComponentModule(componentOwnerService)
34
+ PolicyModule(productService)
35
+ ProductModule(productService)
36
+ PoolModule(productService)
37
+ { }
38
+
39
+ // from registerable
40
+ function register() external override returns(NftId nftId) {
41
+ require(address(_registry) != address(0), "ERROR:PRD-001:REGISTRY_ZERO");
42
+ return _registry.register(address(this));
43
+ }
44
+
45
+ // from registerable
46
+ function getParentNftId() public view override returns(NftId) {
47
+ // TODO add self registry and exchange 0 for_registry.getNftId();
48
+ // define parent tree for all registerables
49
+ // eg 0 <- chain(mainnet) <- global registry <- chain registry <- instance <- component <- policy/bundle
50
+ return toNftId(0);
51
+ }
52
+
53
+ // from registerable
54
+ function getType() external view override returns(uint256 objectType) {
55
+ return _registry.INSTANCE();
56
+ }
57
+
58
+ // from registerable
59
+ function getData() external view override returns(bytes memory data) {
60
+ return bytes(abi.encode(0));
61
+ }
62
+
63
+
64
+ }