@etherisc/gif-next 0.0.2-6f2f76e-746 → 0.0.2-7143611-252

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 (372) hide show
  1. package/README.md +180 -11
  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 +101 -0
  46. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  47. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1119 -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 +224 -1890
  52. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{service/ServiceBase.sol/ServiceBase.json → IInstanceService.sol/IInstanceService.json} +182 -61
  54. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/Instance.sol/Instance.json +2332 -1146
  56. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1257 -0
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +703 -0
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +424 -0
  64. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +481 -0
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  67. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  68. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  69. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  70. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  71. package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  72. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  74. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  76. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  77. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  78. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  80. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  82. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  84. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  86. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → ISetup.sol/ISetup.json} +2 -2
  88. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  90. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +401 -65
  92. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
  94. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +204 -58
  96. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +235 -50
  98. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +325 -51
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +472 -37
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +564 -123
  110. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1261 -0
  112. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +508 -0
  114. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  115. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  116. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  117. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  118. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  119. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  120. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  121. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  122. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  123. package/artifacts/contracts/{instance/service → shared}/IService.sol/IService.json +175 -54
  124. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  126. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  127. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  128. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  129. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  130. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  132. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  133. package/artifacts/contracts/{instance/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +204 -75
  134. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  135. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  136. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  137. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  138. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  139. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  140. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  141. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  142. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  143. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  144. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  145. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  146. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
  148. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
  150. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  152. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  154. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  156. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  157. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  158. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  159. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  162. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  163. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  165. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  166. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  167. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  169. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  170. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  171. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  172. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  173. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  175. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  176. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  177. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  178. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  179. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  180. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  181. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  183. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  185. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  186. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  187. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  188. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  189. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  191. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  193. package/contracts/components/BaseComponent.sol +20 -23
  194. package/contracts/components/Distribution.sol +166 -0
  195. package/contracts/components/IBaseComponent.sol +8 -3
  196. package/contracts/components/IDistributionComponent.sol +43 -0
  197. package/contracts/components/IPoolComponent.sol +14 -9
  198. package/contracts/components/IProductComponent.sol +25 -9
  199. package/contracts/components/Pool.sol +115 -30
  200. package/contracts/components/Product.sol +212 -32
  201. package/contracts/experiment/cloning/Cloner.sol +47 -0
  202. package/contracts/instance/AccessManagedSimple.sol +114 -0
  203. package/contracts/instance/AccessManagerSimple.sol +682 -0
  204. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  205. package/contracts/instance/IInstance.sol +17 -42
  206. package/contracts/instance/IInstanceService.sol +17 -0
  207. package/contracts/instance/Instance.sol +420 -50
  208. package/contracts/instance/InstanceAccessManager.sol +288 -0
  209. package/contracts/instance/InstanceReader.sol +280 -0
  210. package/contracts/instance/InstanceService.sol +102 -0
  211. package/contracts/instance/InstanceServiceManager.sol +56 -0
  212. package/contracts/instance/base/ComponentServiceBase.sol +49 -0
  213. package/contracts/instance/base/IInstanceBase.sol +23 -0
  214. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  215. package/contracts/instance/base/ILifecycle.sol +30 -0
  216. package/contracts/instance/base/KeyValueStore.sol +172 -0
  217. package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
  218. package/contracts/instance/module/IAccess.sol +38 -0
  219. package/contracts/instance/module/IBundle.sol +19 -0
  220. package/contracts/instance/module/IDistribution.sol +39 -0
  221. package/contracts/instance/module/IPolicy.sol +45 -0
  222. package/contracts/instance/module/IRisk.sol +11 -0
  223. package/contracts/instance/module/ISetup.sol +43 -0
  224. package/contracts/instance/module/ITreasury.sol +23 -0
  225. package/contracts/instance/service/ComponentOwnerService.sol +244 -98
  226. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  227. package/contracts/instance/service/IDistributionService.sol +12 -0
  228. package/contracts/instance/service/IPoolService.sol +8 -1
  229. package/contracts/instance/service/IProductService.sol +56 -7
  230. package/contracts/registry/ChainNft.sol +80 -37
  231. package/contracts/registry/IRegistry.sol +60 -25
  232. package/contracts/registry/IRegistryService.sol +35 -0
  233. package/contracts/registry/ITransferInterceptor.sol +6 -0
  234. package/contracts/registry/Registry.sol +360 -267
  235. package/contracts/registry/RegistryService.sol +439 -0
  236. package/contracts/registry/RegistryServiceManager.sol +64 -0
  237. package/contracts/shared/ContractDeployerLib.sol +72 -0
  238. package/contracts/shared/INftOwnable.sol +22 -0
  239. package/contracts/shared/IRegisterable.sol +8 -15
  240. package/contracts/{instance/service → shared}/IService.sol +3 -3
  241. package/contracts/shared/IVersionable.sol +55 -11
  242. package/contracts/shared/NftOwnable.sol +136 -0
  243. package/contracts/shared/ProxyManager.sol +94 -0
  244. package/contracts/shared/Registerable.sol +62 -59
  245. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  246. package/contracts/shared/Service.sol +54 -0
  247. package/contracts/shared/TokenHandler.sol +27 -0
  248. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  249. package/contracts/shared/Versionable.sol +113 -55
  250. package/contracts/test/TestFee.sol +2 -2
  251. package/contracts/test/TestRegisterable.sol +5 -6
  252. package/contracts/test/TestRoleId.sol +2 -2
  253. package/contracts/test/TestService.sol +5 -13
  254. package/contracts/test/Usdc.sol +26 -0
  255. package/contracts/types/DistributorType.sol +55 -0
  256. package/contracts/types/Fee.sol +10 -5
  257. package/contracts/types/Key32.sol +50 -0
  258. package/contracts/types/NftId.sol +16 -1
  259. package/contracts/types/NumberId.sol +52 -0
  260. package/contracts/types/ObjectType.sol +51 -14
  261. package/contracts/types/Referral.sol +85 -0
  262. package/contracts/types/RiskId.sol +43 -0
  263. package/contracts/types/RoleId.sol +57 -11
  264. package/contracts/types/StateId.sol +8 -2
  265. package/contracts/types/Timestamp.sol +7 -3
  266. package/contracts/types/UFixed.sol +144 -25
  267. package/contracts/types/Version.sol +13 -1
  268. package/package.json +4 -3
  269. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  270. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  271. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
  272. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
  273. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  274. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  275. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  276. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  277. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  278. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  279. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  280. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
  281. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  282. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  283. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -276
  284. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  285. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  286. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  287. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  288. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  289. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  290. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  291. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  292. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  293. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  294. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  295. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  296. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  297. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  298. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  299. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  300. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  301. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  302. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  303. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  304. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  305. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  306. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  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/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  324. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
  325. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  326. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -471
  327. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  328. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -673
  329. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  330. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  331. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  332. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  333. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  334. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  335. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  336. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  337. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  338. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  339. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  340. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  341. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  342. package/contracts/experiment/statemachine/README.md +0 -112
  343. package/contracts/instance/IInstanceLinked.sol +0 -8
  344. package/contracts/instance/IServiceLinked.sol +0 -12
  345. package/contracts/instance/InstanceBase.sol +0 -71
  346. package/contracts/instance/module/access/Access.sol +0 -149
  347. package/contracts/instance/module/access/IAccess.sol +0 -53
  348. package/contracts/instance/module/bundle/BundleModule.sol +0 -228
  349. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  350. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  351. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  352. package/contracts/instance/module/component/ComponentModule.sol +0 -103
  353. package/contracts/instance/module/component/IComponent.sol +0 -53
  354. package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
  355. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  356. package/contracts/instance/module/policy/PolicyModule.sol +0 -84
  357. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  358. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  359. package/contracts/instance/module/risk/IRisk.sol +0 -10
  360. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  361. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  362. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  363. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  364. package/contracts/instance/service/ComponentServiceBase.sol +0 -41
  365. package/contracts/instance/service/PoolService.sol +0 -123
  366. package/contracts/instance/service/ProductService.sol +0 -355
  367. package/contracts/instance/service/ServiceBase.sol +0 -39
  368. package/contracts/registry/IChainNft.sol +0 -21
  369. package/contracts/registry/IRegistryLinked.sol +0 -8
  370. package/contracts/shared/IOwnable.sol +0 -6
  371. package/contracts/test/TestPool.sol +0 -22
  372. package/contracts/test/TestProduct.sol +0 -44
@@ -0,0 +1,56 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Instance} from "./Instance.sol";
5
+ import {IVersionable} from "../shared/IVersionable.sol";
6
+ import {ProxyManager} from "../shared/ProxyManager.sol";
7
+ import {InstanceService} from "./InstanceService.sol";
8
+ import {Registry} from "../registry/Registry.sol";
9
+ import {RegistryService} from "../registry/RegistryService.sol";
10
+ import {VersionLib} from "../types/Version.sol";
11
+
12
+ contract InstanceServiceManager is ProxyManager {
13
+
14
+ InstanceService private _instanceService;
15
+
16
+ /// @dev initializes proxy manager with instance service implementation and deploys instance
17
+ constructor(
18
+ address registryAddress
19
+ )
20
+ ProxyManager()
21
+ {
22
+ InstanceService instSrv = new InstanceService();
23
+ // bytes memory initCode = type(InstanceService).creationCode;
24
+ bytes memory data = abi.encode(registryAddress, address(this));
25
+ IVersionable versionable = deploy(
26
+ address(instSrv),
27
+ data);
28
+
29
+ _instanceService = InstanceService(address(versionable));
30
+
31
+ Registry registry = Registry(registryAddress);
32
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
33
+ RegistryService registryService = RegistryService(registryServiceAddress);
34
+
35
+ registryService.registerService(_instanceService);
36
+ // RegistryService registryService = _instanceService.getRegistryService();
37
+
38
+ // link ownership of instance service manager ot nft owner of instance service
39
+ _linkToNftOwnable(
40
+ address(registryAddress),
41
+ address(_instanceService));
42
+
43
+ // implies that after this constructor call only upgrade functionality is available
44
+ _isDeployed = true;
45
+ }
46
+
47
+ //--- view functions ----------------------------------------------------//
48
+ function getInstanceService()
49
+ external
50
+ view
51
+ returns (InstanceService instanceService)
52
+ {
53
+ return _instanceService;
54
+ }
55
+
56
+ }
@@ -0,0 +1,49 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {ObjectType, INSTANCE, PRODUCT, POOL} from "../../types/ObjectType.sol";
8
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
9
+
10
+ import {Service} from "../../shared/Service.sol";
11
+ import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
12
+
13
+ abstract contract ComponentServiceBase is Service {
14
+
15
+ constructor(
16
+ address registry,
17
+ NftId registryNftId,
18
+ address initialOwner
19
+ )
20
+ {
21
+ _initializeService(registry, initialOwner);
22
+ }
23
+
24
+
25
+ function _getAndVerifyComponentInfoAndInstance(
26
+ ObjectType objectType
27
+ )
28
+ internal
29
+ view
30
+ returns(
31
+ IRegistry.ObjectInfo memory info,
32
+ IInstance instance
33
+ )
34
+ {
35
+ NftId componentNftId = getRegistry().getNftId(msg.sender);
36
+ require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
37
+
38
+ info = getRegistry().getObjectInfo(componentNftId);
39
+ require(info.objectType == objectType, "OBJECT_TYPE_INVALID");
40
+
41
+ address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
42
+ instance = IInstance(instanceAddress);
43
+ }
44
+
45
+ function getRegistryService() public view virtual returns (IRegistryService) {
46
+ address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
47
+ return IRegistryService(service);
48
+ }
49
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Key32} from "../../types/Key32.sol";
5
+ import {StateId} from "../../types/StateId.sol";
6
+
7
+ import {IKeyValueStore} from "./IKeyValueStore.sol";
8
+
9
+ import {IComponentOwnerService} from "../service/IComponentOwnerService.sol";
10
+ import {IDistributionService} from "../service/IDistributionService.sol";
11
+ import {IProductService} from "../service/IProductService.sol";
12
+ import {IPoolService} from "../service/IPoolService.sol";
13
+
14
+ interface IInstanceBase {
15
+ function getKeyValueStore() external view returns (IKeyValueStore keyValueStore);
16
+ function updateState(Key32 key, StateId state) external;
17
+ function getState(Key32 key) external view returns (StateId state);
18
+
19
+ function getComponentOwnerService() external view returns(IComponentOwnerService);
20
+ function getDistributionService() external view returns(IDistributionService);
21
+ function getProductService() external view returns(IProductService service);
22
+ function getPoolService() external view returns(IPoolService service);
23
+ }
@@ -0,0 +1,49 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
5
+ import {Key32, KeyId} from "../../types/Key32.sol";
6
+ import {NftId} from "../../types/NftId.sol";
7
+ import {ObjectType} from "../../types/ObjectType.sol";
8
+ import {StateId} from "../../types/StateId.sol";
9
+
10
+ import {ILifecycle} from "./ILifecycle.sol";
11
+
12
+ // TODO remove - internal only?
13
+ interface IKeyValueStore is ILifecycle {
14
+
15
+ struct Value {
16
+ Metadata metadata;
17
+ bytes data;
18
+ }
19
+
20
+ struct Metadata {
21
+ ObjectType objectType;
22
+ StateId state;
23
+ // TODO updatedBy needs concept that says what value should go here
24
+ // eg account outside gif objects that initiated the tx
25
+ // implies the caller needs to be propagated through all calls up to key values store itself
26
+ // to always have the instance address there doesn't seem to make sense
27
+ address updatedBy;
28
+ Blocknumber updatedIn;
29
+ Blocknumber createdIn;
30
+ }
31
+
32
+ event LogInfoCreated(ObjectType objectType, KeyId keyId, StateId state, address createdBy, address txOrigin);
33
+ event LogInfoUpdated(ObjectType objectType, KeyId keyId, StateId state, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
34
+ event LogStateUpdated(ObjectType objectType, KeyId keyId, StateId stateOld, StateId stateNew, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
35
+
36
+ // generic state changing functions
37
+ // function create(Key32 key, bytes memory data) external;
38
+ // function update(Key32 key, bytes memory data, StateId state) external;
39
+ // function updateData(Key32 key, bytes memory data) external;
40
+ // function updateState(Key32 key, StateId state) external;
41
+
42
+ function exists(Key32 key) external view returns (bool);
43
+ function get(Key32 key) external view returns (Value memory value);
44
+ function getData(Key32 key) external view returns (bytes memory data);
45
+ function getMetadata(Key32 key) external view returns (Metadata memory metadata);
46
+ function getState(Key32 key) external view returns (StateId state);
47
+
48
+ function toKey32(ObjectType objectType, KeyId id) external pure returns(Key32);
49
+ }
@@ -0,0 +1,30 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {ObjectType} from "../../types/ObjectType.sol";
6
+ import {StateId} from "../../types/StateId.sol";
7
+
8
+ interface ILifecycle {
9
+
10
+ error ErrorNoLifecycle(NftId nftId, ObjectType objectType);
11
+ error ErrorInvalidStateTransition(
12
+ ObjectType objectType,
13
+ StateId fromStateId,
14
+ StateId toStateId
15
+ );
16
+
17
+ function hasLifecycle(
18
+ ObjectType objectType
19
+ ) external view returns (bool);
20
+
21
+ function getInitialState(
22
+ ObjectType objectType
23
+ ) external view returns (StateId);
24
+
25
+ function isValidTransition(
26
+ ObjectType objectType,
27
+ StateId fromId,
28
+ StateId toId
29
+ ) external view returns (bool);
30
+ }
@@ -0,0 +1,172 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
5
+ import {Key32, KeyId, Key32Lib} from "../../types/Key32.sol";
6
+ import {NftId} from "../../types/NftId.sol";
7
+ import {ObjectType} from "../../types/ObjectType.sol";
8
+ import {StateId, ACTIVE} from "../../types/StateId.sol";
9
+ import {Timestamp, TimestampLib} from "../../types/Timestamp.sol";
10
+
11
+ import {Lifecycle} from "./Lifecycle.sol";
12
+ import {IKeyValueStore} from "./IKeyValueStore.sol";
13
+
14
+ contract KeyValueStore is Lifecycle, IKeyValueStore {
15
+
16
+ mapping(Key32 key32 => Value value) private _value;
17
+
18
+ function create(
19
+ Key32 key32,
20
+ bytes memory data
21
+ )
22
+ internal
23
+ {
24
+ _create(key32, data);
25
+ }
26
+
27
+ function _create(
28
+ Key32 key32,
29
+ bytes memory data
30
+ )
31
+ internal
32
+ {
33
+ ObjectType objectType = key32.toObjectType();
34
+ require(objectType.gtz(), "ERROR:KVS-010:TYPE_UNDEFINED");
35
+
36
+ Metadata storage metadata = _value[key32].metadata;
37
+ require(metadata.state.eqz(), "ERROR:KVS-012:ALREADY_CREATED");
38
+
39
+ address createdBy = msg.sender;
40
+ Blocknumber blocknumber = blockBlocknumber();
41
+ StateId initialState = hasLifecycle(objectType) ? getInitialState(objectType) : ACTIVE();
42
+
43
+ // set metadata
44
+ metadata.objectType = objectType;
45
+ metadata.state = initialState;
46
+ metadata.updatedBy = createdBy;
47
+ metadata.updatedIn = blocknumber;
48
+ metadata.createdIn = blocknumber;
49
+
50
+ // set data
51
+ _value[key32].data = data;
52
+
53
+ // solhint-disable-next-line avoid-tx-origin
54
+ emit LogInfoCreated(key32.toObjectType(), key32.toKeyId(), initialState, createdBy, tx.origin);
55
+ }
56
+
57
+ function update(
58
+ Key32 key32,
59
+ bytes memory data,
60
+ StateId state
61
+ )
62
+ internal
63
+ {
64
+ _update(key32, data, state);
65
+ }
66
+
67
+ function _update(
68
+ Key32 key32,
69
+ bytes memory data,
70
+ StateId state
71
+ )
72
+ internal
73
+ {
74
+ require(state.gtz(), "ERROR:KVS-020:STATE_UNDEFINED");
75
+ Metadata storage metadata = _value[key32].metadata;
76
+ StateId stateOld = metadata.state;
77
+ require(stateOld.gtz(), "ERROR:KVS-021:NOT_EXISTING");
78
+
79
+ // update data
80
+ _value[key32].data = data;
81
+
82
+ // update metadata (and state)
83
+ address updatedBy = msg.sender;
84
+ Blocknumber lastUpdatedIn = metadata.updatedIn;
85
+ metadata.state = state;
86
+ metadata.updatedBy = updatedBy;
87
+ metadata.updatedIn = blockBlocknumber();
88
+
89
+ // create log entries
90
+ // solhint-disable avoid-tx-origin
91
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
92
+ emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
93
+ // solhing-enable
94
+ }
95
+
96
+ function updateData(Key32 key32, bytes memory data)
97
+ internal
98
+ {
99
+ _updateData(key32, data);
100
+ }
101
+
102
+ function _updateData(Key32 key32, bytes memory data)
103
+ internal
104
+ {
105
+ Metadata storage metadata = _value[key32].metadata;
106
+ StateId state = metadata.state;
107
+ require(state.gtz(), "ERROR:KVS-030:NOT_EXISTING");
108
+
109
+ // update data
110
+ _value[key32].data = data;
111
+
112
+ // update metadata
113
+ address updatedBy = msg.sender;
114
+ Blocknumber lastUpdatedIn = metadata.updatedIn;
115
+ metadata.updatedBy = updatedBy;
116
+ metadata.updatedIn = blockBlocknumber();
117
+
118
+ // create log entry
119
+ // solhint-disable-next-line avoid-tx-origin
120
+ emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
121
+ }
122
+
123
+ function updateState(Key32 key32, StateId state)
124
+ internal
125
+ {
126
+ _updateState(key32, state);
127
+ }
128
+
129
+ function _updateState(Key32 key32, StateId state)
130
+ internal
131
+ {
132
+ require(state.gtz(), "ERROR:KVS-040:STATE_UNDEFINED");
133
+ Metadata storage metadata = _value[key32].metadata;
134
+ StateId stateOld = metadata.state;
135
+ require(stateOld.gtz(), "ERROR:KVS-041:NOT_EXISTING");
136
+
137
+ // update metadata (and state)
138
+ address updatedBy = msg.sender;
139
+ Blocknumber lastUpdatedIn = metadata.updatedIn;
140
+ metadata.state = state;
141
+ metadata.updatedBy = updatedBy;
142
+ metadata.updatedIn = blockBlocknumber();
143
+
144
+ // create log entry
145
+ // solhint-disable-next-line avoid-tx-origin
146
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
147
+ }
148
+
149
+ function exists(Key32 key32) public view returns (bool) {
150
+ return _value[key32].metadata.state.gtz();
151
+ }
152
+
153
+ function get(Key32 key32) public view returns (Value memory value) {
154
+ return _value[key32];
155
+ }
156
+
157
+ function getMetadata(Key32 key32) public view returns (Metadata memory metadata) {
158
+ return _value[key32].metadata;
159
+ }
160
+
161
+ function getData(Key32 key32) public view returns (bytes memory data) {
162
+ return _value[key32].data;
163
+ }
164
+
165
+ function getState(Key32 key32) public view returns (StateId state) {
166
+ return _value[key32].metadata.state;
167
+ }
168
+
169
+ function toKey32(ObjectType objectType, KeyId id) external pure override returns(Key32) {
170
+ return Key32Lib.toKey32(objectType, id);
171
+ }
172
+ }
@@ -1,12 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../../../types/NftId.sol";
5
- import {ObjectType, PRODUCT, ORACLE, POOL, BUNDLE, POLICY} from "../../../types/ObjectType.sol";
6
- import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, UNDERWRITTEN, REVOKED, DECLINED} from "../../../types/StateId.sol";
7
- import {ILifecycleModule} from "./ILifecycle.sol";
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
6
+ import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, UNDERWRITTEN, REVOKED, DECLINED} from "../../types/StateId.sol";
7
+ import {ILifecycle} from "./ILifecycle.sol";
8
8
 
9
- contract LifecycleModule is ILifecycleModule {
9
+ contract Lifecycle is ILifecycle {
10
10
  mapping(ObjectType objectType => StateId initialState)
11
11
  private _initialState;
12
12
 
@@ -14,46 +14,50 @@ contract LifecycleModule is ILifecycleModule {
14
14
  private _isValidTransition;
15
15
 
16
16
  constructor() {
17
- _setupComponentLifecycle(PRODUCT());
18
- _setupComponentLifecycle(ORACLE());
19
- _setupComponentLifecycle(POOL());
20
-
21
17
  _setupBundleLifecycle();
18
+ _setupComponentLifecycle();
22
19
  _setupPolicyLifecycle();
20
+ _setupRiskLifecycle();
21
+ }
22
+
23
+ function hasLifecycle(
24
+ ObjectType objectType
25
+ )
26
+ public
27
+ view
28
+ override
29
+ returns (bool)
30
+ {
31
+ return _initialState[objectType].gtz();
32
+ }
33
+
34
+ function getInitialState(
35
+ ObjectType objectType
36
+ )
37
+ public
38
+ view
39
+ returns (StateId)
40
+ {
41
+ return _initialState[objectType];
23
42
  }
24
43
 
25
- function checkAndLogTransition(
26
- NftId nftId,
44
+ function checkTransition(
27
45
  ObjectType objectType,
28
46
  StateId fromId,
29
47
  StateId toId
30
- ) public returns (StateId) // add only currentcontract? would that work?
48
+ )
49
+ public
50
+ view
31
51
  {
32
- if (!_isValidTransition[objectType][fromId][toId]) {
33
- revert ErrorInvalidStateTransition(nftId, objectType, fromId, toId);
52
+ // return if no life cycle support
53
+ if (_initialState[objectType].eqz()) {
54
+ return;
34
55
  }
35
56
 
36
- if (objectType == POLICY()) {
37
- emit LogPolicyStateChanged(nftId, fromId, toId);
38
- } else if (objectType == BUNDLE()) {
39
- emit LogBundleStateChanged(nftId, fromId, toId);
40
- } else if (
41
- objectType == PRODUCT() ||
42
- objectType == ORACLE() ||
43
- objectType == POOL()
44
- ) {
45
- emit LogComponentStateChanged(nftId, objectType, fromId, toId);
46
- } else {
47
- revert ErrorNoLifecycle(nftId, objectType);
57
+ // enforce valid state transition
58
+ if (!_isValidTransition[objectType][fromId][toId]) {
59
+ revert ErrorInvalidStateTransition(objectType, fromId, toId);
48
60
  }
49
-
50
- return toId;
51
- }
52
-
53
- function getInitialState(
54
- ObjectType objectType
55
- ) public view returns (StateId) {
56
- return _initialState[objectType];
57
61
  }
58
62
 
59
63
  function isValidTransition(
@@ -64,11 +68,11 @@ contract LifecycleModule is ILifecycleModule {
64
68
  return _isValidTransition[objectType][fromId][toId];
65
69
  }
66
70
 
67
- function _setupComponentLifecycle(ObjectType objectType) internal {
68
- _initialState[objectType] = ACTIVE();
69
- _isValidTransition[objectType][ACTIVE()][PAUSED()] = true;
70
- _isValidTransition[objectType][PAUSED()][ACTIVE()] = true;
71
- _isValidTransition[objectType][PAUSED()][ARCHIVED()] = true;
71
+ function _setupComponentLifecycle() internal {
72
+ _initialState[COMPONENT()] = ACTIVE();
73
+ _isValidTransition[COMPONENT()][ACTIVE()][PAUSED()] = true;
74
+ _isValidTransition[COMPONENT()][PAUSED()][ACTIVE()] = true;
75
+ _isValidTransition[COMPONENT()][PAUSED()][ARCHIVED()] = true;
72
76
  }
73
77
 
74
78
  function _setupBundleLifecycle() internal {
@@ -86,4 +90,11 @@ contract LifecycleModule is ILifecycleModule {
86
90
  _isValidTransition[POLICY()][UNDERWRITTEN()][ACTIVE()] = true;
87
91
  _isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
88
92
  }
93
+
94
+ function _setupRiskLifecycle() internal {
95
+ _initialState[RISK()] = ACTIVE();
96
+ _isValidTransition[RISK()][ACTIVE()][PAUSED()] = true;
97
+ _isValidTransition[RISK()][PAUSED()][ACTIVE()] = true;
98
+ _isValidTransition[RISK()][PAUSED()][ARCHIVED()] = true;
99
+ }
89
100
  }
@@ -0,0 +1,38 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
5
+ import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
6
+
7
+ import {RoleId} from "../../types/RoleId.sol";
8
+
9
+ interface IAccess {
10
+ struct RoleInfo {
11
+ ShortString name;
12
+ bool isCustom;
13
+ }
14
+
15
+ struct TargetInfo {
16
+ ShortString name;
17
+ bool isCustom;
18
+ }
19
+
20
+ error ErrorTargetAddressZero();
21
+ error ErrorTargetAlreadyExists(address target, ShortString name);
22
+ error ErrorTargetDoesNotExist(address target);
23
+ error ErrorTargetNameEmpty(address target);
24
+ error ErrorTargetNameExists(address target, address existingTarget, ShortString name);
25
+
26
+ error ErrorRoleIdInvalid(RoleId roleId);
27
+ error ErrorRoleIdTooBig(RoleId roleId);
28
+ error ErrorRoleIdTooSmall(RoleId roleId);
29
+ error ErrorRoleIdAlreadyExists(RoleId roleId, ShortString name);
30
+ error ErrorRoleIdNotActive(RoleId roleId);
31
+ error ErrorRoleNameEmpty(RoleId roleId);
32
+ error ErrorRoleNameNotUnique(RoleId roleId, ShortString name);
33
+ error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
34
+ error ErrorGrantNonexstentRole(RoleId roleId);
35
+ error ErrorRevokeNonexstentRole(RoleId roleId);
36
+ error ErrorRenounceNonexstentRole(RoleId roleId);
37
+
38
+ }
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {Timestamp} from "../../types/Timestamp.sol";
7
+
8
+ interface IBundle {
9
+ struct BundleInfo {
10
+ NftId poolNftId;
11
+ Fee fee; // bundle fee on net premium amounts
12
+ bytes filter; // required conditions for applications to be considered for collateralization by this bundle
13
+ uint256 capitalAmount; // net investment capital + net premiums - payouts
14
+ uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
15
+ uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
16
+ Timestamp expiredAt; // no new policies
17
+ Timestamp closedAt; // no open policies, locked amount = 0
18
+ }
19
+ }
@@ -0,0 +1,39 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {DistributorType} from "../../types/DistributorType.sol";
5
+ import {NftId} from "../../types/NftId.sol";
6
+ import {Timestamp} from "../../types/Timestamp.sol";
7
+ import {UFixed} from "../../types/UFixed.sol";
8
+
9
+ interface IDistribution {
10
+
11
+ struct DistributorTypeInfo {
12
+ string name;
13
+ UFixed minDiscountPercentage;
14
+ UFixed maxDiscountPercentage;
15
+ UFixed commissionPercentage;
16
+ uint32 maxReferralCount;
17
+ uint32 maxReferralLifetime;
18
+ bool allowSelfReferrals;
19
+ bool allowRenewals;
20
+ bytes data;
21
+ }
22
+
23
+ struct DistributorInfo {
24
+ DistributorType distributorType;
25
+ bool active;
26
+ bytes data;
27
+ }
28
+
29
+ struct ReferralInfo {
30
+ NftId distributorNftId;
31
+ string referralCode;
32
+ UFixed discountPercentage;
33
+ uint32 maxReferrals;
34
+ uint32 usedReferrals;
35
+ Timestamp expiryAt;
36
+ bytes data;
37
+ }
38
+
39
+ }
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {NumberId} from "../../types/NumberId.sol";
6
+ import {ReferralId} from "../../types/Referral.sol";
7
+ import {RiskId} from "../../types/RiskId.sol";
8
+ import {Timestamp} from "../../types/Timestamp.sol";
9
+
10
+ interface IPolicy {
11
+ struct PolicyInfo {
12
+ NftId productNftId;
13
+ NftId bundleNftId;
14
+ ReferralId referralId;
15
+ RiskId riskId;
16
+ uint256 sumInsuredAmount;
17
+ uint256 premiumAmount;
18
+ uint256 premiumPaidAmount;
19
+ uint256 lifetime;
20
+ bytes applicationData;
21
+ bytes policyData;
22
+ uint16 claimsCount;
23
+ uint16 openClaimsCount;
24
+ uint256 payoutAmount;
25
+ Timestamp activatedAt; // time of underwriting
26
+ Timestamp expiredAt; // no new claims (activatedAt + lifetime)
27
+ Timestamp closedAt; // no locked capital (or declinedAt)
28
+ }
29
+
30
+ // claimId neeeds to be encoded policyNftId:claimId combination
31
+ struct ClaimInfo {
32
+ uint256 claimAmount;
33
+ uint256 paidAmount;
34
+ bytes data;
35
+ Timestamp closedAt; // payoment of confirmed claim amount (or declinedAt)
36
+ }
37
+
38
+ // claimId neeeds to be encoded policyNftId:claimId combination
39
+ struct PayoutInfo {
40
+ NumberId claimId;
41
+ uint256 amount;
42
+ bytes data;
43
+ Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
44
+ }
45
+ }
@@ -0,0 +1,11 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+
6
+ interface IRisk {
7
+ struct RiskInfo {
8
+ NftId productNftId;
9
+ bytes data;
10
+ }
11
+ }