@etherisc/gif-next 0.0.2-ebbe63d → 0.0.2-f824182-503

Sign up to get free protection for your applications and to get access to all the features.
Files changed (197) hide show
  1. package/README.md +120 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +205 -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 +255 -0
  8. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +74 -0
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +328 -0
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
  13. package/artifacts/contracts/components/Product.sol/Product.json +346 -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/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  38. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  40. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  42. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  43. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  44. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +4 -0
  45. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +10 -0
  46. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +4 -0
  47. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +10 -0
  48. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
  49. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1479 -0
  50. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +4 -0
  51. package/artifacts/contracts/instance/Instance.sol/Instance.json +1725 -0
  52. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +4 -0
  53. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +400 -0
  54. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +4 -0
  55. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.json +10 -0
  56. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +4 -0
  57. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +35 -0
  58. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +4 -0
  59. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +50 -0
  60. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  61. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +336 -0
  62. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  63. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +299 -0
  64. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +202 -0
  66. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +4 -0
  67. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.json +10 -0
  68. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +4 -0
  69. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +205 -0
  70. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +217 -0
  72. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +4 -0
  73. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +141 -0
  74. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +4 -0
  75. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +24 -0
  76. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  77. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +134 -0
  78. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.json +182 -0
  80. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +4 -0
  81. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +221 -0
  82. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  83. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.json +10 -0
  84. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +254 -0
  86. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +254 -0
  88. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  89. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.json +10 -0
  90. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +129 -0
  92. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +155 -0
  94. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +75 -0
  96. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +127 -0
  98. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +75 -0
  100. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +196 -0
  102. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  103. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.json +10 -0
  104. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +490 -0
  106. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  107. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +45 -0
  108. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  109. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +490 -0
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +534 -0
  112. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +4 -0
  113. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +452 -0
  114. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +4 -0
  115. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +24 -0
  116. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +4 -0
  117. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +166 -0
  118. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +4 -0
  119. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +188 -0
  120. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +4 -0
  121. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +49 -0
  122. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +4 -0
  123. package/artifacts/contracts/registry/Registry.sol/Registerable.json +166 -0
  124. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +4 -0
  125. package/artifacts/contracts/registry/Registry.sol/Registry.json +256 -0
  126. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +4 -0
  127. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +60 -0
  128. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  129. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  130. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
  131. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
  132. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
  133. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +92 -0
  134. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  135. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  136. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  137. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  138. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  139. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +174 -0
  140. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +4 -0
  141. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +453 -0
  142. package/contracts/components/Component.sol +77 -0
  143. package/contracts/components/IPool.sol +15 -0
  144. package/contracts/components/IProduct.sol +16 -0
  145. package/contracts/components/Pool.sol +52 -0
  146. package/contracts/components/Product.sol +89 -0
  147. package/contracts/experiment/errors/Require.sol +38 -0
  148. package/contracts/experiment/errors/Revert.sol +44 -0
  149. package/contracts/experiment/inheritance/A.sol +53 -0
  150. package/contracts/experiment/inheritance/B.sol +28 -0
  151. package/contracts/experiment/inheritance/C.sol +34 -0
  152. package/contracts/experiment/inheritance/IA.sol +13 -0
  153. package/contracts/experiment/inheritance/IB.sol +10 -0
  154. package/contracts/experiment/inheritance/IC.sol +12 -0
  155. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  156. package/contracts/experiment/statemachine/ISM.sol +25 -0
  157. package/contracts/experiment/statemachine/README.md +112 -0
  158. package/contracts/experiment/statemachine/SM.sol +57 -0
  159. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  160. package/contracts/experiment/types/TypeA.sol +47 -0
  161. package/contracts/experiment/types/TypeB.sol +29 -0
  162. package/contracts/instance/IInstance.sol +25 -0
  163. package/contracts/instance/Instance.sol +72 -0
  164. package/contracts/instance/access/Access.sol +165 -0
  165. package/contracts/instance/access/IAccess.sol +63 -0
  166. package/contracts/instance/component/ComponentModule.sol +274 -0
  167. package/contracts/instance/component/IComponent.sol +74 -0
  168. package/contracts/instance/lifecycle/ILifecycle.sol +47 -0
  169. package/contracts/instance/lifecycle/LifecycleModule.sol +88 -0
  170. package/contracts/instance/policy/IPolicy.sol +50 -0
  171. package/contracts/instance/policy/PolicyModule.sol +114 -0
  172. package/contracts/instance/pool/IPoolModule.sol +23 -0
  173. package/contracts/instance/pool/PoolModule.sol +81 -0
  174. package/contracts/instance/product/IProductService.sol +36 -0
  175. package/contracts/instance/product/ProductService.sol +136 -0
  176. package/contracts/instance/treasury/ITreasury.sol +91 -0
  177. package/contracts/instance/treasury/TokenHandler.sol +24 -0
  178. package/contracts/instance/treasury/TreasuryModule.sol +168 -0
  179. package/contracts/registry/ChainNft.sol +135 -0
  180. package/contracts/registry/IChainNft.sol +21 -0
  181. package/contracts/registry/IRegistry.sol +67 -0
  182. package/contracts/registry/Registry.sol +182 -0
  183. package/contracts/types/Blocknumber.sol +118 -0
  184. package/contracts/types/ChainId.sol +38 -0
  185. package/contracts/types/Fee.sol +32 -0
  186. package/contracts/types/NftId.sol +51 -0
  187. package/contracts/types/ObjectType.sol +107 -0
  188. package/contracts/types/StateId.sol +91 -0
  189. package/contracts/types/Timestamp.sol +102 -0
  190. package/contracts/types/UFixed.sol +206 -0
  191. package/package.json +15 -8
  192. package/artifacts/contracts/Dip.sol/DIP.dbg.json +0 -4
  193. package/artifacts/contracts/Dip.sol/DIP.json +0 -338
  194. package/artifacts/contracts/Lock.sol/Lock.dbg.json +0 -4
  195. package/artifacts/contracts/Lock.sol/Lock.json +0 -74
  196. package/contracts/Dip.sol +0 -26
  197. package/contracts/Lock.sol +0 -34
@@ -0,0 +1,89 @@
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
+ import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
9
+ import {Fee} from "../types/Fee.sol";
10
+ import {Component} from "./Component.sol";
11
+
12
+ contract Product is Component, IProductComponent {
13
+ IProductService private _productService;
14
+ address private _pool;
15
+ Fee private _policyFee;
16
+ Fee private _processingFee;
17
+
18
+ constructor(
19
+ address registry,
20
+ address instance,
21
+ address token,
22
+ address pool,
23
+ Fee memory policyFee,
24
+ Fee memory processingFee
25
+ ) Component(registry, instance, token) {
26
+ // TODO add validation
27
+ _productService = _instance.getProductService();
28
+ _pool = pool;
29
+ _policyFee = policyFee;
30
+ _processingFee = processingFee;
31
+ }
32
+
33
+ function _createApplication(
34
+ address applicationOwner,
35
+ uint256 sumInsuredAmount,
36
+ uint256 premiumAmount,
37
+ uint256 lifetime,
38
+ NftId bundleNftId
39
+ ) internal returns (NftId nftId) {
40
+ nftId = _productService.createApplication(
41
+ applicationOwner,
42
+ sumInsuredAmount,
43
+ premiumAmount,
44
+ lifetime,
45
+ bundleNftId
46
+ );
47
+ }
48
+
49
+ function _underwrite(NftId nftId) internal {
50
+ _productService.underwrite(nftId);
51
+ }
52
+
53
+ function _collectPremium(NftId nftId) internal {
54
+ _productService.collectPremium(nftId);
55
+ }
56
+
57
+ function getPoolNftId() external view override returns (NftId poolNftId) {
58
+ return _registry.getNftId(_pool);
59
+ }
60
+
61
+ // from product component
62
+ function getPolicyFee()
63
+ external
64
+ view
65
+ override
66
+ returns (Fee memory policyFee)
67
+ {
68
+ return _policyFee;
69
+ }
70
+
71
+ function getProcessingFee()
72
+ external
73
+ view
74
+ override
75
+ returns (Fee memory processingFee)
76
+ {
77
+ return _processingFee;
78
+ }
79
+
80
+ // from registerable
81
+ function getType() public pure override returns (ObjectType) {
82
+ return PRODUCT();
83
+ }
84
+
85
+ // from registerable
86
+ function getData() external view override returns (bytes memory data) {
87
+ return bytes(abi.encode(getInstance().getNftId()));
88
+ }
89
+ }
@@ -0,0 +1,38 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ contract Require {
5
+ error AsmallerThanB_S();
6
+ error AsmallerThanB_M(uint a);
7
+ error AsmallerThanB_L(uint a, uint b);
8
+
9
+ uint256 private _b;
10
+
11
+ constructor() {
12
+ _b = 42;
13
+ }
14
+
15
+ function isAlargerThanBRequire_S(
16
+ uint a
17
+ ) external view returns (bool isLarger) {
18
+ require(a > _b, "ERROR:ABC-001");
19
+
20
+ return true;
21
+ }
22
+
23
+ function isAlargerThanBRequire_M(
24
+ uint a
25
+ ) external view returns (bool isLarger) {
26
+ require(a > _b, "ERROR:ABC-002:A_IS_SMALLER");
27
+
28
+ return true;
29
+ }
30
+
31
+ function isAlargerThanBRequire_L(
32
+ uint a
33
+ ) external view returns (bool isLarger) {
34
+ require(a > _b, "ERROR:ABC-003:A_IS_SMALLER_THAN_B");
35
+
36
+ return true;
37
+ }
38
+ }
@@ -0,0 +1,44 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ contract Revert {
5
+ error AsmallerThanB_S();
6
+ error AsmallerThanB_M(uint a);
7
+ error AsmallerThanB_L(uint a, uint b);
8
+
9
+ uint256 private _b;
10
+
11
+ constructor() {
12
+ _b = 42;
13
+ }
14
+
15
+ function isAlargerThanBRevert_S(
16
+ uint a
17
+ ) external view returns (bool isLarger) {
18
+ if (a <= _b) {
19
+ revert AsmallerThanB_S();
20
+ }
21
+
22
+ return true;
23
+ }
24
+
25
+ function isAlargerThanBRevert_M(
26
+ uint a
27
+ ) external view returns (bool isLarger) {
28
+ if (a <= _b) {
29
+ revert AsmallerThanB_M(a);
30
+ }
31
+
32
+ return true;
33
+ }
34
+
35
+ function isAlargerThanBRevert_L(
36
+ uint a
37
+ ) external view returns (bool isLarger) {
38
+ if (a <= _b) {
39
+ revert AsmallerThanB_L(a, _b);
40
+ }
41
+
42
+ return true;
43
+ }
44
+ }
@@ -0,0 +1,53 @@
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
+ uint256 private _x;
39
+
40
+ constructor() {
41
+ _x = 42;
42
+ }
43
+
44
+ function getA() external view override returns (uint256) {
45
+ return _x;
46
+ }
47
+
48
+ function setA(uint256 newA) external override {
49
+ _x = newA;
50
+ }
51
+ }
52
+
53
+ contract A is AShared, B, C, IA {}
@@ -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
+
7
+ abstract contract B is ISharedA, IB {
8
+ // names of private variables can be re-used in inheritance
9
+ uint256 private _x;
10
+
11
+ constructor() {
12
+ _x = 1;
13
+ }
14
+
15
+ // access own state
16
+ function getB() external view override returns (uint256) {
17
+ return _x;
18
+ }
19
+
20
+ function setB(uint256 newB) external override {
21
+ _x = newB;
22
+ }
23
+
24
+ // access state from parent contract A
25
+ function getAfromB() external view override returns (uint256) {
26
+ return this.getA();
27
+ }
28
+ }
@@ -0,0 +1,34 @@
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
+ uint256 private _x;
10
+
11
+ constructor() {
12
+ _x = 2;
13
+ }
14
+
15
+ // access own state
16
+ function getC() external view override returns (uint256) {
17
+ return _x;
18
+ }
19
+
20
+ function setC(uint256 newC) external override {
21
+ _x = newC;
22
+ }
23
+
24
+ // access state from parent contract A
25
+ function getAfromC() external view override returns (uint256) {
26
+ return this.getA();
27
+ }
28
+
29
+ // access state from other module B
30
+ function getBfromC() external view override returns (uint256) {
31
+ IB b = IB(address(this));
32
+ return b.getB();
33
+ }
34
+ }
@@ -0,0 +1,13 @@
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
+ function getA() external view returns (uint256);
9
+
10
+ function setA(uint256 newA) external;
11
+ }
12
+
13
+ interface IA is ISharedA, IB, IC {}
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ interface IB {
5
+ function getAfromB() external view returns (uint256);
6
+
7
+ function getB() external view returns (uint256);
8
+
9
+ function setB(uint256 newA) external;
10
+ }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ interface IC {
5
+ function getAfromC() external view returns (uint256);
6
+
7
+ function getBfromC() external view returns (uint256);
8
+
9
+ function getC() external view returns (uint256);
10
+
11
+ function setC(uint256 newA) external;
12
+ }
@@ -0,0 +1,27 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {ObjectType} from "../../types/ObjectType.sol";
5
+ import {StateId, toStateId, zeroStateId} from "../../types/StateId.sol";
6
+
7
+ contract LifeCycleModule {
8
+ mapping(ObjectType objectType => StateId initialState)
9
+ private _initialState;
10
+
11
+ mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
12
+ private _isValidTransition;
13
+
14
+ function getInitialState(
15
+ ObjectType objectType
16
+ ) external view returns (StateId) {
17
+ return _initialState[objectType];
18
+ }
19
+
20
+ function isValidTransition(
21
+ ObjectType objectType,
22
+ StateId fromId,
23
+ StateId toId
24
+ ) external view returns (bool) {
25
+ return _isValidTransition[objectType][fromId][toId];
26
+ }
27
+ }
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {StateId} from "../../types/StateId.sol";
5
+
6
+ interface ISMEE {
7
+ error ErrorInitialStateUndefined();
8
+ error ErrorStartStateUndefined();
9
+ error ErrorNextStateUndefined();
10
+ error ErrorStateChangeInvalid(StateId currentStateId, StateId newStateId);
11
+
12
+ event LogInitialStateSet(StateId initialStateId);
13
+ event LogStateChanged(StateId oldStateId, StateId newStateId);
14
+ }
15
+
16
+ interface ISM is ISMEE {
17
+ function changeToState(StateId newStateId) external;
18
+
19
+ function isValidTransition(
20
+ StateId currentStateId,
21
+ StateId newStateId
22
+ ) external view returns (bool isValid);
23
+
24
+ function getState() external view returns (StateId currentStateId);
25
+ }
@@ -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,25 @@
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 {ILifecycleModule} from "./lifecycle/ILifecycle.sol";
7
+ import {IComponentModule} from "./component/IComponent.sol";
8
+ import {IProductModule} from "./product/IProductService.sol";
9
+ import {IPolicyModule} from "./policy/IPolicy.sol";
10
+ import {IPoolModule} from "./pool/IPoolModule.sol";
11
+ import {ITreasuryModule} from "./treasury/ITreasury.sol";
12
+
13
+ // solhint-disable-next-line no-empty-blocks
14
+ interface IInstance is
15
+ IRegisterable,
16
+ IAccessModule,
17
+ ILifecycleModule,
18
+ IPolicyModule,
19
+ IPoolModule,
20
+ IComponentModule,
21
+ IProductModule,
22
+ ITreasuryModule
23
+ {
24
+
25
+ }