@etherisc/gif-next 0.0.2-f08d150-296 → 0.0.2-f2b0fa2-473

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 (360) hide show
  1. package/README.md +176 -11
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +168 -28
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +610 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +121 -28
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +74 -181
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +447 -60
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +519 -70
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  46. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  47. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1119 -0
  48. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  49. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +234 -1749
  52. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{base/ServiceBase.sol/ServiceBase.json → IInstanceService.sol/IInstanceService.json} +182 -61
  54. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/Instance.sol/Instance.json +2415 -1152
  56. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1257 -0
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +703 -0
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +424 -0
  64. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +224 -43
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +51 -1
  68. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +45 -127
  70. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +55 -245
  73. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  76. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  77. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  78. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  79. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  80. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  81. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  83. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  84. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  85. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  86. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  87. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  89. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +381 -77
  91. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
  93. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  95. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +235 -50
  97. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +325 -51
  99. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  101. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +190 -51
  103. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
  105. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  107. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/Registry.sol/Registry.json +380 -139
  109. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  110. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1261 -0
  111. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  112. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +504 -0
  113. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  114. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  115. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  116. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  117. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  118. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  119. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  120. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  121. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  122. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +175 -54
  123. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  125. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  126. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  127. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  128. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  129. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  131. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  132. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +199 -83
  133. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  134. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  135. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  136. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  137. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  138. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  139. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  141. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  143. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  145. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  147. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
  149. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  151. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  153. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  155. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  156. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  157. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  158. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  161. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  162. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  164. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  166. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  168. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  169. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  170. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  171. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  172. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  174. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  175. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  176. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  177. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  178. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  180. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  182. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  184. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  186. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  188. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  190. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  192. package/contracts/components/BaseComponent.sol +20 -22
  193. package/contracts/components/Distribution.sol +166 -0
  194. package/contracts/components/IBaseComponent.sol +8 -3
  195. package/contracts/components/IDistributionComponent.sol +43 -0
  196. package/contracts/components/IPoolComponent.sol +14 -9
  197. package/contracts/components/IProductComponent.sol +25 -9
  198. package/contracts/components/Pool.sol +115 -30
  199. package/contracts/components/Product.sol +212 -32
  200. package/contracts/experiment/cloning/Cloner.sol +47 -0
  201. package/contracts/instance/AccessManagedSimple.sol +114 -0
  202. package/contracts/instance/AccessManagerSimple.sol +682 -0
  203. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  204. package/contracts/instance/IInstance.sol +17 -41
  205. package/contracts/instance/IInstanceService.sol +17 -0
  206. package/contracts/instance/Instance.sol +420 -52
  207. package/contracts/instance/InstanceAccessManager.sol +288 -0
  208. package/contracts/instance/InstanceReader.sol +280 -0
  209. package/contracts/instance/InstanceService.sol +102 -0
  210. package/contracts/instance/InstanceServiceManager.sol +56 -0
  211. package/contracts/instance/base/ComponentServiceBase.sol +15 -8
  212. package/contracts/instance/base/IInstanceBase.sol +11 -2
  213. package/contracts/instance/base/IKeyValueStore.sol +13 -13
  214. package/contracts/instance/base/ILifecycle.sol +3 -3
  215. package/contracts/instance/base/KeyValueStore.sol +53 -37
  216. package/contracts/instance/base/Lifecycle.sol +16 -11
  217. package/contracts/instance/module/IAccess.sol +38 -0
  218. package/contracts/instance/module/IBundle.sol +19 -0
  219. package/contracts/instance/module/IDistribution.sol +39 -0
  220. package/contracts/instance/module/IPolicy.sol +45 -0
  221. package/contracts/instance/module/IRisk.sol +11 -0
  222. package/contracts/instance/module/ISetup.sol +43 -0
  223. package/contracts/instance/module/ITreasury.sol +23 -0
  224. package/contracts/instance/service/ComponentOwnerService.sol +244 -97
  225. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  226. package/contracts/instance/service/IDistributionService.sol +12 -0
  227. package/contracts/instance/service/IPoolService.sol +8 -1
  228. package/contracts/instance/service/IProductService.sol +56 -7
  229. package/contracts/registry/ChainNft.sol +80 -37
  230. package/contracts/registry/IRegistry.sol +28 -28
  231. package/contracts/registry/IRegistryService.sol +35 -0
  232. package/contracts/registry/ITransferInterceptor.sol +6 -0
  233. package/contracts/registry/Registry.sol +315 -273
  234. package/contracts/registry/RegistryService.sol +439 -0
  235. package/contracts/registry/RegistryServiceManager.sol +64 -0
  236. package/contracts/shared/ContractDeployerLib.sol +72 -0
  237. package/contracts/shared/INftOwnable.sol +22 -0
  238. package/contracts/shared/IRegisterable.sol +8 -15
  239. package/contracts/{instance/base → shared}/IService.sol +3 -3
  240. package/contracts/shared/IVersionable.sol +55 -11
  241. package/contracts/shared/NftOwnable.sol +136 -0
  242. package/contracts/shared/ProxyManager.sol +94 -0
  243. package/contracts/shared/Registerable.sol +62 -59
  244. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  245. package/contracts/shared/Service.sol +54 -0
  246. package/contracts/shared/TokenHandler.sol +27 -0
  247. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  248. package/contracts/shared/Versionable.sol +113 -55
  249. package/contracts/test/TestFee.sol +2 -2
  250. package/contracts/test/TestRegisterable.sol +5 -6
  251. package/contracts/test/TestRoleId.sol +1 -1
  252. package/contracts/test/TestService.sol +5 -13
  253. package/contracts/types/DistributorType.sol +55 -0
  254. package/contracts/types/Fee.sol +10 -5
  255. package/contracts/types/Key32.sol +8 -3
  256. package/contracts/types/NumberId.sol +52 -0
  257. package/contracts/types/ObjectType.sol +51 -14
  258. package/contracts/types/Referral.sol +85 -0
  259. package/contracts/types/RiskId.sol +43 -0
  260. package/contracts/types/RoleId.sol +54 -10
  261. package/contracts/types/StateId.sol +1 -1
  262. package/contracts/types/Timestamp.sol +7 -3
  263. package/contracts/types/UFixed.sol +128 -12
  264. package/contracts/types/Version.sol +9 -0
  265. package/package.json +4 -3
  266. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  267. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  268. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  269. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  270. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  271. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  272. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  273. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  274. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  275. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  276. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  277. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  278. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -296
  279. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  280. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  281. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -296
  282. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  283. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  284. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  285. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  286. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  287. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  288. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  289. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  290. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  291. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  292. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  293. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  294. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  295. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  296. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  297. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  298. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  299. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  300. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  301. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  302. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  303. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  304. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  305. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  306. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  307. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  308. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  309. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  310. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  311. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  312. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  313. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  314. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  315. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  316. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  317. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  318. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -471
  319. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  320. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -673
  321. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  322. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  323. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  324. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  325. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  326. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  327. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  328. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  329. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  330. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  331. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  332. package/contracts/experiment/statemachine/README.md +0 -112
  333. package/contracts/instance/IInstanceLinked.sol +0 -8
  334. package/contracts/instance/base/InstanceBase.sol +0 -80
  335. package/contracts/instance/base/ModuleBase.sol +0 -52
  336. package/contracts/instance/base/ServiceBase.sol +0 -37
  337. package/contracts/instance/module/access/Access.sol +0 -149
  338. package/contracts/instance/module/access/IAccess.sol +0 -53
  339. package/contracts/instance/module/bundle/BundleModule.sol +0 -136
  340. package/contracts/instance/module/bundle/IBundle.sol +0 -58
  341. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  342. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  343. package/contracts/instance/module/component/ComponentModule.sol +0 -95
  344. package/contracts/instance/module/component/IComponent.sol +0 -53
  345. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  346. package/contracts/instance/module/policy/PolicyModule.sol +0 -76
  347. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  348. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  349. package/contracts/instance/module/risk/IRisk.sol +0 -10
  350. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  351. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  352. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  353. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  354. package/contracts/instance/service/PoolService.sol +0 -123
  355. package/contracts/instance/service/ProductService.sol +0 -354
  356. package/contracts/registry/IChainNft.sol +0 -21
  357. package/contracts/registry/IRegistryLinked.sol +0 -8
  358. package/contracts/shared/IOwnable.sol +0 -6
  359. package/contracts/test/TestPool.sol +0 -22
  360. package/contracts/test/TestProduct.sol +0 -44
@@ -0,0 +1,288 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
5
+ import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
6
+
7
+ import {AccessManagedSimple} from "./AccessManagedSimple.sol";
8
+ import {AccessManagerSimple} from "./AccessManagerSimple.sol";
9
+ import {IBundle} from "./module/IBundle.sol";
10
+ import {IPolicy} from "./module/IPolicy.sol";
11
+ import {IRisk} from "./module/IRisk.sol";
12
+ import {ISetup} from "./module/ISetup.sol";
13
+ import {Key32, KeyId, Key32Lib} from "../types/Key32.sol";
14
+ import {KeyValueStore} from "./base/KeyValueStore.sol";
15
+ import {NftId} from "../types/NftId.sol";
16
+ import {NumberId} from "../types/NumberId.sol";
17
+ import {ObjectType, BUNDLE, DISTRIBUTION, POLICY, POOL, ROLE, PRODUCT, TARGET} from "../types/ObjectType.sol";
18
+ import {RiskId, RiskIdLib} from "../types/RiskId.sol";
19
+ import {RoleId, RoleIdLib} from "../types/RoleId.sol";
20
+ import {StateId, ACTIVE} from "../types/StateId.sol";
21
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
22
+
23
+ contract InstanceAccessManager is
24
+ AccessManagedSimple
25
+ {
26
+ string public constant ADMIN_ROLE_NAME = "AdminRole";
27
+ string public constant PUBLIC_ROLE_NAME = "PublicRole";
28
+
29
+ uint64 public constant CUSTOM_ROLE_ID_MIN = 10000;
30
+ uint32 public constant EXECUTION_DELAY = 0;
31
+
32
+ struct RoleInfo {
33
+ ShortString name;
34
+ bool isCustom;
35
+ bool isLocked;
36
+ Timestamp createdAt;
37
+ Timestamp updatedAt;
38
+ }
39
+
40
+ struct TargetInfo {
41
+ ShortString name;
42
+ bool isCustom;
43
+ bool isLocked;
44
+ Timestamp createdAt;
45
+ Timestamp updatedAt;
46
+ }
47
+
48
+ error ErrorRoleIdInvalid(RoleId roleId);
49
+ error ErrorRoleIdTooBig(RoleId roleId);
50
+ error ErrorRoleIdTooSmall(RoleId roleId);
51
+ error ErrorRoleIdAlreadyExists(RoleId roleId, ShortString name);
52
+ error ErrorRoleIdNotActive(RoleId roleId);
53
+ error ErrorRoleNameEmpty(RoleId roleId);
54
+ error ErrorRoleNameNotUnique(RoleId roleId, ShortString name);
55
+ error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
56
+ error ErrorRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
57
+ error ErrorSetLockedForNonexstentRole(RoleId roleId);
58
+ error ErrorGrantNonexstentRole(RoleId roleId);
59
+ error ErrorRevokeNonexstentRole(RoleId roleId);
60
+ error ErrorRenounceNonexstentRole(RoleId roleId);
61
+
62
+ error ErrorTargetAddressZero();
63
+ error ErrorTargetAlreadyExists(address target, ShortString name);
64
+ error ErrorTargetNameEmpty(address target);
65
+ error ErrorTargetNameExists(address target, address existingTarget, ShortString name);
66
+ error ErrorSetLockedForNonexstentTarget(address target);
67
+
68
+ // role specific state
69
+ mapping(RoleId roleId => RoleInfo info) internal _role;
70
+ mapping(RoleId roleId => EnumerableSet.AddressSet roleMembers) internal _roleMembers;
71
+ mapping(ShortString name => RoleId roleId) internal _roleForName;
72
+ RoleId [] internal _roles;
73
+
74
+ // target specific state
75
+ mapping(address target => TargetInfo info) internal _target;
76
+ mapping(ShortString name => address target) internal _targetForName;
77
+ address [] internal _targets;
78
+
79
+ AccessManagerSimple internal _accessManager;
80
+
81
+ constructor(address accessManager)
82
+ AccessManagedSimple(accessManager)
83
+ {
84
+ _accessManager = AccessManagerSimple(accessManager);
85
+
86
+ _createRole(RoleIdLib.toRoleId(_accessManager.ADMIN_ROLE()), ADMIN_ROLE_NAME, false, false);
87
+ _createRole(RoleIdLib.toRoleId(_accessManager.PUBLIC_ROLE()), PUBLIC_ROLE_NAME, false, false);
88
+ }
89
+
90
+ //--- Role ------------------------------------------------------//
91
+
92
+ function createDefaultRole(RoleId roleId, string memory name) external restricted() {
93
+ _createRole(roleId, name, false, true);
94
+ }
95
+
96
+ function createRole(RoleId roleId, string memory name) external restricted() {
97
+ _createRole(roleId, name, true, true);
98
+ }
99
+
100
+ function setRoleLocked(RoleId roleId, bool locked) external restricted() {
101
+ if (!roleExists(roleId)) {
102
+ revert ErrorSetLockedForNonexstentRole(roleId);
103
+ }
104
+
105
+ _role[roleId].isLocked = locked;
106
+ _role[roleId].updatedAt = TimestampLib.blockTimestamp();
107
+ }
108
+
109
+ function roleExists(RoleId roleId) public view returns (bool exists) {
110
+ return _role[roleId].createdAt.gtz();
111
+ }
112
+
113
+ function grantRole(RoleId roleId, address member) external restricted() returns (bool granted) {
114
+ if (!roleExists(roleId)) {
115
+ revert ErrorGrantNonexstentRole(roleId);
116
+ }
117
+
118
+ if (_role[roleId].isLocked) {
119
+ revert ErrorRoleIdNotActive(roleId);
120
+ }
121
+
122
+ if (!EnumerableSet.contains(_roleMembers[roleId], member)) {
123
+ _accessManager.grantRole(roleId.toInt(), member, EXECUTION_DELAY);
124
+ EnumerableSet.add(_roleMembers[roleId], member);
125
+ return true;
126
+ }
127
+
128
+ return false;
129
+ }
130
+
131
+ function revokeRole(RoleId roleId, address member) external restricted() returns (bool revoked) {
132
+ if (!roleExists(roleId)) {
133
+ revert ErrorRevokeNonexstentRole(roleId);
134
+ }
135
+
136
+ if (EnumerableSet.contains(_roleMembers[roleId], member)) {
137
+ _accessManager.revokeRole(roleId.toInt(), member);
138
+ EnumerableSet.remove(_roleMembers[roleId], member);
139
+ return true;
140
+ }
141
+
142
+ return false;
143
+ }
144
+
145
+ /// @dev not restricted function by intention
146
+ /// the restriction to role members is already enforced by the call to the access manger
147
+ function renounceRole(RoleId roleId) external returns (bool revoked) {
148
+ address member = msg.sender;
149
+
150
+ if (!roleExists(roleId)) {
151
+ revert ErrorRenounceNonexstentRole(roleId);
152
+ }
153
+
154
+ if (EnumerableSet.contains(_roleMembers[roleId], member)) {
155
+ // cannot use accessManger.renounce as it directly checks against msg.sender
156
+ _accessManager.revokeRole(roleId.toInt(), member);
157
+ EnumerableSet.remove(_roleMembers[roleId], member);
158
+ return true;
159
+ }
160
+
161
+ return false;
162
+ }
163
+
164
+ function roles() external view returns (uint256 numberOfRoles) {
165
+ return _roles.length;
166
+ }
167
+
168
+ function getRoleId(uint256 idx) external view returns (RoleId roleId) {
169
+ return _roles[idx];
170
+ }
171
+
172
+ function getRoleIdForName(string memory name) external view returns (RoleId roleId) {
173
+ return _roleForName[ShortStrings.toShortString(name)];
174
+ }
175
+
176
+ function getRole(RoleId roleId) external view returns (RoleInfo memory role) {
177
+ return _role[roleId];
178
+ }
179
+
180
+ function hasRole(RoleId roleId, address account) external view returns (bool accountHasRole) {
181
+ (accountHasRole, ) = _accessManager.hasRole(roleId.toInt(), account);
182
+ }
183
+
184
+ function roleMembers(RoleId roleId) external view returns (uint256 numberOfMembers) {
185
+ return EnumerableSet.length(_roleMembers[roleId]);
186
+ }
187
+
188
+ function getRoleMember(RoleId roleId, uint256 idx) external view returns (address roleMember) {
189
+ return EnumerableSet.at(_roleMembers[roleId], idx);
190
+ }
191
+
192
+ //--- Target ------------------------------------------------------//
193
+ function createTarget(address target, string memory name) external restricted() {
194
+ _createTarget(target, name, true, true);
195
+ }
196
+
197
+ function setTargetLocked(address target, bool locked) external restricted() {
198
+ if (!targetExists(target)) {
199
+ revert ErrorSetLockedForNonexstentTarget(target);
200
+ }
201
+
202
+ _target[target].isLocked = locked;
203
+ _accessManager.setTargetClosed(target, locked);
204
+ }
205
+
206
+ function targetExists(address target) public view returns (bool exists) {
207
+ return _target[target].createdAt.gtz();
208
+ }
209
+
210
+ //--- internal view/pure functions --------------------------------------//
211
+
212
+ function _createRole(RoleId roleId, string memory name, bool isCustom, bool validateParameters) internal {
213
+ if (validateParameters) {
214
+ _validateRoleParameters(roleId, name, isCustom);
215
+ }
216
+
217
+ RoleInfo memory role = RoleInfo(
218
+ ShortStrings.toShortString(name),
219
+ isCustom,
220
+ false, // role un-locked,
221
+ TimestampLib.blockTimestamp(),
222
+ TimestampLib.blockTimestamp());
223
+
224
+ _role[roleId] = role;
225
+ _roleForName[role.name] = roleId;
226
+ _roles.push(roleId);
227
+ }
228
+
229
+ function _validateRoleParameters(
230
+ RoleId roleId,
231
+ string memory name,
232
+ bool isCustom
233
+ )
234
+ internal
235
+ view
236
+ returns (RoleInfo memory existingRole)
237
+ {
238
+ // check role id
239
+ uint64 roleIdInt = RoleId.unwrap(roleId);
240
+ if(roleIdInt == _accessManager.ADMIN_ROLE() || roleIdInt == _accessManager.PUBLIC_ROLE()) {
241
+ revert ErrorRoleIdInvalid(roleId);
242
+ }
243
+
244
+ // prevent changing isCustom for existing roles
245
+ existingRole = _role[roleId];
246
+
247
+ if (existingRole.createdAt.gtz() && isCustom != existingRole.isCustom) {
248
+ revert ErrorRoleIsCustomIsImmutable(roleId, isCustom, existingRole.isCustom);
249
+ }
250
+
251
+ if (isCustom && roleIdInt < CUSTOM_ROLE_ID_MIN) {
252
+ revert ErrorRoleIdTooSmall(roleId);
253
+ } else if (!isCustom && roleIdInt >= CUSTOM_ROLE_ID_MIN) {
254
+ revert ErrorRoleIdTooBig(roleId);
255
+ }
256
+
257
+ // role name checks
258
+ ShortString nameShort = ShortStrings.toShortString(name);
259
+ if (ShortStrings.byteLength(nameShort) == 0) {
260
+ revert ErrorRoleNameEmpty(roleId);
261
+ }
262
+
263
+ if (_roleForName[nameShort] != RoleIdLib.zero() && _roleForName[nameShort] != roleId) {
264
+ revert ErrorRoleNameNotUnique(_roleForName[nameShort], nameShort);
265
+ }
266
+ }
267
+
268
+ function _createTarget(address target, string memory name, bool isCustom, bool validateParameters) internal {
269
+ if (validateParameters) {
270
+ _validateTargetParameters(target, name, isCustom);
271
+ }
272
+
273
+ TargetInfo memory info = TargetInfo(
274
+ ShortStrings.toShortString(name),
275
+ isCustom,
276
+ _accessManager.isTargetClosed(target), // sync with state in access manager
277
+ TimestampLib.blockTimestamp(),
278
+ TimestampLib.blockTimestamp());
279
+
280
+ _target[target] = info;
281
+ _targetForName[info.name] = target;
282
+ _targets.push(target);
283
+ }
284
+
285
+ function _validateTargetParameters(address target, string memory name, bool isCustom) internal view {
286
+
287
+ }
288
+ }
@@ -0,0 +1,280 @@
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} 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
+
17
+ import {IRegistry} from "../registry/IRegistry.sol";
18
+ import {IDistribution} from "../instance/module/IDistribution.sol";
19
+ import {IInstance} from "./IInstance.sol";
20
+ import {IKeyValueStore} from "../instance/base/IKeyValueStore.sol";
21
+ import {IPolicy} from "../instance/module/IPolicy.sol";
22
+ import {IRisk} from "../instance/module/IRisk.sol";
23
+ import {ISetup} from "../instance/module/ISetup.sol";
24
+ import {ITreasury} from "../instance/module/ITreasury.sol";
25
+ import {TimestampLib} from "../types/Timestamp.sol";
26
+
27
+
28
+ contract InstanceReader {
29
+
30
+ IRegistry internal _registry;
31
+ NftId internal _instanceNftId;
32
+ IInstance internal _instance;
33
+ IKeyValueStore internal _store;
34
+
35
+ constructor(
36
+ address registry,
37
+ NftId instanceNftId
38
+ )
39
+ {
40
+ require(
41
+ address(registry) != address(0),
42
+ "ERROR:CRD-001:REGISTRY_ZERO");
43
+
44
+ require(
45
+ instanceNftId.gtz(),
46
+ "ERROR:CRD-002:NFT_ID_ZERO");
47
+
48
+ _registry = IRegistry(registry);
49
+ _instanceNftId = instanceNftId;
50
+ IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(_instanceNftId);
51
+
52
+ require(
53
+ instanceInfo.objectType == INSTANCE(),
54
+ "ERROR:CRD-003:PARENT_NOT_INSTANCE");
55
+
56
+ _instance = IInstance(instanceInfo.objectAddress);
57
+ _store = IKeyValueStore(instanceInfo.objectAddress);
58
+ }
59
+
60
+ // module specific functions
61
+
62
+ function getPolicyInfo(NftId policyNftId)
63
+ public
64
+ view
65
+ returns (IPolicy.PolicyInfo memory info)
66
+ {
67
+ bytes memory data = _store.getData(toPolicyKey(policyNftId));
68
+ if (data.length > 0) {
69
+ return abi.decode(data, (IPolicy.PolicyInfo));
70
+ }
71
+ }
72
+
73
+ function getRiskInfo(RiskId riskId)
74
+ public
75
+ view
76
+ returns (IRisk.RiskInfo memory info)
77
+ {
78
+ bytes memory data = _store.getData(riskId.toKey32());
79
+ if (data.length > 0) {
80
+ return abi.decode(data, (IRisk.RiskInfo));
81
+ }
82
+ }
83
+
84
+ function getTokenHandler(NftId productNftId)
85
+ public
86
+ view
87
+ returns (address tokenHandler)
88
+ {
89
+ bytes memory data = _store.getData(toTreasuryKey(productNftId));
90
+
91
+ if (data.length > 0) {
92
+ ITreasury.TreasuryInfo memory info = abi.decode(data, (ITreasury.TreasuryInfo));
93
+ return address(info.tokenHandler);
94
+ }
95
+ }
96
+
97
+ function getTreasuryInfo(NftId productNftId)
98
+ public
99
+ view
100
+ returns (ITreasury.TreasuryInfo memory info)
101
+ {
102
+ bytes memory data = _store.getData(toTreasuryKey(productNftId));
103
+ if (data.length > 0) {
104
+ return abi.decode(data, (ITreasury.TreasuryInfo));
105
+ }
106
+ }
107
+
108
+ function getDistributorTypeInfo(DistributorType distributorType)
109
+ public
110
+ view
111
+ returns (IDistribution.DistributorTypeInfo memory info)
112
+ {
113
+ bytes memory data = _store.getData(distributorType.toKey32());
114
+ if (data.length > 0) {
115
+ return abi.decode(data, (IDistribution.DistributorTypeInfo));
116
+ }
117
+ }
118
+
119
+ function getDistributorInfo(NftId distributorNftId)
120
+ public
121
+ view
122
+ returns (IDistribution.DistributorInfo memory info)
123
+ {
124
+ bytes memory data = _store.getData(toDistributorKey(distributorNftId));
125
+ if (data.length > 0) {
126
+ return abi.decode(data, (IDistribution.DistributorInfo));
127
+ }
128
+ }
129
+
130
+ function getDistributionSetupInfo(NftId distributionNftId)
131
+ public
132
+ view
133
+ returns (ISetup.DistributionSetupInfo memory info)
134
+ {
135
+ bytes memory data = _store.getData(toDistributionKey(distributionNftId));
136
+ if (data.length > 0) {
137
+ return abi.decode(data, (ISetup.DistributionSetupInfo));
138
+ }
139
+ }
140
+
141
+ function getPoolSetupInfo(NftId poolNftId)
142
+ public
143
+ view
144
+ returns (ISetup.PoolSetupInfo memory info)
145
+ {
146
+ bytes memory data = _store.getData(toPoolKey(poolNftId));
147
+ if (data.length > 0) {
148
+ return abi.decode(data, (ISetup.PoolSetupInfo));
149
+ }
150
+ }
151
+
152
+ function getProductSetupInfo(NftId productNftId)
153
+ public
154
+ view
155
+ returns (ISetup.ProductSetupInfo memory info)
156
+ {
157
+ bytes memory data = _store.getData(toProductKey(productNftId));
158
+ if (data.length > 0) {
159
+ return abi.decode(data, (ISetup.ProductSetupInfo));
160
+ }
161
+ }
162
+
163
+ function getReferralInfo(ReferralId referralId)
164
+ public
165
+ view
166
+ returns (IDistribution.ReferralInfo memory info)
167
+ {
168
+ bytes memory data = _store.getData(referralId.toKey32());
169
+ if (data.length > 0) {
170
+ return abi.decode(data, (IDistribution.ReferralInfo));
171
+ }
172
+ }
173
+
174
+
175
+ function getMetadata(Key32 key)
176
+ public
177
+ view
178
+ returns (IKeyValueStore.Metadata memory metadata)
179
+ {
180
+ return _store.getMetadata(key);
181
+ }
182
+
183
+
184
+ function toReferralId(
185
+ NftId distributionNftId,
186
+ string memory referralCode
187
+ )
188
+ public
189
+ pure
190
+ returns (ReferralId referralId)
191
+ {
192
+ return ReferralLib.toReferralId(
193
+ distributionNftId,
194
+ referralCode);
195
+ }
196
+
197
+
198
+ function getDiscountPercentage(ReferralId referralId)
199
+ public
200
+ view
201
+ returns (
202
+ UFixed discountPercentage,
203
+ ReferralStatus status
204
+ )
205
+ {
206
+ IDistribution.ReferralInfo memory info = getReferralInfo(
207
+ referralId);
208
+
209
+ if (info.expiryAt.eqz()) {
210
+ return (
211
+ UFixedLib.zero(),
212
+ REFERRAL_ERROR_UNKNOWN());
213
+ }
214
+
215
+ if (info.expiryAt < TimestampLib.blockTimestamp()) {
216
+ return (
217
+ UFixedLib.zero(),
218
+ REFERRAL_ERROR_EXPIRED());
219
+ }
220
+
221
+ if (info.usedReferrals >= info.maxReferrals) {
222
+ return (
223
+ UFixedLib.zero(),
224
+ REFERRAL_ERROR_EXHAUSTED());
225
+ }
226
+
227
+ return (
228
+ info.discountPercentage,
229
+ REFERRAL_OK()
230
+ );
231
+ }
232
+
233
+
234
+ function toTreasuryKey(NftId productNftId) public pure returns (Key32) {
235
+ return productNftId.toKey32(TREASURY());
236
+ }
237
+
238
+
239
+ function toPolicyKey(NftId policyNftId) public pure returns (Key32) {
240
+ return policyNftId.toKey32(POLICY());
241
+ }
242
+
243
+
244
+ function toDistributorKey(NftId distributorNftId) public pure returns (Key32) {
245
+ return distributorNftId.toKey32(DISTRIBUTOR());
246
+ }
247
+
248
+ function toDistributionKey(NftId distributionNftId) public pure returns (Key32) {
249
+ return distributionNftId.toKey32(DISTRIBUTION());
250
+ }
251
+
252
+ function toPoolKey(NftId poolNftId) public pure returns (Key32) {
253
+ return poolNftId.toKey32(POOL());
254
+ }
255
+
256
+ function toProductKey(NftId productNftId) public pure returns (Key32) {
257
+ return productNftId.toKey32(PRODUCT());
258
+ }
259
+
260
+ // low level function
261
+ function getInstance() external view returns (IInstance instance) {
262
+ return _instance;
263
+ }
264
+
265
+ function getInstanceStore() external view returns (IKeyValueStore store) {
266
+ return _store;
267
+ }
268
+
269
+ function getInstanceNftId() external view returns (NftId nftId) {
270
+ return _instanceNftId;
271
+ }
272
+
273
+ function toUFixed(uint256 value, int8 exp) public pure returns (UFixed) {
274
+ return UFixedLib.toUFixed(value, exp);
275
+ }
276
+
277
+ function toInt(UFixed value) public pure returns (uint256) {
278
+ return UFixedLib.toInt(value);
279
+ }
280
+ }
@@ -0,0 +1,102 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
+
6
+ import {AccessManagerSimple} from "./AccessManagerSimple.sol";
7
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
8
+ import {Instance} from "./Instance.sol";
9
+ import {IInstanceService} from "./IInstanceService.sol";
10
+ import {Service} from "../shared/Service.sol";
11
+ import {IRegistry} from "../registry/IRegistry.sol";
12
+ import {IService} from "../shared/IService.sol";
13
+ import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
14
+ import {NftId, NftIdLib, zeroNftId} from "../types/NftId.sol";
15
+
16
+ contract InstanceService is Service, IInstanceService {
17
+
18
+ address internal _registryAddress;
19
+ address internal _accessManagerMaster;
20
+ address internal _instanceAccessManagerMaster;
21
+ address internal _instanceMaster;
22
+
23
+ // TODO update to real hash when instance is stable
24
+ bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
25
+ string public constant NAME = "InstanceService";
26
+
27
+ function createInstanceClone()
28
+ external
29
+ returns (
30
+ AccessManagerSimple am,
31
+ InstanceAccessManager im,
32
+ Instance i
33
+ )
34
+ {
35
+ am = AccessManagerSimple(Clones.clone(_accessManagerMaster));
36
+ im = InstanceAccessManager(Clones.clone(_instanceAccessManagerMaster));
37
+ i = Instance(Clones.clone(_instanceMaster));
38
+ }
39
+
40
+ function setAccessManagerMaster(address accessManager) external {
41
+ _accessManagerMaster = accessManager;
42
+ }
43
+
44
+ function setInstanceAccessManagerMaster(address instanceAccessManager) external {
45
+ _instanceAccessManagerMaster = instanceAccessManager;
46
+ }
47
+
48
+ function setInstanceMaster(address instance) external {
49
+ _instanceMaster = instance;
50
+ }
51
+
52
+ function getAccessManagerMaster() external view returns (address) { return address(_accessManagerMaster); }
53
+ function getInstanceAccessManagerMaster() external view returns (address) { return address(_instanceAccessManagerMaster); }
54
+ function getInstanceMaster() external view returns (address) { return address(_instanceMaster); }
55
+
56
+ // From IService
57
+ function getName() public pure override(IService, Service) returns(string memory) {
58
+ return NAME;
59
+ }
60
+
61
+ /// @dev top level initializer
62
+ // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
63
+ // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
64
+ // 3) deploy registry -> pass registry service address as constructor argument
65
+ // registry is getting instantiated and locked to registry service address forever
66
+ function _initialize(
67
+ address owner,
68
+ bytes memory data
69
+ )
70
+ internal
71
+ initializer
72
+ virtual override
73
+ {
74
+ // bytes memory encodedConstructorArguments = abi.encode(
75
+ // _registryAddress);
76
+
77
+ // bytes memory instanceCreationCode = ContractDeployerLib.getCreationCode(
78
+ // instanceByteCodeWithInitCode,
79
+ // encodedConstructorArguments);
80
+
81
+ // address instanceAddress = ContractDeployerLib.deploy(
82
+ // instanceCreationCode,
83
+ // INSTANCE_CREATION_CODE_HASH);
84
+
85
+ address initialOwner = address(0);
86
+ (_registryAddress, initialOwner) = abi.decode(data, (address, address));
87
+
88
+ // // TODO register instance in registry
89
+ IRegistry registry = IRegistry(_registryAddress);
90
+ NftId registryNftId = registry.getNftId(_registryAddress);
91
+
92
+ _initializeService(_registryAddress, initialOwner);
93
+
94
+ _registerInterface(type(IService).interfaceId);
95
+ _registerInterface(type(IInstanceService).interfaceId);
96
+ }
97
+
98
+ function getInstance() external view returns (Instance) {
99
+ return Instance(address(this));
100
+ }
101
+ }
102
+