@etherisc/gif-next 0.0.2-299fe4a-464 → 0.0.2-2b7ffff-531

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 (387) hide show
  1. package/README.md +192 -7
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +176 -23
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +618 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +129 -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 +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 +455 -60
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +540 -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/Require.sol/Require.json +2 -2
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  42. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  44. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  45. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  46. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  47. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  48. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  50. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  51. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  52. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  53. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -0
  54. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  56. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +479 -1748
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +2418 -1167
  62. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1388 -0
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +891 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +492 -0
  70. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  71. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +540 -0
  72. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  74. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  76. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  78. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  80. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  82. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  84. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  86. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  88. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  90. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IRisk.sol/IRisk.json} +2 -2
  92. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → ISetup.sol/ISetup.json} +2 -2
  94. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  96. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +393 -85
  98. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  100. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +448 -0
  102. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +182 -80
  104. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +209 -63
  106. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +240 -55
  108. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +330 -56
  110. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  111. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +430 -74
  112. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +460 -0
  114. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  115. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  116. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +485 -37
  118. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  119. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +853 -0
  120. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  121. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  122. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  123. package/artifacts/contracts/registry/Registry.sol/Registry.json +597 -122
  124. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  125. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1237 -0
  126. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +525 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  131. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  133. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  135. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  138. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  139. package/artifacts/contracts/{instance/service → shared}/IService.sol/IService.json +180 -59
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +60 -19
  142. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  144. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  145. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  146. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  147. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  148. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  149. package/artifacts/contracts/{instance/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +209 -80
  150. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  151. package/artifacts/contracts/{instance/service/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +227 -59
  152. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  153. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  154. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  155. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  156. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  157. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +83 -19
  158. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  159. package/artifacts/contracts/test/TestFee.sol/TestFee.json +30 -6
  160. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  161. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  162. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
  164. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestService.sol/TestService.json +277 -84
  166. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  168. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +14 -18
  170. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +106 -50
  172. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  173. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  174. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  175. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +2 -2
  176. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  178. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  180. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  182. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  184. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  185. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  186. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  188. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  190. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  192. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  194. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  196. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  198. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  200. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  202. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  204. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  206. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  208. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionLib.json +101 -2
  210. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  212. package/contracts/components/BaseComponent.sol +26 -24
  213. package/contracts/components/Distribution.sol +160 -0
  214. package/contracts/components/IBaseComponent.sol +9 -3
  215. package/contracts/components/IDistributionComponent.sol +44 -0
  216. package/contracts/components/IPoolComponent.sol +14 -9
  217. package/contracts/components/IProductComponent.sol +25 -9
  218. package/contracts/components/Pool.sol +98 -29
  219. package/contracts/components/Product.sol +212 -32
  220. package/contracts/experiment/cloning/Cloner.sol +47 -0
  221. package/contracts/instance/AccessManagedSimple.sol +115 -0
  222. package/contracts/instance/AccessManagerSimple.sol +692 -0
  223. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  224. package/contracts/instance/IInstance.sol +29 -40
  225. package/contracts/instance/IInstanceService.sol +30 -0
  226. package/contracts/instance/Instance.sol +426 -45
  227. package/contracts/instance/InstanceAccessManager.sol +288 -0
  228. package/contracts/instance/InstanceReader.sol +306 -0
  229. package/contracts/instance/InstanceService.sol +182 -0
  230. package/contracts/instance/InstanceServiceManager.sol +56 -0
  231. package/contracts/instance/base/ComponentServiceBase.sol +124 -0
  232. package/contracts/instance/base/IInstanceBase.sol +23 -0
  233. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  234. package/contracts/instance/base/ILifecycle.sol +30 -0
  235. package/contracts/instance/base/KeyValueStore.sol +172 -0
  236. package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
  237. package/contracts/instance/module/IAccess.sol +38 -0
  238. package/contracts/instance/module/IBundle.sol +20 -0
  239. package/contracts/instance/module/IDistribution.sol +39 -0
  240. package/contracts/instance/module/IPolicy.sol +45 -0
  241. package/contracts/instance/module/IRisk.sol +11 -0
  242. package/contracts/instance/module/ISetup.sol +44 -0
  243. package/contracts/instance/module/ITreasury.sol +23 -0
  244. package/contracts/instance/service/ComponentOwnerService.sol +246 -103
  245. package/contracts/instance/service/DistributionService.sol +87 -0
  246. package/contracts/instance/service/DistributionServiceManager.sol +53 -0
  247. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  248. package/contracts/instance/service/IDistributionService.sol +12 -0
  249. package/contracts/instance/service/IPoolService.sol +8 -1
  250. package/contracts/instance/service/IProductService.sol +56 -7
  251. package/contracts/instance/service/PoolService.sol +138 -43
  252. package/contracts/instance/service/PoolServiceManager.sol +53 -0
  253. package/contracts/registry/ChainNft.sol +80 -37
  254. package/contracts/registry/IRegistry.sol +62 -25
  255. package/contracts/registry/IRegistryService.sol +33 -0
  256. package/contracts/registry/ITransferInterceptor.sol +6 -0
  257. package/contracts/registry/Registry.sol +375 -267
  258. package/contracts/registry/RegistryService.sol +399 -0
  259. package/contracts/registry/RegistryServiceManager.sol +80 -0
  260. package/contracts/registry/TokenRegistry.sol +111 -0
  261. package/contracts/shared/ContractDeployerLib.sol +72 -0
  262. package/contracts/shared/ERC165.sol +6 -2
  263. package/contracts/shared/INftOwnable.sol +22 -0
  264. package/contracts/shared/IRegisterable.sol +8 -15
  265. package/contracts/{instance/service → shared}/IService.sol +3 -3
  266. package/contracts/shared/IVersionable.sol +56 -12
  267. package/contracts/shared/NftOwnable.sol +136 -0
  268. package/contracts/shared/ProxyManager.sol +94 -0
  269. package/contracts/shared/Registerable.sol +63 -59
  270. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  271. package/contracts/shared/Service.sol +55 -0
  272. package/contracts/shared/TokenHandler.sol +27 -0
  273. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  274. package/contracts/shared/Versionable.sol +112 -57
  275. package/contracts/test/TestFee.sol +4 -4
  276. package/contracts/test/TestRegisterable.sol +5 -6
  277. package/contracts/test/TestRoleId.sol +2 -2
  278. package/contracts/test/TestService.sol +6 -17
  279. package/contracts/test/TestVersion.sol +4 -7
  280. package/contracts/test/TestVersionable.sol +2 -5
  281. package/contracts/test/Usdc.sol +26 -0
  282. package/contracts/types/DistributorType.sol +55 -0
  283. package/contracts/types/Fee.sol +44 -20
  284. package/contracts/types/Key32.sol +50 -0
  285. package/contracts/types/NftId.sol +16 -1
  286. package/contracts/types/NumberId.sol +52 -0
  287. package/contracts/types/ObjectType.sol +51 -14
  288. package/contracts/types/Referral.sol +85 -0
  289. package/contracts/types/RiskId.sol +43 -0
  290. package/contracts/types/RoleId.sol +64 -11
  291. package/contracts/types/StateId.sol +12 -2
  292. package/contracts/types/Timestamp.sol +7 -3
  293. package/contracts/types/UFixed.sol +144 -25
  294. package/contracts/types/Version.sol +42 -26
  295. package/package.json +7 -3
  296. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  297. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  298. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
  299. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
  300. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  301. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  302. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  303. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  304. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  305. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  306. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  307. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
  308. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  309. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  310. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -276
  311. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  312. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  313. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  314. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  315. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  316. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  317. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  319. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  322. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  323. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  325. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  327. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  328. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  330. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  332. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +0 -10
  334. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.json +0 -10
  336. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -538
  339. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  341. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -538
  343. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  344. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
  345. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  346. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -685
  347. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  348. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  349. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  350. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  351. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  352. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  353. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  354. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  355. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  356. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  357. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  358. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  359. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  360. package/contracts/experiment/statemachine/README.md +0 -112
  361. package/contracts/instance/IInstanceLinked.sol +0 -8
  362. package/contracts/instance/IServiceLinked.sol +0 -12
  363. package/contracts/instance/InstanceBase.sol +0 -74
  364. package/contracts/instance/module/access/Access.sol +0 -149
  365. package/contracts/instance/module/access/IAccess.sol +0 -53
  366. package/contracts/instance/module/bundle/BundleModule.sol +0 -228
  367. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  368. package/contracts/instance/module/component/ComponentModule.sol +0 -104
  369. package/contracts/instance/module/component/IComponent.sol +0 -53
  370. package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
  371. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  372. package/contracts/instance/module/policy/PolicyModule.sol +0 -84
  373. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  374. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  375. package/contracts/instance/module/product/IProductModule.sol +0 -6
  376. package/contracts/instance/module/product/ProductModule.sol +0 -8
  377. package/contracts/instance/module/treasury/ITreasury.sol +0 -104
  378. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  379. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -148
  380. package/contracts/instance/service/ComponentServiceBase.sol +0 -41
  381. package/contracts/instance/service/ProductService.sol +0 -358
  382. package/contracts/instance/service/ServiceBase.sol +0 -39
  383. package/contracts/registry/IChainNft.sol +0 -21
  384. package/contracts/registry/IRegistryLinked.sol +0 -8
  385. package/contracts/shared/IOwnable.sol +0 -6
  386. package/contracts/test/TestPool.sol +0 -22
  387. package/contracts/test/TestProduct.sol +0 -44
@@ -1,27 +1,76 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {IRisk} from "../module/IRisk.sol";
5
+ import {IService} from "../../shared/IService.sol";
6
+
4
7
  import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/Referral.sol";
9
+ import {RiskId} from "../../types/RiskId.sol";
10
+ import {StateId} from "../../types/StateId.sol";
5
11
  import {Timestamp} from "../../types/Timestamp.sol";
6
12
  import {UFixed} from "../../types/UFixed.sol";
7
13
  import {Fee} from "../../types/Fee.sol";
8
- import {IService} from "./IService.sol";
9
14
 
10
15
  interface IProductService is IService {
11
16
  function setFees(
12
- Fee memory policyFee,
17
+ Fee memory productFee,
13
18
  Fee memory processingFee
14
19
  ) external;
15
20
 
21
+ function createRisk(
22
+ RiskId riskId,
23
+ bytes memory data
24
+ ) external;
25
+
26
+
27
+ function setRiskInfo(
28
+ RiskId riskId,
29
+ IRisk.RiskInfo memory data
30
+ ) external;
31
+
32
+
33
+ function updateRiskState(
34
+ RiskId riskId,
35
+ StateId state
36
+ ) external;
37
+
38
+
39
+ function calculatePremium(
40
+ RiskId riskId,
41
+ uint256 sumInsuredAmount,
42
+ uint256 lifetime,
43
+ bytes memory applicationData,
44
+ NftId bundleNftId,
45
+ ReferralId referralId
46
+ )
47
+ external
48
+ view
49
+ returns (
50
+ uint256 premiumAmount,
51
+ uint256 productFeeAmount,
52
+ uint256 poolFeeAmount,
53
+ uint256 bundleFeeAmount,
54
+ uint256 distributionFeeAmount
55
+ );
56
+
57
+
16
58
  function createApplication(
17
59
  address applicationOwner,
60
+ RiskId riskId,
18
61
  uint256 sumInsuredAmount,
19
- uint256 premiumAmount,
20
62
  uint256 lifetime,
21
- NftId bundleNftId
63
+ bytes memory applicationData,
64
+ NftId bundleNftId,
65
+ ReferralId referralId
22
66
  ) external returns (NftId nftId);
23
67
 
24
- // function revoke(unit256 nftId) external;
68
+ /**
69
+ * @dev revokes the application represented by {policyNftId}.
70
+ * an application can only be revoked in applied state.
71
+ * only the application holder may revoke an application.
72
+ */
73
+ function revoke(NftId policyNftId) external;
25
74
 
26
75
  /**
27
76
  * @dev underwrites the policy represented by {policyNftId}.
@@ -38,9 +87,9 @@ interface IProductService is IService {
38
87
  // function decline(uint256 nftId) external;
39
88
  // function expire(uint256 nftId) external;
40
89
 
41
- function collectPremium(NftId nftId, Timestamp activateAt) external;
90
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external;
42
91
 
43
- function activate(NftId nftId, Timestamp activateAt) external;
92
+ function activate(NftId policyNftId, Timestamp activateAt) external;
44
93
 
45
94
 
46
95
  function close(NftId nftId) external;
@@ -1,65 +1,99 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {Pool} from "../../components/Pool.sol";
4
5
  import {IRegistry} from "../../registry/IRegistry.sol";
5
6
  import {IInstance} from "../../instance/IInstance.sol";
6
- import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
7
+ import {IBundle} from "../../instance/module/IBundle.sol";
8
+ import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
+ import {ISetup} from "../module/ISetup.sol";
7
10
 
8
11
  import {IVersionable} from "../../shared/IVersionable.sol";
9
12
  import {Versionable} from "../../shared/Versionable.sol";
13
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
10
14
 
11
- import {NftId, NftIdLib} from "../../types/NftId.sol";
15
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
12
16
  import {POOL, BUNDLE} from "../../types/ObjectType.sol";
13
- import {Fee, feeIsZero} from "../../types/Fee.sol";
14
- import {Version, toVersion, toVersionPart} from "../../types/Version.sol";
15
-
16
- import {ComponentServiceBase} from "./ComponentServiceBase.sol";
17
+ import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
18
+ import {Fee, FeeLib} from "../../types/Fee.sol";
19
+ import {Version, VersionLib} from "../../types/Version.sol";
20
+ import {KEEP_STATE} from "../../types/StateId.sol";
21
+ import {zeroTimestamp} from "../../types/Timestamp.sol";
22
+
23
+ import {IService} from "../../shared/IService.sol";
24
+ import {Service} from "../../shared/Service.sol";
25
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
17
26
  import {IPoolService} from "./IPoolService.sol";
27
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
28
+ import {InstanceService} from "../InstanceService.sol";
29
+ import {InstanceReader} from "../InstanceReader.sol";
30
+
18
31
 
32
+ string constant POOL_SERVICE_NAME = "PoolService";
19
33
 
20
- contract PoolService is ComponentServiceBase, IPoolService {
34
+ contract PoolService is
35
+ ComponentServiceBase,
36
+ IPoolService
37
+ {
21
38
  using NftIdLib for NftId;
22
39
 
23
40
  string public constant NAME = "PoolService";
24
41
 
25
- constructor(
26
- address registry,
27
- NftId registryNftId
28
- ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
42
+ address internal _registryAddress;
43
+
44
+ function _initialize(
45
+ address owner,
46
+ bytes memory data
47
+ )
48
+ internal
49
+ initializer
50
+ virtual override
29
51
  {
52
+ address initialOwner = address(0);
53
+ (_registryAddress, initialOwner) = abi.decode(data, (address, address));
54
+
55
+ _initializeService(_registryAddress, initialOwner);
56
+
57
+ _registerInterface(type(IService).interfaceId);
30
58
  _registerInterface(type(IPoolService).interfaceId);
31
59
  }
32
60
 
33
- function getVersion()
34
- public
35
- pure
36
- virtual override (IVersionable, Versionable)
37
- returns(Version)
38
- {
39
- return toVersion(
40
- toVersionPart(3),
41
- toVersionPart(0),
42
- toVersionPart(0));
61
+ function getName() public pure override(Service, IService) returns(string memory name) {
62
+ return NAME;
43
63
  }
44
64
 
45
- function getName() external pure override returns(string memory name) {
46
- return NAME;
65
+ function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
66
+ ISetup.PoolSetupInfo memory initialSetup = abi.decode(
67
+ initialObjData,
68
+ (ISetup.PoolSetupInfo)
69
+ );
70
+ instance.createPoolSetup(componentNftId, initialSetup);
47
71
  }
48
72
 
49
73
  function setFees(
74
+ Fee memory poolFee,
50
75
  Fee memory stakingFee,
51
76
  Fee memory performanceFee
52
77
  )
53
78
  external
54
79
  override
55
80
  {
56
- (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
57
- instance.setPoolFees(info.nftId, stakingFee, performanceFee);
81
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
82
+ InstanceReader instanceReader = instance.getInstanceReader();
83
+ NftId poolNftId = poolInfo.nftId;
84
+
85
+ ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
86
+ poolSetupInfo.poolFee = poolFee;
87
+ poolSetupInfo.stakingFee = stakingFee;
88
+ poolSetupInfo.performanceFee = performanceFee;
89
+
90
+ instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
58
91
  }
59
92
 
60
93
  function createBundle(
61
94
  address owner,
62
- uint256 amount,
95
+ Fee memory fee,
96
+ uint256 stakingAmount,
63
97
  uint256 lifetime,
64
98
  bytes calldata filter
65
99
  )
@@ -68,31 +102,92 @@ contract PoolService is ComponentServiceBase, IPoolService {
68
102
  returns(NftId bundleNftId)
69
103
  {
70
104
  (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
71
-
72
- // register bundle with registry
105
+ InstanceReader instanceReader = instance.getInstanceReader();
73
106
  NftId poolNftId = info.nftId;
74
- bundleNftId = _registry.registerObjectForInstance(
75
- poolNftId,
76
- BUNDLE(),
77
- owner,
78
- "");
79
107
 
80
- // create bundle info in instance
81
- instance.createBundleInfo(
82
- bundleNftId,
108
+ IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
83
109
  poolNftId,
84
- amount,
110
+ FeeLib.zeroFee(),
111
+ filter,
112
+ stakingAmount,
113
+ 0,
114
+ stakingAmount,
85
115
  lifetime,
86
- filter);
116
+ zeroTimestamp(),
117
+ zeroTimestamp()
118
+ );
87
119
 
88
- // add bundle to pool in instance
89
- instance.addBundleToPool(
90
- bundleNftId,
91
- poolNftId,
92
- amount);
120
+ // register bundle with registry
121
+ bundleNftId = getRegistryService().registerBundle(
122
+ IRegistry.ObjectInfo(
123
+ zeroNftId(),
124
+ poolNftId,
125
+ BUNDLE(),
126
+ false, // intercepting property for bundles is defined on pool
127
+ address(0),
128
+ owner,
129
+ abi.encode(bundleInfo)
130
+ )
131
+ );
132
+
133
+ // create bundle info in instance
134
+ instance.createBundle(bundleNftId, bundleInfo);
93
135
 
136
+ // TODO add bundle to pool in instance
137
+
94
138
  // TODO collect capital
139
+ // _processStakingByTreasury(
140
+ // instanceReader,
141
+ // zeroNftId(),
142
+ // poolNftId,
143
+ // bundleNftId,
144
+ // stakingAmount);
95
145
 
96
146
  // TODO add logging
97
147
  }
148
+
149
+ function setBundleFee(
150
+ NftId bundleNftId,
151
+ Fee memory fee
152
+ )
153
+ external
154
+ override
155
+ {
156
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
157
+ InstanceReader instanceReader = instance.getInstanceReader();
158
+ NftId poolNftId = info.nftId;
159
+
160
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
161
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
162
+ require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
163
+
164
+ bundleInfo.fee = fee;
165
+
166
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
167
+ }
168
+
169
+
170
+
171
+ function _processStakingByTreasury(
172
+ InstanceReader instanceReader,
173
+ NftId productNftId,
174
+ NftId poolNftId,
175
+ NftId bundleNftId,
176
+ uint256 stakingAmount
177
+ )
178
+ internal
179
+ {
180
+ // process token transfer(s)
181
+ if(stakingAmount > 0) {
182
+ TokenHandler tokenHandler = TokenHandler(instanceReader.getTokenHandler(productNftId));
183
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
184
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
185
+
186
+ tokenHandler.transfer(
187
+ bundleOwner,
188
+ poolInfo.wallet,
189
+ stakingAmount
190
+ );
191
+ }
192
+ }
98
193
  }
@@ -0,0 +1,53 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {PoolService} from "./PoolService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {VersionLib} from "../../types/Version.sol";
10
+
11
+ contract PoolServiceManager is ProxyManager {
12
+
13
+ PoolService private _poolService;
14
+
15
+ /// @dev initializes proxy manager with pool service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ PoolService poolSrv = new PoolService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(poolSrv),
25
+ data);
26
+
27
+ _poolService = PoolService(address(versionable));
28
+
29
+ Registry registry = Registry(registryAddress);
30
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ RegistryService registryService = RegistryService(registryServiceAddress);
32
+
33
+ registryService.registerService(_poolService);
34
+
35
+ // link ownership of instance service manager ot nft owner of instance service
36
+ _linkToNftOwnable(
37
+ address(registryAddress),
38
+ address(_poolService));
39
+
40
+ // implies that after this constructor call only upgrade functionality is available
41
+ _isDeployed = true;
42
+ }
43
+
44
+ //--- view functions ----------------------------------------------------//
45
+ function getPoolService()
46
+ external
47
+ view
48
+ returns (PoolService poolService)
49
+ {
50
+ return _poolService;
51
+ }
52
+
53
+ }
@@ -1,16 +1,31 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {ERC721, ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
5
- import {IChainNft} from "./IChainNft.sol";
5
+ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
6
6
 
7
- contract ChainNft is ERC721Enumerable, IChainNft {
8
- string public constant NAME = "Dezentralized Insurance Protocol Registry";
9
- string public constant SYMBOL = "DIPR";
7
+ import {ITransferInterceptor} from "./ITransferInterceptor.sol";
8
+
9
+ contract ChainNft is ERC721Enumerable {
10
+
11
+ // constants
12
+ string public constant NAME = "Dezentralized Insurance Protocol NFT";
13
+ string public constant SYMBOL = "DIPNFT";
10
14
 
11
15
  uint256 public constant PROTOCOL_NFT_ID = 1101;
12
16
  uint256 public constant GLOBAL_REGISTRY_ID = 2101;
13
17
 
18
+ // custom errors
19
+ error CallerNotRegistry(address caller);
20
+ error RegistryAddressZero();
21
+ error NftUriEmpty();
22
+ error NftUriAlreadySet();
23
+
24
+ // contract state
25
+
26
+ // remember interceptors
27
+ mapping(uint256 tokenId => address interceptor) private _interceptor;
28
+
14
29
  // remember token uri
15
30
  mapping(uint256 tokenId => string uri) private _uri;
16
31
 
@@ -25,50 +40,79 @@ contract ChainNft is ERC721Enumerable, IChainNft {
25
40
  uint256 internal _totalMinted;
26
41
 
27
42
  modifier onlyRegistry() {
28
- require(msg.sender == _registry, "ERROR:NFT-001:CALLER_NOT_REGISTRY");
43
+ if (msg.sender != _registry) { revert CallerNotRegistry(msg.sender); }
29
44
  _;
30
45
  }
31
46
 
32
47
  constructor(address registry) ERC721(NAME, SYMBOL) {
33
- require(registry != address(0), "ERROR:NFT-010:REGISTRY_ZERO");
48
+ if (registry == address(0)) { revert RegistryAddressZero(); }
34
49
 
35
50
  _registry = registry;
36
-
37
51
  _chainIdInt = block.chainid;
38
- _chainIdDigits = _countDigits(_chainIdInt);
52
+ _chainIdDigits = 0;
53
+
54
+ // count digis
55
+ uint256 num = _chainIdInt;
56
+ while (num != 0) {
57
+ _chainIdDigits++;
58
+ num /= 10;
59
+ }
60
+
39
61
  _chainIdMultiplier = 10 ** _chainIdDigits;
40
- _idNext = 3;
62
+ _idNext = 4;
41
63
  }
42
64
 
65
+ /**
66
+ * @dev mints a token for a specified token id
67
+ * not part of the IRegistry interface only needed for
68
+ * initial registry setup (protocol and global registry objects)
69
+ */
70
+ function mint(address to, uint256 tokenId) external onlyRegistry {
71
+ _totalMinted++;
72
+ _safeMint(to, tokenId);
73
+ }
74
+
75
+
43
76
  /**
44
77
  * @dev mints the next token to register new objects
78
+ * non-zero transferInterceptors are recorded and called during nft token transfers.
79
+ * the contract receiving such a notification may decides to revert or record the transfer
45
80
  */
46
81
  function mint(
47
82
  address to,
83
+ address interceptor,
48
84
  string memory uri
49
- ) external override onlyRegistry returns (uint256 tokenId) {
85
+ ) public onlyRegistry returns (uint256 tokenId) {
50
86
  tokenId = _getNextTokenId();
51
87
 
88
+ if (interceptor != address(0)) {
89
+ _interceptor[tokenId] = interceptor;
90
+ }
91
+
52
92
  if (bytes(uri).length > 0) {
53
93
  _uri[tokenId] = uri;
54
94
  }
55
95
 
56
- _safeMint(to, tokenId);
57
96
  _totalMinted++;
97
+ _safeMint(to, tokenId);
58
98
  }
59
99
 
100
+
60
101
  /**
61
- * @dev mints a token for a specified token id
62
- * not part of the IRegistry interface only needed for
63
- * initial registry setup (protocol and global registry objects)
64
- */
65
- function mint(address to, uint256 tokenId) external onlyRegistry {
66
- _totalMinted++;
67
- _safeMint(to, tokenId);
102
+ * @dev amend the open zeppelin transferFrom function by an interceptor call if such an interceptor is defined for the nft token id
103
+ * this allows distribution, product and pool components to be notified when distributors, policies and bundles are transferred.
104
+ */
105
+ function transferFrom(address from, address to, uint256 tokenId) public override (ERC721, IERC721) {
106
+ super.transferFrom(from, to, tokenId);
107
+
108
+ if (_interceptor[tokenId] != address(0)) {
109
+ ITransferInterceptor(_interceptor[tokenId]).nftTransferFrom(from, to, tokenId);
110
+ }
68
111
  }
69
112
 
70
- function burn(uint256 tokenId) external override onlyRegistry {
71
- _requireMinted(tokenId);
113
+
114
+ function burn(uint256 tokenId) external onlyRegistry {
115
+ _requireOwned(tokenId);
72
116
  _burn(tokenId);
73
117
  delete _uri[tokenId];
74
118
  }
@@ -76,29 +120,36 @@ contract ChainNft is ERC721Enumerable, IChainNft {
76
120
  function setURI(
77
121
  uint256 tokenId,
78
122
  string memory uri
79
- ) external override onlyRegistry {
80
- require(bytes(uri).length > 0, "ERROR:CRG-011:URI_EMPTY");
123
+ ) external onlyRegistry {
124
+ if (bytes(uri).length == 0) { revert NftUriEmpty(); }
125
+ if (bytes(_uri[tokenId]).length > 0) { revert NftUriAlreadySet(); }
81
126
 
82
- _requireMinted(tokenId);
127
+ _requireOwned(tokenId);
83
128
  _uri[tokenId] = uri;
84
129
  }
85
130
 
86
- function exists(uint256 tokenId) external view override returns (bool) {
87
- return _exists(tokenId);
131
+ function exists(uint256 tokenId) external view returns (bool) {
132
+ return _ownerOf(tokenId) != address(0);
88
133
  }
89
134
 
90
135
  function tokenURI(
91
136
  uint256 tokenId
92
137
  ) public view override returns (string memory) {
93
- _requireMinted(tokenId);
138
+ // gif generally does not revert for view functions
139
+ // this is an exception to keep the openzeppelin nft semantics
140
+ _requireOwned(tokenId);
94
141
  return _uri[tokenId];
95
142
  }
96
143
 
97
- function getRegistryAddress() external view override returns (address) {
144
+ function getInterceptor(uint256 tokenId) external view returns (address) {
145
+ return _interceptor[tokenId];
146
+ }
147
+
148
+ function getRegistryAddress() external view returns (address) {
98
149
  return _registry;
99
150
  }
100
151
 
101
- function totalMinted() external view override returns (uint256) {
152
+ function totalMinted() external view returns (uint256) {
102
153
  return _totalMinted;
103
154
  }
104
155
 
@@ -148,12 +199,4 @@ contract ChainNft is ERC721Enumerable, IChainNft {
148
199
  id = calculateTokenId(_idNext);
149
200
  _idNext++;
150
201
  }
151
-
152
- function _countDigits(uint256 num) private pure returns (uint256 count) {
153
- count = 0;
154
- while (num != 0) {
155
- count++;
156
- num /= 10;
157
- }
158
- }
159
202
  }