@etherisc/gif-next 0.0.2-e42b0ca-323 → 0.0.2-e4b632c-016

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 (366) hide show
  1. package/README.md +175 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +168 -28
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +610 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +121 -28
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +74 -181
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +447 -60
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +519 -70
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +114 -0
  46. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  47. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -0
  48. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  49. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +278 -1700
  52. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  53. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
  54. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/Instance.sol/Instance.json +2509 -1176
  56. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +930 -0
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1283 -0
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +755 -0
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +432 -0
  64. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +224 -43
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +51 -1
  68. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +45 -127
  70. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +55 -245
  73. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  76. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  77. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  78. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  79. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  80. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  81. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  83. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  84. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  85. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  86. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  87. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  89. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +381 -77
  91. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +604 -0
  93. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  95. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
  97. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/{base/ServiceBase.sol/ServiceBase.json → service/IDistributionService.sol/IDistributionService.json} +204 -58
  99. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +235 -50
  101. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +325 -51
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +190 -51
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  110. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  111. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/Registry.sol/Registry.json +380 -139
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  114. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1261 -0
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  116. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +504 -0
  117. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  118. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  119. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  120. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  121. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  122. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  123. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  125. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  126. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +175 -54
  127. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  129. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  130. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  131. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  132. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  133. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  135. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  136. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +199 -83
  137. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  138. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  139. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  140. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  141. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  142. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  143. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  145. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  147. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  149. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  151. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
  153. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  155. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  157. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  159. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  160. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  161. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  162. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  165. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  166. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  168. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  170. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  172. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  173. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  174. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  175. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  176. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  178. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  180. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  182. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  184. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  186. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  188. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  190. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  192. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  194. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  196. package/contracts/components/BaseComponent.sol +20 -22
  197. package/contracts/components/Distribution.sol +166 -0
  198. package/contracts/components/IBaseComponent.sol +8 -3
  199. package/contracts/components/IDistributionComponent.sol +43 -0
  200. package/contracts/components/IPoolComponent.sol +14 -9
  201. package/contracts/components/IProductComponent.sol +25 -9
  202. package/contracts/components/Pool.sol +115 -30
  203. package/contracts/components/Product.sol +212 -32
  204. package/contracts/experiment/cloning/Cloner.sol +47 -0
  205. package/contracts/instance/AccessManagedSimple.sol +122 -0
  206. package/contracts/instance/AccessManagerSimple.sol +692 -0
  207. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  208. package/contracts/instance/IInstance.sol +26 -45
  209. package/contracts/instance/IInstanceService.sol +30 -0
  210. package/contracts/instance/Instance.sol +426 -52
  211. package/contracts/instance/InstanceAccessManager.sol +288 -0
  212. package/contracts/instance/InstanceReader.sol +290 -0
  213. package/contracts/instance/InstanceService.sol +138 -0
  214. package/contracts/instance/InstanceServiceManager.sol +56 -0
  215. package/contracts/instance/base/ComponentServiceBase.sol +11 -14
  216. package/contracts/instance/base/IInstanceBase.sol +11 -2
  217. package/contracts/instance/base/IKeyValueStore.sol +13 -13
  218. package/contracts/instance/base/ILifecycle.sol +3 -3
  219. package/contracts/instance/base/KeyValueStore.sol +53 -37
  220. package/contracts/instance/base/Lifecycle.sol +16 -11
  221. package/contracts/instance/module/IAccess.sol +38 -0
  222. package/contracts/instance/module/IBundle.sol +19 -0
  223. package/contracts/instance/module/IDistribution.sol +39 -0
  224. package/contracts/instance/module/IPolicy.sol +45 -0
  225. package/contracts/instance/module/IRisk.sol +11 -0
  226. package/contracts/instance/module/ISetup.sol +43 -0
  227. package/contracts/instance/module/ITreasury.sol +23 -0
  228. package/contracts/instance/service/ComponentOwnerService.sol +244 -97
  229. package/contracts/instance/service/DistributionService.sol +70 -0
  230. package/contracts/instance/service/DistributionServiceManager.sol +53 -0
  231. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  232. package/contracts/instance/service/IDistributionService.sol +12 -0
  233. package/contracts/instance/service/IPoolService.sol +8 -1
  234. package/contracts/instance/service/IProductService.sol +56 -7
  235. package/contracts/registry/ChainNft.sol +80 -37
  236. package/contracts/registry/IRegistry.sol +29 -28
  237. package/contracts/registry/IRegistryService.sol +35 -0
  238. package/contracts/registry/ITransferInterceptor.sol +6 -0
  239. package/contracts/registry/Registry.sol +315 -273
  240. package/contracts/registry/RegistryService.sol +444 -0
  241. package/contracts/registry/RegistryServiceManager.sol +64 -0
  242. package/contracts/shared/ContractDeployerLib.sol +72 -0
  243. package/contracts/shared/INftOwnable.sol +22 -0
  244. package/contracts/shared/IRegisterable.sol +8 -15
  245. package/contracts/{instance/base → shared}/IService.sol +3 -3
  246. package/contracts/shared/IVersionable.sol +55 -11
  247. package/contracts/shared/NftOwnable.sol +136 -0
  248. package/contracts/shared/ProxyManager.sol +94 -0
  249. package/contracts/shared/Registerable.sol +62 -59
  250. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  251. package/contracts/shared/Service.sol +54 -0
  252. package/contracts/shared/TokenHandler.sol +27 -0
  253. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  254. package/contracts/shared/Versionable.sol +113 -55
  255. package/contracts/test/TestFee.sol +2 -2
  256. package/contracts/test/TestRegisterable.sol +5 -6
  257. package/contracts/test/TestRoleId.sol +1 -1
  258. package/contracts/test/TestService.sol +5 -13
  259. package/contracts/types/DistributorType.sol +55 -0
  260. package/contracts/types/Fee.sol +10 -5
  261. package/contracts/types/Key32.sol +8 -3
  262. package/contracts/types/NumberId.sol +52 -0
  263. package/contracts/types/ObjectType.sol +51 -14
  264. package/contracts/types/Referral.sol +85 -0
  265. package/contracts/types/RiskId.sol +43 -0
  266. package/contracts/types/RoleId.sol +54 -10
  267. package/contracts/types/StateId.sol +5 -1
  268. package/contracts/types/Timestamp.sol +7 -3
  269. package/contracts/types/UFixed.sol +128 -12
  270. package/contracts/types/Version.sol +9 -0
  271. package/package.json +4 -3
  272. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  273. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  274. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  275. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  276. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  277. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  278. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  279. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  280. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  281. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  282. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  283. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  284. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -296
  285. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  286. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  287. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -296
  288. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  289. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  290. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  291. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  292. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  293. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  294. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  295. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  296. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  297. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  298. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  299. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  300. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  301. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  302. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  303. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  304. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  305. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  306. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  307. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  308. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  309. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  310. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  311. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  312. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  313. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  314. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  316. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  317. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  319. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  321. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  322. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  323. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  324. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -471
  325. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  326. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -673
  327. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  328. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  329. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  330. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  331. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  332. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  333. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  334. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  335. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  336. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  337. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  338. package/contracts/experiment/statemachine/README.md +0 -112
  339. package/contracts/instance/IInstanceLinked.sol +0 -8
  340. package/contracts/instance/base/InstanceBase.sol +0 -80
  341. package/contracts/instance/base/ModuleBase.sol +0 -52
  342. package/contracts/instance/base/ServiceBase.sol +0 -37
  343. package/contracts/instance/module/access/Access.sol +0 -149
  344. package/contracts/instance/module/access/IAccess.sol +0 -53
  345. package/contracts/instance/module/bundle/BundleModule.sol +0 -136
  346. package/contracts/instance/module/bundle/IBundle.sol +0 -58
  347. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  348. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  349. package/contracts/instance/module/component/ComponentModule.sol +0 -95
  350. package/contracts/instance/module/component/IComponent.sol +0 -53
  351. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  352. package/contracts/instance/module/policy/PolicyModule.sol +0 -76
  353. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  354. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  355. package/contracts/instance/module/risk/IRisk.sol +0 -10
  356. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  357. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  358. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  359. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  360. package/contracts/instance/service/PoolService.sol +0 -123
  361. package/contracts/instance/service/ProductService.sol +0 -354
  362. package/contracts/registry/IChainNft.sol +0 -21
  363. package/contracts/registry/IRegistryLinked.sol +0 -8
  364. package/contracts/shared/IOwnable.sol +0 -6
  365. package/contracts/test/TestPool.sol +0 -22
  366. package/contracts/test/TestProduct.sol +0 -44
@@ -0,0 +1,43 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Key32, KeyId, Key32Lib} from "./Key32.sol";
5
+ import {RISK} from "./ObjectType.sol";
6
+
7
+ type RiskId is bytes8;
8
+
9
+ // type bindings
10
+ using {
11
+ eqRiskId as ==,
12
+ neRiskId as !=,
13
+ RiskIdLib.toKey32
14
+ } for RiskId global;
15
+
16
+ // general pure free functions
17
+
18
+ // @dev Returns true iff risk ids a and b are identical
19
+ function eqRiskId(RiskId a, RiskId b) pure returns (bool isSame) {
20
+ return RiskId.unwrap(a) == RiskId.unwrap(b);
21
+ }
22
+
23
+ // @dev Returns true iff risk ids a and b are different
24
+ function neRiskId(RiskId a, RiskId b) pure returns (bool isDifferent) {
25
+ return RiskId.unwrap(a) != RiskId.unwrap(b);
26
+ }
27
+
28
+ library RiskIdLib {
29
+ // @dev Converts a role string into a role id.
30
+ function toRiskId(string memory risk) public pure returns (RiskId) {
31
+ return RiskId.wrap(bytes8(keccak256(abi.encode(risk))));
32
+ }
33
+
34
+ /// @dev Returns the key32 value for the specified nft id and object type.
35
+ function toKey32(RiskId id) public pure returns (Key32 key) {
36
+ return Key32Lib.toKey32(RISK(), toKeyId(id));
37
+ }
38
+
39
+ /// @dev Returns the key id value for the specified nft id
40
+ function toKeyId(RiskId id) public pure returns (KeyId keyId) {
41
+ return KeyId.wrap(bytes31(RiskId.unwrap(id)));
42
+ }
43
+ }
@@ -1,24 +1,38 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- type RoleId is bytes8;
4
+ import {Key32, KeyId, Key32Lib} from "./Key32.sol";
5
+ import {ROLE} from "./ObjectType.sol";
6
+
7
+ type RoleId is uint64;
5
8
 
6
9
  // type bindings
7
10
  using {
8
11
  eqRoleId as ==,
9
- neRoleId as !=
12
+ neRoleId as !=,
13
+ RoleIdLib.eqz,
14
+ RoleIdLib.gtz,
15
+ RoleIdLib.toInt,
16
+ RoleIdLib.toKey32
10
17
  } for RoleId global;
11
18
 
12
19
  // general pure free functions
13
- function DISTRIBUTOR_OWNER_ROLE_NAME() pure returns (string memory) { return "DistributorOwnerRole"; }
20
+ function DISTRIBUTION_OWNER_ROLE_NAME() pure returns (string memory) { return "DistributionOwnerRole"; }
14
21
  function ORACLE_OWNER_ROLE_NAME() pure returns (string memory) { return "OracleOwnerRole"; }
15
22
  function POOL_OWNER_ROLE_NAME() pure returns (string memory) { return "PoolOwnerRole"; }
16
23
  function PRODUCT_OWNER_ROLE_NAME() pure returns (string memory) { return "ProductOwnerRole"; }
17
24
 
18
- function DISTRIBUTOR_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId("DistributorOwnerRole"); }
19
- function ORACLE_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId("OracleOwnerRole"); }
20
- function POOL_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId("PoolOwnerRole"); }
21
- function PRODUCT_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId("ProductOwnerRole"); }
25
+ // TODO correct numbers (maybe they are already defined in RegistryService)
26
+ function DISTRIBUTION_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(100); }
27
+ function ORACLE_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(200); }
28
+ function POOL_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(300); }
29
+ function PRODUCT_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(400); }
30
+
31
+ function DISTRIBUTION_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1000); }
32
+ function POLICY_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1100); }
33
+ function BUNDLE_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1200); }
34
+ function POOL_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1300); }
35
+ function PRODUCT_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1400); }
22
36
 
23
37
  // @dev Returns true iff role ids a and b are identical
24
38
  function eqRoleId(RoleId a, RoleId b) pure returns (bool isSame) {
@@ -31,8 +45,38 @@ function neRoleId(RoleId a, RoleId b) pure returns (bool isDifferent) {
31
45
  }
32
46
 
33
47
  library RoleIdLib {
34
- // @dev Converts a role string into a role id.
35
- function toRoleId(string memory role) public pure returns (RoleId) {
36
- return RoleId.wrap(bytes8(keccak256(abi.encode(role))));
48
+ /// @dev Converts the RoleId to a uint.
49
+ function zero() public pure returns (RoleId) {
50
+ return RoleId.wrap(0);
51
+ }
52
+
53
+ /// @dev Converts an uint into a RoleId.
54
+ function toRoleId(uint256 a) public pure returns (RoleId) {
55
+ return RoleId.wrap(uint64(a));
56
+ }
57
+
58
+ /// @dev Converts the RoleId to a uint.
59
+ function toInt(RoleId a) public pure returns (uint64) {
60
+ return uint64(RoleId.unwrap(a));
61
+ }
62
+
63
+ /// @dev Returns true if the value is non-zero (> 0).
64
+ function gtz(RoleId a) public pure returns (bool) {
65
+ return RoleId.unwrap(a) > 0;
66
+ }
67
+
68
+ /// @dev Returns true if the value is zero (== 0).
69
+ function eqz(RoleId a) public pure returns (bool) {
70
+ return RoleId.unwrap(a) == 0;
71
+ }
72
+
73
+ /// @dev Returns the key32 value for the specified id and object type.
74
+ function toKey32(RoleId a) public pure returns (Key32 key) {
75
+ return Key32Lib.toKey32(ROLE(), toKeyId(a));
76
+ }
77
+
78
+ /// @dev Returns the key id value for the specified id
79
+ function toKeyId(RoleId a) public pure returns (KeyId keyId) {
80
+ return KeyId.wrap(bytes31(uint248(RoleId.unwrap(a))));
37
81
  }
38
82
  }
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  // uint96 allows for chain ids up to 13 digits
5
5
  type StateId is uint8;
@@ -58,6 +58,10 @@ function PAID() pure returns (StateId) {
58
58
  return toStateId(220);
59
59
  }
60
60
 
61
+ function KEEP_STATE() pure returns (StateId) {
62
+ return toStateId(type(uint8).max);
63
+ }
64
+
61
65
  /// @dev Converts the uint8 to a StateId.
62
66
  function toStateId(uint256 id) pure returns (StateId) {
63
67
  return StateId.wrap(uint8(id));
@@ -50,9 +50,9 @@ function toTimestamp(uint256 timestamp) pure returns (Timestamp) {
50
50
  return Timestamp.wrap(uint40(timestamp));
51
51
  }
52
52
 
53
- function blockTimestamp() view returns (Timestamp) {
54
- return toTimestamp(block.timestamp);
55
- }
53
+ // function blockTimestamp() view returns (Timestamp) {
54
+ // return toTimestamp(block.timestamp);
55
+ // }
56
56
 
57
57
  /// @dev Return the Timestamp zero (0)
58
58
  function zeroTimestamp() pure returns (Timestamp) {
@@ -60,6 +60,10 @@ function zeroTimestamp() pure returns (Timestamp) {
60
60
  }
61
61
 
62
62
  library TimestampLib {
63
+ function blockTimestamp() public view returns (Timestamp) {
64
+ return Timestamp.wrap(uint40(block.timestamp));
65
+ }
66
+
63
67
  /// @dev return true if Timestamp a is after Timestamp b
64
68
  function gt(Timestamp a, Timestamp b) public pure returns (bool isAfter) {
65
69
  return gtTimestamp(a, b);
@@ -1,7 +1,5 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
3
-
4
- import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
2
+ pragma solidity ^0.8.20;
5
3
 
6
4
  /// @dev UFixed is a fixed point number with 18 decimals precision.
7
5
  type UFixed is uint256;
@@ -16,9 +14,15 @@ using {
16
14
  ltUFixed as <,
17
15
  lteUFixed as <=,
18
16
  eqUFixed as ==,
19
- UFixedMathLib.toInt
17
+ neUFixed as !=,
18
+ UFixedLib.toInt,
19
+ UFixedLib.gtz
20
20
  } for UFixed global;
21
21
 
22
+ function zeroUFixed() pure returns (UFixed zero) {
23
+ return UFixed.wrap(0);
24
+ }
25
+
22
26
  function addUFixed(UFixed a, UFixed b) pure returns (UFixed) {
23
27
  return UFixed.wrap(UFixed.unwrap(a) + UFixed.unwrap(b));
24
28
  }
@@ -30,14 +34,14 @@ function subUFixed(UFixed a, UFixed b) pure returns (UFixed) {
30
34
 
31
35
  function mulUFixed(UFixed a, UFixed b) pure returns (UFixed) {
32
36
  return
33
- UFixed.wrap(Math.mulDiv(UFixed.unwrap(a), UFixed.unwrap(b), 10 ** 18));
37
+ UFixed.wrap(MathLib.mulDiv(UFixed.unwrap(a), UFixed.unwrap(b), 10 ** 18));
34
38
  }
35
39
 
36
40
  function divUFixed(UFixed a, UFixed b) pure returns (UFixed) {
37
41
  require(UFixed.unwrap(b) > 0, "ERROR:UFM-020:DIVISOR_ZERO");
38
42
 
39
43
  return
40
- UFixed.wrap(Math.mulDiv(UFixed.unwrap(a), 10 ** 18, UFixed.unwrap(b)));
44
+ UFixed.wrap(MathLib.mulDiv(UFixed.unwrap(a), 10 ** 18, UFixed.unwrap(b)));
41
45
  }
42
46
 
43
47
  function gtUFixed(UFixed a, UFixed b) pure returns (bool isGreaterThan) {
@@ -60,6 +64,10 @@ function eqUFixed(UFixed a, UFixed b) pure returns (bool isEqual) {
60
64
  return UFixed.unwrap(a) == UFixed.unwrap(b);
61
65
  }
62
66
 
67
+ function neUFixed(UFixed a, UFixed b) pure returns (bool isEqual) {
68
+ return UFixed.unwrap(a) != UFixed.unwrap(b);
69
+ }
70
+
63
71
  function gtzUFixed(UFixed a) pure returns (bool isZero) {
64
72
  return UFixed.unwrap(a) > 0;
65
73
  }
@@ -76,7 +84,115 @@ function deltaUFixed(UFixed a, UFixed b) pure returns (UFixed) {
76
84
  return b - a;
77
85
  }
78
86
 
79
- library UFixedMathLib {
87
+ /// @dev copied from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.3/contracts/utils/math/Math.sol
88
+ library MathLib {
89
+
90
+ enum Rounding {
91
+ Down, // Toward negative infinity
92
+ Up, // Toward infinity
93
+ Zero // Toward zero
94
+ }
95
+
96
+ /**
97
+ * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
98
+ * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
99
+ * with further edits by Uniswap Labs also under MIT license.
100
+ */
101
+ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
102
+ unchecked {
103
+ // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
104
+ // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
105
+ // variables such that product = prod1 * 2^256 + prod0.
106
+ uint256 prod0; // Least significant 256 bits of the product
107
+ uint256 prod1; // Most significant 256 bits of the product
108
+ assembly {
109
+ let mm := mulmod(x, y, not(0))
110
+ prod0 := mul(x, y)
111
+ prod1 := sub(sub(mm, prod0), lt(mm, prod0))
112
+ }
113
+
114
+ // Handle non-overflow cases, 256 by 256 division.
115
+ if (prod1 == 0) {
116
+ // Solidity will revert if denominator == 0, unlike the div opcode on its own.
117
+ // The surrounding unchecked block does not change this fact.
118
+ // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
119
+ return prod0 / denominator;
120
+ }
121
+
122
+ // Make sure the result is less than 2^256. Also prevents denominator == 0.
123
+ require(denominator > prod1, "Math: mulDiv overflow");
124
+
125
+ ///////////////////////////////////////////////
126
+ // 512 by 256 division.
127
+ ///////////////////////////////////////////////
128
+
129
+ // Make division exact by subtracting the remainder from [prod1 prod0].
130
+ uint256 remainder;
131
+ assembly {
132
+ // Compute remainder using mulmod.
133
+ remainder := mulmod(x, y, denominator)
134
+
135
+ // Subtract 256 bit number from 512 bit number.
136
+ prod1 := sub(prod1, gt(remainder, prod0))
137
+ prod0 := sub(prod0, remainder)
138
+ }
139
+
140
+ // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
141
+ // See https://cs.stackexchange.com/q/138556/92363.
142
+
143
+ // Does not overflow because the denominator cannot be zero at this stage in the function.
144
+ uint256 twos = denominator & (~denominator + 1);
145
+ assembly {
146
+ // Divide denominator by twos.
147
+ denominator := div(denominator, twos)
148
+
149
+ // Divide [prod1 prod0] by twos.
150
+ prod0 := div(prod0, twos)
151
+
152
+ // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
153
+ twos := add(div(sub(0, twos), twos), 1)
154
+ }
155
+
156
+ // Shift in bits from prod1 into prod0.
157
+ prod0 |= prod1 * twos;
158
+
159
+ // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
160
+ // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
161
+ // four bits. That is, denominator * inv = 1 mod 2^4.
162
+ uint256 inverse = (3 * denominator) ^ 2;
163
+
164
+ // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
165
+ // in modular arithmetic, doubling the correct bits in each step.
166
+ inverse *= 2 - denominator * inverse; // inverse mod 2^8
167
+ inverse *= 2 - denominator * inverse; // inverse mod 2^16
168
+ inverse *= 2 - denominator * inverse; // inverse mod 2^32
169
+ inverse *= 2 - denominator * inverse; // inverse mod 2^64
170
+ inverse *= 2 - denominator * inverse; // inverse mod 2^128
171
+ inverse *= 2 - denominator * inverse; // inverse mod 2^256
172
+
173
+ // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
174
+ // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
175
+ // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
176
+ // is no longer required.
177
+ result = prod0 * inverse;
178
+ return result;
179
+ }
180
+ }
181
+
182
+ /**
183
+ * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
184
+ */
185
+ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
186
+ uint256 result = mulDiv(x, y, denominator);
187
+ if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
188
+ result += 1;
189
+ }
190
+ return result;
191
+ }
192
+
193
+ }
194
+
195
+ library UFixedLib {
80
196
  int8 public constant EXP = 18;
81
197
  uint256 public constant MULTIPLIER = 10 ** uint256(int256(EXP));
82
198
  uint256 public constant MULTIPLIER_HALF = MULTIPLIER / 2;
@@ -123,23 +239,23 @@ library UFixedMathLib {
123
239
  function toIntWithRounding(UFixed a, uint8 rounding) public pure returns (uint256) {
124
240
  if (rounding == ROUNDING_HALF_UP()) {
125
241
  return
126
- Math.mulDiv(
242
+ MathLib.mulDiv(
127
243
  UFixed.unwrap(a) + MULTIPLIER_HALF,
128
244
  1,
129
245
  MULTIPLIER,
130
- Math.Rounding.Down
246
+ MathLib.Rounding.Down
131
247
  );
132
248
  } else if (rounding == ROUNDING_DOWN()) {
133
249
  return
134
- Math.mulDiv(
250
+ MathLib.mulDiv(
135
251
  UFixed.unwrap(a),
136
252
  1,
137
253
  MULTIPLIER,
138
- Math.Rounding.Down
254
+ MathLib.Rounding.Down
139
255
  );
140
256
  } else {
141
257
  return
142
- Math.mulDiv(UFixed.unwrap(a), 1, MULTIPLIER, Math.Rounding.Up);
258
+ MathLib.mulDiv(UFixed.unwrap(a), 1, MULTIPLIER, MathLib.Rounding.Up);
143
259
  }
144
260
  }
145
261
 
@@ -23,6 +23,7 @@ using {
23
23
  versionGt as >,
24
24
  versionEq as ==,
25
25
  VersionLib.toInt,
26
+ VersionLib.toUint64,
26
27
  VersionLib.toMajorPart,
27
28
  VersionLib.toVersionParts
28
29
  }
@@ -34,6 +35,8 @@ function versionEq(Version a, Version b) pure returns(bool isSame) { return Vers
34
35
  library VersionLib {
35
36
  function toInt(Version version) external pure returns(uint) { return Version.unwrap(version); }
36
37
 
38
+ function toUint64(Version version) external pure returns(uint64) { return Version.unwrap(version); }
39
+
37
40
  function toMajorPart(Version version)
38
41
  external
39
42
  pure
@@ -89,6 +92,12 @@ library VersionLib {
89
92
  (major << 16) + (minor << 8) + patch));
90
93
  }
91
94
 
95
+ // TODO check for overflow?
96
+ function toVersion(uint64 versionNumber) external pure returns(Version) {
97
+ //assert(versionNumber <= type(Version).max);
98
+ return Version.wrap(uint24(versionNumber));
99
+ }
100
+
92
101
  function zeroVersion() external pure returns(Version) {
93
102
  return Version.wrap(0);
94
103
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etherisc/gif-next",
3
- "version": "0.0.2-e42b0ca-323",
3
+ "version": "0.0.2-e4b632c-016",
4
4
  "description": "This is the repository for the next version of the Generic Insurance Framework (GIF) smart contracts. ",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -42,10 +42,11 @@
42
42
  "typescript": "^5"
43
43
  },
44
44
  "dependencies": {
45
- "@openzeppelin/contracts": "^4.9.3",
46
- "@openzeppelin/contracts-upgradeable": "^4.9.3",
45
+ "@openzeppelin/contracts": "5.0.0",
46
+ "@openzeppelin/contracts-upgradeable": "5.0.0",
47
47
  "abi-coder": "^5.0.0",
48
48
  "ethers": "^6.7.1",
49
+ "solidity-docgen": "^0.6.0-beta.36",
49
50
  "winston": "^3.10.0"
50
51
  }
51
52
  }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/ac8b1a0ba35c3a8a508882d70043ad3f.json"
4
- }
@@ -1,24 +0,0 @@
1
- {
2
- "_format": "hh-sol-artifact-1",
3
- "contractName": "IInstanceLinked",
4
- "sourceName": "contracts/instance/IInstanceLinked.sol",
5
- "abi": [
6
- {
7
- "inputs": [],
8
- "name": "getInstance",
9
- "outputs": [
10
- {
11
- "internalType": "contract IInstance",
12
- "name": "instance",
13
- "type": "address"
14
- }
15
- ],
16
- "stateMutability": "view",
17
- "type": "function"
18
- }
19
- ],
20
- "bytecode": "0x",
21
- "deployedBytecode": "0x",
22
- "linkReferences": {},
23
- "deployedLinkReferences": {}
24
- }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../../build-info/ac8b1a0ba35c3a8a508882d70043ad3f.json"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../../build-info/ac8b1a0ba35c3a8a508882d70043ad3f.json"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../../build-info/ac8b1a0ba35c3a8a508882d70043ad3f.json"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../../build-info/ac8b1a0ba35c3a8a508882d70043ad3f.json"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../../../build-info/ac8b1a0ba35c3a8a508882d70043ad3f.json"
4
- }