@etherisc/gif-next 0.0.2-f74fcad-685 → 0.0.2-f752d2a-551

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 (336) hide show
  1. package/README.md +90 -7
  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} +26 -57
  4. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  5. package/artifacts/contracts/{instance/component/IComponent.sol/IComponentContract.json → components/IBaseComponent.sol/IBaseComponent.json} +26 -57
  6. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +356 -0
  8. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IProductComponent.sol/IProductComponent.json} +89 -65
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +134 -75
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +72 -113
  14. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  26. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  30. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  32. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  34. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +719 -332
  36. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  37. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  38. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/Instance.sol/Instance.json +998 -527
  40. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → base/ComponentServiceBase.sol/ComponentServiceBase.json} +133 -132
  42. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  43. package/artifacts/contracts/instance/{product/ProductService.sol/ProductModule.json → base/IInstanceBase.sol/IInstanceBase.json} +18 -30
  44. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +511 -0
  46. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  47. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  48. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/IService.sol/IService.json +300 -0
  50. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  51. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +326 -0
  52. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +692 -0
  54. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  56. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  58. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +300 -0
  60. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  62. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  63. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  64. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  65. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  66. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  67. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +296 -0
  68. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  69. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  70. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +296 -0
  72. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +10 -0
  74. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +10 -0
  76. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +10 -0
  78. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +188 -0
  80. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  82. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponentModule.json +33 -62
  84. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  86. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +132 -125
  88. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +132 -125
  90. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  92. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +67 -47
  94. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +51 -57
  96. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  98. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +10 -0
  100. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +10 -0
  102. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
  104. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasuryModule.json +100 -57
  106. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  107. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  108. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  109. package/artifacts/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol/TreasuryModule.json +100 -57
  110. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +523 -0
  112. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
  114. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
  116. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +477 -0
  118. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +471 -0
  120. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +673 -0
  122. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  123. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  124. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  125. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  126. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +147 -30
  127. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  128. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  129. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  130. package/artifacts/contracts/registry/Registry.sol/Registry.json +241 -25
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  133. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  134. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  136. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +16 -61
  137. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  138. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  140. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +16 -61
  141. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  142. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
  143. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  144. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  145. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  146. package/artifacts/contracts/test/TestPool.sol/TestPool.json +387 -0
  147. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  148. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -0
  149. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  151. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  153. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  154. package/artifacts/contracts/test/TestService.sol/TestService.json +379 -0
  155. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  156. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  157. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  158. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  159. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  160. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +206 -0
  161. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  162. package/artifacts/contracts/{mock → test}/Usdc.sol/USDC.json +3 -3
  163. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  164. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  165. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  168. package/artifacts/contracts/types/Fee.sol/FeeLib.json +218 -0
  169. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  170. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  171. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  173. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  174. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  175. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  177. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  178. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  179. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  181. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  183. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +58 -58
  185. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  186. package/artifacts/contracts/types/Version.sol/VersionLib.json +139 -0
  187. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  188. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  189. package/contracts/components/BaseComponent.sol +88 -0
  190. package/contracts/components/IBaseComponent.sol +19 -0
  191. package/contracts/components/IPoolComponent.sol +57 -0
  192. package/contracts/components/{IProduct.sol → IProductComponent.sol} +9 -6
  193. package/contracts/components/Pool.sol +140 -18
  194. package/contracts/components/Product.sol +53 -25
  195. package/contracts/instance/IInstance.sol +38 -11
  196. package/contracts/instance/IInstanceLinked.sol +8 -0
  197. package/contracts/instance/Instance.sol +44 -48
  198. package/contracts/instance/base/ComponentServiceBase.sol +42 -0
  199. package/contracts/instance/base/IInstanceBase.sol +14 -0
  200. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  201. package/contracts/instance/{lifecycle → base}/ILifecycle.sol +4 -21
  202. package/contracts/instance/base/IService.sol +15 -0
  203. package/contracts/instance/base/InstanceBase.sol +80 -0
  204. package/contracts/instance/base/KeyValueStore.sol +156 -0
  205. package/contracts/instance/{lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +36 -29
  206. package/contracts/instance/base/ModuleBase.sol +52 -0
  207. package/contracts/instance/base/ServiceBase.sol +37 -0
  208. package/contracts/instance/module/access/Access.sol +149 -0
  209. package/contracts/instance/module/access/IAccess.sol +53 -0
  210. package/contracts/instance/module/bundle/BundleModule.sol +136 -0
  211. package/contracts/instance/module/bundle/IBundle.sol +58 -0
  212. package/contracts/instance/module/compensation/CompensationModule.sol +8 -0
  213. package/contracts/instance/module/compensation/ICompensation.sol +10 -0
  214. package/contracts/instance/module/component/ComponentModule.sol +95 -0
  215. package/contracts/instance/module/component/IComponent.sol +53 -0
  216. package/contracts/instance/module/policy/IPolicy.sol +60 -0
  217. package/contracts/instance/module/policy/PolicyModule.sol +76 -0
  218. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  219. package/contracts/instance/module/pool/PoolModule.sol +87 -0
  220. package/contracts/instance/module/risk/IRisk.sol +10 -0
  221. package/contracts/instance/module/risk/RiskModule.sol +8 -0
  222. package/contracts/instance/{treasury → module/treasury}/ITreasury.sol +27 -15
  223. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  224. package/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol +43 -59
  225. package/contracts/instance/service/ComponentOwnerService.sol +170 -0
  226. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  227. package/contracts/instance/service/IPoolService.sol +30 -0
  228. package/contracts/instance/service/IProductService.sol +58 -0
  229. package/contracts/instance/service/PoolService.sol +123 -0
  230. package/contracts/instance/service/ProductService.sol +354 -0
  231. package/contracts/registry/ChainNft.sol +61 -37
  232. package/contracts/registry/IRegistry.sol +24 -34
  233. package/contracts/registry/IRegistryLinked.sol +8 -0
  234. package/contracts/registry/Registry.sol +284 -85
  235. package/contracts/shared/ERC165.sol +21 -0
  236. package/contracts/shared/IOwnable.sol +6 -0
  237. package/contracts/shared/IRegisterable.sol +24 -0
  238. package/contracts/shared/IVersionable.sol +52 -0
  239. package/contracts/shared/Registerable.sol +86 -0
  240. package/contracts/shared/Versionable.sol +89 -0
  241. package/contracts/test/TestFee.sol +25 -0
  242. package/contracts/test/TestPool.sol +22 -0
  243. package/contracts/test/TestProduct.sol +44 -0
  244. package/contracts/test/TestRegisterable.sol +19 -0
  245. package/contracts/test/TestRoleId.sol +14 -0
  246. package/contracts/test/TestService.sol +32 -0
  247. package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
  248. package/contracts/test/TestVersion.sol +44 -0
  249. package/contracts/test/TestVersionable.sol +17 -0
  250. package/contracts/{mock → test}/Usdc.sol +1 -1
  251. package/contracts/types/AddressSet.sol +58 -0
  252. package/contracts/types/Fee.sol +39 -20
  253. package/contracts/types/Key32.sol +45 -0
  254. package/contracts/types/NftId.sol +22 -1
  255. package/contracts/types/NftIdSet.sol +60 -0
  256. package/contracts/types/ObjectType.sol +22 -14
  257. package/contracts/types/RoleId.sol +38 -0
  258. package/contracts/types/StateId.sol +13 -3
  259. package/contracts/types/Timestamp.sol +22 -1
  260. package/contracts/types/UFixed.sol +12 -13
  261. package/contracts/types/Version.sol +95 -0
  262. package/package.json +8 -3
  263. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  264. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  265. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  266. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  267. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  268. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  269. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  270. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  271. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  272. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  273. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  274. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  275. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  276. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  277. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  278. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  279. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  280. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  281. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  282. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  283. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  284. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  285. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  286. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  287. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  288. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  289. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  290. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  291. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  292. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  293. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  294. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  295. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  296. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  297. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  298. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  299. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
  300. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  301. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  302. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  303. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  304. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  305. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  306. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  307. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  308. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  309. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  310. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  311. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  312. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  313. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  314. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  315. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  316. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  317. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  318. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  319. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  320. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  321. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  322. package/contracts/components/Component.sol +0 -77
  323. package/contracts/components/IPool.sol +0 -15
  324. package/contracts/instance/access/Access.sol +0 -165
  325. package/contracts/instance/access/IAccess.sol +0 -63
  326. package/contracts/instance/component/ComponentModule.sol +0 -274
  327. package/contracts/instance/component/IComponent.sol +0 -74
  328. package/contracts/instance/policy/IPolicy.sol +0 -50
  329. package/contracts/instance/policy/PolicyModule.sol +0 -114
  330. package/contracts/instance/pool/IPoolModule.sol +0 -23
  331. package/contracts/instance/pool/PoolModule.sol +0 -81
  332. package/contracts/instance/product/IProductService.sol +0 -36
  333. package/contracts/instance/product/ProductService.sol +0 -136
  334. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  335. package/contracts/mock/TestPool.sol +0 -16
  336. package/contracts/mock/TestProduct.sol +0 -39
@@ -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
+ 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,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,22 @@
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
+ )
19
+ Pool(registry, instanceNftid, token, isVerifying, collateralizationLevel)
20
+ // solhint-disable-next-line no-empty-blocks
21
+ {}
22
+ }
@@ -0,0 +1,44 @@
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 {Timestamp, blockTimestamp} from "../../contracts/types/Timestamp.sol";
7
+ import {Fee} from "../../contracts/types/Fee.sol";
8
+
9
+ contract TestProduct is Product {
10
+
11
+ event LogTestProductSender(address sender);
12
+
13
+ constructor(address registry, NftId instanceNftid, address token, address pool)
14
+ Product(registry, instanceNftid, token, pool)
15
+ // solhint-disable-next-line no-empty-blocks
16
+ {}
17
+
18
+ function applyForPolicy(
19
+ uint256 sumInsuredAmount,
20
+ uint256 premiumAmount,
21
+ uint256 lifetime,
22
+ NftId bundleNftId
23
+ )
24
+ external
25
+ returns(NftId nftId)
26
+ {
27
+ nftId = _createApplication(
28
+ msg.sender, // policy holder
29
+ sumInsuredAmount,
30
+ premiumAmount,
31
+ lifetime,
32
+ bundleNftId
33
+ );
34
+ }
35
+
36
+ function underwrite(NftId nftId, bool requirePremiumPayment, Timestamp activateAt) external {
37
+ emit LogTestProductSender(msg.sender);
38
+ _underwrite(nftId, requirePremiumPayment, activateAt);
39
+ }
40
+
41
+ function collectPremium(NftId nftId, Timestamp activateAt) external {
42
+ _collectPremium(nftId, activateAt);
43
+ }
44
+ }
@@ -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
+ }
@@ -1,14 +1,14 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.20;
2
+ pragma solidity ^0.8.19;
3
3
 
4
4
  import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
5
 
6
- contract DIP is ERC20 {
6
+ contract TestUsdc is ERC20 {
7
7
 
8
8
  // https://etherscan.io/token/0xc719d010b63e5bbf2c0551872cd5316ed26acd83#readContract
9
- string public constant NAME = "Decentralized Insurance Protocol - DUMMY";
10
- string public constant SYMBOL = "DIP";
11
- uint8 public constant DECIMALS = 18;
9
+ string public constant NAME = "USDC - Test";
10
+ string public constant SYMBOL = "USDC";
11
+ uint8 public constant DECIMALS = 6;
12
12
  uint256 public constant INITIAL_SUPPLY = 10**9 * 10**DECIMALS; // 1 Billion 1'000'000'000
13
13
  // decimals == 18 (openzeppelin erc20 default)
14
14
  constructor()
@@ -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
+ }
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.20;
2
+ pragma solidity ^0.8.19;
3
3
 
4
4
  import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
5
 
@@ -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
+ }
@@ -1,32 +1,51 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {UFixed} from "./UFixed.sol";
4
+ import {UFixed, UFixedMathLib} from "./UFixed.sol";
5
5
 
6
6
  struct Fee {
7
7
  UFixed fractionalFee;
8
8
  uint256 fixedFee;
9
9
  }
10
10
 
11
- // general pure free functions
12
- /// @dev Converts the uint256 to a NftId.
13
- function toFee(
14
- UFixed fractionalFee,
15
- uint256 fixedFee
16
- ) pure returns (Fee memory fee) {
17
- return Fee(fractionalFee, fixedFee);
18
- }
11
+ library FeeLib {
19
12
 
20
- /// @dev Return the NftId zero (0)
21
- function zeroFee() pure returns (Fee memory fee) {
22
- return Fee(UFixed.wrap(0), 0);
23
- }
13
+ function calculateFee(
14
+ uint256 amount,
15
+ Fee memory fee
16
+ )
17
+ public
18
+ pure
19
+ returns (
20
+ uint256 feeAmount,
21
+ uint256 netAmount
22
+ )
23
+ {
24
+ UFixed fractionalAmount = UFixedMathLib.toUFixed(amount) *
25
+ fee.fractionalFee;
26
+ feeAmount = fractionalAmount.toInt() + fee.fixedFee;
27
+ netAmount = amount - feeAmount;
28
+ }
24
29
 
25
- // pure free functions for operators
26
- function feeIsSame(Fee memory a, Fee memory b) pure returns (bool isSame) {
27
- return a.fixedFee == b.fixedFee && a.fractionalFee == b.fractionalFee;
28
- }
30
+ /// @dev Converts the uint256 to a fee struct.
31
+ function toFee(
32
+ UFixed fractionalFee,
33
+ uint256 fixedFee
34
+ ) public pure returns (Fee memory fee) {
35
+ return Fee(fractionalFee, fixedFee);
36
+ }
29
37
 
30
- function feeIsZero(Fee memory fee) pure returns (bool) {
31
- return fee.fixedFee == 0 && UFixed.unwrap(fee.fractionalFee) == 0;
32
- }
38
+ /// @dev Return the zero fee struct (0, 0)
39
+ function zeroFee() public pure returns (Fee memory fee) {
40
+ return Fee(UFixed.wrap(0), 0);
41
+ }
42
+
43
+ // pure free functions for operators
44
+ function feeIsSame(Fee memory a, Fee memory b) public pure returns (bool isSame) {
45
+ return a.fixedFee == b.fixedFee && a.fractionalFee == b.fractionalFee;
46
+ }
47
+
48
+ function feeIsZero(Fee memory fee) public pure returns (bool) {
49
+ return fee.fixedFee == 0 && UFixed.unwrap(fee.fractionalFee) == 0;
50
+ }
51
+ }
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {ObjectType} from "./ObjectType.sol";
5
+
6
+ type Key32 is bytes32;
7
+ type KeyId is bytes31;
8
+
9
+ // type bindings
10
+ using {
11
+ eqKey32 as ==,
12
+ neKey32 as !=,
13
+ Key32Lib.toKey
14
+ } for Key32 global;
15
+
16
+ // @dev Returns true iff keys are identical
17
+ function eqKey32(Key32 a, Key32 b) pure returns (bool isSame) {
18
+ return Key32.unwrap(a) == Key32.unwrap(b);
19
+ }
20
+
21
+ // @dev Returns true iff keys are different
22
+ function neKey32(Key32 a, Key32 b) pure returns (bool isDifferent) {
23
+ return Key32.unwrap(a) != Key32.unwrap(b);
24
+ }
25
+
26
+ library Key32Lib {
27
+
28
+ uint8 public constant TYPE_SHIFT = 31 * 8;
29
+ uint8 public constant ID_SHIFT = uint8(32 * 8 - TYPE_SHIFT);
30
+ bytes32 public constant TYPE_MASK = bytes32(bytes1(type(uint8).max)); // first byte in bytes32
31
+ bytes32 public constant ID_MASK = bytes32(~TYPE_MASK); // remaining bytes in bytes32
32
+
33
+ function toKey32(ObjectType objectType, KeyId id) public pure returns (Key32) {
34
+ uint256 uintObjectType = ObjectType.unwrap(objectType);
35
+ uint256 uintId = uint248(KeyId.unwrap(id));
36
+ uint256 uintKey = (uintObjectType << TYPE_SHIFT) + uintId;
37
+ return Key32.wrap(bytes32(uintKey));
38
+ }
39
+
40
+ function toKey(Key32 key) public pure returns (ObjectType objectType, KeyId id) {
41
+ bytes32 key32 = Key32.unwrap(key);
42
+ objectType = ObjectType.wrap(uint8(uint256(key32 & TYPE_MASK) >> TYPE_SHIFT));
43
+ id = KeyId.wrap(bytes31((key32 & ID_MASK) << ID_SHIFT));
44
+ }
45
+ }
@@ -1,11 +1,22 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {Key32, KeyId, Key32Lib} from "./Key32.sol";
5
+ import {ObjectType} from "./ObjectType.sol";
6
+
4
7
  // uint96 allows for chain ids up to 13 digits
5
8
  type NftId is uint96;
6
9
 
7
10
  // type bindings
8
- using {eqNftId as ==, neNftId as !=, NftIdLib.toInt} for NftId global;
11
+ using {
12
+ eqNftId as ==,
13
+ neNftId as !=,
14
+ NftIdLib.toInt,
15
+ NftIdLib.gtz,
16
+ NftIdLib.eqz,
17
+ NftIdLib.toKeyId,
18
+ NftIdLib.toKey32
19
+ } for NftId global;
9
20
 
10
21
  // general pure free functions
11
22
  /// @dev Converts the uint256 to a NftId.
@@ -48,4 +59,14 @@ library NftIdLib {
48
59
  function eq(NftId a, NftId b) public pure returns (bool isSame) {
49
60
  return eqNftId(a, b);
50
61
  }
62
+
63
+ /// @dev Returns the key32 value for the specified nft id and object type.
64
+ function toKey32(NftId id, ObjectType objectType) public pure returns (Key32 key) {
65
+ return Key32Lib.toKey32(objectType, toKeyId(id));
66
+ }
67
+
68
+ /// @dev Returns the key id value for the specified nft id
69
+ function toKeyId(NftId id) public pure returns (KeyId keyId) {
70
+ return KeyId.wrap(bytes31(uint248(NftId.unwrap(id))));
71
+ }
51
72
  }
@@ -0,0 +1,60 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../types/NftId.sol";
5
+
6
+ // based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/structs/EnumerableSet.sol
7
+ library LibNftIdSet {
8
+
9
+ struct Set {
10
+ NftId[] ids;
11
+ mapping(NftId nftid => uint256 index) at;
12
+ }
13
+
14
+ function add(Set storage set, NftId nftId) external returns(bool added) {
15
+ if (set.at[nftId] == 0) {
16
+ set.ids.push(nftId);
17
+ set.at[nftId] = set.ids.length;
18
+ return true;
19
+ } else {
20
+ return false;
21
+ }
22
+ }
23
+
24
+ function remove(Set storage set, NftId nftId) external returns(bool removed) {
25
+ uint256 nftIdIndex = set.at[nftId];
26
+
27
+ if (nftIdIndex > 0) {
28
+ uint256 toDeleteIndex = nftIdIndex - 1;
29
+ uint256 lastIndex = set.ids.length - 1;
30
+
31
+ if (lastIndex != toDeleteIndex) {
32
+ NftId lastId = set.ids[lastIndex];
33
+ set.ids[toDeleteIndex] = lastId;
34
+ set.at[lastId] = nftIdIndex; // Replace lastValue's index to valueIndex
35
+ }
36
+
37
+ set.ids.pop();
38
+ delete set.at[nftId];
39
+ return true;
40
+ } else {
41
+ return false;
42
+ }
43
+ }
44
+
45
+ function isEmpty(Set storage set) external view returns(bool empty) {
46
+ return set.ids.length == 0;
47
+ }
48
+
49
+ function contains(Set storage set, NftId nftId) external view returns(bool inSet) {
50
+ return set.at[nftId] > 0;
51
+ }
52
+
53
+ function getLength(Set storage set) external view returns(uint256 length) {
54
+ return set.ids.length;
55
+ }
56
+
57
+ function getElementAt(Set storage set, uint256 index) external view returns(NftId nftId) {
58
+ return set.ids[index];
59
+ }
60
+ }