@etherisc/gif-next 0.0.2-af8c650-079 → 0.0.2-b060f43-287

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 (397) hide show
  1. package/README.md +242 -11
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +302 -23
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +744 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +217 -23
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +90 -171
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +615 -63
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +620 -70
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/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/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  52. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +889 -1208
  54. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +485 -0
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +2472 -1202
  60. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
  62. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +572 -122
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +959 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +512 -0
  70. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +540 -0
  74. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  76. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  77. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  78. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  80. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  82. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  84. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  88. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  90. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  92. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  94. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → ISetup.sol/ISetup.json} +2 -2
  96. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  98. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +401 -65
  100. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  102. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  104. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
  106. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +204 -58
  108. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +401 -49
  110. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  111. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +334 -51
  112. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  113. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +629 -51
  114. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
  116. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  117. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +552 -78
  118. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
  120. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  121. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  122. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  123. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +377 -37
  124. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  125. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
  126. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  127. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  128. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  129. package/artifacts/contracts/registry/Registry.sol/Registry.json +487 -123
  130. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  131. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
  132. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  133. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +517 -0
  134. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  135. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  136. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  137. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  138. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  139. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  140. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  142. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  144. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  145. package/artifacts/contracts/{instance/service → shared}/IService.sol/IService.json +175 -54
  146. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  147. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  148. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  149. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  151. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  153. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  154. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  155. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  156. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  157. package/artifacts/contracts/{instance/service/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +222 -54
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  159. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  161. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  163. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
  170. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
  172. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  174. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  176. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  177. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  178. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  179. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  180. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  181. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  188. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  192. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  194. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  203. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  205. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  207. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  209. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  211. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  213. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  215. package/contracts/components/BaseComponent.sol +75 -32
  216. package/contracts/components/Distribution.sol +163 -0
  217. package/contracts/components/IBaseComponent.sol +15 -3
  218. package/contracts/components/IDistributionComponent.sol +44 -0
  219. package/contracts/components/IPoolComponent.sol +19 -10
  220. package/contracts/components/IProductComponent.sol +25 -9
  221. package/contracts/components/Pool.sol +126 -33
  222. package/contracts/components/Product.sol +204 -32
  223. package/contracts/experiment/cloning/Cloner.sol +47 -0
  224. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  225. package/contracts/instance/BundleManager.sol +129 -0
  226. package/contracts/instance/Cloneable.sol +46 -0
  227. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  228. package/contracts/instance/IInstance.sol +49 -46
  229. package/contracts/instance/IInstanceBase.sol +26 -0
  230. package/contracts/instance/IInstanceService.sol +32 -0
  231. package/contracts/instance/Instance.sol +438 -49
  232. package/contracts/instance/InstanceAccessManager.sol +288 -0
  233. package/contracts/instance/InstanceBase.sol +33 -63
  234. package/contracts/instance/InstanceReader.sol +315 -0
  235. package/contracts/instance/InstanceService.sol +234 -0
  236. package/contracts/instance/InstanceServiceManager.sol +57 -0
  237. package/contracts/instance/ObjectManager.sol +101 -0
  238. package/contracts/instance/base/ComponentServiceBase.sol +134 -0
  239. package/contracts/instance/base/IInstanceBase.sol +23 -0
  240. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  241. package/contracts/instance/base/ILifecycle.sol +30 -0
  242. package/contracts/instance/base/KeyValueStore.sol +172 -0
  243. package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
  244. package/contracts/instance/module/IAccess.sol +38 -0
  245. package/contracts/instance/module/IBundle.sol +20 -0
  246. package/contracts/instance/module/IDistribution.sol +39 -0
  247. package/contracts/instance/module/IPolicy.sol +45 -0
  248. package/contracts/instance/module/IRisk.sol +11 -0
  249. package/contracts/instance/module/ISetup.sol +46 -0
  250. package/contracts/instance/module/ITreasury.sol +23 -0
  251. package/contracts/instance/service/ComponentOwnerService.sol +244 -98
  252. package/contracts/instance/service/DistributionService.sol +88 -0
  253. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  254. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  255. package/contracts/instance/service/IDistributionService.sol +12 -0
  256. package/contracts/instance/service/IPoolService.sol +24 -3
  257. package/contracts/instance/service/IProductService.sol +59 -7
  258. package/contracts/instance/service/PoolService.sol +207 -43
  259. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  260. package/contracts/instance/service/ProductService.sol +350 -135
  261. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  262. package/contracts/registry/ChainNft.sol +80 -37
  263. package/contracts/registry/IRegistry.sol +49 -25
  264. package/contracts/registry/IRegistryService.sol +50 -0
  265. package/contracts/registry/ITransferInterceptor.sol +6 -0
  266. package/contracts/registry/Registry.sol +337 -270
  267. package/contracts/registry/RegistryService.sol +358 -0
  268. package/contracts/registry/RegistryServiceManager.sol +80 -0
  269. package/contracts/registry/TokenRegistry.sol +111 -0
  270. package/contracts/shared/ContractDeployerLib.sol +72 -0
  271. package/contracts/shared/ERC165.sol +6 -2
  272. package/contracts/shared/INftOwnable.sol +22 -0
  273. package/contracts/shared/IRegisterable.sol +8 -15
  274. package/contracts/{instance/service → shared}/IService.sol +3 -3
  275. package/contracts/shared/IVersionable.sol +55 -11
  276. package/contracts/shared/NftOwnable.sol +134 -0
  277. package/contracts/shared/ProxyManager.sol +94 -0
  278. package/contracts/shared/Registerable.sol +63 -59
  279. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  280. package/contracts/shared/Service.sol +55 -0
  281. package/contracts/shared/TokenHandler.sol +27 -0
  282. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  283. package/contracts/shared/Versionable.sol +113 -55
  284. package/contracts/test/TestFee.sol +2 -2
  285. package/contracts/test/TestRegisterable.sol +5 -6
  286. package/contracts/test/TestRoleId.sol +2 -2
  287. package/contracts/test/TestService.sol +5 -13
  288. package/contracts/types/DistributorType.sol +55 -0
  289. package/contracts/types/Fee.sol +10 -5
  290. package/contracts/types/Key32.sol +50 -0
  291. package/contracts/types/NftId.sol +16 -1
  292. package/contracts/types/NftIdSet.sol +26 -24
  293. package/contracts/types/NumberId.sol +52 -0
  294. package/contracts/types/ObjectType.sol +51 -14
  295. package/contracts/types/Referral.sol +85 -0
  296. package/contracts/types/RiskId.sol +43 -0
  297. package/contracts/types/RoleId.sol +65 -11
  298. package/contracts/types/StateId.sol +12 -2
  299. package/contracts/types/Timestamp.sol +7 -3
  300. package/contracts/types/UFixed.sol +128 -12
  301. package/contracts/types/Version.sol +13 -1
  302. package/package.json +4 -3
  303. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  304. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  305. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
  306. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
  307. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  308. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  309. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  310. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  311. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  312. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  313. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
  314. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  316. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -276
  317. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  319. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  321. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  322. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  323. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  325. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  327. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  328. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  329. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  330. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  331. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  334. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  337. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  339. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  342. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  344. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  345. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  347. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  348. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  349. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  350. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  352. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  353. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  354. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  355. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  356. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  357. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
  358. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  359. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  360. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  361. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  362. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  363. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  364. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  365. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  366. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  367. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  368. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  369. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  370. package/contracts/experiment/statemachine/README.md +0 -112
  371. package/contracts/instance/IInstanceLinked.sol +0 -8
  372. package/contracts/instance/IServiceLinked.sol +0 -12
  373. package/contracts/instance/module/access/Access.sol +0 -149
  374. package/contracts/instance/module/access/IAccess.sol +0 -53
  375. package/contracts/instance/module/bundle/BundleModule.sol +0 -228
  376. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  377. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  378. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  379. package/contracts/instance/module/component/ComponentModule.sol +0 -103
  380. package/contracts/instance/module/component/IComponent.sol +0 -53
  381. package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
  382. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  383. package/contracts/instance/module/policy/PolicyModule.sol +0 -84
  384. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  385. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  386. package/contracts/instance/module/risk/IRisk.sol +0 -10
  387. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  388. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  389. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  390. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  391. package/contracts/instance/service/ComponentServiceBase.sol +0 -41
  392. package/contracts/instance/service/ServiceBase.sol +0 -39
  393. package/contracts/registry/IChainNft.sol +0 -21
  394. package/contracts/registry/IRegistryLinked.sol +0 -8
  395. package/contracts/shared/IOwnable.sol +0 -6
  396. package/contracts/test/TestPool.sol +0 -22
  397. package/contracts/test/TestProduct.sol +0 -44
@@ -0,0 +1,315 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {DistributorType} from "../types/DistributorType.sol";
7
+ import {Fee, FeeLib} from "../types/Fee.sol";
8
+ import {Key32} from "../types/Key32.sol";
9
+ import {NftId} from "../types/NftId.sol";
10
+ import {ObjectType, DISTRIBUTOR, DISTRIBUTION, INSTANCE, PRODUCT, POLICY, POOL, TREASURY, BUNDLE} from "../types/ObjectType.sol";
11
+ import {ReferralId, ReferralStatus, ReferralLib, REFERRAL_OK, REFERRAL_ERROR_UNKNOWN, REFERRAL_ERROR_EXPIRED, REFERRAL_ERROR_EXHAUSTED} from "../types/Referral.sol";
12
+ import {Registerable} from "../shared/Registerable.sol";
13
+ import {RiskId} from "../types/RiskId.sol";
14
+ import {UFixed, MathLib, UFixedLib} from "../types/UFixed.sol";
15
+ import {Version} from "../types/Version.sol";
16
+ import {StateId} from "../types/StateId.sol";
17
+
18
+ import {IRegistry} from "../registry/IRegistry.sol";
19
+ import {IBundle} from "../instance/module/IBundle.sol";
20
+ import {IDistribution} from "../instance/module/IDistribution.sol";
21
+ import {IInstance} from "./IInstance.sol";
22
+ import {IKeyValueStore} from "../instance/base/IKeyValueStore.sol";
23
+ import {IPolicy} from "../instance/module/IPolicy.sol";
24
+ import {IRisk} from "../instance/module/IRisk.sol";
25
+ import {ISetup} from "../instance/module/ISetup.sol";
26
+ import {ITreasury} from "../instance/module/ITreasury.sol";
27
+ import {TimestampLib} from "../types/Timestamp.sol";
28
+
29
+
30
+ contract InstanceReader {
31
+ bool private _initialized;
32
+
33
+ IRegistry internal _registry;
34
+ NftId internal _instanceNftId;
35
+ IInstance internal _instance;
36
+ IKeyValueStore internal _store;
37
+
38
+ constructor(
39
+ address registry,
40
+ NftId instanceNftId
41
+ )
42
+ {
43
+ initialize(registry, instanceNftId);
44
+ }
45
+
46
+ function initialize(address registry, NftId instanceNftId) public {
47
+ require(!_initialized, "ERROR:CRD-000:ALREADY_INITIALIZED");
48
+
49
+ require(
50
+ address(registry) != address(0),
51
+ "ERROR:CRD-001:REGISTRY_ZERO");
52
+
53
+ require(
54
+ instanceNftId.gtz(),
55
+ "ERROR:CRD-002:NFT_ID_ZERO");
56
+
57
+ _registry = IRegistry(registry);
58
+ _instanceNftId = instanceNftId;
59
+ IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(_instanceNftId);
60
+
61
+ require(
62
+ instanceInfo.objectType == INSTANCE(),
63
+ "ERROR:CRD-003:PARENT_NOT_INSTANCE");
64
+
65
+ _instance = IInstance(instanceInfo.objectAddress);
66
+ _store = IKeyValueStore(instanceInfo.objectAddress);
67
+
68
+ _initialized = true;
69
+ }
70
+
71
+
72
+ // module specific functions
73
+
74
+ function getPolicyInfo(NftId policyNftId)
75
+ public
76
+ view
77
+ returns (IPolicy.PolicyInfo memory info)
78
+ {
79
+ bytes memory data = _store.getData(toPolicyKey(policyNftId));
80
+ if (data.length > 0) {
81
+ return abi.decode(data, (IPolicy.PolicyInfo));
82
+ }
83
+ }
84
+
85
+ function getPolicyState(NftId policyNftId)
86
+ public
87
+ view
88
+ returns (StateId state)
89
+ {
90
+ return _instance.getState(toPolicyKey(policyNftId));
91
+ }
92
+
93
+ function getRiskInfo(RiskId riskId)
94
+ public
95
+ view
96
+ returns (IRisk.RiskInfo memory info)
97
+ {
98
+ bytes memory data = _store.getData(riskId.toKey32());
99
+ if (data.length > 0) {
100
+ return abi.decode(data, (IRisk.RiskInfo));
101
+ }
102
+ }
103
+
104
+ function getTokenHandler(NftId productNftId)
105
+ public
106
+ view
107
+ returns (address tokenHandler)
108
+ {
109
+ bytes memory data = _store.getData(toTreasuryKey(productNftId));
110
+
111
+ if (data.length > 0) {
112
+ ITreasury.TreasuryInfo memory info = abi.decode(data, (ITreasury.TreasuryInfo));
113
+ return address(info.tokenHandler);
114
+ }
115
+ }
116
+
117
+ function getTreasuryInfo(NftId productNftId)
118
+ public
119
+ view
120
+ returns (ITreasury.TreasuryInfo memory info)
121
+ {
122
+ bytes memory data = _store.getData(toTreasuryKey(productNftId));
123
+ if (data.length > 0) {
124
+ return abi.decode(data, (ITreasury.TreasuryInfo));
125
+ }
126
+ }
127
+
128
+ function getBundleInfo(NftId bundleNftId)
129
+ public
130
+ view
131
+ returns (IBundle.BundleInfo memory info)
132
+ {
133
+ bytes memory data = _store.getData(toBundleKey(bundleNftId));
134
+ if (data.length > 0) {
135
+ return abi.decode(data, (IBundle.BundleInfo));
136
+ }
137
+ }
138
+
139
+ function getDistributorTypeInfo(DistributorType distributorType)
140
+ public
141
+ view
142
+ returns (IDistribution.DistributorTypeInfo memory info)
143
+ {
144
+ bytes memory data = _store.getData(distributorType.toKey32());
145
+ if (data.length > 0) {
146
+ return abi.decode(data, (IDistribution.DistributorTypeInfo));
147
+ }
148
+ }
149
+
150
+ function getDistributorInfo(NftId distributorNftId)
151
+ public
152
+ view
153
+ returns (IDistribution.DistributorInfo memory info)
154
+ {
155
+ bytes memory data = _store.getData(toDistributorKey(distributorNftId));
156
+ if (data.length > 0) {
157
+ return abi.decode(data, (IDistribution.DistributorInfo));
158
+ }
159
+ }
160
+
161
+ function getDistributionSetupInfo(NftId distributionNftId)
162
+ public
163
+ view
164
+ returns (ISetup.DistributionSetupInfo memory info)
165
+ {
166
+ bytes memory data = _store.getData(toDistributionKey(distributionNftId));
167
+ if (data.length > 0) {
168
+ return abi.decode(data, (ISetup.DistributionSetupInfo));
169
+ }
170
+ }
171
+
172
+ function getPoolSetupInfo(NftId poolNftId)
173
+ public
174
+ view
175
+ returns (ISetup.PoolSetupInfo memory info)
176
+ {
177
+ bytes memory data = _store.getData(toPoolKey(poolNftId));
178
+ if (data.length > 0) {
179
+ return abi.decode(data, (ISetup.PoolSetupInfo));
180
+ }
181
+ }
182
+
183
+ function getProductSetupInfo(NftId productNftId)
184
+ public
185
+ view
186
+ returns (ISetup.ProductSetupInfo memory info)
187
+ {
188
+ bytes memory data = _store.getData(toProductKey(productNftId));
189
+ if (data.length > 0) {
190
+ return abi.decode(data, (ISetup.ProductSetupInfo));
191
+ }
192
+ }
193
+
194
+ function getReferralInfo(ReferralId referralId)
195
+ public
196
+ view
197
+ returns (IDistribution.ReferralInfo memory info)
198
+ {
199
+ bytes memory data = _store.getData(referralId.toKey32());
200
+ if (data.length > 0) {
201
+ return abi.decode(data, (IDistribution.ReferralInfo));
202
+ }
203
+ }
204
+
205
+
206
+ function getMetadata(Key32 key)
207
+ public
208
+ view
209
+ returns (IKeyValueStore.Metadata memory metadata)
210
+ {
211
+ return _store.getMetadata(key);
212
+ }
213
+
214
+
215
+ function toReferralId(
216
+ NftId distributionNftId,
217
+ string memory referralCode
218
+ )
219
+ public
220
+ pure
221
+ returns (ReferralId referralId)
222
+ {
223
+ return ReferralLib.toReferralId(
224
+ distributionNftId,
225
+ referralCode);
226
+ }
227
+
228
+
229
+ function getDiscountPercentage(ReferralId referralId)
230
+ public
231
+ view
232
+ returns (
233
+ UFixed discountPercentage,
234
+ ReferralStatus status
235
+ )
236
+ {
237
+ IDistribution.ReferralInfo memory info = getReferralInfo(
238
+ referralId);
239
+
240
+ if (info.expiryAt.eqz()) {
241
+ return (
242
+ UFixedLib.zero(),
243
+ REFERRAL_ERROR_UNKNOWN());
244
+ }
245
+
246
+ if (info.expiryAt < TimestampLib.blockTimestamp()) {
247
+ return (
248
+ UFixedLib.zero(),
249
+ REFERRAL_ERROR_EXPIRED());
250
+ }
251
+
252
+ if (info.usedReferrals >= info.maxReferrals) {
253
+ return (
254
+ UFixedLib.zero(),
255
+ REFERRAL_ERROR_EXHAUSTED());
256
+ }
257
+
258
+ return (
259
+ info.discountPercentage,
260
+ REFERRAL_OK()
261
+ );
262
+ }
263
+
264
+
265
+ function toTreasuryKey(NftId productNftId) public pure returns (Key32) {
266
+ return productNftId.toKey32(TREASURY());
267
+ }
268
+
269
+
270
+ function toPolicyKey(NftId policyNftId) public pure returns (Key32) {
271
+ return policyNftId.toKey32(POLICY());
272
+ }
273
+
274
+
275
+ function toDistributorKey(NftId distributorNftId) public pure returns (Key32) {
276
+ return distributorNftId.toKey32(DISTRIBUTOR());
277
+ }
278
+
279
+ function toDistributionKey(NftId distributionNftId) public pure returns (Key32) {
280
+ return distributionNftId.toKey32(DISTRIBUTION());
281
+ }
282
+
283
+ function toBundleKey(NftId poolNftId) public pure returns (Key32) {
284
+ return poolNftId.toKey32(BUNDLE());
285
+ }
286
+
287
+ function toPoolKey(NftId poolNftId) public pure returns (Key32) {
288
+ return poolNftId.toKey32(POOL());
289
+ }
290
+
291
+ function toProductKey(NftId productNftId) public pure returns (Key32) {
292
+ return productNftId.toKey32(PRODUCT());
293
+ }
294
+
295
+ // low level function
296
+ function getInstance() external view returns (IInstance instance) {
297
+ return _instance;
298
+ }
299
+
300
+ function getInstanceStore() external view returns (IKeyValueStore store) {
301
+ return _store;
302
+ }
303
+
304
+ function getInstanceNftId() external view returns (NftId nftId) {
305
+ return _instanceNftId;
306
+ }
307
+
308
+ function toUFixed(uint256 value, int8 exp) public pure returns (UFixed) {
309
+ return UFixedLib.toUFixed(value, exp);
310
+ }
311
+
312
+ function toInt(UFixed value) public pure returns (uint256) {
313
+ return UFixedLib.toInt(value);
314
+ }
315
+ }
@@ -0,0 +1,234 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
+ import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
6
+
7
+ import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
8
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
9
+ import {Instance} from "./Instance.sol";
10
+ import {IInstanceService} from "./IInstanceService.sol";
11
+ import {InstanceReader} from "./InstanceReader.sol";
12
+ import {BundleManager} from "./BundleManager.sol";
13
+ import {IRegistry} from "../registry/IRegistry.sol";
14
+ import {Registry} from "../registry/Registry.sol";
15
+ import {RegistryService} from "../registry/RegistryService.sol";
16
+ import {Service} from "../../contracts/shared/Service.sol";
17
+ import {IService} from "../shared/IService.sol";
18
+ import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
19
+ import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
20
+ import {RoleId} from "../types/RoleId.sol";
21
+ import {VersionLib} from "../types/Version.sol";
22
+ import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../types/RoleId.sol";
23
+
24
+ contract InstanceService is Service, IInstanceService {
25
+
26
+ address internal _registryAddress;
27
+ address internal _accessManagerMaster;
28
+ address internal _instanceMaster;
29
+ address internal _instanceReaderMaster;
30
+ address internal _instanceBundleManagerMaster;
31
+
32
+ // TODO update to real hash when instance is stable
33
+ bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
34
+ string public constant NAME = "InstanceService";
35
+
36
+ function createInstanceClone()
37
+ external
38
+ returns (
39
+ AccessManagerUpgradeableInitializeable clonedAccessManager,
40
+ Instance clonedInstance,
41
+ NftId clonedInstanceNftId,
42
+ InstanceReader clonedInstanceReader,
43
+ BundleManager clonedBundleManager
44
+ )
45
+ {
46
+ address instanceOwner = msg.sender;
47
+ Registry registry = Registry(_registryAddress);
48
+ NftId registryNftId = registry.getNftId(_registryAddress);
49
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
50
+ RegistryService registryService = RegistryService(registryServiceAddress);
51
+
52
+ // initially set the authority of the access managar to this (being the instance service).
53
+ // This will allow the instance service to bootstrap the authorizations of the instance
54
+ // and then transfer the ownership of the access manager to the instance owner once everything is setup
55
+ clonedAccessManager = AccessManagerUpgradeableInitializeable(Clones.clone(_accessManagerMaster));
56
+ clonedAccessManager.__AccessManagerUpgradeableInitializeable_init(address(this));
57
+
58
+ clonedInstance = Instance(Clones.clone(_instanceMaster));
59
+ clonedInstance.initialize(address(clonedAccessManager), _registryAddress, registryNftId, msg.sender);
60
+ ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
61
+ clonedInstanceNftId = info.nftId;
62
+
63
+ clonedInstanceReader = InstanceReader(Clones.clone(address(_instanceReaderMaster)));
64
+ clonedInstanceReader.initialize(_registryAddress, clonedInstanceNftId);
65
+ clonedInstance.setInstanceReader(clonedInstanceReader);
66
+
67
+ clonedBundleManager = BundleManager(Clones.clone(_instanceBundleManagerMaster));
68
+ clonedBundleManager.initialize(address(clonedAccessManager), _registryAddress, clonedInstanceNftId);
69
+ clonedInstance.setBundleManager(clonedBundleManager);
70
+
71
+ // TODO amend setters with instance specific , policy manager ...
72
+
73
+ _grantInitialAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
74
+
75
+ // to complete setup switch instance ownership to the instance owner
76
+ // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
77
+ clonedAccessManager.grantRole(ADMIN_ROLE().toInt(), instanceOwner, 0);
78
+ clonedAccessManager.revokeRole(ADMIN_ROLE().toInt(), address(this));
79
+
80
+ emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
81
+ }
82
+
83
+ function _grantInitialAuthorizations(AccessManagerUpgradeable clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
84
+ // configure authorization for distribution service on instance
85
+ address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
86
+ clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE().toInt(), distributionServiceAddress, 0);
87
+ bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
88
+ instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
89
+ instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
90
+ clonedAccessManager.setTargetFunctionRole(
91
+ address(clonedInstance),
92
+ instanceDistributionServiceSelectors,
93
+ DISTRIBUTION_SERVICE_ROLE().toInt());
94
+
95
+ // configure authorization for pool service on instance
96
+ address poolServiceAddress = _registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
97
+ clonedAccessManager.grantRole(POOL_SERVICE_ROLE().toInt(), address(poolServiceAddress), 0);
98
+ bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
99
+ instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
100
+ instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
101
+ instancePoolServiceSelectors[2] = clonedInstance.createBundle.selector;
102
+ instancePoolServiceSelectors[3] = clonedInstance.updateBundle.selector;
103
+ clonedAccessManager.setTargetFunctionRole(
104
+ address(clonedInstance),
105
+ instancePoolServiceSelectors,
106
+ POOL_SERVICE_ROLE().toInt());
107
+
108
+ // configure authorization for pool service on bundle manager
109
+ bytes4[] memory bundleManagerPoolServiceSelectors = new bytes4[](5);
110
+ bundleManagerPoolServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
111
+ bundleManagerPoolServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
112
+ bundleManagerPoolServiceSelectors[2] = clonedBundleManager.add.selector;
113
+ bundleManagerPoolServiceSelectors[3] = clonedBundleManager.lock.selector;
114
+ bundleManagerPoolServiceSelectors[4] = clonedBundleManager.unlock.selector;
115
+ clonedAccessManager.setTargetFunctionRole(
116
+ address(clonedBundleManager),
117
+ bundleManagerPoolServiceSelectors,
118
+ POOL_SERVICE_ROLE().toInt());
119
+
120
+ // configure authorization for product service on instance
121
+ address productServiceAddress = _registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
122
+ clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE().toInt(), address(productServiceAddress), 0);
123
+ bytes4[] memory instanceProductServiceSelectors = new bytes4[](9);
124
+ instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
125
+ instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
126
+ instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
127
+ instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
128
+ instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
129
+ instanceProductServiceSelectors[5] = clonedInstance.createPolicy.selector;
130
+ instanceProductServiceSelectors[6] = clonedInstance.updatePolicy.selector;
131
+ instanceProductServiceSelectors[7] = clonedInstance.updatePolicyState.selector;
132
+ clonedAccessManager.setTargetFunctionRole(
133
+ address(clonedInstance),
134
+ instanceProductServiceSelectors,
135
+ PRODUCT_SERVICE_ROLE().toInt());
136
+ }
137
+
138
+ function setMasterInstance(address accessManagerAddress, address instanceAddress, address instanceReaderAddress, address bundleManagerAddress) external onlyOwner {
139
+ require( _accessManagerMaster == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
140
+ require( _instanceMaster == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
141
+ require( _instanceBundleManagerMaster == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
142
+
143
+ require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
144
+ require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
145
+ require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
146
+ require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
147
+
148
+ Instance instance = Instance(instanceAddress);
149
+ InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
150
+ BundleManager bundleManager = BundleManager(bundleManagerAddress);
151
+
152
+ require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
153
+ require(instanceReader.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
154
+ require(bundleManager.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
155
+
156
+ _accessManagerMaster = accessManagerAddress;
157
+ _instanceMaster = instanceAddress;
158
+ _instanceReaderMaster = instanceReaderAddress;
159
+ _instanceBundleManagerMaster = bundleManagerAddress;
160
+ }
161
+
162
+ function upgradeInstanceReader(NftId instanceNftId) external {
163
+ // TODO: ensure this is done by instance owner
164
+ // TODO: upgrade instance reader of this instance to latest (set above here)
165
+ }
166
+
167
+ function getInstanceReaderMaster() external view returns (address) {
168
+ return _instanceReaderMaster;
169
+ }
170
+
171
+ function getInstanceMaster() external view returns (address) {
172
+ return _instanceMaster;
173
+ }
174
+
175
+ function getAccessManagerMaster() external view returns (address) {
176
+ return _accessManagerMaster;
177
+ }
178
+
179
+ function getBundleManagerMaster() external view returns (address) {
180
+ return _instanceBundleManagerMaster;
181
+ }
182
+
183
+ // From IService
184
+ function getName() public pure override(IService, Service) returns(string memory) {
185
+ return NAME;
186
+ }
187
+
188
+ /// @dev top level initializer
189
+ // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
190
+ // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
191
+ // 3) deploy registry -> pass registry service address as constructor argument
192
+ // registry is getting instantiated and locked to registry service address forever
193
+ function _initialize(
194
+ address owner,
195
+ bytes memory data
196
+ )
197
+ internal
198
+ initializer
199
+ virtual override
200
+ {
201
+ // bytes memory encodedConstructorArguments = abi.encode(
202
+ // _registryAddress);
203
+
204
+ // bytes memory instanceCreationCode = ContractDeployerLib.getCreationCode(
205
+ // instanceByteCodeWithInitCode,
206
+ // encodedConstructorArguments);
207
+
208
+ // address instanceAddress = ContractDeployerLib.deploy(
209
+ // instanceCreationCode,
210
+ // INSTANCE_CREATION_CODE_HASH);
211
+
212
+ address initialOwner = address(0);
213
+ (_registryAddress, initialOwner) = abi.decode(data, (address, address));
214
+ // TODO while InstanceService is not deployed in InstanceServiceManager constructor
215
+ // owner is InstanceServiceManager deployer
216
+ _initializeService(_registryAddress, owner);
217
+
218
+ _registerInterface(type(IService).interfaceId);
219
+ _registerInterface(type(IInstanceService).interfaceId);
220
+ }
221
+
222
+ function hasRole(address account, RoleId role, NftId instanceNftId) external view returns (bool) {
223
+ IRegistry.ObjectInfo memory instanceObjectInfo = getRegistry().getObjectInfo(instanceNftId);
224
+ address instanceAddress = instanceObjectInfo.objectAddress;
225
+ Instance instance = Instance(instanceAddress);
226
+ AccessManagerUpgradeable accessManager = AccessManagerUpgradeable(instance.authority());
227
+ (bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
228
+ if (executionDelay > 0) {
229
+ return false;
230
+ }
231
+ return isMember;
232
+ }
233
+ }
234
+
@@ -0,0 +1,57 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Instance} from "./Instance.sol";
5
+ import {IVersionable} from "../shared/IVersionable.sol";
6
+ import {ProxyManager} from "../shared/ProxyManager.sol";
7
+ import {InstanceService} from "./InstanceService.sol";
8
+ import {Registry} from "../registry/Registry.sol";
9
+ import {RegistryService} from "../registry/RegistryService.sol";
10
+ import {VersionLib} from "../types/Version.sol";
11
+
12
+ contract InstanceServiceManager is ProxyManager {
13
+
14
+ InstanceService private _instanceService;
15
+
16
+ /// @dev initializes proxy manager with instance service implementation and deploys instance
17
+ constructor(
18
+ address registryAddress
19
+ )
20
+ ProxyManager()
21
+ {
22
+ InstanceService instSrv = new InstanceService();
23
+ // bytes memory initCode = type(InstanceService).creationCode;
24
+ bytes memory data = abi.encode(registryAddress, address(this));
25
+ IVersionable versionable = deploy(
26
+ address(instSrv),
27
+ data);
28
+
29
+ _instanceService = InstanceService(address(versionable));
30
+
31
+ Registry registry = Registry(registryAddress);
32
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
33
+ RegistryService registryService = RegistryService(registryServiceAddress);
34
+ // TODO this must have a role or own nft to register service
35
+ //registryService.registerService(_instanceService);
36
+ // RegistryService registryService = _instanceService.getRegistryService();
37
+
38
+ // TODO no nft to link yet
39
+ // link ownership of instance service manager ot nft owner of instance service
40
+ //_linkToNftOwnable(
41
+ // address(registryAddress),
42
+ // address(_instanceService));
43
+
44
+ // implies that after this constructor call only upgrade functionality is available
45
+ _isDeployed = true;
46
+ }
47
+
48
+ //--- view functions ----------------------------------------------------//
49
+ function getInstanceService()
50
+ external
51
+ view
52
+ returns (InstanceService instanceService)
53
+ {
54
+ return _instanceService;
55
+ }
56
+
57
+ }