@etherisc/gif-next 0.0.2-e1e92ab-754 → 0.0.2-e2d8c7d-942

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 (370) hide show
  1. package/README.md +160 -2
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +152 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +220 -33
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +114 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -25
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +24 -57
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -50
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +291 -68
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +299 -58
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  50. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  52. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +807 -1023
  54. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +496 -0
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +2290 -1055
  60. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
  62. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1079 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +560 -0
  70. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +40 -0
  74. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  76. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  77. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  80. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  81. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  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/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  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/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  92. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/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/BundleService.sol/BundleService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  98. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  100. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +47 -47
  102. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +95 -41
  104. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  106. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  108. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +1 -1
  110. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  111. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  112. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  113. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +9 -71
  115. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  116. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -232
  117. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  118. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +984 -0
  119. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  120. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  121. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  122. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +81 -116
  123. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  124. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
  125. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  126. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +76 -376
  127. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  128. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  129. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  130. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
  131. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  132. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +202 -1
  133. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  134. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -19
  135. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  136. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  137. package/artifacts/contracts/registry/Registry.sol/Registry.json +173 -50
  138. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  139. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +75 -27
  140. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  141. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +61 -34
  142. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  143. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  144. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  145. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  146. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  147. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  149. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  150. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +1 -1
  151. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  153. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  154. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  155. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  156. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  157. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  158. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  159. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +2 -104
  160. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  161. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +2 -2
  162. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  163. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  164. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  165. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  166. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  170. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  172. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestService.sol/TestService.json +26 -10
  174. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  176. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  177. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  178. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +18 -2
  179. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  180. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  181. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  196. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  198. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  200. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  202. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  204. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  206. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  208. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -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 +64 -11
  213. package/contracts/components/Distribution.sol +23 -15
  214. package/contracts/components/IBaseComponent.sol +14 -2
  215. package/contracts/components/IDistributionComponent.sol +2 -4
  216. package/contracts/components/IPoolComponent.sol +5 -3
  217. package/contracts/components/IProductComponent.sol +2 -4
  218. package/contracts/components/Pool.sol +57 -32
  219. package/contracts/components/Product.sol +59 -66
  220. package/contracts/experiment/cloning/Cloner.sol +47 -0
  221. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  222. package/contracts/instance/BundleManager.sol +129 -0
  223. package/contracts/instance/Cloneable.sol +46 -0
  224. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  225. package/contracts/instance/IInstance.sol +52 -44
  226. package/contracts/instance/IInstanceBase.sol +26 -0
  227. package/contracts/instance/IInstanceService.sol +34 -0
  228. package/contracts/instance/Instance.sol +444 -63
  229. package/contracts/instance/InstanceAccessManager.sol +288 -0
  230. package/contracts/instance/InstanceBase.sol +41 -0
  231. package/contracts/instance/InstanceReader.sol +315 -0
  232. package/contracts/instance/InstanceService.sol +299 -0
  233. package/contracts/instance/InstanceServiceManager.sol +57 -0
  234. package/contracts/instance/ObjectManager.sol +101 -0
  235. package/contracts/instance/base/ComponentServiceBase.sol +44 -21
  236. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  237. package/contracts/instance/base/ILifecycle.sol +3 -3
  238. package/contracts/instance/base/KeyValueStore.sol +49 -38
  239. package/contracts/instance/base/Lifecycle.sol +1 -1
  240. package/contracts/instance/module/IAccess.sol +38 -0
  241. package/contracts/instance/module/IBundle.sol +20 -0
  242. package/contracts/instance/module/IDistribution.sol +39 -0
  243. package/contracts/instance/module/IPolicy.sol +45 -0
  244. package/contracts/instance/module/IRisk.sol +11 -0
  245. package/contracts/instance/module/ISetup.sol +46 -0
  246. package/contracts/instance/module/ITreasury.sol +23 -0
  247. package/contracts/instance/service/BundleService.sol +260 -0
  248. package/contracts/instance/service/BundleServiceManager.sol +54 -0
  249. package/contracts/instance/service/ComponentOwnerService.sol +62 -60
  250. package/contracts/instance/service/DistributionService.sol +79 -15
  251. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  252. package/contracts/instance/service/IBundleService.sol +45 -0
  253. package/contracts/instance/service/IComponentOwnerService.sol +1 -1
  254. package/contracts/instance/service/IDistributionService.sol +1 -1
  255. package/contracts/instance/service/IPolicyService.sol +87 -0
  256. package/contracts/instance/service/IPoolService.sol +7 -24
  257. package/contracts/instance/service/IProductService.sol +9 -76
  258. package/contracts/instance/service/PolicyService.sol +508 -0
  259. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  260. package/contracts/instance/service/PoolService.sol +79 -104
  261. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  262. package/contracts/instance/service/ProductService.sol +97 -434
  263. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  264. package/contracts/registry/ChainNft.sol +38 -23
  265. package/contracts/registry/IRegistry.sol +28 -4
  266. package/contracts/registry/IRegistryService.sol +34 -19
  267. package/contracts/registry/Registry.sol +82 -60
  268. package/contracts/registry/RegistryService.sol +42 -125
  269. package/contracts/registry/RegistryServiceManager.sol +24 -7
  270. package/contracts/registry/TokenRegistry.sol +111 -0
  271. package/contracts/shared/ERC165.sol +6 -2
  272. package/contracts/{instance/base → shared}/IService.sol +3 -3
  273. package/contracts/shared/NftOwnable.sol +2 -4
  274. package/contracts/shared/Registerable.sol +1 -0
  275. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  276. package/contracts/shared/Service.sol +55 -0
  277. package/contracts/shared/TokenHandler.sol +27 -0
  278. package/contracts/shared/Versionable.sol +2 -2
  279. package/contracts/test/TestRoleId.sol +1 -1
  280. package/contracts/test/TestService.sol +3 -5
  281. package/contracts/types/DistributorType.sol +55 -0
  282. package/contracts/types/Key32.sol +8 -3
  283. package/contracts/types/NftIdSet.sol +26 -24
  284. package/contracts/types/NumberId.sol +52 -0
  285. package/contracts/types/ObjectType.sol +35 -14
  286. package/contracts/types/Referral.sol +85 -0
  287. package/contracts/types/RoleId.sol +62 -15
  288. package/contracts/types/StateId.sol +5 -1
  289. package/contracts/types/Timestamp.sol +7 -3
  290. package/contracts/types/Version.sol +4 -1
  291. package/package.json +1 -1
  292. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  293. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  294. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  295. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  296. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  297. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  298. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  299. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  300. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  301. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  302. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  303. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  304. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
  305. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  306. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  307. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  308. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  309. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  310. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  311. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  312. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  313. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  314. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  316. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -271
  317. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -271
  319. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  321. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  322. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  323. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  325. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  327. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  328. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  330. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  333. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  334. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  335. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  337. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  338. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
  339. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  340. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -557
  341. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  342. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -716
  343. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  344. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -744
  345. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  346. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  347. package/contracts/instance/IInstanceLinked.sol +0 -8
  348. package/contracts/instance/base/InstanceBase.sol +0 -89
  349. package/contracts/instance/base/ModuleBase.sol +0 -57
  350. package/contracts/instance/base/ServiceBase.sol +0 -44
  351. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  352. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  353. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  354. package/contracts/instance/module/component/IComponent.sol +0 -28
  355. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  356. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  357. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  358. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  359. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  360. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  361. package/contracts/instance/module/risk/IRisk.sol +0 -26
  362. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  363. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  364. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  365. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  366. package/contracts/registry/IChainNft.sol +0 -22
  367. package/contracts/test/TestDistribution.sol +0 -22
  368. package/contracts/test/TestPool.sol +0 -27
  369. package/contracts/test/TestProduct.sol +0 -74
  370. package/contracts/types/ReferralId.sol +0 -48
@@ -1,12 +1,12 @@
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 {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
5
5
  import {Key32, KeyId, Key32Lib} from "../../types/Key32.sol";
6
6
  import {NftId} from "../../types/NftId.sol";
7
7
  import {ObjectType} from "../../types/ObjectType.sol";
8
8
  import {StateId, ACTIVE} from "../../types/StateId.sol";
9
- import {Timestamp, blockTimestamp, zeroTimestamp} from "../../types/Timestamp.sol";
9
+ import {Timestamp, TimestampLib} from "../../types/Timestamp.sol";
10
10
 
11
11
  import {Lifecycle} from "./Lifecycle.sol";
12
12
  import {IKeyValueStore} from "./IKeyValueStore.sol";
@@ -14,27 +14,23 @@ import {IKeyValueStore} from "./IKeyValueStore.sol";
14
14
  contract KeyValueStore is Lifecycle, IKeyValueStore {
15
15
 
16
16
  mapping(Key32 key32 => Value value) private _value;
17
- address private _owner;
18
17
 
19
- modifier onlyOwner() {
20
- require(
21
- msg.sender == _owner,
22
- "ERROR:KVS-001:NOT_OWNER");
23
- _;
24
- }
25
-
26
- constructor() {
27
- _owner = msg.sender;
18
+ function create(
19
+ Key32 key32,
20
+ bytes memory data
21
+ )
22
+ internal
23
+ {
24
+ _create(key32, data);
28
25
  }
29
26
 
30
- function create(
27
+ function _create(
31
28
  Key32 key32,
32
- ObjectType objectType,
33
29
  bytes memory data
34
30
  )
35
- public
36
- onlyOwner
31
+ internal
37
32
  {
33
+ ObjectType objectType = key32.toObjectType();
38
34
  require(objectType.gtz(), "ERROR:KVS-010:TYPE_UNDEFINED");
39
35
 
40
36
  Metadata storage metadata = _value[key32].metadata;
@@ -55,12 +51,25 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
55
51
  _value[key32].data = data;
56
52
 
57
53
  // solhint-disable-next-line avoid-tx-origin
58
- emit LogInfoCreated(toKey(key32), initialState, createdBy, tx.origin);
54
+ emit LogInfoCreated(key32.toObjectType(), key32.toKeyId(), initialState, createdBy, tx.origin);
59
55
  }
60
56
 
61
- function update(Key32 key32, StateId state, bytes memory data)
62
- public
63
- onlyOwner
57
+ function update(
58
+ Key32 key32,
59
+ bytes memory data,
60
+ StateId state
61
+ )
62
+ internal
63
+ {
64
+ _update(key32, data, state);
65
+ }
66
+
67
+ function _update(
68
+ Key32 key32,
69
+ bytes memory data,
70
+ StateId state
71
+ )
72
+ internal
64
73
  {
65
74
  require(state.gtz(), "ERROR:KVS-020:STATE_UNDEFINED");
66
75
  Metadata storage metadata = _value[key32].metadata;
@@ -78,16 +87,20 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
78
87
  metadata.updatedIn = blockBlocknumber();
79
88
 
80
89
  // create log entries
81
- Key memory key = toKey(key32);
82
- // solhint-disable-next-line avoid-tx-origin
83
- emit LogStateUpdated(key, state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
84
- // solhint-disable-next-line avoid-tx-origin
85
- emit LogInfoUpdated(key, state, updatedBy, tx.origin, lastUpdatedIn);
90
+ // solhint-disable avoid-tx-origin
91
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
92
+ emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
93
+ // solhing-enable
86
94
  }
87
95
 
88
96
  function updateData(Key32 key32, bytes memory data)
89
- public
90
- onlyOwner
97
+ internal
98
+ {
99
+ _updateData(key32, data);
100
+ }
101
+
102
+ function _updateData(Key32 key32, bytes memory data)
103
+ internal
91
104
  {
92
105
  Metadata storage metadata = _value[key32].metadata;
93
106
  StateId state = metadata.state;
@@ -103,14 +116,18 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
103
116
  metadata.updatedIn = blockBlocknumber();
104
117
 
105
118
  // create log entry
106
- Key memory key = toKey(key32);
107
119
  // solhint-disable-next-line avoid-tx-origin
108
- emit LogInfoUpdated(key, state, updatedBy, tx.origin, lastUpdatedIn);
120
+ emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
109
121
  }
110
122
 
111
123
  function updateState(Key32 key32, StateId state)
112
- public
113
- onlyOwner
124
+ internal
125
+ {
126
+ _updateState(key32, state);
127
+ }
128
+
129
+ function _updateState(Key32 key32, StateId state)
130
+ internal
114
131
  {
115
132
  require(state.gtz(), "ERROR:KVS-040:STATE_UNDEFINED");
116
133
  Metadata storage metadata = _value[key32].metadata;
@@ -125,9 +142,8 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
125
142
  metadata.updatedIn = blockBlocknumber();
126
143
 
127
144
  // create log entry
128
- Key memory key = toKey(key32);
129
145
  // solhint-disable-next-line avoid-tx-origin
130
- emit LogStateUpdated(key, state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
146
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
131
147
  }
132
148
 
133
149
  function exists(Key32 key32) public view returns (bool) {
@@ -153,9 +169,4 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
153
169
  function toKey32(ObjectType objectType, KeyId id) external pure override returns(Key32) {
154
170
  return Key32Lib.toKey32(objectType, id);
155
171
  }
156
-
157
- function toKey(Key32 key32) public pure override returns (Key memory key) {
158
- (ObjectType objectType, KeyId id) = key32.toKey();
159
- return Key(objectType, id);
160
- }
161
172
  }
@@ -1,5 +1,5 @@
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 {NftId} from "../../types/NftId.sol";
5
5
  import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
@@ -0,0 +1,38 @@
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 {RoleId} from "../../types/RoleId.sol";
8
+
9
+ interface IAccess {
10
+ struct RoleInfo {
11
+ ShortString name;
12
+ bool isCustom;
13
+ }
14
+
15
+ struct TargetInfo {
16
+ ShortString name;
17
+ bool isCustom;
18
+ }
19
+
20
+ error ErrorTargetAddressZero();
21
+ error ErrorTargetAlreadyExists(address target, ShortString name);
22
+ error ErrorTargetDoesNotExist(address target);
23
+ error ErrorTargetNameEmpty(address target);
24
+ error ErrorTargetNameExists(address target, address existingTarget, ShortString name);
25
+
26
+ error ErrorRoleIdInvalid(RoleId roleId);
27
+ error ErrorRoleIdTooBig(RoleId roleId);
28
+ error ErrorRoleIdTooSmall(RoleId roleId);
29
+ error ErrorRoleIdAlreadyExists(RoleId roleId, ShortString name);
30
+ error ErrorRoleIdNotActive(RoleId roleId);
31
+ error ErrorRoleNameEmpty(RoleId roleId);
32
+ error ErrorRoleNameNotUnique(RoleId roleId, ShortString name);
33
+ error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
34
+ error ErrorGrantNonexstentRole(RoleId roleId);
35
+ error ErrorRevokeNonexstentRole(RoleId roleId);
36
+ error ErrorRenounceNonexstentRole(RoleId roleId);
37
+
38
+ }
@@ -0,0 +1,20 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {Timestamp} from "../../types/Timestamp.sol";
7
+
8
+ interface IBundle {
9
+ struct BundleInfo {
10
+ NftId poolNftId;
11
+ Fee fee; // bundle fee on net premium amounts
12
+ bytes filter; // required conditions for applications to be considered for collateralization by this bundle
13
+ uint256 capitalAmount; // net investment capital + net premiums - payouts
14
+ uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
15
+ uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
16
+ uint256 lifetime;
17
+ Timestamp expiredAt; // no new policies
18
+ Timestamp closedAt; // no open policies, locked amount = 0
19
+ }
20
+ }
@@ -0,0 +1,39 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {DistributorType} from "../../types/DistributorType.sol";
5
+ import {NftId} from "../../types/NftId.sol";
6
+ import {Timestamp} from "../../types/Timestamp.sol";
7
+ import {UFixed} from "../../types/UFixed.sol";
8
+
9
+ interface IDistribution {
10
+
11
+ struct DistributorTypeInfo {
12
+ string name;
13
+ UFixed minDiscountPercentage;
14
+ UFixed maxDiscountPercentage;
15
+ UFixed commissionPercentage;
16
+ uint32 maxReferralCount;
17
+ uint32 maxReferralLifetime;
18
+ bool allowSelfReferrals;
19
+ bool allowRenewals;
20
+ bytes data;
21
+ }
22
+
23
+ struct DistributorInfo {
24
+ DistributorType distributorType;
25
+ bool active;
26
+ bytes data;
27
+ }
28
+
29
+ struct ReferralInfo {
30
+ NftId distributorNftId;
31
+ string referralCode;
32
+ UFixed discountPercentage;
33
+ uint32 maxReferrals;
34
+ uint32 usedReferrals;
35
+ Timestamp expiryAt;
36
+ bytes data;
37
+ }
38
+
39
+ }
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {NumberId} from "../../types/NumberId.sol";
6
+ import {ReferralId} from "../../types/Referral.sol";
7
+ import {RiskId} from "../../types/RiskId.sol";
8
+ import {Timestamp} from "../../types/Timestamp.sol";
9
+
10
+ interface IPolicy {
11
+ struct PolicyInfo {
12
+ NftId productNftId;
13
+ NftId bundleNftId;
14
+ ReferralId referralId;
15
+ RiskId riskId;
16
+ uint256 sumInsuredAmount;
17
+ uint256 premiumAmount;
18
+ uint256 premiumPaidAmount;
19
+ uint256 lifetime;
20
+ bytes applicationData;
21
+ bytes policyData;
22
+ uint16 claimsCount;
23
+ uint16 openClaimsCount;
24
+ uint256 payoutAmount;
25
+ Timestamp activatedAt; // time of underwriting
26
+ Timestamp expiredAt; // no new claims (activatedAt + lifetime)
27
+ Timestamp closedAt; // no locked capital (or declinedAt)
28
+ }
29
+
30
+ // claimId neeeds to be encoded policyNftId:claimId combination
31
+ struct ClaimInfo {
32
+ uint256 claimAmount;
33
+ uint256 paidAmount;
34
+ bytes data;
35
+ Timestamp closedAt; // payoment of confirmed claim amount (or declinedAt)
36
+ }
37
+
38
+ // claimId neeeds to be encoded policyNftId:claimId combination
39
+ struct PayoutInfo {
40
+ NumberId claimId;
41
+ uint256 amount;
42
+ bytes data;
43
+ Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
44
+ }
45
+ }
@@ -0,0 +1,11 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+
6
+ interface IRisk {
7
+ struct RiskInfo {
8
+ NftId productNftId;
9
+ bytes data;
10
+ }
11
+ }
@@ -0,0 +1,46 @@
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 {Fee} from "../../types/Fee.sol";
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {UFixed} from "../../types/UFixed.sol";
9
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
10
+
11
+ interface ISetup {
12
+ struct ProductSetupInfo {
13
+ IERC20Metadata token;
14
+ TokenHandler tokenHandler;
15
+ NftId distributionNftId;
16
+ NftId poolNftId;
17
+ Fee distributionFee; // default distribution fee (no referral id)
18
+ Fee productFee; // product fee on net premium
19
+ Fee processingFee; // product fee on payout amounts
20
+ Fee poolFee; // pool fee on net premium
21
+ Fee stakingFee; // pool fee on staked capital from investor
22
+ Fee performanceFee; // pool fee on profits from capital investors
23
+ bool isIntercepting; // intercepts nft transfers (for products)
24
+ address wallet;
25
+ }
26
+
27
+ struct DistributionSetupInfo {
28
+ NftId productNftId;
29
+ TokenHandler tokenHandler;
30
+ Fee distributionFee; // default distribution fee (no referral id)
31
+ bool isIntercepting; // intercepts nft transfers (for distributors)
32
+ address wallet;
33
+ }
34
+
35
+ struct PoolSetupInfo {
36
+ NftId productNftId;
37
+ TokenHandler tokenHandler;
38
+ UFixed collateralizationLevel;
39
+ Fee poolFee; // pool fee on net premium
40
+ Fee stakingFee; // pool fee on staked capital from investor
41
+ Fee performanceFee; // pool fee on profits from capital investors
42
+ bool isIntercepting; // intercepts nft transfers (for bundles)
43
+ bool isConfirmingApplication; // confirms applications before they are underwritten
44
+ address wallet;
45
+ }
46
+ }
@@ -0,0 +1,23 @@
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 {Fee} from "../../types/Fee.sol";
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
9
+
10
+ interface ITreasury {
11
+ struct TreasuryInfo {
12
+ IERC20Metadata token;
13
+ TokenHandler tokenHandler;
14
+ NftId distributionNftId;
15
+ NftId poolNftId;
16
+ Fee distributionFee; // default distribution fee (no referral id)
17
+ Fee productFee; // product fee on net premium
18
+ Fee processingFee; // product fee on payout amounts
19
+ Fee poolFee; // pool fee on net premium
20
+ Fee stakingFee; // pool fee on staked capital from investor
21
+ Fee performanceFee; // pool fee on profits from capital investors
22
+ }
23
+ }
@@ -0,0 +1,260 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Pool} from "../../components/Pool.sol";
5
+ import {IRegistry} from "../../registry/IRegistry.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {IBundle} from "../../instance/module/IBundle.sol";
8
+ import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
+ import {ISetup} from "../module/ISetup.sol";
10
+ import {IPolicy} from "../module/IPolicy.sol";
11
+
12
+ import {IVersionable} from "../../shared/IVersionable.sol";
13
+ import {Versionable} from "../../shared/Versionable.sol";
14
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
15
+
16
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
17
+ import {POOL, BUNDLE} from "../../types/ObjectType.sol";
18
+ import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
19
+ import {Fee, FeeLib} from "../../types/Fee.sol";
20
+ import {Version, VersionLib} from "../../types/Version.sol";
21
+ import {KEEP_STATE, StateId} from "../../types/StateId.sol";
22
+ import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
23
+
24
+ import {IService} from "../../shared/IService.sol";
25
+ import {Service} from "../../shared/Service.sol";
26
+ import {BundleManager} from "../BundleManager.sol";
27
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
28
+ import {IBundleService} from "./IBundleService.sol";
29
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
30
+ import {InstanceService} from "../InstanceService.sol";
31
+ import {InstanceReader} from "../InstanceReader.sol";
32
+ import {IBaseComponent} from "../../components/IBaseComponent.sol";
33
+
34
+ string constant BUNDLE_SERVICE_NAME = "BundleService";
35
+
36
+ contract BundleService is
37
+ ComponentServiceBase,
38
+ IBundleService
39
+ {
40
+ using NftIdLib for NftId;
41
+
42
+ string public constant NAME = "BundleService";
43
+
44
+ address internal _registryAddress;
45
+
46
+ function _initialize(
47
+ address owner,
48
+ bytes memory data
49
+ )
50
+ internal
51
+ initializer
52
+ virtual override
53
+ {
54
+ address registryAddress;
55
+ address initialOwner;
56
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
57
+ // TODO while PoolService is not deployed in PoolServiceManager constructor
58
+ // owner is PoolServiceManager deployer
59
+ _initializeService(registryAddress, owner);
60
+
61
+ _registerInterface(type(IBundleService).interfaceId);
62
+ }
63
+
64
+ function getName() public pure override(Service, IService) returns(string memory name) {
65
+ return NAME;
66
+ }
67
+
68
+ function createBundle(
69
+ address owner,
70
+ Fee memory fee,
71
+ uint256 stakingAmount,
72
+ uint256 lifetime,
73
+ bytes calldata filter
74
+ )
75
+ external
76
+ override
77
+ returns(NftId bundleNftId)
78
+ {
79
+ (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
80
+ InstanceReader instanceReader = instance.getInstanceReader();
81
+ NftId poolNftId = info.nftId;
82
+
83
+ IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
84
+ poolNftId,
85
+ fee,
86
+ filter,
87
+ stakingAmount,
88
+ 0,
89
+ stakingAmount,
90
+ lifetime,
91
+ zeroTimestamp(),
92
+ zeroTimestamp()
93
+ );
94
+
95
+ // register bundle with registry
96
+ bundleNftId = getRegistryService().registerBundle(
97
+ IRegistry.ObjectInfo(
98
+ zeroNftId(),
99
+ poolNftId,
100
+ BUNDLE(),
101
+ false, // intercepting property for bundles is defined on pool
102
+ address(0),
103
+ owner,
104
+ abi.encode(bundleInfo)
105
+ )
106
+ );
107
+
108
+ // create bundle info in instance
109
+ instance.createBundle(bundleNftId, bundleInfo);
110
+
111
+ BundleManager bundleManager = instance.getBundleManager();
112
+ bundleManager.add(bundleNftId);
113
+
114
+ _processStakingByTreasury(
115
+ instanceReader,
116
+ poolNftId,
117
+ bundleNftId,
118
+ stakingAmount);
119
+
120
+ // TODO add logging
121
+ }
122
+
123
+ function setBundleFee(
124
+ NftId bundleNftId,
125
+ Fee memory fee
126
+ )
127
+ external
128
+ override
129
+ {
130
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
131
+ InstanceReader instanceReader = instance.getInstanceReader();
132
+ NftId poolNftId = info.nftId;
133
+
134
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
135
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
136
+ require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
137
+
138
+ bundleInfo.fee = fee;
139
+
140
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
141
+ }
142
+
143
+ function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state)
144
+ external
145
+ onlyService
146
+ {
147
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
148
+ IInstance instance = IInstance(instanceInfo.objectAddress);
149
+ instance.updateBundle(bundleNftId, bundleInfo, state);
150
+ }
151
+
152
+ function lockBundle(NftId bundleNftId)
153
+ external
154
+ {
155
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
156
+ BundleManager bundleManager = instance.getBundleManager();
157
+ bundleManager.lock(bundleNftId);
158
+ }
159
+
160
+ function unlockBundle(NftId bundleNftId)
161
+ external
162
+ {
163
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
164
+ BundleManager bundleManager = instance.getBundleManager();
165
+ bundleManager.unlock(bundleNftId);
166
+ }
167
+
168
+ function underwritePolicy(IInstance instance,
169
+ NftId policyNftId,
170
+ NftId bundleNftId,
171
+ uint256 collateralAmount,
172
+ uint256 netPremiumAmount
173
+ )
174
+ external
175
+ onlyService
176
+ {
177
+ InstanceReader instanceReader = instance.getInstanceReader();
178
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
179
+
180
+ // lock collateral
181
+ bundleInfo.lockedAmount += collateralAmount;
182
+ bundleInfo.balanceAmount += netPremiumAmount;
183
+
184
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
185
+
186
+ linkPolicy(instance, policyNftId);
187
+ }
188
+
189
+ /// @dev links policy to bundle
190
+ function linkPolicy(IInstance instance, NftId policyNftId)
191
+ internal
192
+ onlyService
193
+ {
194
+ InstanceReader instanceReader = instance.getInstanceReader();
195
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
196
+
197
+ // ensure policy has not yet been activated
198
+ if (policyInfo.activatedAt.gtz()) {
199
+ revert BundleManager.ErrorBundleManagerErrorPolicyAlreadyActivated(policyNftId);
200
+ }
201
+
202
+ BundleManager bundleManager = instance.getBundleManager();
203
+ bundleManager.linkPolicy(policyNftId);
204
+ }
205
+
206
+ /// @dev unlinks policy from bundle
207
+ function unlinkPolicy(IInstance instance, NftId policyNftId)
208
+ internal
209
+ onlyService
210
+ {
211
+ InstanceReader instanceReader = instance.getInstanceReader();
212
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
213
+
214
+ // ensure policy has no open claims
215
+ if (policyInfo.openClaimsCount > 0) {
216
+ revert BundleManager.ErrorBundleManagerPolicyWithOpenClaims(
217
+ policyNftId,
218
+ policyInfo.openClaimsCount);
219
+ }
220
+
221
+ // ensure policy is closeable
222
+ if (policyInfo.expiredAt < TimestampLib.blockTimestamp()
223
+ || policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
224
+ {
225
+ revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
226
+ }
227
+
228
+ BundleManager bundleManager = instance.getBundleManager();
229
+ bundleManager.unlinkPolicy(policyNftId);
230
+ }
231
+
232
+ function _processStakingByTreasury(
233
+ InstanceReader instanceReader,
234
+ NftId poolNftId,
235
+ NftId bundleNftId,
236
+ uint256 stakingAmount
237
+ )
238
+ internal
239
+ {
240
+ // process token transfer(s)
241
+ if(stakingAmount > 0) {
242
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
243
+ TokenHandler tokenHandler = poolInfo.tokenHandler;
244
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
245
+ Fee memory stakingFee = poolInfo.stakingFee;
246
+
247
+ tokenHandler.transfer(
248
+ bundleOwner,
249
+ poolInfo.wallet,
250
+ stakingAmount
251
+ );
252
+
253
+
254
+ if (! FeeLib.feeIsZero(stakingFee)) {
255
+ (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
256
+ // TODO: track staking fees in pool's state (issue #177)
257
+ }
258
+ }
259
+ }
260
+ }