@etherisc/gif-next 0.0.2-f74fcad-685 → 0.0.2-f7b8c9f-436

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 (392) hide show
  1. package/README.md +160 -6
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/{instance/component/ComponentModule.sol/ComponentModule.json → components/BaseComponent.sol/BaseComponent.json} +152 -150
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +557 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +115 -116
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +177 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +308 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +207 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +471 -83
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +345 -77
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  34. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  36. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1430 -660
  40. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +1759 -801
  44. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +481 -0
  46. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  48. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  50. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  52. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/IService.sol/IService.json +421 -0
  54. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +544 -0
  56. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  58. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  60. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  62. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +468 -0
  64. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  65. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  66. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  67. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  68. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  69. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  70. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +297 -0
  72. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  74. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +297 -0
  76. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPoolModule.json → module/component/ComponentModule.sol/ComponentModule.json} +49 -61
  78. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  80. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +51 -61
  82. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  84. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.json +10 -0
  86. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
  88. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  90. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +136 -119
  92. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +137 -120
  94. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  96. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +164 -0
  98. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +66 -57
  100. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  102. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  103. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +113 -0
  104. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +131 -0
  106. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  107. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
  108. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +638 -0
  110. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  111. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  112. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  113. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +638 -0
  114. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +794 -0
  116. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +630 -0
  118. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  120. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  122. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +561 -0
  124. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +751 -0
  126. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +753 -0
  128. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +1068 -0
  130. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  131. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +194 -2
  132. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  133. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
  134. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  135. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +408 -32
  136. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  137. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +745 -0
  138. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  139. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  140. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  141. package/artifacts/contracts/registry/Registry.sol/Registry.json +637 -52
  142. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  143. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +997 -0
  144. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  145. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +468 -0
  146. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  147. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  148. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  149. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  150. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  152. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  153. package/artifacts/contracts/{components/Component.sol/Component.json → shared/IRegisterable.sol/IRegisterable.json} +98 -102
  154. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  155. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  156. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  158. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  159. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  160. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  161. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  162. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  163. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  164. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  165. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  166. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +557 -0
  168. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  170. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestPool.sol/TestPool.json +716 -0
  172. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +744 -0
  174. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  176. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  177. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  178. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  179. package/artifacts/contracts/test/TestService.sol/TestService.json +584 -0
  180. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  181. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  182. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  183. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  184. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  185. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +270 -0
  186. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  187. package/artifacts/contracts/{mock → test}/Usdc.sol/USDC.json +3 -3
  188. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  189. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  190. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  194. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  196. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  198. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  199. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  200. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  202. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  204. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  206. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  212. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +58 -58
  214. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  218. package/contracts/components/BaseComponent.sol +79 -0
  219. package/contracts/components/Distribution.sol +155 -0
  220. package/contracts/components/IBaseComponent.sol +19 -0
  221. package/contracts/components/IDistributionComponent.sol +46 -0
  222. package/contracts/components/IPoolComponent.sol +64 -0
  223. package/contracts/components/IProductComponent.sol +37 -0
  224. package/contracts/components/Pool.sol +218 -24
  225. package/contracts/components/Product.sol +248 -38
  226. package/contracts/instance/IInstance.sol +40 -11
  227. package/contracts/instance/IInstanceLinked.sol +8 -0
  228. package/contracts/instance/Instance.sol +60 -45
  229. package/contracts/instance/base/ComponentServiceBase.sol +49 -0
  230. package/contracts/instance/base/IInstanceBase.sol +23 -0
  231. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  232. package/contracts/instance/{lifecycle → base}/ILifecycle.sol +4 -21
  233. package/contracts/instance/base/IService.sol +15 -0
  234. package/contracts/instance/base/InstanceBase.sol +89 -0
  235. package/contracts/instance/base/KeyValueStore.sol +161 -0
  236. package/contracts/instance/base/Lifecycle.sol +100 -0
  237. package/contracts/instance/base/ModuleBase.sol +57 -0
  238. package/contracts/instance/base/ServiceBase.sol +44 -0
  239. package/contracts/instance/module/access/Access.sol +149 -0
  240. package/contracts/instance/module/access/IAccess.sol +53 -0
  241. package/contracts/instance/module/bundle/BundleModule.sol +134 -0
  242. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  243. package/contracts/instance/module/component/ComponentModule.sol +71 -0
  244. package/contracts/instance/module/component/IComponent.sol +28 -0
  245. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  246. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  247. package/contracts/instance/module/policy/IPolicy.sol +63 -0
  248. package/contracts/instance/module/policy/PolicyModule.sol +91 -0
  249. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  250. package/contracts/instance/module/pool/PoolModule.sol +95 -0
  251. package/contracts/instance/module/risk/IRisk.sol +26 -0
  252. package/contracts/instance/module/risk/RiskModule.sol +62 -0
  253. package/contracts/instance/module/treasury/ITreasury.sol +84 -0
  254. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  255. package/contracts/instance/module/treasury/TreasuryModule.sol +131 -0
  256. package/contracts/instance/service/ComponentOwnerService.sol +275 -0
  257. package/contracts/instance/service/DistributionService.sol +54 -0
  258. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  259. package/contracts/instance/service/IDistributionService.sol +12 -0
  260. package/contracts/instance/service/IPoolService.sol +37 -0
  261. package/contracts/instance/service/IProductService.sol +107 -0
  262. package/contracts/instance/service/PoolService.sol +149 -0
  263. package/contracts/instance/service/ProductService.sol +510 -0
  264. package/contracts/registry/ChainNft.sol +94 -42
  265. package/contracts/registry/IChainNft.sol +3 -2
  266. package/contracts/registry/IRegistry.sol +50 -44
  267. package/contracts/registry/IRegistryService.sol +29 -0
  268. package/contracts/registry/ITransferInterceptor.sol +6 -0
  269. package/contracts/registry/Registry.sol +435 -126
  270. package/contracts/registry/RegistryService.sol +368 -0
  271. package/contracts/registry/RegistryServiceManager.sol +43 -0
  272. package/contracts/shared/ContractDeployerLib.sol +72 -0
  273. package/contracts/shared/ERC165.sol +21 -0
  274. package/contracts/shared/INftOwnable.sol +22 -0
  275. package/contracts/shared/IRegisterable.sol +17 -0
  276. package/contracts/shared/IVersionable.sol +96 -0
  277. package/contracts/shared/NftOwnable.sol +136 -0
  278. package/contracts/shared/ProxyManager.sol +94 -0
  279. package/contracts/shared/Registerable.sol +89 -0
  280. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  281. package/contracts/shared/Versionable.sol +147 -0
  282. package/contracts/test/TestDistribution.sol +22 -0
  283. package/contracts/test/TestFee.sol +25 -0
  284. package/contracts/test/TestPool.sol +27 -0
  285. package/contracts/test/TestProduct.sol +74 -0
  286. package/contracts/test/TestRegisterable.sol +18 -0
  287. package/contracts/test/TestRoleId.sol +14 -0
  288. package/contracts/test/TestService.sol +26 -0
  289. package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
  290. package/contracts/test/TestVersion.sol +44 -0
  291. package/contracts/test/TestVersionable.sol +17 -0
  292. package/contracts/{mock → test}/Usdc.sol +1 -1
  293. package/contracts/types/AddressSet.sol +58 -0
  294. package/contracts/types/Fee.sol +44 -20
  295. package/contracts/types/Key32.sol +45 -0
  296. package/contracts/types/NftId.sol +22 -1
  297. package/contracts/types/NftIdSet.sol +60 -0
  298. package/contracts/types/ObjectType.sol +37 -13
  299. package/contracts/types/ReferralId.sol +48 -0
  300. package/contracts/types/RiskId.sol +43 -0
  301. package/contracts/types/RoleId.sol +38 -0
  302. package/contracts/types/StateId.sol +13 -3
  303. package/contracts/types/Timestamp.sol +22 -1
  304. package/contracts/types/UFixed.sol +12 -13
  305. package/contracts/types/Version.sol +104 -0
  306. package/package.json +8 -3
  307. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  308. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  309. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  310. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  311. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  312. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  313. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  314. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  315. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  316. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  317. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  318. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  319. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  320. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  322. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  323. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  324. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  325. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  326. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  327. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  328. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  329. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  330. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  331. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  332. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  333. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  336. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  337. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  340. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  344. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  345. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  347. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  348. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  349. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  350. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  352. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  353. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  354. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  355. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  356. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  357. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  358. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  359. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  360. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  361. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  362. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  363. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  364. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  365. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  366. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  367. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  368. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  369. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  370. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  371. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  372. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  373. package/contracts/components/Component.sol +0 -77
  374. package/contracts/components/IPool.sol +0 -15
  375. package/contracts/components/IProduct.sol +0 -16
  376. package/contracts/experiment/statemachine/README.md +0 -112
  377. package/contracts/instance/access/Access.sol +0 -165
  378. package/contracts/instance/access/IAccess.sol +0 -63
  379. package/contracts/instance/component/ComponentModule.sol +0 -274
  380. package/contracts/instance/component/IComponent.sol +0 -74
  381. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  382. package/contracts/instance/policy/IPolicy.sol +0 -50
  383. package/contracts/instance/policy/PolicyModule.sol +0 -114
  384. package/contracts/instance/pool/IPoolModule.sol +0 -23
  385. package/contracts/instance/pool/PoolModule.sol +0 -81
  386. package/contracts/instance/product/IProductService.sol +0 -36
  387. package/contracts/instance/product/ProductService.sol +0 -136
  388. package/contracts/instance/treasury/ITreasury.sol +0 -91
  389. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  390. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  391. package/contracts/mock/TestPool.sol +0 -16
  392. package/contracts/mock/TestProduct.sol +0 -39
@@ -0,0 +1,57 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+
6
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
7
+ import {Key32, KeyId} from "../../types/Key32.sol";
8
+ import {LibNftIdSet} from "../../types/NftIdSet.sol";
9
+ import {NftId} from "../../types/NftId.sol";
10
+ import {ObjectType, PRODUCT, ORACLE, POOL, BUNDLE, POLICY} from "../../types/ObjectType.sol";
11
+ import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, REVOKED, DECLINED} from "../../types/StateId.sol";
12
+ import {Timestamp, blockTimestamp, zeroTimestamp} from "../../types/Timestamp.sol";
13
+
14
+ import {IKeyValueStore} from "./IKeyValueStore.sol";
15
+
16
+ abstract contract ModuleBase {
17
+
18
+ IKeyValueStore private _store;
19
+
20
+ function _initialize(IKeyValueStore keyValueStore) internal {
21
+ _store = keyValueStore;
22
+ }
23
+
24
+ function _create(ObjectType objectType, Key32 key, bytes memory data) internal {
25
+ _store.create(
26
+ key,
27
+ objectType,
28
+ data);
29
+ }
30
+
31
+ function _create(ObjectType objectType, NftId nftId, bytes memory data) internal {
32
+ _store.create(
33
+ nftId.toKey32(objectType),
34
+ objectType,
35
+ data);
36
+ }
37
+
38
+ function _updateData(ObjectType objectType, NftId nftId, bytes memory data) internal {
39
+ _store.updateData(nftId.toKey32(objectType), data);
40
+ }
41
+
42
+ function _updateState(ObjectType objectType, NftId nftId, StateId state) internal {
43
+ _store.updateState(nftId.toKey32(objectType), state);
44
+ }
45
+
46
+ function _exists(ObjectType objectType, NftId nftId) internal view returns (bool hasData) {
47
+ return _store.exists(nftId.toKey32(objectType));
48
+ }
49
+
50
+ function _getData(ObjectType objectType, NftId nftId) internal view returns(bytes memory data) {
51
+ return _store.getData(nftId.toKey32(objectType));
52
+ }
53
+
54
+ function _getState(ObjectType objectType, NftId nftId) internal view returns(StateId) {
55
+ return _store.getState(nftId.toKey32(objectType));
56
+ }
57
+ }
@@ -0,0 +1,44 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId, zeroNftId} from "../../types/NftId.sol";
5
+ import {ObjectType, SERVICE} from "../../types/ObjectType.sol";
6
+ import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
7
+
8
+ import {Registerable} from "../../shared/Registerable.sol";
9
+ import {IRegistry} from "../../registry/IRegistry.sol";
10
+ import {IVersionable} from "../../shared/IVersionable.sol";
11
+ import {Versionable} from "../../shared/Versionable.sol";
12
+
13
+ import {IService} from "./IService.sol";
14
+
15
+ abstract contract ServiceBase is
16
+ Registerable,
17
+ Versionable,
18
+ IService
19
+ {
20
+ function getName() public pure virtual override returns(string memory name);
21
+
22
+ function getMajorVersion() public view virtual override returns(VersionPart majorVersion) {
23
+ return getVersion().toMajorPart();
24
+ }
25
+
26
+ // from Versionable
27
+ function getVersion()
28
+ public
29
+ pure
30
+ virtual override (IVersionable, Versionable)
31
+ returns(Version)
32
+ {
33
+ return VersionLib.toVersion(3,0,0);
34
+ }
35
+
36
+ function _initializeServiceBase(address registry, NftId registryNftId, address initialOwner)
37
+ internal
38
+ //onlyInitializing //TODO uncomment when "fully" upgradeable
39
+ {// service must provide its name and version upon registration
40
+ bytes memory data = abi.encode(getName(), getMajorVersion());
41
+ _initializeRegisterable(registry, registryNftId, SERVICE(), false, initialOwner, data);
42
+ _registerInterface(type(IService).interfaceId);
43
+ }
44
+ }
@@ -0,0 +1,149 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ // role admin handling of oz doesn't fit nft ownability
5
+ // import {AccessControlEnumerable} from "@openzeppelin/contracts/access/AccessControlEnumerable.sol";
6
+ import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
7
+
8
+ import {RoleId, RoleIdLib} from "../../../types/RoleId.sol";
9
+ import {DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../../../types/RoleId.sol";
10
+ import {DISTRIBUTION_OWNER_ROLE_NAME, ORACLE_OWNER_ROLE_NAME, POOL_OWNER_ROLE_NAME, PRODUCT_OWNER_ROLE_NAME} from "../../../types/RoleId.sol";
11
+ import {IAccessModule} from "./IAccess.sol";
12
+
13
+ abstract contract AccessModule is IAccessModule {
14
+
15
+ using EnumerableSet for EnumerableSet.AddressSet;
16
+
17
+ mapping(RoleId role => RoleInfo info) private _info;
18
+ RoleId[] private _roles;
19
+
20
+ mapping(RoleId role => mapping(address member => bool isMember))
21
+ private _isRoleMember;
22
+ mapping(RoleId role => EnumerableSet.AddressSet members) private _roleMembers;
23
+
24
+ modifier onlyAccessOwner() {
25
+ require(
26
+ msg.sender == this.getOwner(),
27
+ "ERROR:ACS-001:NOT_OWNER");
28
+ _;
29
+ }
30
+
31
+ modifier onlyExistingRole(RoleId role) {
32
+ require(
33
+ _info[role].id == role,
34
+ "ERROR:ACS-002:ROLE_NOT_EXISTING");
35
+ _;
36
+ }
37
+
38
+ constructor() {
39
+ _createRole(DISTRIBUTION_OWNER_ROLE(), DISTRIBUTION_OWNER_ROLE_NAME());
40
+ _createRole(ORACLE_OWNER_ROLE(), ORACLE_OWNER_ROLE_NAME());
41
+ _createRole(POOL_OWNER_ROLE(), POOL_OWNER_ROLE_NAME());
42
+ _createRole(PRODUCT_OWNER_ROLE(), PRODUCT_OWNER_ROLE_NAME());
43
+ }
44
+
45
+ function createRole(
46
+ string memory roleName
47
+ ) public override onlyAccessOwner returns (RoleId role) {
48
+ role = RoleIdLib.toRoleId(roleName);
49
+ require(
50
+ !roleExists(role),
51
+ "ERROR:ACS-010:ROLE_ALREADY_EXISTS");
52
+
53
+ _createRole(role, roleName);
54
+ }
55
+
56
+ function setRoleState(RoleId role, bool active) external override onlyExistingRole(role) onlyAccessOwner {
57
+ RoleInfo memory info = _info[role];
58
+ info.isActive = active;
59
+ _setRoleInfo(info);
60
+
61
+ emit LogAccessRoleStateSet(role, active);
62
+ }
63
+
64
+ function grantRole(
65
+ RoleId role,
66
+ address member
67
+ ) external override onlyExistingRole(role) onlyAccessOwner {
68
+ require(_info[role].isActive, "ERROR:ACS-040:ROLE_NOT_ACTIVE");
69
+
70
+ _isRoleMember[role][member] = true;
71
+ _roleMembers[role].add(member);
72
+
73
+ emit LogAccessRoleGranted(role, member, _isRoleMember[role][member]);
74
+ }
75
+
76
+ function revokeRole(
77
+ RoleId role,
78
+ address member
79
+ ) external override onlyExistingRole(role) onlyAccessOwner {
80
+ delete _isRoleMember[role][member];
81
+ _roleMembers[role].remove(member);
82
+
83
+ emit LogAccessRoleGranted(role, member, false);
84
+ }
85
+
86
+ function roleExists(RoleId role) public view virtual override returns (bool) {
87
+ return _info[role].id == role;
88
+ }
89
+
90
+ function hasRole(
91
+ RoleId role,
92
+ address member
93
+ ) public view virtual override returns (bool) {
94
+ return _isRoleMember[role][member];
95
+ }
96
+
97
+ function getRoleId(string memory roleName) external pure override returns (RoleId role) {
98
+ return RoleIdLib.toRoleId(roleName);
99
+ }
100
+
101
+ function getRoleInfo(
102
+ RoleId role
103
+ ) external view override returns (RoleInfo memory info) {
104
+ return _info[role];
105
+ }
106
+
107
+ function getRole(
108
+ uint256 idx
109
+ ) external view override returns (RoleId role) {
110
+ return _roles[idx];
111
+ }
112
+
113
+ function getRoleCount() external view override returns (uint256 roles) {
114
+ return _roles.length;
115
+ }
116
+
117
+ function getRoleMemberCount(
118
+ RoleId role
119
+ ) public view override returns (uint256 roleMembers) {
120
+ return _roleMembers[role].length();
121
+ }
122
+
123
+ function getRoleMember(
124
+ RoleId role,
125
+ uint256 idx
126
+ ) public view override returns (address roleMembers) {
127
+ return _roleMembers[role].at(idx);
128
+ }
129
+
130
+ function _createRole(
131
+ RoleId role,
132
+ string memory roleName
133
+ ) internal {
134
+ RoleInfo memory info = RoleInfo(role, roleName, true);
135
+ _setRoleInfo(info);
136
+
137
+ emit LogAccessRoleCreated(role, roleName);
138
+ }
139
+
140
+ function _setRoleInfo(
141
+ RoleInfo memory info
142
+ ) internal {
143
+ RoleId role = info.id;
144
+ _info[role] = info;
145
+ if(!roleExists(role)) {
146
+ _roles.push(role);
147
+ }
148
+ }
149
+ }
@@ -0,0 +1,53 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {RoleId} from "../../../types/RoleId.sol";
5
+
6
+ interface IAccess {
7
+ struct RoleInfo {
8
+ RoleId id;
9
+ string name;
10
+ bool isActive;
11
+ }
12
+ }
13
+
14
+ interface IAccessModule is
15
+ IAccess
16
+ {
17
+ event LogAccessRoleCreated(RoleId role, string roleName);
18
+ event LogAccessRoleStateSet(RoleId role, bool active);
19
+ event LogAccessRoleGranted(RoleId role, address member, bool isMember);
20
+
21
+ function createRole(string memory roleName) external returns (RoleId role);
22
+
23
+ function setRoleState(RoleId role, bool active) external;
24
+
25
+ function grantRole(RoleId role, address member) external;
26
+
27
+ function revokeRole(RoleId role, address member) external;
28
+
29
+ function roleExists(RoleId role) external view returns (bool);
30
+
31
+ function hasRole(RoleId role, address member) external view returns (bool);
32
+
33
+ function getRoleCount() external view returns (uint256 roles);
34
+
35
+ function getRole(uint256 idx) external view returns (RoleId role);
36
+
37
+ function getRoleId(string memory roleName) external pure returns (RoleId role);
38
+
39
+ function getRoleInfo(
40
+ RoleId role
41
+ ) external view returns (RoleInfo memory info);
42
+
43
+ function getRoleMemberCount(
44
+ RoleId role
45
+ ) external view returns (uint256 roleMembers);
46
+
47
+ function getRoleMember(
48
+ RoleId role,
49
+ uint256 idx
50
+ ) external view returns (address roleMember);
51
+
52
+ function getOwner() external view returns (address owner);
53
+ }
@@ -0,0 +1,134 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../../registry/IRegistry.sol";
5
+
6
+ import {IProductService} from "../../service/IProductService.sol";
7
+ import {IPoolService} from "../../service/IPoolService.sol";
8
+
9
+ import {Fee} from "../../../types/Fee.sol";
10
+ import {NftId} from "../../../types/NftId.sol";
11
+ import {Key32, KeyId} from "../../../types/Key32.sol";
12
+ import {LibNftIdSet} from "../../../types/NftIdSet.sol";
13
+ import {ObjectType, PRODUCT, ORACLE, POOL, BUNDLE, POLICY} from "../../../types/ObjectType.sol";
14
+ import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, REVOKED, DECLINED} from "../../../types/StateId.sol";
15
+ import {Timestamp, blockTimestamp, zeroTimestamp} from "../../../types/Timestamp.sol";
16
+ import {Blocknumber, blockNumber} from "../../../types/Blocknumber.sol";
17
+
18
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
19
+ import {ModuleBase} from "../../base/ModuleBase.sol";
20
+
21
+ import {IBundleModule} from "./IBundle.sol";
22
+
23
+ abstract contract BundleModule is
24
+ ModuleBase,
25
+ IBundleModule
26
+ {
27
+
28
+ using LibNftIdSet for LibNftIdSet.Set;
29
+
30
+ mapping(NftId bundleNftId => LibNftIdSet.Set policies) private _collateralizedPolicies;
31
+ mapping(NftId bundleNftId => mapping(NftId policyNftId => uint256 amount)) private _collateralizationAmount;
32
+
33
+ modifier onlyBundlePoolService() {
34
+ require(
35
+ msg.sender == address(this.getPoolService()),
36
+ "ERROR:BDL-001:NOT_POOL_SERVICE"
37
+ );
38
+ _;
39
+ }
40
+
41
+ modifier onlyBundleProductService() {
42
+ require(
43
+ msg.sender == address(this.getProductService()),
44
+ "ERROR:BDL-002:NOT_PRODUCT_SERVICE"
45
+ );
46
+ _;
47
+ }
48
+
49
+ modifier onlyPoolOrProductService() {
50
+ require(
51
+ msg.sender == address(this.getPoolService())
52
+ || msg.sender == address(this.getProductService()),
53
+ "ERROR:BDL-003:NOT_POOL_OR_PRODUCT_SERVICE"
54
+ );
55
+ _;
56
+ }
57
+
58
+ function initializeBundleModule(IKeyValueStore keyValueStore) internal {
59
+ _initialize(keyValueStore);
60
+ }
61
+
62
+ function createBundleInfo(
63
+ NftId bundleNftId,
64
+ NftId poolNftId,
65
+ Fee memory fee,
66
+ uint256 amount,
67
+ uint256 lifetime,
68
+ bytes calldata filter
69
+ )
70
+ external
71
+ onlyBundlePoolService
72
+ override
73
+ {
74
+ BundleInfo memory info = BundleInfo(
75
+ poolNftId,
76
+ fee,
77
+ filter,
78
+ amount, // capital
79
+ 0, // locked capital
80
+ amount, // balance
81
+ blockTimestamp().addSeconds(lifetime), // expiredAt
82
+ zeroTimestamp() // closedAt
83
+ );
84
+
85
+ _create(BUNDLE(), bundleNftId, abi.encode(info));
86
+ }
87
+
88
+ function setBundleInfo(NftId bundleNftId, BundleInfo memory info)
89
+ external
90
+ override
91
+ onlyPoolOrProductService
92
+ {
93
+ _updateData(BUNDLE(), bundleNftId, abi.encode(info));
94
+ }
95
+
96
+ function updateBundleState(NftId bundleNftId, StateId state)
97
+ external
98
+ override
99
+ onlyBundlePoolService
100
+ {
101
+ _updateState(BUNDLE(), bundleNftId, state);
102
+ }
103
+
104
+ function collateralizePolicy(
105
+ NftId bundleNftId,
106
+ NftId policyNftId,
107
+ uint256 collateralAmount
108
+ )
109
+ external
110
+ onlyBundleProductService
111
+ override
112
+ {
113
+ _collateralizationAmount[bundleNftId][policyNftId] = collateralAmount;
114
+ _collateralizedPolicies[bundleNftId].add(policyNftId);
115
+ }
116
+
117
+ function releasePolicy(
118
+ NftId bundleNftId,
119
+ NftId policyNftId
120
+ )
121
+ external
122
+ onlyBundleProductService
123
+ override
124
+ returns(uint256 collateralAmount)
125
+ {
126
+ collateralAmount = _collateralizationAmount[bundleNftId][policyNftId];
127
+ delete _collateralizationAmount[bundleNftId][policyNftId];
128
+ _collateralizedPolicies[bundleNftId].remove(policyNftId);
129
+ }
130
+
131
+ function getBundleInfo(NftId bundleNftId) external view override returns(BundleInfo memory bundleInfo) {
132
+ return abi.decode(_getData(BUNDLE(), bundleNftId), (BundleInfo));
133
+ }
134
+ }
@@ -0,0 +1,53 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../../registry/IRegistry.sol";
5
+ import {IInstance} from "../../IInstance.sol";
6
+ import {Fee} from "../../../types/Fee.sol";
7
+ import {Key32} from "../../../types/Key32.sol";
8
+ import {NftId} from "../../../types/NftId.sol";
9
+ import {StateId} from "../../../types/StateId.sol";
10
+ import {Timestamp} from "../../../types/Timestamp.sol";
11
+ import {Blocknumber} from "../../../types/Blocknumber.sol";
12
+
13
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
14
+ import {IProductService} from "../../service/IProductService.sol";
15
+ import {IPoolService} from "../../service/IPoolService.sol";
16
+
17
+ interface IBundle {
18
+
19
+ struct BundleInfo {
20
+ NftId poolNftId;
21
+ Fee fee; // bundle fee on net premium amounts
22
+ bytes filter; // required conditions for applications to be considered for collateralization by this bundle
23
+ uint256 capitalAmount; // net investment capital amount (<= balance)
24
+ uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
25
+ uint256 balanceAmount; // total amount of funds: net investment capital + net premiums - payouts
26
+ Timestamp expiredAt; // no new policies
27
+ Timestamp closedAt;
28
+ }
29
+ }
30
+
31
+ interface IBundleModule is IBundle {
32
+
33
+ function createBundleInfo(
34
+ NftId bundleNftId,
35
+ NftId poolNftId,
36
+ Fee memory fee,
37
+ uint256 amount,
38
+ uint256 lifetime,
39
+ bytes calldata filter
40
+ ) external;
41
+
42
+ function setBundleInfo(NftId nftId, BundleInfo memory bundleInfo) external;
43
+ function updateBundleState(NftId nftId, StateId state) external;
44
+
45
+ function collateralizePolicy(NftId bundleNftId, NftId policyNftId, uint256 amount) external;
46
+ function releasePolicy(NftId bundleNftId, NftId policyNftId) external returns(uint256 collateralAmount);
47
+
48
+ function getBundleInfo(NftId nftId) external view returns(BundleInfo memory bundleInfo);
49
+
50
+ // repeat service linked signatures to avoid linearization issues
51
+ function getProductService() external returns(IProductService);
52
+ function getPoolService() external returns(IPoolService);
53
+ }
@@ -0,0 +1,71 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
6
+ import {IComponentModule} from "./IComponent.sol";
7
+
8
+ import {NftId} from "../../../types/NftId.sol";
9
+ import {ObjectType, COMPONENT} from "../../../types/ObjectType.sol";
10
+ import {StateId} from "../../../types/StateId.sol";
11
+ import {ModuleBase} from "../../base/ModuleBase.sol";
12
+
13
+ abstract contract ComponentModule is
14
+ ModuleBase,
15
+ IComponentModule
16
+ {
17
+
18
+ NftId[] private _nftIds;
19
+
20
+ // TODO try to keep 1 modifier in 1 place...
21
+ modifier onlyComponentOwnerService() virtual {
22
+ require(
23
+ msg.sender == address(this.getComponentOwnerService()),
24
+ "ERROR:CMP-001:NOT_COMPONENT_OWNER_SERVICE"
25
+ );
26
+ _;
27
+ }
28
+
29
+ function initializeComponentModule(IKeyValueStore keyValueStore) internal {
30
+ _initialize(keyValueStore);
31
+ }
32
+
33
+ function registerComponent(
34
+ NftId nftId,
35
+ IERC20Metadata token,
36
+ address wallet
37
+ )
38
+ external
39
+ onlyComponentOwnerService
40
+ override
41
+ {
42
+ ComponentInfo memory info = ComponentInfo(token, wallet);
43
+ _nftIds.push(nftId);
44
+ _create(COMPONENT(), nftId, abi.encode(info));
45
+ }
46
+
47
+ function getComponentToken(NftId nftId) external view override returns(IERC20Metadata token) {
48
+ ComponentInfo memory info = abi.decode(_getData(COMPONENT(), nftId), (ComponentInfo));
49
+ return info.token;
50
+ }
51
+
52
+ function getComponentWallet(NftId nftId) external view override returns (address wallet) {
53
+ ComponentInfo memory info = abi.decode(_getData(COMPONENT(), nftId), (ComponentInfo));
54
+ return info.wallet;
55
+ }
56
+
57
+ function getComponentCount()
58
+ external
59
+ view
60
+ override
61
+ returns (uint256 numberOfCompnents)
62
+ {
63
+ return _nftIds.length;
64
+ }
65
+
66
+ function getComponentId(
67
+ uint256 idx
68
+ ) external view override returns (NftId componentNftId) {
69
+ return _nftIds[idx];
70
+ }
71
+ }
@@ -0,0 +1,28 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
6
+
7
+ import {StateId} from "../../../types/StateId.sol";
8
+ import {NftId} from "../../../types/NftId.sol";
9
+
10
+ interface IComponent {
11
+ struct ComponentInfo {
12
+ IERC20Metadata token;
13
+ address wallet;
14
+ }
15
+ }
16
+
17
+ interface IComponentModule is IComponent {
18
+
19
+ function registerComponent(NftId nftId, IERC20Metadata token, address wallet) external;
20
+ function getComponentToken(NftId nftId) external view returns (IERC20Metadata token);
21
+ function getComponentWallet(NftId nftId) external view returns (address wallet);
22
+
23
+ function getComponentCount() external view returns (uint256 numberOfCompnents);
24
+ function getComponentId(uint256 idx) external view returns (NftId nftId);
25
+
26
+ // repeat service linked signaturea to avoid linearization issues
27
+ function getComponentOwnerService() external view returns(IComponentOwnerService);
28
+ }
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IDistributionModule} from "./IDistribution.sol";
5
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
6
+ import {ModuleBase} from "../../base/ModuleBase.sol";
7
+
8
+ contract DistributionModule is
9
+ ModuleBase,
10
+ IDistributionModule
11
+ {
12
+
13
+ function initializeDistributionModule(IKeyValueStore keyValueStore) internal {
14
+ _initialize(keyValueStore);
15
+ }
16
+
17
+ }
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ interface IDistribution {
5
+
6
+ }
7
+
8
+ interface IDistributionModule is IDistribution {
9
+
10
+ }
@@ -0,0 +1,63 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../../registry/IRegistry.sol";
5
+ import {IInstance} from "../../IInstance.sol";
6
+ import {IProductService} from "../../service/IProductService.sol";
7
+ import {NftId} from "../../../types/NftId.sol";
8
+ import {ReferralId} from "../../../types/ReferralId.sol";
9
+ import {RiskId} from "../../../types/RiskId.sol";
10
+ import {StateId} from "../../../types/StateId.sol";
11
+ import {Timestamp} from "../../../types/Timestamp.sol";
12
+
13
+ // TODO check if there is value to introuce IContract and let IPolicy derive from IContract
14
+ interface IPolicy {
15
+ struct PolicyInfo {
16
+ NftId productNftId;
17
+ NftId bundleNftId;
18
+ ReferralId referralId;
19
+ address beneficiary;
20
+ RiskId riskId;
21
+ uint256 sumInsuredAmount;
22
+ uint256 premiumAmount;
23
+ uint256 premiumPaidAmount;
24
+ uint256 lifetime;
25
+ bytes applicationData;
26
+ bytes policyData;
27
+ Timestamp activatedAt; // time of underwriting
28
+ Timestamp expiredAt; // no new claims (activatedAt + lifetime)
29
+ Timestamp closedAt; // no locked capital
30
+ }
31
+ }
32
+
33
+ interface IPolicyModule is IPolicy {
34
+ function createPolicyInfo(
35
+ NftId policyNftId,
36
+ NftId productNftId,
37
+ ReferralId referralId,
38
+ RiskId riskId,
39
+ uint256 sumInsuredAmount,
40
+ uint256 premiumAmount,
41
+ uint256 lifetime,
42
+ NftId bundleNftId
43
+ ) external;
44
+
45
+ function setPolicyInfo(NftId policyNftId, PolicyInfo memory info) external;
46
+ function updatePolicyState(NftId nftId, StateId state) external;
47
+
48
+ // function underwrite(NftId nftId) external;
49
+
50
+ // function processPremium(NftId nftId, uint256 amount) external;
51
+
52
+ // function activate(NftId nftId, Timestamp activateAt) external;
53
+
54
+ function getPolicyInfo(
55
+ NftId nftId
56
+ ) external view returns (PolicyInfo memory info);
57
+
58
+ // repeat registry linked signature
59
+ // function getRegistry() external view returns (IRegistry registry);
60
+
61
+ // repeat service linked signature to avoid linearization issues
62
+ function getProductService() external returns(IProductService);
63
+ }