@etherisc/gif-next 0.0.2-cc253b3 → 0.0.2-cd89a0b-062

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 (390) hide show
  1. package/README.md +193 -6
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/{IProduct.sol/IProductComponent.json → BaseComponent.sol/BaseComponent.json} +88 -67
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +445 -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} +69 -71
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +343 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +474 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +373 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +445 -56
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +324 -53
  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 +1575 -295
  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 +1894 -374
  52. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +393 -0
  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/ComponentModule.sol/ComponentModule.json → base/IService.sol/IService.json} +171 -154
  62. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +456 -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/instance/base/ServiceBase.sol/ServiceBase.json +380 -0
  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 +74 -59
  106. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  107. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +64 -62
  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 +638 -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 +638 -0
  122. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +690 -0
  124. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +526 -0
  126. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +389 -0
  128. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +369 -0
  130. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +484 -0
  132. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +674 -0
  134. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +649 -0
  136. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  137. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +964 -0
  138. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  139. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +194 -2
  140. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  141. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
  142. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  143. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +351 -72
  144. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  145. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +668 -0
  146. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  147. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  148. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  149. package/artifacts/contracts/registry/Registry.sol/Registry.json +567 -79
  150. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  151. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +885 -0
  152. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  153. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +460 -0
  154. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  155. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  156. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  157. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  158. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  159. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  160. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  161. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +124 -0
  162. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  163. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  164. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  165. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +132 -0
  166. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  167. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +344 -0
  168. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  169. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +71 -77
  170. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  171. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  172. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  173. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  174. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +445 -0
  176. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  177. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  178. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  179. package/artifacts/contracts/test/TestPool.sol/TestPool.json +602 -0
  180. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  181. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +632 -0
  182. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  183. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +191 -0
  184. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  185. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  186. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  187. package/artifacts/contracts/test/TestService.sol/TestService.json +472 -0
  188. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  189. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  190. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  191. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  192. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  193. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +270 -0
  194. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  195. package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -0
  196. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  197. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  198. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  200. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  202. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  204. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  206. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +91 -6
  208. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  209. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  210. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  212. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  214. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  216. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  218. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  219. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  220. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +236 -0
  222. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +479 -0
  224. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  225. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  226. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  227. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  228. package/contracts/components/BaseComponent.sol +79 -0
  229. package/contracts/components/Distribution.sol +155 -0
  230. package/contracts/components/IBaseComponent.sol +19 -0
  231. package/contracts/components/IDistributionComponent.sol +47 -0
  232. package/contracts/components/IPoolComponent.sol +65 -0
  233. package/contracts/components/IProductComponent.sol +39 -0
  234. package/contracts/components/Pool.sol +235 -18
  235. package/contracts/components/Product.sol +268 -35
  236. package/contracts/experiment/errors/Require.sol +10 -5
  237. package/contracts/experiment/errors/Revert.sol +13 -8
  238. package/contracts/experiment/inheritance/A.sol +8 -11
  239. package/contracts/experiment/inheritance/B.sol +10 -5
  240. package/contracts/experiment/inheritance/C.sol +11 -5
  241. package/contracts/experiment/inheritance/IA.sol +2 -7
  242. package/contracts/experiment/inheritance/IB.sol +3 -2
  243. package/contracts/experiment/inheritance/IC.sol +4 -3
  244. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  245. package/contracts/experiment/statemachine/ISM.sol +25 -0
  246. package/contracts/experiment/statemachine/SM.sol +57 -0
  247. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  248. package/contracts/experiment/types/TypeA.sol +14 -9
  249. package/contracts/experiment/types/TypeB.sol +14 -9
  250. package/contracts/instance/IInstance.sol +42 -8
  251. package/contracts/instance/IInstanceLinked.sol +8 -0
  252. package/contracts/instance/Instance.sol +62 -41
  253. package/contracts/instance/base/ComponentServiceBase.sol +49 -0
  254. package/contracts/instance/base/IInstanceBase.sol +23 -0
  255. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  256. package/contracts/instance/base/ILifecycle.sol +30 -0
  257. package/contracts/instance/base/IService.sol +15 -0
  258. package/contracts/instance/base/InstanceBase.sol +89 -0
  259. package/contracts/instance/base/KeyValueStore.sol +161 -0
  260. package/contracts/instance/base/Lifecycle.sol +100 -0
  261. package/contracts/instance/base/ModuleBase.sol +57 -0
  262. package/contracts/instance/base/ServiceBase.sol +43 -0
  263. package/contracts/instance/module/access/Access.sol +149 -0
  264. package/contracts/instance/module/access/IAccess.sol +53 -0
  265. package/contracts/instance/module/bundle/BundleModule.sol +134 -0
  266. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  267. package/contracts/instance/module/component/ComponentModule.sol +71 -0
  268. package/contracts/instance/module/component/IComponent.sol +28 -0
  269. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  270. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  271. package/contracts/instance/module/policy/IPolicy.sol +63 -0
  272. package/contracts/instance/module/policy/PolicyModule.sol +91 -0
  273. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  274. package/contracts/instance/module/pool/PoolModule.sol +95 -0
  275. package/contracts/instance/module/risk/IRisk.sol +26 -0
  276. package/contracts/instance/module/risk/RiskModule.sol +62 -0
  277. package/contracts/instance/module/treasury/ITreasury.sol +84 -0
  278. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  279. package/contracts/instance/module/treasury/TreasuryModule.sol +131 -0
  280. package/contracts/instance/service/ComponentOwnerService.sol +272 -0
  281. package/contracts/instance/service/DistributionService.sol +54 -0
  282. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  283. package/contracts/instance/service/IDistributionService.sol +12 -0
  284. package/contracts/instance/service/IPoolService.sol +37 -0
  285. package/contracts/instance/service/IProductService.sol +107 -0
  286. package/contracts/instance/service/PoolService.sol +149 -0
  287. package/contracts/instance/service/ProductService.sol +509 -0
  288. package/contracts/registry/ChainNft.sol +111 -97
  289. package/contracts/registry/IChainNft.sol +13 -9
  290. package/contracts/registry/IRegistry.sol +59 -56
  291. package/contracts/registry/IRegistryService.sol +29 -0
  292. package/contracts/registry/ITransferInterceptor.sol +6 -0
  293. package/contracts/registry/Registry.sol +429 -121
  294. package/contracts/registry/RegistryService.sol +375 -0
  295. package/contracts/registry/RegistryServiceManager.sol +52 -0
  296. package/contracts/shared/ContractDeployerLib.sol +72 -0
  297. package/contracts/shared/ERC165.sol +21 -0
  298. package/contracts/shared/IOwnable.sol +6 -0
  299. package/contracts/shared/IRegisterable.sol +22 -0
  300. package/contracts/shared/IVersionable.sol +96 -0
  301. package/contracts/shared/NftOwnable.sol +87 -0
  302. package/contracts/shared/ProxyManager.sol +103 -0
  303. package/contracts/shared/Registerable.sol +117 -0
  304. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  305. package/contracts/shared/Versionable.sol +147 -0
  306. package/contracts/test/TestDistribution.sol +22 -0
  307. package/contracts/test/TestFee.sol +25 -0
  308. package/contracts/test/TestPool.sol +27 -0
  309. package/contracts/test/TestProduct.sol +74 -0
  310. package/contracts/test/TestRegisterable.sol +18 -0
  311. package/contracts/test/TestRoleId.sol +14 -0
  312. package/contracts/test/TestService.sol +26 -0
  313. package/contracts/test/TestToken.sol +26 -0
  314. package/contracts/test/TestVersion.sol +44 -0
  315. package/contracts/test/TestVersionable.sol +17 -0
  316. package/contracts/test/Usdc.sol +26 -0
  317. package/contracts/types/AddressSet.sol +58 -0
  318. package/contracts/types/Blocknumber.sol +118 -0
  319. package/contracts/types/ChainId.sol +24 -10
  320. package/contracts/types/Fee.sol +56 -0
  321. package/contracts/types/Key32.sol +45 -0
  322. package/contracts/types/NftId.sol +55 -9
  323. package/contracts/types/NftIdSet.sol +60 -0
  324. package/contracts/types/ObjectType.sol +131 -0
  325. package/contracts/types/ReferralId.sol +48 -0
  326. package/contracts/types/RiskId.sol +43 -0
  327. package/contracts/types/RoleId.sol +38 -0
  328. package/contracts/types/StateId.sol +101 -0
  329. package/contracts/types/Timestamp.sol +123 -0
  330. package/contracts/types/UFixed.sol +209 -0
  331. package/contracts/types/Version.sol +104 -0
  332. package/package.json +19 -5
  333. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  334. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  335. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  336. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  337. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  338. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  339. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  341. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  342. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  343. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  344. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  345. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  347. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  348. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  349. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  350. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  351. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  352. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  353. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  354. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  355. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  356. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  357. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  358. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  359. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  360. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  361. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  362. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  363. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  364. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  365. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  366. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  367. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  368. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  369. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  370. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  371. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  372. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  373. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  374. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  375. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  376. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  377. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  378. package/contracts/components/Component.sol +0 -62
  379. package/contracts/components/IPool.sol +0 -9
  380. package/contracts/components/IProduct.sol +0 -12
  381. package/contracts/instance/access/Access.sol +0 -218
  382. package/contracts/instance/access/IAccess.sol +0 -83
  383. package/contracts/instance/component/ComponentModule.sol +0 -248
  384. package/contracts/instance/component/IComponent.sol +0 -95
  385. package/contracts/instance/policy/IPolicy.sol +0 -66
  386. package/contracts/instance/policy/PolicyModule.sol +0 -107
  387. package/contracts/instance/pool/IPoolModule.sol +0 -41
  388. package/contracts/instance/pool/PoolModule.sol +0 -86
  389. package/contracts/instance/product/IProductService.sol +0 -46
  390. package/contracts/instance/product/ProductService.sol +0 -108
@@ -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
+ }
@@ -1,24 +1,38 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- // bytes5 (uint40) allows for chain ids up to 13 digits
4
+ /// @dev bytes5 (uint40) allows for chain ids up to 13 digits
5
5
  type ChainId is bytes5;
6
6
 
7
7
  // type bindings
8
- using {
9
- eqChainId as ==,
10
- neChainId as !=,
11
- ChainIdLib.toInt
12
- } for ChainId global;
8
+ using {eqChainId as ==, neChainId as !=, ChainIdLib.toInt} for ChainId global;
13
9
 
14
10
  // general pure free functions
15
- function toChainId(uint256 chainId) pure returns(ChainId) { return ChainId.wrap(bytes5(uint40(chainId))); }
11
+ /// @dev Converts the uint256 to a ChainId.
12
+ function toChainId(uint256 chainId) pure returns (ChainId) {
13
+ return ChainId.wrap(bytes5(uint40(chainId)));
14
+ }
15
+
16
+ /// @dev Return the ChainId for the chain the contract is deployed to
17
+ function thisChainId() view returns (ChainId) {
18
+ return toChainId(block.chainid);
19
+ }
16
20
 
17
21
  // pure free functions for operators
18
- function eqChainId(ChainId a, ChainId b) pure returns(bool isSame) { return ChainId.unwrap(a) == ChainId.unwrap(b); }
19
- function neChainId(ChainId a, ChainId b) pure returns(bool isDifferent) { return ChainId.unwrap(a) != ChainId.unwrap(b); }
22
+ /// @dev Returns true if the values are equal (==).
23
+ function eqChainId(ChainId a, ChainId b) pure returns (bool isSame) {
24
+ return ChainId.unwrap(a) == ChainId.unwrap(b);
25
+ }
26
+
27
+ /// @dev Returns true if the values are not equal (!=).
28
+ function neChainId(ChainId a, ChainId b) pure returns (bool isDifferent) {
29
+ return ChainId.unwrap(a) != ChainId.unwrap(b);
30
+ }
20
31
 
21
32
  // library functions that operate on user defined type
22
33
  library ChainIdLib {
23
- function toInt(ChainId chainId) internal pure returns(uint256) { return uint256(uint40(ChainId.unwrap(chainId))); }
34
+ /// @dev Converts the ChainId to a uint256.
35
+ function toInt(ChainId chainId) internal pure returns (uint256) {
36
+ return uint256(uint40(ChainId.unwrap(chainId)));
37
+ }
24
38
  }
@@ -0,0 +1,56 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {UFixed, UFixedMathLib} from "./UFixed.sol";
5
+
6
+ struct Fee {
7
+ UFixed fractionalFee;
8
+ uint256 fixedFee;
9
+ }
10
+
11
+ library FeeLib {
12
+
13
+ function calculateFee(
14
+ Fee memory fee,
15
+ uint256 amount
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
+ }
29
+
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
+ }
37
+
38
+ /// @dev Return the percent fee struct (x%, 0)
39
+ function percentageFee(uint8 percent) public pure returns (Fee memory fee) {
40
+ return Fee(UFixedMathLib.toUFixed(percent, -2), 0);
41
+ }
42
+
43
+ /// @dev Return a zero fee struct (0, 0)
44
+ function zeroFee() public pure returns (Fee memory fee) {
45
+ return Fee(UFixed.wrap(0), 0);
46
+ }
47
+
48
+ // pure free functions for operators
49
+ function feeIsSame(Fee memory a, Fee memory b) public pure returns (bool isSame) {
50
+ return a.fixedFee == b.fixedFee && a.fractionalFee == b.fractionalFee;
51
+ }
52
+
53
+ function feeIsZero(Fee memory fee) public pure returns (bool) {
54
+ return fee.fixedFee == 0 && UFixed.unwrap(fee.fractionalFee) == 0;
55
+ }
56
+ }
@@ -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,26 +1,72 @@
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
11
  using {
9
- eqNftId as ==,
10
- neNftId as !=,
11
- NftIdLib.toInt
12
+ eqNftId as ==,
13
+ neNftId as !=,
14
+ NftIdLib.toInt,
15
+ NftIdLib.gtz,
16
+ NftIdLib.eqz,
17
+ NftIdLib.toKeyId,
18
+ NftIdLib.toKey32
12
19
  } for NftId global;
13
20
 
14
21
  // general pure free functions
15
- function toNftId(uint256 id) pure returns(NftId) { return NftId.wrap(uint96(id)); }
22
+ /// @dev Converts the uint256 to a NftId.
23
+ function toNftId(uint256 id) pure returns (NftId) {
24
+ return NftId.wrap(uint96(id));
25
+ }
26
+
27
+ /// @dev Return the NftId zero (0)
28
+ function zeroNftId() pure returns (NftId) {
29
+ return NftId.wrap(0);
30
+ }
16
31
 
17
32
  // pure free functions for operators
18
- function eqNftId(NftId a, NftId b) pure returns(bool isSame) { return NftId.unwrap(a) == NftId.unwrap(b); }
19
- function neNftId(NftId a, NftId b) pure returns(bool isDifferent) { return NftId.unwrap(a) != NftId.unwrap(b); }
33
+ function eqNftId(NftId a, NftId b) pure returns (bool isSame) {
34
+ return NftId.unwrap(a) == NftId.unwrap(b);
35
+ }
36
+
37
+ function neNftId(NftId a, NftId b) pure returns (bool isDifferent) {
38
+ return NftId.unwrap(a) != NftId.unwrap(b);
39
+ }
20
40
 
21
41
  // library functions that operate on user defined type
22
42
  library NftIdLib {
23
- function toInt(NftId nftId) public pure returns(uint256) { return uint256(NftId.unwrap(nftId)); }
24
- function gtz(NftId a) public pure returns(bool) { return NftId.unwrap(a) > 0; }
25
- function eqz(NftId a) public pure returns(bool) { return NftId.unwrap(a) == 0; }
43
+ /// @dev Converts the NftId to a uint256.
44
+ function toInt(NftId nftId) public pure returns (uint96) {
45
+ return uint96(NftId.unwrap(nftId));
46
+ }
47
+
48
+ /// @dev Returns true if the value is non-zero (> 0).
49
+ function gtz(NftId a) public pure returns (bool) {
50
+ return NftId.unwrap(a) > 0;
51
+ }
52
+
53
+ /// @dev Returns true if the value is zero (== 0).
54
+ function eqz(NftId a) public pure returns (bool) {
55
+ return NftId.unwrap(a) == 0;
56
+ }
57
+
58
+ /// @dev Returns true if the values are equal (==).
59
+ function eq(NftId a, NftId b) public pure returns (bool isSame) {
60
+ return eqNftId(a, b);
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
+ }
26
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
+ }