@etherisc/gif-next 0.0.2-839b2a2-792 → 0.0.2-84ca396-317

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 (419) hide show
  1. package/README.md +331 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +341 -48
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +691 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/IComponent.sol/IComponent.json} +209 -248
  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 +4 -0
  11. package/artifacts/contracts/{instance/policy/PolicyModule.sol/PolicyModule.json → components/IPoolComponent.sol/IPoolComponent.json} +143 -122
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +157 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +646 -116
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +585 -140
  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/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1112 -790
  52. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  54. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +570 -0
  56. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/Instance.sol/Instance.json +2179 -895
  58. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1047 -0
  60. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  62. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  64. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +963 -0
  66. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +460 -0
  68. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  70. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +595 -0
  72. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +100 -0
  74. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  76. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  78. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  80. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  82. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  84. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  86. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IDistribution.sol/IDistribution.json} +2 -2
  88. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  90. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  92. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  94. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{treasury → module}/ITreasury.sol/ITreasury.json +1 -1
  96. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1094 -0
  98. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +436 -0
  100. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +764 -0
  102. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +424 -0
  104. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +720 -0
  106. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  108. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +771 -0
  110. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +499 -0
  112. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +536 -0
  114. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1219 -0
  116. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +492 -0
  118. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +798 -0
  120. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +424 -0
  122. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +848 -0
  124. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +424 -0
  126. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  127. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  128. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  129. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +567 -31
  130. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  131. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +976 -0
  132. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  133. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  134. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  135. package/artifacts/contracts/registry/Registry.sol/Registry.json +644 -74
  136. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  137. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  138. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  139. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1195 -0
  140. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  141. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
  142. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  143. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  144. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  145. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +381 -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/shared/IRegisterable.sol/IRegisterable.json +201 -0
  154. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  155. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  156. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  158. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  159. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  160. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  161. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  162. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  163. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  164. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  165. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  166. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  167. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  168. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  169. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  170. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  171. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  172. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -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 +600 -0
  180. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  181. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -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 +286 -0
  186. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  187. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  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/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  194. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  196. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  198. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  200. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  201. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  202. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  204. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  206. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  208. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  210. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  212. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  214. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  215. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +77 -2
  216. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  218. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  219. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  220. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  222. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  224. package/contracts/components/Component.sol +140 -40
  225. package/contracts/components/Distribution.sol +154 -0
  226. package/contracts/components/IComponent.sol +37 -0
  227. package/contracts/components/IDistributionComponent.sol +44 -0
  228. package/contracts/components/IPoolComponent.sol +66 -0
  229. package/contracts/components/IProductComponent.sol +35 -0
  230. package/contracts/components/Pool.sol +231 -25
  231. package/contracts/components/Product.sol +252 -46
  232. package/contracts/experiment/cloning/Cloner.sol +47 -0
  233. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  234. package/contracts/instance/BundleManager.sol +129 -0
  235. package/contracts/instance/Cloneable.sol +46 -0
  236. package/contracts/instance/IInstance.sol +59 -24
  237. package/contracts/instance/IInstanceBase.sol +25 -0
  238. package/contracts/instance/IInstanceService.sol +40 -0
  239. package/contracts/instance/Instance.sol +243 -53
  240. package/contracts/instance/InstanceAccessManager.sol +303 -0
  241. package/contracts/instance/InstanceBase.sol +39 -0
  242. package/contracts/instance/InstanceReader.sol +315 -0
  243. package/contracts/instance/InstanceService.sol +345 -0
  244. package/contracts/instance/InstanceServiceManager.sol +54 -0
  245. package/contracts/instance/ObjectManager.sol +101 -0
  246. package/contracts/instance/base/ComponentService.sol +133 -0
  247. package/contracts/instance/base/IInstanceBase.sol +21 -0
  248. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  249. package/contracts/instance/base/ILifecycle.sol +30 -0
  250. package/contracts/instance/base/KeyValueStore.sol +172 -0
  251. package/contracts/instance/base/Lifecycle.sol +100 -0
  252. package/contracts/instance/module/IAccess.sol +48 -0
  253. package/contracts/instance/module/IBundle.sol +20 -0
  254. package/contracts/instance/module/IDistribution.sol +39 -0
  255. package/contracts/instance/module/IPolicy.sol +45 -0
  256. package/contracts/instance/module/IRisk.sol +11 -0
  257. package/contracts/instance/module/ISetup.sol +46 -0
  258. package/contracts/instance/module/ITreasury.sol +23 -0
  259. package/contracts/instance/service/BundleService.sol +293 -0
  260. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  261. package/contracts/instance/service/DistributionService.sol +115 -0
  262. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  263. package/contracts/instance/service/IBundleService.sol +44 -0
  264. package/contracts/instance/service/IDistributionService.sol +12 -0
  265. package/contracts/instance/service/IPolicyService.sol +94 -0
  266. package/contracts/instance/service/IPoolService.sol +20 -0
  267. package/contracts/instance/service/IProductService.sol +40 -0
  268. package/contracts/instance/service/PolicyService.sol +538 -0
  269. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  270. package/contracts/instance/service/PoolService.sol +142 -0
  271. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  272. package/contracts/instance/service/ProductService.sol +241 -0
  273. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  274. package/contracts/registry/ChainNft.sol +129 -62
  275. package/contracts/registry/IRegistry.sol +72 -41
  276. package/contracts/registry/IRegistryService.sol +58 -0
  277. package/contracts/registry/ITransferInterceptor.sol +6 -0
  278. package/contracts/registry/Registry.sol +401 -131
  279. package/contracts/registry/RegistryAccessManager.sol +216 -0
  280. package/contracts/registry/RegistryService.sol +320 -0
  281. package/contracts/registry/RegistryServiceManager.sol +62 -0
  282. package/contracts/registry/ReleaseManager.sol +352 -0
  283. package/contracts/registry/TokenRegistry.sol +112 -0
  284. package/contracts/shared/ContractDeployerLib.sol +72 -0
  285. package/contracts/shared/ERC165.sol +25 -0
  286. package/contracts/shared/INftOwnable.sol +22 -0
  287. package/contracts/shared/IRegisterable.sol +15 -0
  288. package/contracts/shared/IService.sol +16 -0
  289. package/contracts/shared/IVersionable.sol +96 -0
  290. package/contracts/shared/NftOwnable.sol +136 -0
  291. package/contracts/shared/ProxyManager.sol +94 -0
  292. package/contracts/shared/Registerable.sol +90 -0
  293. package/contracts/shared/Service.sol +60 -0
  294. package/contracts/shared/TokenHandler.sol +27 -0
  295. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  296. package/contracts/shared/Versionable.sol +147 -0
  297. package/contracts/test/TestFee.sol +25 -0
  298. package/contracts/test/TestRegisterable.sol +18 -0
  299. package/contracts/test/TestRoleId.sol +14 -0
  300. package/contracts/test/TestService.sol +25 -0
  301. package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
  302. package/contracts/test/TestVersion.sol +44 -0
  303. package/contracts/test/TestVersionable.sol +17 -0
  304. package/contracts/{mock → test}/Usdc.sol +1 -1
  305. package/contracts/types/AddressSet.sol +58 -0
  306. package/contracts/types/DistributorType.sol +55 -0
  307. package/contracts/types/Fee.sol +44 -20
  308. package/contracts/types/Key32.sol +50 -0
  309. package/contracts/types/NftId.sol +22 -1
  310. package/contracts/types/NftIdSet.sol +62 -0
  311. package/contracts/types/NumberId.sol +52 -0
  312. package/contracts/types/ObjectType.sol +60 -15
  313. package/contracts/types/Referral.sol +85 -0
  314. package/contracts/types/RiskId.sol +43 -0
  315. package/contracts/types/RoleId.sol +90 -0
  316. package/contracts/types/StateId.sol +18 -4
  317. package/contracts/types/Timestamp.sol +29 -4
  318. package/contracts/types/UFixed.sol +138 -23
  319. package/contracts/types/Version.sol +107 -0
  320. package/package.json +12 -5
  321. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  322. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  323. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  324. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -255
  325. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  326. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  327. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  328. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  329. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  330. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  331. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  332. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  333. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  334. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  336. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -299
  338. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  339. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  340. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  341. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  342. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  343. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  344. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  345. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  346. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  347. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  348. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  349. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  350. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  351. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  352. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  353. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  354. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  355. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  356. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -254
  357. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  358. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  359. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  360. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -129
  361. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  362. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -155
  363. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  364. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  365. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  366. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
  367. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  368. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  369. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  370. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  371. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  372. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  373. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  374. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  375. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  376. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  377. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  378. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  379. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  380. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  381. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  382. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  383. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  384. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  385. package/artifacts/contracts/mock/Usdc.sol/USDC.json +0 -338
  386. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  387. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  388. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  389. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  390. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  391. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  392. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  393. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  394. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  395. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  396. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  397. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  398. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -479
  399. package/contracts/components/IPool.sol +0 -15
  400. package/contracts/components/IProduct.sol +0 -16
  401. package/contracts/experiment/statemachine/README.md +0 -112
  402. package/contracts/instance/access/Access.sol +0 -165
  403. package/contracts/instance/access/IAccess.sol +0 -63
  404. package/contracts/instance/component/ComponentModule.sol +0 -274
  405. package/contracts/instance/component/IComponent.sol +0 -74
  406. package/contracts/instance/lifecycle/ILifecycle.sol +0 -47
  407. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  408. package/contracts/instance/policy/IPolicy.sol +0 -50
  409. package/contracts/instance/policy/PolicyModule.sol +0 -114
  410. package/contracts/instance/pool/IPoolModule.sol +0 -23
  411. package/contracts/instance/pool/PoolModule.sol +0 -81
  412. package/contracts/instance/product/IProductService.sol +0 -36
  413. package/contracts/instance/product/ProductService.sol +0 -136
  414. package/contracts/instance/treasury/ITreasury.sol +0 -91
  415. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  416. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  417. package/contracts/mock/TestPool.sol +0 -16
  418. package/contracts/mock/TestProduct.sol +0 -39
  419. package/contracts/registry/IChainNft.sol +0 -21
@@ -0,0 +1,129 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IInstance} from "./IInstance.sol";
5
+ import {INSTANCE} from "../types/ObjectType.sol";
6
+ import {InstanceReader} from "./InstanceReader.sol";
7
+ import {IPolicy} from "../instance/module/IPolicy.sol";
8
+ import {IRegistry} from "../registry/IRegistry.sol";
9
+ import {LibNftIdSet} from "../types/NftIdSet.sol";
10
+ import {NftId} from "../types/NftId.sol";
11
+ import {TimestampLib} from "../types/Timestamp.sol";
12
+
13
+ import {ObjectManager} from "./ObjectManager.sol";
14
+
15
+ contract BundleManager is
16
+ ObjectManager
17
+ {
18
+
19
+ event LogBundleManagerPolicyLinked(NftId bundleNftId, NftId policyNftId);
20
+ event LogBundleManagerPolicyUnlinked(NftId bundleNftId, NftId policyNftId);
21
+
22
+ event LogBundleManagerBundleAdded(NftId poolNftId, NftId bundleNftId);
23
+ event LogBundleManagerBundleUnlocked(NftId poolNftId, NftId bundleNftId);
24
+ event LogBundleManagerBundleLocked(NftId poolNftId, NftId bundleNftId);
25
+
26
+ error ErrorBundleManagerErrorPolicyAlreadyActivated(NftId policyNftId);
27
+ error ErrorBundleManagerErrorBundleLocked(NftId bundleNftId, NftId policyNftId);
28
+ error ErrorBundleManagerPolicyWithOpenClaims(NftId policyNftId, uint256 openClaimsCount);
29
+ error ErrorBundleManagerPolicyNotCloseable(NftId policyNftId);
30
+ error ErrorBundleManagerBundleUnknown(NftId bundleNftId);
31
+ error ErrorBundleManagerBundleNotRegistered(NftId bundleNftId);
32
+
33
+ mapping(NftId bundleNftId => LibNftIdSet.Set policies) internal _activePolicies;
34
+
35
+ constructor() ObjectManager() {
36
+ }
37
+
38
+
39
+ /// @dev links a policy with its bundle
40
+ // to link a policy it MUST NOT yet have been activated
41
+ // the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
42
+ function linkPolicy(NftId policyNftId) external restricted() {
43
+ NftId bundleNftId = _instanceReader.getPolicyInfo(policyNftId).bundleNftId;
44
+ // decision will likely depend on the decision what to check here and what in the service
45
+ NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
46
+
47
+ // ensure bundle is unlocked (in active set) and registered with this instance
48
+ if (!_isActive(poolNftId, bundleNftId)) {
49
+ revert ErrorBundleManagerErrorBundleLocked(bundleNftId, policyNftId);
50
+ }
51
+
52
+ LibNftIdSet.add(_activePolicies[bundleNftId], policyNftId);
53
+ emit LogBundleManagerPolicyLinked(bundleNftId, policyNftId);
54
+ }
55
+
56
+
57
+ /// @dev unlinks a policy from its bundle
58
+ // to unlink a policy it must closable, ie. meet one of the following criterias
59
+ // - the policy MUST be past its expiry period and it MUST NOT have any open claims
60
+ // - the policy's payoutAmount MUST be equal to its sumInsuredAmount and MUST NOT have any open claims
61
+ function unlinkPolicy(NftId policyNftId) external restricted() {
62
+ IPolicy.PolicyInfo memory policyInfo = _instanceReader.getPolicyInfo(policyNftId);
63
+
64
+ NftId bundleNftId = policyInfo.bundleNftId;
65
+ // decision will likely depend on the decision what to check here and what in the service
66
+ NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
67
+
68
+ // ensure bundle is registered with this instance
69
+ if (!_contains(poolNftId, bundleNftId)) {
70
+ revert ErrorBundleManagerBundleUnknown(bundleNftId);
71
+ }
72
+
73
+ LibNftIdSet.remove(_activePolicies[bundleNftId], policyNftId);
74
+ emit LogBundleManagerPolicyUnlinked(policyInfo.bundleNftId, policyNftId);
75
+ }
76
+
77
+
78
+ /// @dev add a new bundle to a riskpool registerd with this instance
79
+ // the corresponding pool is fetched via instance reader
80
+ function add(NftId bundleNftId) external restricted() {
81
+ NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
82
+
83
+ // ensure pool is registered with instance
84
+ if(poolNftId.eqz()) {
85
+ revert ErrorBundleManagerBundleNotRegistered(bundleNftId);
86
+ }
87
+
88
+ _add(poolNftId, bundleNftId);
89
+ emit LogBundleManagerBundleAdded(poolNftId, bundleNftId);
90
+ }
91
+
92
+ /// @dev unlocked (active) bundles are available to underwrite new policies
93
+ function unlock(NftId bundleNftId) external restricted() {
94
+ NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
95
+ _activate(poolNftId, bundleNftId);
96
+ emit LogBundleManagerBundleUnlocked(poolNftId, bundleNftId);
97
+ }
98
+
99
+ /// @dev locked (deactivated) bundles may not underwrite any new policies
100
+ function lock(NftId bundleNftId) external restricted() {
101
+ NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
102
+ _deactivate(poolNftId, bundleNftId);
103
+ emit LogBundleManagerBundleLocked(poolNftId, bundleNftId);
104
+ }
105
+
106
+ function bundles(NftId poolNftId) external view returns(uint256) {
107
+ return _objects(poolNftId);
108
+ }
109
+
110
+ function getBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
111
+ return _getObject(poolNftId, idx);
112
+ }
113
+
114
+ function activeBundles(NftId poolNftId) external view returns(uint256) {
115
+ return _activeObjs(poolNftId);
116
+ }
117
+
118
+ function getActiveBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
119
+ return _getActiveObject(poolNftId, idx);
120
+ }
121
+
122
+ function activePolicies(NftId bundleNftId) external view returns(uint256) {
123
+ return LibNftIdSet.size(_activePolicies[bundleNftId]);
124
+ }
125
+
126
+ function getActivePolicy(NftId bundleNftId, uint256 idx) external view returns(NftId policyNftId) {
127
+ return LibNftIdSet.getElementAt(_activePolicies[bundleNftId], idx);
128
+ }
129
+ }
@@ -0,0 +1,46 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
6
+
7
+ import {IRegistry} from "../registry/IRegistry.sol";
8
+
9
+ abstract contract Cloneable is
10
+ AccessManagedUpgradeable
11
+ {
12
+ event CloneableInitialized(address authority, address registry);
13
+
14
+ error CloneableRegistryInvalid(address registry);
15
+
16
+ IRegistry internal _registry;
17
+
18
+ constructor() {
19
+ _registry = IRegistry(address(0));
20
+ }
21
+
22
+ /// @dev call to initialize MUST be made in the same transaction as cloning of the contract
23
+ function initialize(
24
+ address authority,
25
+ address registry
26
+ )
27
+ public
28
+ initializer
29
+ {
30
+ // check/handle access managed
31
+ __AccessManaged_init(authority);
32
+
33
+ // check/handle registry
34
+ if (registry.code.length == 0) {
35
+ revert CloneableRegistryInvalid(registry);
36
+ }
37
+
38
+ _registry = IRegistry(registry);
39
+
40
+ emit CloneableInitialized(authority, registry);
41
+ }
42
+
43
+ function getRegistry() external view returns (IRegistry) {
44
+ return _registry;
45
+ }
46
+ }
@@ -1,25 +1,60 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
3
-
4
- import {IRegisterable} from "../registry/IRegistry.sol";
5
- import {IAccessModule} from "./access/IAccess.sol";
6
- import {ILifecycleModule} from "./lifecycle/ILifecycle.sol";
7
- import {IComponentModule} from "./component/IComponent.sol";
8
- import {IProductModule} from "./product/IProductService.sol";
9
- import {IPolicyModule} from "./policy/IPolicy.sol";
10
- import {IPoolModule} from "./pool/IPoolModule.sol";
11
- import {ITreasuryModule} from "./treasury/ITreasury.sol";
12
-
13
- // solhint-disable-next-line no-empty-blocks
14
- interface IInstance is
15
- IRegisterable,
16
- IAccessModule,
17
- ILifecycleModule,
18
- IPolicyModule,
19
- IPoolModule,
20
- IComponentModule,
21
- IProductModule,
22
- ITreasuryModule
23
- {
24
-
25
- }
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
+
7
+ import {BundleManager} from "./BundleManager.sol";
8
+ import {InstanceReader} from "./InstanceReader.sol";
9
+
10
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
11
+ import {IDistributionService} from "./service/IDistributionService.sol";
12
+ import {IPoolService} from "./service/IPoolService.sol";
13
+ import {IProductService} from "./service/IProductService.sol";
14
+ import {IPolicyService} from "./service/IPolicyService.sol";
15
+ import {IBundleService} from "./service/IBundleService.sol";
16
+ import {IBundle} from "./module/IBundle.sol";
17
+ import {ISetup} from "./module/ISetup.sol";
18
+ import {NftId} from "../types/NftId.sol";
19
+ import {StateId} from "../types/StateId.sol";
20
+ import {RiskId} from "../types/RiskId.sol";
21
+ import {IRisk} from "./module/IRisk.sol";
22
+ import {IPolicy} from "./module/IPolicy.sol";
23
+ import {IKeyValueStore} from "./base/IKeyValueStore.sol";
24
+
25
+
26
+ interface IInstance is IERC165, IKeyValueStore, IAccessManaged {
27
+
28
+ function getDistributionService() external view returns (IDistributionService);
29
+ function getProductService() external view returns (IProductService);
30
+ function getPoolService() external view returns (IPoolService);
31
+ function getPolicyService() external view returns (IPolicyService);
32
+ function getBundleService() external view returns (IBundleService);
33
+
34
+ function createDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup) external;
35
+ function updateDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup, StateId newState) external;
36
+ function updateDistributionSetupState(NftId distributionNftId, StateId newState) external;
37
+
38
+ function createPoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup) external;
39
+ function updatePoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup, StateId newState) external;
40
+ function updatePoolSetupState(NftId poolNftId, StateId newState) external;
41
+
42
+ function createBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle) external;
43
+ function updateBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle, StateId newState) external;
44
+ function updateBundleState(NftId bundleNftId, StateId newState) external;
45
+
46
+ function createProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup) external;
47
+ function updateProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup, StateId newState) external;
48
+ function updateProductSetupState(NftId productNftId, StateId newState) external;
49
+
50
+ function createRisk(RiskId riskId, IRisk.RiskInfo memory risk) external;
51
+ function updateRisk(RiskId riskId, IRisk.RiskInfo memory risk, StateId newState) external;
52
+ function updateRiskState(RiskId riskId, StateId newState) external;
53
+
54
+ function createPolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy) external;
55
+ function updatePolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy, StateId newState) external;
56
+ function updatePolicyState(NftId policyNftId, StateId newState) external;
57
+
58
+ function getInstanceReader() external view returns (InstanceReader);
59
+ function getBundleManager() external view returns (BundleManager);
60
+ }
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {BundleManager} from "./BundleManager.sol";
7
+ import {InstanceReader} from "./InstanceReader.sol";
8
+
9
+ import {IDistributionService} from "./service/IDistributionService.sol";
10
+ import {IPoolService} from "./service/IPoolService.sol";
11
+ import {IProductService} from "./service/IProductService.sol";
12
+ import {IBundle} from "./module/IBundle.sol";
13
+ import {ISetup} from "./module/ISetup.sol";
14
+ import {NftId} from "../types/NftId.sol";
15
+ import {StateId} from "../types/StateId.sol";
16
+ import {RiskId} from "../types/RiskId.sol";
17
+ import {IRisk} from "./module/IRisk.sol";
18
+ import {IPolicy} from "./module/IPolicy.sol";
19
+ import {IKeyValueStore} from "./base/IKeyValueStore.sol";
20
+
21
+
22
+ interface IInstanceBase is IERC165, IKeyValueStore {
23
+
24
+
25
+ }
@@ -0,0 +1,40 @@
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 {RoleId} from "../types/RoleId.sol";
7
+ import {IService} from "../shared/IService.sol";
8
+ import {IRegistry} from "../registry/IRegistry.sol";
9
+
10
+ import {IRegisterable} from "../shared/IRegisterable.sol";
11
+ import {IComponent} from "../components/IComponent.sol";
12
+
13
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
14
+ import {Instance} from "./Instance.sol";
15
+ import {InstanceReader} from "./InstanceReader.sol";
16
+ import {BundleManager} from "./BundleManager.sol";
17
+
18
+ interface IInstanceService is IService {
19
+
20
+ error ErrorInstanceServiceRequestUnauhorized(address caller);
21
+ error ErrorInstanceServiceNotInstanceOwner(address caller, NftId instanceNftId);
22
+ error ErrorInstanceServiceComponentNotRegistered(address componentAddress);
23
+
24
+ event LogInstanceCloned(address clonedAccessManagerAddress, address clonedInstanceAddress, address clonedInstanceReaderAddress, NftId clonedInstanceNftId);
25
+
26
+ function createInstanceClone()
27
+ external
28
+ returns (
29
+ InstanceAccessManager clonedAccessManager,
30
+ Instance clonedInstance,
31
+ NftId instanceNftId,
32
+ InstanceReader clonedInstanceReader,
33
+ BundleManager clonedBundleManager
34
+ );
35
+
36
+ function hasRole(address account, RoleId role, address instanceAddress) external returns (bool);
37
+ function setTargetLocked(string memory targetName, bool locked) external;
38
+
39
+ }
40
+
@@ -1,72 +1,262 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {Registerable} from "../registry/Registry.sol";
5
- import {IRegistry} from "../registry/IRegistry.sol";
6
-
7
- import {IAccessModule, AccessModule} from "./access/Access.sol";
8
- import {LifecycleModule} from "./lifecycle/LifecycleModule.sol";
9
- import {ComponentModule} from "./component/ComponentModule.sol";
10
- import {ProductModule} from "./product/ProductService.sol";
11
- import {PolicyModule} from "./policy/PolicyModule.sol";
12
- import {PoolModule} from "./pool/PoolModule.sol";
13
- import {TreasuryModule} from "./treasury/TreasuryModule.sol";
4
+ import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
5
+ import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
6
+ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
7
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
14
8
 
9
+ import {IAccess} from "./module/IAccess.sol";
10
+ import {IBundle} from "./module/IBundle.sol";
11
+ import {IPolicy} from "./module/IPolicy.sol";
12
+ import {IRisk} from "./module/IRisk.sol";
13
+ import {ISetup} from "./module/ISetup.sol";
14
+ import {Key32, KeyId, Key32Lib} from "../types/Key32.sol";
15
+ import {KeyValueStore} from "./base/KeyValueStore.sol";
15
16
  import {IInstance} from "./IInstance.sol";
16
- import {ObjectType, INSTANCE} from "../types/ObjectType.sol";
17
- import {NftId, toNftId} from "../types/NftId.sol";
17
+ import {InstanceReader} from "./InstanceReader.sol";
18
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
19
+ import {BundleManager} from "./BundleManager.sol";
20
+ import {NftId} from "../types/NftId.sol";
21
+ import {NumberId} from "../types/NumberId.sol";
22
+ import {ObjectType, BUNDLE, DISTRIBUTION, INSTANCE, POLICY, POOL, ROLE, PRODUCT, TARGET, COMPONENT} from "../types/ObjectType.sol";
23
+ import {RiskId} from "../types/RiskId.sol";
24
+ import {StateId} from "../types/StateId.sol";
25
+ import {IDistributionService} from "./service/IDistributionService.sol";
26
+ import {IPoolService} from "./service/IPoolService.sol";
27
+ import {IProductService} from "./service/IProductService.sol";
28
+ import {IPolicyService} from "./service/IPolicyService.sol";
29
+ import {IBundleService} from "./service/IBundleService.sol";
30
+ import {VersionPart} from "../types/Version.sol";
31
+ import {InstanceBase} from "./InstanceBase.sol";
18
32
 
19
33
  contract Instance is
20
- Registerable,
21
- AccessModule,
22
- LifecycleModule,
23
- ComponentModule,
24
- PolicyModule,
25
- PoolModule,
26
- ProductModule,
27
- TreasuryModule,
28
- IInstance
34
+ AccessManagedUpgradeable,
35
+ IInstance,
36
+ // Initializable,
37
+ InstanceBase
29
38
  {
30
- constructor(
31
- address registry,
32
- address componentOwnerService,
33
- address productService
34
- )
35
- Registerable(registry)
36
- AccessModule()
37
- ComponentModule(componentOwnerService)
38
- PolicyModule(productService)
39
- ProductModule(productService)
40
- PoolModule(productService)
41
- // solhint-disable-next-line no-empty-blocks
39
+
40
+ uint64 public constant ADMIN_ROLE = type(uint64).min;
41
+ uint64 public constant PUBLIC_ROLE = type(uint64).max;
42
+ uint64 public constant CUSTOM_ROLE_ID_MIN = 10000;
43
+
44
+ uint32 public constant EXECUTION_DELAY = 0;
45
+
46
+ bool private _initialized;
47
+
48
+ InstanceAccessManager internal _accessManager;
49
+ InstanceReader internal _instanceReader;
50
+ BundleManager internal _bundleManager;
51
+
52
+ function initialize(address accessManagerAddress, address registryAddress, NftId registryNftId, address initialOwner)
53
+ public
54
+ initializer
42
55
  {
56
+ require(!_initialized, "Contract instance has already been initialized");
57
+
58
+ __AccessManaged_init(accessManagerAddress);
59
+
60
+ _accessManager = InstanceAccessManager(accessManagerAddress);
61
+
62
+ _initializeRegisterable(registryAddress, registryNftId, INSTANCE(), false, initialOwner, "");
63
+
64
+ _registerInterface(type(IInstance).interfaceId);
65
+ _initialized = true;
66
+ }
67
+
68
+ //--- ProductSetup ------------------------------------------------------//
69
+ function createProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup) external restricted() {
70
+ create(_toNftKey32(productNftId, PRODUCT()), abi.encode(setup));
71
+ }
72
+
73
+ function updateProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup, StateId newState) external restricted() {
74
+ update(_toNftKey32(productNftId, PRODUCT()), abi.encode(setup), newState);
75
+ }
76
+
77
+ function updateProductSetupState(NftId productNftId, StateId newState) external restricted() {
78
+ updateState(_toNftKey32(productNftId, PRODUCT()), newState);
79
+ }
80
+
81
+ //--- DistributionSetup ------------------------------------------------------//
82
+ function createDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup) external restricted() {
83
+ create(_toNftKey32(distributionNftId, DISTRIBUTION()), abi.encode(setup));
84
+ }
85
+
86
+ function updateDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup, StateId newState) external restricted() {
87
+ update(_toNftKey32(distributionNftId, DISTRIBUTION()), abi.encode(setup), newState);
88
+ }
89
+
90
+ function updateDistributionSetupState(NftId distributionNftId, StateId newState) external restricted() {
91
+ updateState(_toNftKey32(distributionNftId, DISTRIBUTION()), newState);
92
+ }
93
+
94
+ //--- PoolSetup ------------------------------------------------------//
95
+ function createPoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup) external restricted() {
96
+ create(_toNftKey32(poolNftId, POOL()), abi.encode(setup));
97
+ }
98
+
99
+ function updatePoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup, StateId newState) external restricted() {
100
+ update(_toNftKey32(poolNftId, POOL()), abi.encode(setup), newState);
101
+ }
102
+
103
+ function updatePoolSetupState(NftId poolNftId, StateId newState) external restricted() {
104
+ updateState(_toNftKey32(poolNftId, POOL()), newState);
105
+ }
106
+
107
+ //--- DistributorType ---------------------------------------------------//
108
+ function createDistributorType(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout) external restricted() {
109
+ create(toPolicyKey32(policyNftId), abi.encode(payout));
110
+ }
111
+
112
+ function updateDistributorType(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout, StateId newState) external restricted() {
113
+ update(toPolicyKey32(policyNftId), abi.encode(payout), newState);
114
+ }
115
+
116
+ function updateDistributorTypeState(NftId policyNftId, StateId newState) external restricted() {
117
+ updateState(toPolicyKey32(policyNftId), newState);
118
+ }
119
+
120
+ //--- Distributor -------------------------------------------------------//
121
+ function createDistributor(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout) external restricted() {
122
+ create(toPolicyKey32(policyNftId), abi.encode(payout));
123
+ }
124
+
125
+ function updateDistributor(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout, StateId newState) external restricted() {
126
+ update(toPolicyKey32(policyNftId), abi.encode(payout), newState);
127
+ }
128
+
129
+ function updateDistributorState(NftId policyNftId, StateId newState) external restricted() {
130
+ updateState(toPolicyKey32(policyNftId), newState);
131
+ }
132
+
133
+ //--- Referral ----------------------------------------------------------//
134
+ function createReferral(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout) external restricted() {
135
+ create(toPolicyKey32(policyNftId), abi.encode(payout));
136
+ }
137
+
138
+ function updateReferral(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout, StateId newState) external restricted() {
139
+ update(toPolicyKey32(policyNftId), abi.encode(payout), newState);
140
+ }
141
+
142
+ function updateReferralState(NftId policyNftId, StateId newState) external restricted() {
143
+ updateState(toPolicyKey32(policyNftId), newState);
144
+ }
145
+
146
+ //--- Bundle ------------------------------------------------------------//
147
+ function createBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle) external restricted() {
148
+ create(toBundleKey32(bundleNftId), abi.encode(bundle));
149
+ }
150
+
151
+ function updateBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle, StateId newState) external restricted() {
152
+ update(toBundleKey32(bundleNftId), abi.encode(bundle), newState);
153
+ }
154
+
155
+ function updateBundleState(NftId bundleNftId, StateId newState) external restricted() {
156
+ updateState(toBundleKey32(bundleNftId), newState);
157
+ }
158
+
159
+ //--- Risk --------------------------------------------------------------//
160
+ function createRisk(RiskId riskId, IRisk.RiskInfo memory risk) external restricted() {
161
+ create(riskId.toKey32(), abi.encode(risk));
162
+ }
163
+
164
+ function updateRisk(RiskId riskId, IRisk.RiskInfo memory risk, StateId newState) external restricted() {
165
+ update(riskId.toKey32(), abi.encode(risk), newState);
166
+ }
167
+
168
+ function updateRiskState(RiskId riskId, StateId newState) external restricted() {
169
+ updateState(riskId.toKey32(), newState);
170
+ }
171
+
172
+ //--- Policy ------------------------------------------------------------//
173
+ function createPolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy) external restricted() {
174
+ create(toPolicyKey32(policyNftId), abi.encode(policy));
175
+ }
176
+
177
+ function updatePolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy, StateId newState) external restricted() {
178
+ update(toPolicyKey32(policyNftId), abi.encode(policy), newState);
179
+ }
180
+
181
+ function updatePolicyState(NftId policyNftId, StateId newState) external restricted() {
182
+ updateState(toPolicyKey32(policyNftId), newState);
183
+ }
184
+
185
+ //--- Claim -------------------------------------------------------------//
186
+ function createClaim(NftId policyNftId, NumberId claimId, IPolicy.ClaimInfo memory claim) external restricted() {
187
+ create(toPolicyKey32(policyNftId), abi.encode(claim));
188
+ }
189
+
190
+ function updateClaim(NftId policyNftId, NumberId claimId, IPolicy.ClaimInfo memory claim, StateId newState) external restricted() {
191
+ update(toPolicyKey32(policyNftId), abi.encode(claim), newState);
192
+ }
193
+
194
+ function updateClaimState(NftId policyNftId, StateId newState) external restricted() {
195
+ updateState(toPolicyKey32(policyNftId), newState);
196
+ }
197
+
198
+ //--- Payout ------------------------------------------------------------//
199
+ function createPayout(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout) external restricted() {
200
+ create(toPolicyKey32(policyNftId), abi.encode(payout));
201
+ }
202
+
203
+ function updateClaim(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout, StateId newState) external restricted() {
204
+ update(toPolicyKey32(policyNftId), abi.encode(payout), newState);
205
+ }
206
+
207
+ function updatePayoutState(NftId policyNftId, StateId newState) external restricted() {
208
+ updateState(toPolicyKey32(policyNftId), newState);
209
+ }
210
+
211
+ //--- internal view/pure functions --------------------------------------//
212
+ function _toNftKey32(NftId nftId, ObjectType objectType) internal pure returns (Key32) {
213
+ return nftId.toKey32(objectType);
214
+ }
43
215
 
216
+ function toBundleKey32(NftId bundleNftId) public pure returns (Key32) {
217
+ return bundleNftId.toKey32(BUNDLE());
44
218
  }
45
219
 
46
- // from registerable
47
- function register() external override returns (NftId nftId) {
48
- require(
49
- address(_registry) != address(0),
50
- "ERROR:PRD-001:REGISTRY_ZERO"
51
- );
52
- return _registry.register(address(this));
220
+ function toPolicyKey32(NftId policyNftId) public pure returns (Key32) {
221
+ return policyNftId.toKey32(POLICY());
53
222
  }
54
223
 
55
- // from registerable
56
- function getParentNftId() public pure override returns (NftId) {
57
- // TODO add self registry and exchange 0 for_registry.getNftId();
58
- // define parent tree for all registerables
59
- // eg 0 <- chain(mainnet) <- global registry <- chain registry <- instance <- component <- policy/bundle
60
- return toNftId(0);
224
+ function getDistributionService() external view returns (IDistributionService) {
225
+ return IDistributionService(_registry.getServiceAddress(DISTRIBUTION(), VersionPart.wrap(3)));
61
226
  }
62
227
 
63
- // from registerable
64
- function getType() external pure override returns (ObjectType objectType) {
65
- return INSTANCE();
228
+ function getProductService() external view returns (IProductService) {
229
+ return IProductService(_registry.getServiceAddress(PRODUCT(), VersionPart.wrap(3)));
230
+ }
231
+
232
+ function getPoolService() external view returns (IPoolService) {
233
+ return IPoolService(_registry.getServiceAddress(POOL(), VersionPart.wrap(3)));
234
+ }
235
+
236
+ function getPolicyService() external view returns (IPolicyService) {
237
+ return IPolicyService(_registry.getServiceAddress(POLICY(), VersionPart.wrap(3)));
238
+ }
239
+
240
+ function getBundleService() external view returns (IBundleService) {
241
+ return IBundleService(_registry.getServiceAddress(BUNDLE(), VersionPart.wrap(3)));
242
+ }
243
+
244
+ function setInstanceReader(InstanceReader instanceReader) external restricted() {
245
+ require(instanceReader.getInstanceNftId() == getNftId(), "NFT ID of InstanceReader does not match");
246
+ _instanceReader = instanceReader;
247
+ }
248
+
249
+ function getInstanceReader() external view returns (InstanceReader) {
250
+ return _instanceReader;
251
+ }
252
+
253
+ function setBundleManager(BundleManager bundleManager) external restricted() {
254
+ require(address(_bundleManager) == address(0), "BundleManager is set");
255
+ require(bundleManager.getInstanceNftId() == getNftId(), "NFT ID of BundleManager does not match");
256
+ _bundleManager = bundleManager;
66
257
  }
67
258
 
68
- // from registerable
69
- function getData() external pure override returns (bytes memory data) {
70
- return bytes(abi.encode(0));
259
+ function getBundleManager() external view returns (BundleManager) {
260
+ return _bundleManager;
71
261
  }
72
262
  }