@etherisc/gif-next 0.0.2-cc253b3 → 0.0.2-cc4a5cb-898

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 (370) hide show
  1. package/README.md +178 -6
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +48 -53
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +405 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +48 -53
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +340 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +487 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +370 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +405 -40
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +258 -45
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  20. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  22. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  26. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  44. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  45. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  46. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1362 -247
  48. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  49. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  50. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/Instance.sol/Instance.json +1682 -356
  52. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{component/IComponent.sol/IComponentModule.json → base/ComponentServiceBase.sol/ComponentServiceBase.json} +156 -101
  54. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  56. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  58. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  60. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{component/IComponent.sol/IComponentContract.json → base/IService.sol/IService.json} +148 -27
  62. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +376 -0
  64. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  66. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  67. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  68. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  69. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  70. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  71. package/artifacts/contracts/{components/IProduct.sol/IProductComponent.json → instance/base/ServiceBase.sol/ServiceBase.json} +145 -37
  72. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  74. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  75. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  76. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  78. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +297 -0
  80. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  82. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +297 -0
  84. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +117 -0
  86. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  88. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +56 -53
  90. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  92. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.json +10 -0
  94. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
  96. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  97. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  98. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +159 -106
  100. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  101. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +159 -106
  102. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  104. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +57 -62
  106. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  107. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +144 -0
  108. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  110. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  111. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +113 -0
  112. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  113. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +131 -0
  114. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  115. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
  116. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  117. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +511 -0
  118. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  119. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  120. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  121. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +511 -0
  122. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +531 -0
  124. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +420 -0
  126. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
  128. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → service/IDistributionService.sol/IDistributionService.json} +137 -139
  130. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +440 -0
  132. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +630 -0
  134. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +543 -0
  136. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  137. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +858 -0
  138. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  139. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  140. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  141. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  142. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +103 -77
  143. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  145. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  146. package/artifacts/contracts/registry/Registry.sol/Registry.json +194 -69
  147. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  148. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  149. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  150. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  151. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  152. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +18 -63
  153. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  154. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
  155. package/artifacts/contracts/shared/Proxy.sol/Proxy.dbg.json +4 -0
  156. package/artifacts/contracts/shared/Proxy.sol/Proxy.json +178 -0
  157. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +4 -0
  158. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.json +129 -0
  159. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  160. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +18 -63
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  162. package/artifacts/contracts/{instance/pool/PoolModule.sol/PoolModule.json → shared/Versionable.sol/Versionable.json} +74 -72
  163. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  164. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +405 -0
  165. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  166. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  167. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  168. package/artifacts/contracts/test/TestPool.sol/TestPool.json +578 -0
  169. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  170. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +575 -0
  171. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  172. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  173. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  174. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  175. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  176. package/artifacts/contracts/test/TestService.sol/TestService.json +379 -0
  177. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  178. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  179. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  180. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  181. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  182. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +206 -0
  183. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  184. package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -0
  185. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  186. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  187. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  188. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  189. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  191. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  192. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  193. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  194. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  195. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +91 -6
  197. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  198. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  199. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  200. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  201. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  202. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  203. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  204. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  205. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  206. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  207. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  209. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +236 -0
  211. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +4 -0
  212. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +479 -0
  213. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  214. package/artifacts/contracts/types/Version.sol/VersionLib.json +139 -0
  215. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  217. package/contracts/components/BaseComponent.sol +94 -0
  218. package/contracts/components/Distribution.sol +132 -0
  219. package/contracts/components/IBaseComponent.sol +19 -0
  220. package/contracts/components/IDistributionComponent.sol +47 -0
  221. package/contracts/components/IPoolComponent.sol +71 -0
  222. package/contracts/components/IProductComponent.sol +38 -0
  223. package/contracts/components/Pool.sol +222 -16
  224. package/contracts/components/Product.sol +193 -32
  225. package/contracts/experiment/errors/Require.sol +10 -5
  226. package/contracts/experiment/errors/Revert.sol +13 -8
  227. package/contracts/experiment/inheritance/A.sol +8 -11
  228. package/contracts/experiment/inheritance/B.sol +10 -5
  229. package/contracts/experiment/inheritance/C.sol +11 -5
  230. package/contracts/experiment/inheritance/IA.sol +2 -7
  231. package/contracts/experiment/inheritance/IB.sol +3 -2
  232. package/contracts/experiment/inheritance/IC.sol +4 -3
  233. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  234. package/contracts/experiment/statemachine/ISM.sol +25 -0
  235. package/contracts/experiment/statemachine/README.md +112 -0
  236. package/contracts/experiment/statemachine/SM.sol +57 -0
  237. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  238. package/contracts/experiment/types/TypeA.sol +14 -9
  239. package/contracts/experiment/types/TypeB.sol +14 -9
  240. package/contracts/instance/IInstance.sol +41 -8
  241. package/contracts/instance/IInstanceLinked.sol +8 -0
  242. package/contracts/instance/Instance.sol +54 -44
  243. package/contracts/instance/base/ComponentServiceBase.sol +42 -0
  244. package/contracts/instance/base/IInstanceBase.sol +22 -0
  245. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  246. package/contracts/instance/base/ILifecycle.sol +30 -0
  247. package/contracts/instance/base/IService.sol +15 -0
  248. package/contracts/instance/base/InstanceBase.sol +91 -0
  249. package/contracts/instance/base/KeyValueStore.sol +161 -0
  250. package/contracts/instance/base/Lifecycle.sol +100 -0
  251. package/contracts/instance/base/ModuleBase.sol +57 -0
  252. package/contracts/instance/base/ServiceBase.sol +37 -0
  253. package/contracts/instance/module/access/Access.sol +149 -0
  254. package/contracts/instance/module/access/IAccess.sol +53 -0
  255. package/contracts/instance/module/bundle/BundleModule.sol +134 -0
  256. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  257. package/contracts/instance/module/component/ComponentModule.sol +70 -0
  258. package/contracts/instance/module/component/IComponent.sol +28 -0
  259. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  260. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  261. package/contracts/instance/module/policy/IPolicy.sol +63 -0
  262. package/contracts/instance/module/policy/PolicyModule.sol +91 -0
  263. package/contracts/instance/module/pool/IPoolModule.sol +40 -0
  264. package/contracts/instance/module/pool/PoolModule.sol +90 -0
  265. package/contracts/instance/module/risk/IRisk.sol +26 -0
  266. package/contracts/instance/module/risk/RiskModule.sol +62 -0
  267. package/contracts/instance/module/treasury/ITreasury.sol +82 -0
  268. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  269. package/contracts/instance/module/treasury/TreasuryModule.sol +138 -0
  270. package/contracts/instance/service/ComponentOwnerService.sol +157 -0
  271. package/contracts/instance/service/DistributionService.sol +59 -0
  272. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  273. package/contracts/instance/service/IDistributionService.sol +12 -0
  274. package/contracts/instance/service/IPoolService.sol +37 -0
  275. package/contracts/instance/service/IProductService.sol +107 -0
  276. package/contracts/instance/service/PoolService.sol +149 -0
  277. package/contracts/instance/service/ProductService.sol +509 -0
  278. package/contracts/registry/ChainNft.sol +80 -94
  279. package/contracts/registry/IChainNft.sol +10 -7
  280. package/contracts/registry/IRegistry.sol +38 -51
  281. package/contracts/registry/IRegistryLinked.sol +8 -0
  282. package/contracts/registry/Registry.sol +310 -111
  283. package/contracts/shared/ERC165.sol +21 -0
  284. package/contracts/shared/IOwnable.sol +6 -0
  285. package/contracts/shared/IRegisterable.sol +24 -0
  286. package/contracts/shared/IVersionable.sol +52 -0
  287. package/contracts/shared/Proxy.sol +83 -0
  288. package/contracts/shared/Registerable.sol +86 -0
  289. package/contracts/shared/Versionable.sol +89 -0
  290. package/contracts/test/TestDistribution.sol +21 -0
  291. package/contracts/test/TestFee.sol +25 -0
  292. package/contracts/test/TestPool.sol +25 -0
  293. package/contracts/test/TestProduct.sol +72 -0
  294. package/contracts/test/TestRegisterable.sol +19 -0
  295. package/contracts/test/TestRoleId.sol +14 -0
  296. package/contracts/test/TestService.sol +32 -0
  297. package/contracts/test/TestToken.sol +26 -0
  298. package/contracts/test/TestVersion.sol +44 -0
  299. package/contracts/test/TestVersionable.sol +17 -0
  300. package/contracts/test/Usdc.sol +26 -0
  301. package/contracts/types/AddressSet.sol +58 -0
  302. package/contracts/types/Blocknumber.sol +118 -0
  303. package/contracts/types/ChainId.sol +24 -10
  304. package/contracts/types/Fee.sol +56 -0
  305. package/contracts/types/Key32.sol +45 -0
  306. package/contracts/types/NftId.sol +55 -9
  307. package/contracts/types/NftIdSet.sol +60 -0
  308. package/contracts/types/ObjectType.sol +131 -0
  309. package/contracts/types/ReferralId.sol +48 -0
  310. package/contracts/types/RiskId.sol +43 -0
  311. package/contracts/types/RoleId.sol +38 -0
  312. package/contracts/types/StateId.sol +101 -0
  313. package/contracts/types/Timestamp.sol +123 -0
  314. package/contracts/types/UFixed.sol +209 -0
  315. package/contracts/types/Version.sol +95 -0
  316. package/package.json +19 -5
  317. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  318. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  319. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  320. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  321. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  322. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  323. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  324. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  325. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  326. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  327. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  328. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  330. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  331. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  332. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  333. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  334. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  336. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  337. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  338. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  339. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  342. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  344. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  345. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  346. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  347. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  348. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  349. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  350. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  351. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  352. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  353. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  354. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  355. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  356. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  357. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  358. package/contracts/components/Component.sol +0 -62
  359. package/contracts/components/IPool.sol +0 -9
  360. package/contracts/components/IProduct.sol +0 -12
  361. package/contracts/instance/access/Access.sol +0 -218
  362. package/contracts/instance/access/IAccess.sol +0 -83
  363. package/contracts/instance/component/ComponentModule.sol +0 -248
  364. package/contracts/instance/component/IComponent.sol +0 -95
  365. package/contracts/instance/policy/IPolicy.sol +0 -66
  366. package/contracts/instance/policy/PolicyModule.sol +0 -107
  367. package/contracts/instance/pool/IPoolModule.sol +0 -41
  368. package/contracts/instance/pool/PoolModule.sol +0 -86
  369. package/contracts/instance/product/IProductService.sol +0 -46
  370. package/contracts/instance/product/ProductService.sol +0 -108
@@ -0,0 +1,86 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId, zeroNftId} from "../types/NftId.sol";
5
+ import {ObjectType} from "../types/ObjectType.sol";
6
+
7
+ import {IRegistry} from "../registry/IRegistry.sol";
8
+ import {IRegisterable} from "./IRegisterable.sol";
9
+
10
+ import {ERC165} from "./ERC165.sol";
11
+
12
+ abstract contract Registerable is
13
+ ERC165,
14
+ IRegisterable
15
+ {
16
+ IRegistry internal immutable _registry;
17
+ NftId internal immutable _parentNftId;
18
+ address internal immutable _initialOwner;
19
+
20
+ modifier onlyOwner() virtual {
21
+ require(
22
+ msg.sender == getOwner(),
23
+ "ERROR:RGB-001:NOT_OWNER"
24
+ );
25
+ _;
26
+ }
27
+
28
+ constructor(
29
+ address registryAddress,
30
+ NftId parentNftId
31
+ )
32
+ ERC165()
33
+ {
34
+ require(
35
+ address(registryAddress) != address(0),
36
+ "ERROR:RGB-010:REGISTRY_ZERO"
37
+ );
38
+
39
+ _registry = IRegistry(registryAddress);
40
+ require(
41
+ _registry.supportsInterface(type(IRegistry).interfaceId),
42
+ "ERROR:RGB-011:NOT_REGISTRY"
43
+ );
44
+
45
+ _parentNftId = parentNftId;
46
+ require(
47
+ _registry.isRegistered(_parentNftId),
48
+ "ERROR:RGB-012:PARENT_NOT_REGISTERED"
49
+ );
50
+
51
+ _initialOwner = msg.sender;
52
+
53
+ // register support for IRegisterable
54
+ _registerInterface(type(IRegisterable).interfaceId);
55
+ }
56
+
57
+ // from IRegistryLinked
58
+ function register() public onlyOwner virtual override returns (NftId nftId) {
59
+ return _registry.register(address(this));
60
+ }
61
+
62
+ function getRegistry() public view virtual override returns (IRegistry registry) {
63
+ return _registry;
64
+ }
65
+
66
+ function getOwner() public view virtual override returns (address owner) {
67
+ NftId nftId = _registry.getNftId(address(this));
68
+ if(nftId == zeroNftId()) {
69
+ return _initialOwner;
70
+ }
71
+
72
+ return _registry.getOwner(nftId);
73
+ }
74
+
75
+ function getNftId() public view override returns (NftId nftId) {
76
+ return _registry.getNftId(address(this));
77
+ }
78
+
79
+ function getParentNftId() public view override returns (NftId nftId) {
80
+ return _parentNftId;
81
+ }
82
+
83
+ function getData() public view virtual override returns (bytes memory data) {
84
+ return "";
85
+ }
86
+ }
@@ -0,0 +1,89 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Blocknumber, blockNumber} from "../types/Blocknumber.sol";
5
+ import {Timestamp, blockTimestamp} from "../types/Timestamp.sol";
6
+ import {Version, VersionPart} from "../types/Version.sol";
7
+
8
+ import {IVersionable} from "./IVersionable.sol";
9
+
10
+ abstract contract Versionable is IVersionable {
11
+
12
+ mapping(Version version => VersionInfo info) private _versionHistory;
13
+ Version [] private _versions;
14
+
15
+
16
+ // controlled activation for controller contract
17
+ constructor() {
18
+ _activate(address(0), msg.sender);
19
+ }
20
+
21
+ // IMPORTANT this function needs to be implemented by each new version
22
+ // and needs to call internal function call _activate()
23
+ function activate(address implementation, address activatedBy)
24
+ external
25
+ virtual override
26
+ {
27
+ _activate(implementation, activatedBy);
28
+ }
29
+
30
+
31
+ // can only be called once per contract
32
+ // needs bo be called inside the proxy upgrade tx
33
+ function _activate(
34
+ address implementation,
35
+ address activatedBy
36
+ )
37
+ internal
38
+ {
39
+ Version thisVersion = getVersion();
40
+ require(
41
+ !isActivated(thisVersion),
42
+ "ERROR:VRN-001:VERSION_ALREADY_ACTIVATED"
43
+ );
44
+
45
+ // require increasing version number
46
+ if(_versions.length > 0) {
47
+ Version lastVersion = _versions[_versions.length - 1];
48
+ require(
49
+ thisVersion > lastVersion,
50
+ "ERROR:VRN-002:VERSION_NOT_INCREASING"
51
+ );
52
+ }
53
+
54
+ // update version history
55
+ _versions.push(thisVersion);
56
+ _versionHistory[thisVersion] = VersionInfo(
57
+ thisVersion,
58
+ implementation,
59
+ activatedBy,
60
+ blockTimestamp(),
61
+ blockNumber()
62
+ );
63
+
64
+ emit LogVersionableActivated(thisVersion, implementation, activatedBy);
65
+ }
66
+
67
+
68
+ function isActivated(Version _version) public override view returns(bool) {
69
+ return _versionHistory[_version].activatedIn.toInt() > 0;
70
+ }
71
+
72
+
73
+ function getVersion() public pure virtual returns(Version);
74
+
75
+
76
+ function getVersionCount() external view override returns(uint256) {
77
+ return _versions.length;
78
+ }
79
+
80
+
81
+ function getVersion(uint256 idx) external view override returns(Version) {
82
+ return _versions[idx];
83
+ }
84
+
85
+
86
+ function getVersionInfo(Version _version) external override view returns(VersionInfo memory) {
87
+ return _versionHistory[_version];
88
+ }
89
+ }
@@ -0,0 +1,21 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Fee} from "../../contracts/types/Fee.sol";
5
+ import {NftId} from "../../contracts/types/NftId.sol";
6
+ import {Distribution} from "../../contracts/components/Distribution.sol";
7
+
8
+
9
+ contract TestDistribution is Distribution {
10
+
11
+ constructor(
12
+ address registry,
13
+ NftId instanceNftid,
14
+ address token,
15
+ bool isVerifying,
16
+ Fee memory distributionFee
17
+ )
18
+ Distribution(registry, instanceNftid, token, isVerifying, distributionFee)
19
+ // solhint-disable-next-line no-empty-blocks
20
+ {}
21
+ }
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {UFixed, UFixedMathLib} from "../types/UFixed.sol";
5
+ import {Fee, FeeLib} from "../types/Fee.sol";
6
+
7
+ contract TestFee {
8
+
9
+ function createFee(
10
+ uint256 fractionalValue,
11
+ int8 exponent,
12
+ uint256 fixedValue
13
+ )
14
+ external
15
+ pure
16
+ returns(Fee memory fee)
17
+ {
18
+ return FeeLib.toFee(UFixedMathLib.toUFixed(fractionalValue, exponent), fixedValue);
19
+ }
20
+
21
+ function getZeroFee() external pure returns(Fee memory fee) {
22
+ return FeeLib.zeroFee();
23
+ }
24
+
25
+ }
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../contracts/types/NftId.sol";
5
+ import {UFixed} from "../../contracts/types/UFixed.sol";
6
+ import {Fee} from "../../contracts/types/Fee.sol";
7
+ import {Pool} from "../../contracts/components/Pool.sol";
8
+
9
+
10
+ contract TestPool is Pool {
11
+
12
+ constructor(
13
+ address registry,
14
+ NftId instanceNftid,
15
+ address token,
16
+ bool isVerifying,
17
+ UFixed collateralizationLevel,
18
+ Fee memory poolFee,
19
+ Fee memory stakingFee,
20
+ Fee memory performanceFee
21
+ )
22
+ Pool(registry, instanceNftid, token, isVerifying, collateralizationLevel, poolFee, stakingFee, performanceFee)
23
+ // solhint-disable-next-line no-empty-blocks
24
+ {}
25
+ }
@@ -0,0 +1,72 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Product} from "../../contracts/components/Product.sol";
5
+ import {NftId, toNftId} from "../../contracts/types/NftId.sol";
6
+ import {ReferralId} from "../types/ReferralId.sol";
7
+ import {RiskId} from "../../contracts/types/RiskId.sol";
8
+ import {Timestamp, blockTimestamp} from "../../contracts/types/Timestamp.sol";
9
+ import {Fee} from "../../contracts/types/Fee.sol";
10
+
11
+ contract TestProduct is Product {
12
+
13
+ event LogTestProductSender(address sender);
14
+
15
+ string public constant DEFAULT_RISK_NAME = "DEFAULT_RISK";
16
+ bool private defaultRiskCreated;
17
+
18
+ constructor(
19
+ address registry,
20
+ NftId instanceNftid,
21
+ address token,
22
+ address pool,
23
+ address distribution,
24
+ Fee memory productFee,
25
+ Fee memory processingFee
26
+ )
27
+ Product(registry, instanceNftid, token, pool, distribution, productFee, processingFee)
28
+ // solhint-disable-next-line no-empty-blocks
29
+ {
30
+ }
31
+
32
+ function getDefaultRiskId() public pure returns (RiskId) {
33
+ return _toRiskId(DEFAULT_RISK_NAME);
34
+ }
35
+
36
+ function applyForPolicy(
37
+ uint256 sumInsuredAmount,
38
+ uint256 lifetime,
39
+ NftId bundleNftId,
40
+ ReferralId referralId
41
+ )
42
+ external
43
+ returns(NftId nftId)
44
+ {
45
+ RiskId riskId = getDefaultRiskId();
46
+ bytes memory applicationData = "";
47
+
48
+ if (!defaultRiskCreated) {
49
+ _createRisk(riskId, "");
50
+ defaultRiskCreated = true;
51
+ }
52
+
53
+ nftId = _createApplication(
54
+ msg.sender, // policy holder
55
+ riskId,
56
+ sumInsuredAmount,
57
+ lifetime,
58
+ applicationData,
59
+ bundleNftId,
60
+ referralId
61
+ );
62
+ }
63
+
64
+ function underwrite(NftId nftId, bool requirePremiumPayment, Timestamp activateAt) external {
65
+ emit LogTestProductSender(msg.sender);
66
+ _underwrite(nftId, requirePremiumPayment, activateAt);
67
+ }
68
+
69
+ function collectPremium(NftId nftId, Timestamp activateAt) external {
70
+ _collectPremium(nftId, activateAt);
71
+ }
72
+ }
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../contracts/types/NftId.sol";
5
+ import {ObjectType, TOKEN} from "../../contracts/types/ObjectType.sol";
6
+ import {IRegistry} from "../../contracts/registry/IRegistry.sol";
7
+ import {Registerable} from "../../contracts/shared/Registerable.sol";
8
+
9
+ contract TestRegisterable is Registerable {
10
+
11
+ constructor(address registry, NftId registryNftId)
12
+ Registerable(registry, registryNftId)
13
+ // solhint-disable-next-line no-empty-blocks
14
+ {}
15
+
16
+ function getType() external pure override returns (ObjectType) {
17
+ return TOKEN();
18
+ }
19
+ }
@@ -0,0 +1,14 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {RoleId, RoleIdLib, PRODUCT_OWNER_ROLE_NAME, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE_NAME, POOL_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
5
+
6
+ contract TestRoleId {
7
+ function getRole(string memory roleName) external pure returns (RoleId) { return RoleIdLib.toRoleId(roleName); }
8
+
9
+ function getProductOwnerRoleName() external pure returns (string memory) { return PRODUCT_OWNER_ROLE_NAME(); }
10
+ function getProductOwnerRole() external pure returns (RoleId) { return PRODUCT_OWNER_ROLE(); }
11
+
12
+ function getPoolOwnerRoleName() external pure returns (string memory) { return POOL_OWNER_ROLE_NAME(); }
13
+ function getPoolOwnerRole() external pure returns (RoleId) { return POOL_OWNER_ROLE(); }
14
+ }
@@ -0,0 +1,32 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../contracts/types/NftId.sol";
5
+ import {Version, VersionLib} from "../../contracts/types/Version.sol";
6
+ import {ServiceBase} from "../../contracts/instance/base/ServiceBase.sol";
7
+
8
+ import {IVersionable} from "../../contracts/shared/IVersionable.sol";
9
+ import {Versionable} from "../../contracts/shared/Versionable.sol";
10
+
11
+ contract TestService is ServiceBase {
12
+
13
+ string public constant NAME = "TestService";
14
+
15
+ constructor(address registry, NftId registryNftId)
16
+ ServiceBase(registry, registryNftId)
17
+ // solhint-disable-next-line no-empty-blocks
18
+ {}
19
+
20
+ function getVersion()
21
+ public
22
+ pure
23
+ virtual override (IVersionable, Versionable)
24
+ returns(Version)
25
+ {
26
+ return VersionLib.toVersion(3,0,0);
27
+ }
28
+
29
+ function getName() external pure override returns(string memory name) {
30
+ return NAME;
31
+ }
32
+ }
@@ -0,0 +1,26 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
+
6
+ contract TestUsdc is ERC20 {
7
+
8
+ // https://etherscan.io/token/0xc719d010b63e5bbf2c0551872cd5316ed26acd83#readContract
9
+ string public constant NAME = "USDC - Test";
10
+ string public constant SYMBOL = "USDC";
11
+ uint8 public constant DECIMALS = 6;
12
+ uint256 public constant INITIAL_SUPPLY = 10**9 * 10**DECIMALS; // 1 Billion 1'000'000'000
13
+ // decimals == 18 (openzeppelin erc20 default)
14
+ constructor()
15
+ ERC20(NAME, SYMBOL)
16
+ {
17
+ _mint(
18
+ _msgSender(),
19
+ INITIAL_SUPPLY
20
+ );
21
+ }
22
+
23
+ function decimals() public pure override returns(uint8) {
24
+ return DECIMALS;
25
+ }
26
+ }
@@ -0,0 +1,44 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Version, VersionPart, VersionLib} from "../types/Version.sol";
5
+
6
+ contract TestVersion {
7
+
8
+ function createVersion(uint major, uint minor, uint patch) external pure returns(Version) {
9
+ return VersionLib.toVersion(major, minor, patch);
10
+ }
11
+
12
+ function createVersionPart(uint versionPart) external pure returns(VersionPart) {
13
+ return VersionLib.toVersionPart(uint8(versionPart));
14
+ }
15
+
16
+ function getVersionParts(Version version)
17
+ external
18
+ pure
19
+ returns(
20
+ VersionPart major,
21
+ VersionPart minor,
22
+ VersionPart patch
23
+ )
24
+ {
25
+ return version.toVersionParts();
26
+ }
27
+
28
+ function getMajorPart(Version version) external pure returns(VersionPart major) {
29
+ return version.toMajorPart();
30
+ }
31
+
32
+ function getZeroVersion() external pure returns(Version) {
33
+ return VersionLib.zeroVersion();
34
+ }
35
+
36
+ function isSameVersion(Version a, Version b) external pure returns(bool) {
37
+ return a == b;
38
+ }
39
+
40
+ function isLargerVersion(Version a, Version b) external pure returns(bool) {
41
+ return a > b;
42
+ }
43
+
44
+ }
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Version, VersionLib} from "../../contracts/types/Version.sol";
5
+ import {Versionable} from "../../contracts/shared/Versionable.sol";
6
+
7
+ contract TestVersionable is Versionable {
8
+
9
+ function getVersion()
10
+ public
11
+ pure
12
+ virtual override
13
+ returns(Version)
14
+ {
15
+ return VersionLib.toVersion(3,0,0);
16
+ }
17
+ }
@@ -0,0 +1,26 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
+
6
+ contract USDC is ERC20 {
7
+
8
+ // https://etherscan.io/token/0xc719d010b63e5bbf2c0551872cd5316ed26acd83#readContract
9
+ string public constant NAME = "USDC - DUMMY";
10
+ string public constant SYMBOL = "USDC";
11
+ uint8 public constant DECIMALS = 6;
12
+ uint256 public constant INITIAL_SUPPLY = 10**9 * 10**DECIMALS; // 1 Billion 1'000'000'000
13
+ // decimals == 18 (openzeppelin erc20 default)
14
+ constructor()
15
+ ERC20(NAME, SYMBOL)
16
+ {
17
+ _mint(
18
+ _msgSender(),
19
+ INITIAL_SUPPLY
20
+ );
21
+ }
22
+
23
+ function decimals() public pure override returns(uint8) {
24
+ return DECIMALS;
25
+ }
26
+ }
@@ -0,0 +1,58 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ // based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/structs/EnumerableSet.sol
5
+ library LibAddressSet {
6
+
7
+ struct Set {
8
+ address[] elements;
9
+ mapping(address element => uint256 index) at;
10
+ }
11
+
12
+ function add(Set storage set, address element) external returns(bool added) {
13
+ if (set.at[element] == 0) {
14
+ set.elements.push(element);
15
+ set.at[element] = set.elements.length;
16
+ return true;
17
+ } else {
18
+ return false;
19
+ }
20
+ }
21
+
22
+ function remove(Set storage set, address element) external returns(bool removed) {
23
+ uint256 elementIndex = set.at[element];
24
+
25
+ if (elementIndex > 0) {
26
+ uint256 toDeleteIndex = elementIndex - 1;
27
+ uint256 lastIndex = set.elements.length - 1;
28
+
29
+ if (lastIndex != toDeleteIndex) {
30
+ address lastElement = set.elements[lastIndex];
31
+ set.elements[toDeleteIndex] = lastElement;
32
+ set.at[lastElement] = elementIndex; // Replace lastValue's index to valueIndex
33
+ }
34
+
35
+ set.elements.pop();
36
+ delete set.at[element];
37
+ return true;
38
+ }
39
+
40
+ return false;
41
+ }
42
+
43
+ function isEmpty(Set storage set) external view returns(bool empty) {
44
+ return set.elements.length == 0;
45
+ }
46
+
47
+ function contains(Set storage set, address element) external view returns(bool inSet) {
48
+ return set.at[element] > 0;
49
+ }
50
+
51
+ function getLength(Set storage set) external view returns(uint256 length) {
52
+ return set.elements.length;
53
+ }
54
+
55
+ function getElementAt(Set storage set, uint256 index) external view returns(address element) {
56
+ return set.elements[index];
57
+ }
58
+ }
@@ -0,0 +1,118 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ type Blocknumber is uint32;
5
+
6
+ using {
7
+ gtBlocknumber as >,
8
+ gteBlocknumber as >=,
9
+ ltBlocknumber as <,
10
+ lteBlocknumber as <=,
11
+ eqBlocknumber as ==,
12
+ neBlocknumber as !=,
13
+ BlocknumberLib.toInt
14
+ } for Blocknumber global;
15
+
16
+ /// @dev return true if Blocknumber a is greater than Blocknumber b
17
+ function gtBlocknumber(Blocknumber a, Blocknumber b) pure returns (bool) {
18
+ return Blocknumber.unwrap(a) > Blocknumber.unwrap(b);
19
+ }
20
+
21
+ /// @dev return true if Blocknumber a is greater than or equal to Blocknumber b
22
+ function gteBlocknumber(Blocknumber a, Blocknumber b) pure returns (bool) {
23
+ return Blocknumber.unwrap(a) >= Blocknumber.unwrap(b);
24
+ }
25
+
26
+ /// @dev return true if Blocknumber a is less than Blocknumber b
27
+ function ltBlocknumber(Blocknumber a, Blocknumber b) pure returns (bool) {
28
+ return Blocknumber.unwrap(a) < Blocknumber.unwrap(b);
29
+ }
30
+
31
+ /// @dev return true if Blocknumber a is less than or equal to Blocknumber b
32
+ function lteBlocknumber(Blocknumber a, Blocknumber b) pure returns (bool) {
33
+ return Blocknumber.unwrap(a) <= Blocknumber.unwrap(b);
34
+ }
35
+
36
+ /// @dev return true if Blocknumber a is equal to Blocknumber b
37
+ function eqBlocknumber(Blocknumber a, Blocknumber b) pure returns (bool) {
38
+ return Blocknumber.unwrap(a) == Blocknumber.unwrap(b);
39
+ }
40
+
41
+ /// @dev return true if Blocknumber a is not equal to Blocknumber b
42
+ function neBlocknumber(Blocknumber a, Blocknumber b) pure returns (bool) {
43
+ return Blocknumber.unwrap(a) != Blocknumber.unwrap(b);
44
+ }
45
+
46
+ /// @dev Converts the uint256 to a Blocknumber.
47
+ function toBlocknumber(uint256 blocknum) pure returns (Blocknumber) {
48
+ return Blocknumber.wrap(uint32(blocknum));
49
+ }
50
+
51
+ function blockBlocknumber() view returns (Blocknumber) {
52
+ return toBlocknumber(block.number);
53
+ }
54
+
55
+ /// @dev Return the Blocknumber zero (0)
56
+ function zeroBlocknumber() pure returns (Blocknumber) {
57
+ return toBlocknumber(0);
58
+ }
59
+
60
+ /// @dev Return the current block number
61
+ function blockNumber() view returns (Blocknumber) {
62
+ return toBlocknumber(block.number);
63
+ }
64
+
65
+ library BlocknumberLib {
66
+ /// @dev return true if Blocknumber a is greater than Blocknumber b
67
+ function gt(
68
+ Blocknumber a,
69
+ Blocknumber b
70
+ ) public pure returns (bool isAfter) {
71
+ return gtBlocknumber(a, b);
72
+ }
73
+
74
+ /// @dev return true if Blocknumber a is greater than or equal to Blocknumber b
75
+ function gte(
76
+ Blocknumber a,
77
+ Blocknumber b
78
+ ) public pure returns (bool isAfterOrSame) {
79
+ return gteBlocknumber(a, b);
80
+ }
81
+
82
+ /// @dev return true if Blocknumber a is less than Blocknumber b
83
+ function lt(
84
+ Blocknumber a,
85
+ Blocknumber b
86
+ ) public pure returns (bool isBefore) {
87
+ return ltBlocknumber(a, b);
88
+ }
89
+
90
+ /// @dev return true if Blocknumber a is less than or equal to Blocknumber b
91
+ function lte(
92
+ Blocknumber a,
93
+ Blocknumber b
94
+ ) public pure returns (bool isBeforeOrSame) {
95
+ return lteBlocknumber(a, b);
96
+ }
97
+
98
+ /// @dev return true if Blocknumber a is equal to Blocknumber b
99
+ function eq(
100
+ Blocknumber a,
101
+ Blocknumber b
102
+ ) public pure returns (bool isSame) {
103
+ return eqBlocknumber(a, b);
104
+ }
105
+
106
+ /// @dev return true if Blocknumber a is not equal to Blocknumber b
107
+ function ne(
108
+ Blocknumber a,
109
+ Blocknumber b
110
+ ) public pure returns (bool isDifferent) {
111
+ return neBlocknumber(a, b);
112
+ }
113
+
114
+ /// @dev converts the Blocknumber to a uint256
115
+ function toInt(Blocknumber blocknumber) public pure returns (uint256) {
116
+ return uint256(uint32(Blocknumber.unwrap(blocknumber)));
117
+ }
118
+ }