@etherisc/gif-next 0.0.2-f7eda15-119 → 0.0.2-f831797-539

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 (340) hide show
  1. package/README.md +73 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +252 -94
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +611 -159
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +104 -72
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +311 -108
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +331 -164
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +108 -144
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +553 -185
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +356 -166
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +30 -11
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  21. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +722 -422
  23. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +94 -171
  25. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  26. package/artifacts/contracts/instance/Instance.sol/Instance.json +911 -779
  27. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +39 -89
  29. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +119 -216
  31. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +276 -254
  33. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +319 -99
  35. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  37. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +118 -169
  39. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  43. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  45. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +13 -13
  47. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  49. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  50. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  55. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  56. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  57. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  58. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  59. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +306 -315
  61. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  62. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +305 -93
  63. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  64. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  65. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  66. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  67. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  68. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1207 -255
  69. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  70. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +449 -85
  71. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  72. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  73. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  74. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +155 -240
  75. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  76. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
  77. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +711 -139
  79. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +60 -286
  81. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +81 -147
  83. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +22 -169
  85. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +185 -391
  87. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +311 -127
  89. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +214 -204
  91. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +306 -90
  93. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +142 -221
  95. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +302 -90
  97. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  98. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  99. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +15 -2
  100. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  101. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +83 -174
  102. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  103. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  104. package/artifacts/contracts/registry/Registry.sol/Registry.json +28 -15
  105. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  106. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  107. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  108. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +193 -216
  109. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -94
  111. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  112. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +11 -11
  113. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -37
  115. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  116. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  117. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  118. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  119. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  120. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  121. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  122. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -29
  124. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  125. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  126. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IService.sol/IService.json +22 -169
  128. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  130. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +113 -33
  132. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  133. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  134. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  135. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -74
  136. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +125 -55
  138. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  139. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  140. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  141. package/artifacts/contracts/shared/Service.sol/Service.json +113 -164
  142. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  143. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  144. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  145. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  146. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  147. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  148. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +125 -55
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  154. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestService.sol/TestService.json +134 -221
  156. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  159. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  161. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  162. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  163. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  165. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  167. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  168. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  170. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  172. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  174. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  176. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  177. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  178. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  181. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  182. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  183. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  185. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  187. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  189. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  190. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  191. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  193. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  195. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  197. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  199. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  201. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  203. package/contracts/components/Component.sol +103 -78
  204. package/contracts/components/Distribution.sol +187 -57
  205. package/contracts/components/IComponent.sol +48 -17
  206. package/contracts/components/IDistributionComponent.sol +39 -15
  207. package/contracts/components/IPoolComponent.sol +84 -31
  208. package/contracts/components/IProductComponent.sol +3 -2
  209. package/contracts/components/Pool.sol +217 -145
  210. package/contracts/components/Product.sol +97 -69
  211. package/contracts/instance/BundleManager.sol +7 -5
  212. package/contracts/instance/IInstance.sol +24 -3
  213. package/contracts/instance/IInstanceService.sol +20 -1
  214. package/contracts/instance/Instance.sol +65 -39
  215. package/contracts/instance/InstanceAccessManager.sol +12 -13
  216. package/contracts/instance/InstanceReader.sol +4 -3
  217. package/contracts/instance/InstanceService.sol +111 -57
  218. package/contracts/instance/InstanceServiceManager.sol +1 -1
  219. package/contracts/instance/base/ComponentService.sol +1 -1
  220. package/contracts/instance/base/KeyValueStore.sol +5 -2
  221. package/contracts/instance/base/Lifecycle.sol +11 -2
  222. package/contracts/instance/module/IAccess.sol +3 -4
  223. package/contracts/instance/module/IBundle.sol +2 -1
  224. package/contracts/instance/module/IComponents.sol +35 -0
  225. package/contracts/instance/module/IDistribution.sol +2 -0
  226. package/contracts/instance/module/IPolicy.sol +30 -3
  227. package/contracts/instance/module/ISetup.sol +7 -20
  228. package/contracts/instance/service/ApplicationService.sol +350 -0
  229. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  230. package/contracts/instance/service/BundleService.sol +82 -39
  231. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  232. package/contracts/instance/service/ClaimService.sol +151 -0
  233. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  234. package/contracts/instance/service/DistributionService.sol +360 -16
  235. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  236. package/contracts/instance/service/IApplicationService.sol +82 -0
  237. package/contracts/instance/service/IBundleService.sol +30 -12
  238. package/contracts/instance/service/IClaimService.sol +61 -0
  239. package/contracts/instance/service/IDistributionService.sol +86 -0
  240. package/contracts/instance/service/IPolicyService.sol +27 -49
  241. package/contracts/instance/service/IPoolService.sol +17 -2
  242. package/contracts/instance/service/PolicyService.sol +148 -283
  243. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  244. package/contracts/instance/service/PoolService.sol +75 -22
  245. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  246. package/contracts/instance/service/ProductService.sol +10 -11
  247. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  248. package/contracts/registry/IRegistry.sol +3 -2
  249. package/contracts/registry/IRegistryService.sol +10 -8
  250. package/contracts/registry/Registry.sol +20 -8
  251. package/contracts/registry/RegistryService.sol +69 -48
  252. package/contracts/registry/RegistryServiceManager.sol +13 -13
  253. package/contracts/registry/ReleaseManager.sol +18 -28
  254. package/contracts/registry/TokenRegistry.sol +16 -12
  255. package/contracts/shared/ERC165.sol +14 -12
  256. package/contracts/shared/INftOwnable.sol +11 -10
  257. package/contracts/shared/IPolicyHolder.sol +26 -0
  258. package/contracts/shared/IRegisterable.sol +3 -3
  259. package/contracts/shared/IRegistryLinked.sol +12 -0
  260. package/contracts/shared/IService.sol +2 -0
  261. package/contracts/shared/IVersionable.sol +4 -47
  262. package/contracts/shared/NftOwnable.sol +66 -85
  263. package/contracts/shared/PolicyHolder.sol +81 -0
  264. package/contracts/shared/ProxyManager.sol +100 -25
  265. package/contracts/shared/Registerable.sol +7 -19
  266. package/contracts/shared/RegistryLinked.sol +48 -0
  267. package/contracts/shared/Service.sol +15 -17
  268. package/contracts/shared/TokenHandler.sol +11 -5
  269. package/contracts/shared/Versionable.sol +4 -92
  270. package/contracts/test/TestRegisterable.sol +1 -1
  271. package/contracts/test/TestService.sol +1 -1
  272. package/contracts/types/Blocknumber.sol +1 -0
  273. package/contracts/types/ClaimId.sol +52 -0
  274. package/contracts/types/DistributorType.sol +2 -2
  275. package/contracts/types/Fee.sol +1 -0
  276. package/contracts/types/NftId.sol +8 -0
  277. package/contracts/types/ObjectType.sol +10 -5
  278. package/contracts/types/PayoutId.sol +54 -0
  279. package/contracts/types/Referral.sol +4 -0
  280. package/contracts/types/RoleId.sol +10 -5
  281. package/contracts/types/Seconds.sol +54 -0
  282. package/contracts/types/StateId.sol +1 -0
  283. package/contracts/types/Timestamp.sol +13 -13
  284. package/contracts/types/UFixed.sol +1 -0
  285. package/contracts/types/Version.sol +1 -0
  286. package/package.json +3 -3
  287. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  288. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  289. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  290. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  291. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  292. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  293. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  294. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  295. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  296. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  297. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  298. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  299. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  300. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  301. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  302. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  303. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  304. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  305. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  306. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  307. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  309. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  312. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  314. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  316. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  318. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  320. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  322. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  324. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  326. package/contracts/experiment/cloning/Cloner.sol +0 -47
  327. package/contracts/experiment/errors/Require.sol +0 -38
  328. package/contracts/experiment/errors/Revert.sol +0 -44
  329. package/contracts/experiment/inheritance/A.sol +0 -53
  330. package/contracts/experiment/inheritance/B.sol +0 -28
  331. package/contracts/experiment/inheritance/C.sol +0 -34
  332. package/contracts/experiment/inheritance/IA.sol +0 -13
  333. package/contracts/experiment/inheritance/IB.sol +0 -10
  334. package/contracts/experiment/inheritance/IC.sol +0 -12
  335. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  336. package/contracts/experiment/statemachine/ISM.sol +0 -25
  337. package/contracts/experiment/statemachine/SM.sol +0 -57
  338. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  339. package/contracts/experiment/types/TypeA.sol +0 -47
  340. package/contracts/experiment/types/TypeB.sol +0 -29
@@ -16,13 +16,16 @@ import {Service} from "../../contracts/shared/Service.sol";
16
16
  import {IService} from "../shared/IService.sol";
17
17
  import {NftId} from "../../contracts/types/NftId.sol";
18
18
  import {RoleId} from "../types/RoleId.sol";
19
- import {ADMIN_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
20
- import {ObjectType, INSTANCE, BUNDLE, POLICY, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
19
+ import {ADMIN_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, PUBLIC_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, APPLICATION_SERVICE_ROLE, POLICY_SERVICE_ROLE, CLAIM_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
20
+ import {ObjectType, INSTANCE, BUNDLE, APPLICATION, POLICY, CLAIM, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
21
21
  import {IDistributionComponent} from "../components/IDistributionComponent.sol";
22
22
  import {IPoolComponent} from "../components/IPoolComponent.sol";
23
23
  import {IProductComponent} from "../components/IProductComponent.sol";
24
24
 
25
- contract InstanceService is Service, IInstanceService {
25
+ contract InstanceService is
26
+ Service,
27
+ IInstanceService
28
+ {
26
29
 
27
30
  address internal _masterInstanceAccessManager;
28
31
  address internal _masterInstance;
@@ -34,7 +37,7 @@ contract InstanceService is Service, IInstanceService {
34
37
 
35
38
  modifier onlyInstanceOwner(NftId instanceNftId) {
36
39
  IRegistry registry = getRegistry();
37
- ChainNft chainNft = registry.getChainNft();
40
+ ChainNft chainNft = ChainNft(registry.getChainNftAddress());
38
41
 
39
42
  if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
40
43
  revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
@@ -106,7 +109,9 @@ contract InstanceService is Service, IInstanceService {
106
109
  _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
107
110
  _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
108
111
  _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
112
+ _grantApplicationServiceAuthorizations(clonedAccessManager, clonedInstance);
109
113
  _grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstance);
114
+ _grantClaimServiceAuthorizations(clonedAccessManager, clonedInstance);
110
115
  _grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
111
116
  _grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
112
117
  }
@@ -119,7 +124,9 @@ contract InstanceService is Service, IInstanceService {
119
124
  clonedAccessManager.createGifRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
120
125
  clonedAccessManager.createGifRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
121
126
  clonedAccessManager.createGifRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
127
+ clonedAccessManager.createGifRole(APPLICATION_SERVICE_ROLE(), "ApplicationServiceRole");
122
128
  clonedAccessManager.createGifRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
129
+ clonedAccessManager.createGifRole(CLAIM_SERVICE_ROLE(), "ClaimServiceRole");
123
130
  clonedAccessManager.createGifRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
124
131
  clonedAccessManager.createGifRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
125
132
  }
@@ -135,9 +142,18 @@ contract InstanceService is Service, IInstanceService {
135
142
  IRegistry registry = getRegistry();
136
143
  address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
137
144
  clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
138
- bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
145
+ bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
139
146
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
140
147
  instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
148
+ instanceDistributionServiceSelectors[2] = clonedInstance.createDistributorType.selector;
149
+ instanceDistributionServiceSelectors[3] = clonedInstance.updateDistributorType.selector;
150
+ instanceDistributionServiceSelectors[4] = clonedInstance.updateDistributorTypeState.selector;
151
+ instanceDistributionServiceSelectors[5] = clonedInstance.createDistributor.selector;
152
+ instanceDistributionServiceSelectors[6] = clonedInstance.updateDistributor.selector;
153
+ instanceDistributionServiceSelectors[7] = clonedInstance.updateDistributorState.selector;
154
+ instanceDistributionServiceSelectors[8] = clonedInstance.createReferral.selector;
155
+ instanceDistributionServiceSelectors[9] = clonedInstance.updateReferral.selector;
156
+ instanceDistributionServiceSelectors[10] = clonedInstance.updateReferralState.selector;
141
157
  clonedAccessManager.setTargetFunctionRole(
142
158
  "Instance",
143
159
  instanceDistributionServiceSelectors,
@@ -146,7 +162,7 @@ contract InstanceService is Service, IInstanceService {
146
162
 
147
163
  function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
148
164
  // configure authorization for pool service on instance
149
- address poolServiceAddress = _registry.getServiceAddress(POOL(), getMajorVersion());
165
+ address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getMajorVersion());
150
166
  clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
151
167
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
152
168
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
@@ -159,7 +175,7 @@ contract InstanceService is Service, IInstanceService {
159
175
 
160
176
  function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
161
177
  // configure authorization for product service on instance
162
- address productServiceAddress = _registry.getServiceAddress(PRODUCT(), getMajorVersion());
178
+ address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getMajorVersion());
163
179
  clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
164
180
  bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
165
181
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
@@ -173,27 +189,55 @@ contract InstanceService is Service, IInstanceService {
173
189
  PRODUCT_SERVICE_ROLE());
174
190
  }
175
191
 
192
+ function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
193
+ // configure authorization for application services on instance
194
+ address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getMajorVersion());
195
+ clonedAccessManager.grantRole(APPLICATION_SERVICE_ROLE(), applicationServiceAddress);
196
+ bytes4[] memory instanceApplicationServiceSelectors = new bytes4[](3);
197
+ instanceApplicationServiceSelectors[0] = clonedInstance.createApplication.selector;
198
+ instanceApplicationServiceSelectors[1] = clonedInstance.updateApplication.selector;
199
+ instanceApplicationServiceSelectors[2] = clonedInstance.updateApplicationState.selector;
200
+ clonedAccessManager.setTargetFunctionRole(
201
+ "Instance",
202
+ instanceApplicationServiceSelectors,
203
+ APPLICATION_SERVICE_ROLE());
204
+ }
205
+
176
206
  function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
177
- // configure authorization for policy service on instance
178
- address policyServiceAddress = _registry.getServiceAddress(POLICY(), getMajorVersion());
179
- clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), address(policyServiceAddress));
180
- bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
181
- instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
182
- instancePolicyServiceSelectors[1] = clonedInstance.updatePolicy.selector;
183
- instancePolicyServiceSelectors[2] = clonedInstance.updatePolicyState.selector;
207
+ // configure authorization for policy services on instance
208
+ address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getMajorVersion());
209
+ clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), policyServiceAddress);
210
+ bytes4[] memory instancePolicyServiceSelectors = new bytes4[](2);
211
+ instancePolicyServiceSelectors[0] = clonedInstance.updatePolicy.selector;
212
+ instancePolicyServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
184
213
  clonedAccessManager.setTargetFunctionRole(
185
214
  "Instance",
186
215
  instancePolicyServiceSelectors,
187
216
  POLICY_SERVICE_ROLE());
188
217
  }
189
218
 
219
+ function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
220
+ // configure authorization for claim/payout services on instance
221
+ address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getMajorVersion());
222
+ clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), claimServiceAddress);
223
+ // TODO add claims function authz
224
+ bytes4[] memory instanceClaimServiceSelectors = new bytes4[](0);
225
+ // instanceClaimServiceSelectors[0] = clonedInstance.updatePolicy.selector;
226
+ // instanceClaimServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
227
+ clonedAccessManager.setTargetFunctionRole(
228
+ "Instance",
229
+ instanceClaimServiceSelectors,
230
+ CLAIM_SERVICE_ROLE());
231
+ }
232
+
190
233
  function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
191
234
  // configure authorization for bundle service on instance
192
- address bundleServiceAddress = _registry.getServiceAddress(BUNDLE(), getMajorVersion());
235
+ address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getMajorVersion());
193
236
  clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
194
- bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
237
+ bytes4[] memory instanceBundleServiceSelectors = new bytes4[](3);
195
238
  instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
196
239
  instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
240
+ instanceBundleServiceSelectors[2] = clonedInstance.updateBundleState.selector;
197
241
  clonedAccessManager.setTargetFunctionRole(
198
242
  "Instance",
199
243
  instanceBundleServiceSelectors,
@@ -214,7 +258,7 @@ contract InstanceService is Service, IInstanceService {
214
258
 
215
259
  function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
216
260
  // configure authorization for instance service on instance
217
- address instanceServiceAddress = _registry.getServiceAddress(INSTANCE(), getMajorVersion());
261
+ address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
218
262
  clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
219
263
  bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
220
264
  instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
@@ -236,11 +280,11 @@ contract InstanceService is Service, IInstanceService {
236
280
  onlyOwner
237
281
  returns(NftId masterInstanceNftId)
238
282
  {
239
- require(_masterInstance == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
240
- require(_masterInstanceAccessManager == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
241
- require(_masterInstanceBundleManager == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
283
+ if(_masterInstance != address(0)) { revert ErrorInstanceServiceMasterInstanceAlreadySet(); }
284
+ if(_masterInstanceAccessManager != address(0)) { revert ErrorInstanceServiceMasterInstanceAccessManagerAlreadySet(); }
285
+ if(_masterInstanceBundleManager != address(0)) { revert ErrorInstanceServiceMasterBundleManagerAlreadySet(); }
242
286
 
243
- require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
287
+ if(instanceAddress == address(0)) { revert ErrorInstanceServiceInstanceAddressZero(); }
244
288
 
245
289
  IInstance instance = IInstance(instanceAddress);
246
290
  InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
@@ -250,14 +294,13 @@ contract InstanceService is Service, IInstanceService {
250
294
  BundleManager bundleManager = instance.getBundleManager();
251
295
  address bundleManagerAddress = address(bundleManager);
252
296
 
253
- require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
254
- require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
255
- require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
256
-
297
+ if(accessManagerAddress == address(0)) { revert ErrorInstanceServiceAccessManagerZero(); }
298
+ if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderZero(); }
299
+ if(bundleManagerAddress == address(0)) { revert ErrorInstanceServiceBundleManagerZero(); }
257
300
 
258
- require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
259
- require(instanceReader.getInstance() == instance, "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
260
- require(bundleManager.getInstance() == instance, "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
301
+ if(instance.authority() != accessManagerAddress) { revert ErrorInstanceServiceInstanceAuthorityMismatch(); }
302
+ if(instanceReader.getInstance() != instance) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch2(); }
303
+ if(bundleManager.getInstance() != instance) { revert ErrorInstanceServiceBundleMangerInstanceMismatch(); }
261
304
 
262
305
  _masterInstanceAccessManager = accessManagerAddress;
263
306
  _masterInstance = instanceAddress;
@@ -273,12 +316,12 @@ contract InstanceService is Service, IInstanceService {
273
316
  }
274
317
 
275
318
  function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
276
- require(_masterInstanceReader != address(0), "ERROR:CRD-003:INSTANCE_READER_MASTER_NOT_SET");
277
- require (instanceReaderAddress != address(0), "ERROR:CRD-012:INSTANCE_READER_ZERO");
278
- require(instanceReaderAddress != _masterInstanceReader, "ERROR:CRD-014:INSTANCE_READER_MASTER_SAME_AS_NEW");
319
+ if(_masterInstanceReader == address(0)) { revert ErrorInstanceServiceMasterInstanceReaderNotSet(); }
320
+ if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderAddressZero(); }
321
+ if(instanceReaderAddress == _masterInstanceReader) { revert ErrorInstanceServiceInstanceReaderSameAsMasterInstanceReader(); }
279
322
 
280
323
  InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
281
- require(instanceReader.getInstance() == IInstance(_masterInstance), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
324
+ if(instanceReader.getInstance() != IInstance(_masterInstance)) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch(); }
282
325
 
283
326
  _masterInstanceReader = instanceReaderAddress;
284
327
  }
@@ -334,9 +377,8 @@ contract InstanceService is Service, IInstanceService {
334
377
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
335
378
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
336
379
  // owner is InstanceServiceManager deployer
337
- _initializeService(registryAddress, owner);
338
-
339
- _registerInterface(type(IInstanceService).interfaceId);
380
+ initializeService(registryAddress, owner);
381
+ registerInterface(type(IInstanceService).interfaceId);
340
382
  }
341
383
 
342
384
  function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
@@ -353,12 +395,12 @@ contract InstanceService is Service, IInstanceService {
353
395
  accessManager.createGifTarget(targetAddress, targetName);
354
396
  }
355
397
 
356
- function grantDistributionDefaultPermissions(NftId instanceNftId, IDistributionComponent distribution) external onlyRegisteredService {
398
+ function grantDistributionDefaultPermissions(NftId instanceNftId, address distributionAddress, string memory distributionName) external onlyRegisteredService {
357
399
  IRegistry registry = getRegistry();
358
- IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(address(distribution));
400
+ IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionAddress);
359
401
 
360
402
  if (distributionInfo.objectType != DISTRIBUTION()) {
361
- revert ErrorInstanceServiceInvalidComponentType(address(distribution), DISTRIBUTION(), distributionInfo.objectType);
403
+ revert ErrorInstanceServiceInvalidComponentType(distributionAddress, DISTRIBUTION(), distributionInfo.objectType);
362
404
  }
363
405
 
364
406
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
@@ -366,21 +408,20 @@ contract InstanceService is Service, IInstanceService {
366
408
  InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
367
409
 
368
410
  bytes4[] memory fctSelectors = new bytes4[](1);
369
- fctSelectors[0] = distribution.setFees.selector;
370
- instanceAccessManager.setTargetFunctionRole(distribution.getName(), fctSelectors, DISTRIBUTION_OWNER_ROLE());
411
+ fctSelectors[0] = IDistributionComponent.setFees.selector;
412
+ instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors, DISTRIBUTION_OWNER_ROLE());
371
413
 
372
- bytes4[] memory fctSelectors2 = new bytes4[](2);
373
- fctSelectors2[0] = distribution.processSale.selector;
374
- fctSelectors2[1] = distribution.processRenewal.selector;
375
- instanceAccessManager.setTargetFunctionRole(distribution.getName(), fctSelectors2, PRODUCT_SERVICE_ROLE());
414
+ bytes4[] memory fctSelectors2 = new bytes4[](1);
415
+ fctSelectors2[0] = IDistributionComponent.processRenewal.selector;
416
+ instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors2, PRODUCT_SERVICE_ROLE());
376
417
  }
377
418
 
378
- function grantPoolDefaultPermissions(NftId instanceNftId, IPoolComponent pool) external onlyRegisteredService {
419
+ function grantPoolDefaultPermissions(NftId instanceNftId, address poolAddress, string memory poolName) external onlyRegisteredService {
379
420
  IRegistry registry = getRegistry();
380
- IRegistry.ObjectInfo memory poolInfo = registry.getObjectInfo(address(pool));
421
+ IRegistry.ObjectInfo memory poolInfo = registry.getObjectInfo(poolAddress);
381
422
 
382
423
  if (poolInfo.objectType != POOL()) {
383
- revert ErrorInstanceServiceInvalidComponentType(address(pool), POOL(), poolInfo.objectType);
424
+ revert ErrorInstanceServiceInvalidComponentType(poolAddress, POOL(), poolInfo.objectType);
384
425
  }
385
426
 
386
427
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
@@ -388,20 +429,34 @@ contract InstanceService is Service, IInstanceService {
388
429
  InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
389
430
 
390
431
  bytes4[] memory fctSelectors = new bytes4[](1);
391
- fctSelectors[0] = pool.setFees.selector;
392
- instanceAccessManager.setTargetFunctionRole(pool.getName(), fctSelectors, POOL_OWNER_ROLE());
432
+ fctSelectors[0] = IPoolComponent.setFees.selector;
433
+ instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors, POOL_OWNER_ROLE());
393
434
 
394
435
  bytes4[] memory fctSelectors2 = new bytes4[](1);
395
- fctSelectors2[0] = pool.underwrite.selector;
396
- instanceAccessManager.setTargetFunctionRole(pool.getName(), fctSelectors2, POLICY_SERVICE_ROLE());
436
+ fctSelectors2[0] = IPoolComponent.verifyApplication.selector;
437
+ instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors2, POLICY_SERVICE_ROLE());
438
+
439
+ // bundle owner specific functions
440
+ bytes4[] memory fctSelectors3 = new bytes4[](7);
441
+ fctSelectors3[0] = IPoolComponent.stake.selector;
442
+ fctSelectors3[1] = IPoolComponent.unstake.selector;
443
+ fctSelectors3[2] = IPoolComponent.extend.selector;
444
+ fctSelectors3[3] = IPoolComponent.lockBundle.selector;
445
+ fctSelectors3[4] = IPoolComponent.unlockBundle.selector;
446
+ fctSelectors3[5] = IPoolComponent.close.selector;
447
+ fctSelectors3[6] = IPoolComponent.setBundleFee.selector;
448
+ instanceAccessManager.setTargetFunctionRole(
449
+ poolName,
450
+ fctSelectors3,
451
+ IPoolComponent(poolAddress).getPoolInfo().bundleOwnerRole);
397
452
  }
398
453
 
399
- function grantProductDefaultPermissions(NftId instanceNftId, IProductComponent product) external onlyRegisteredService {
454
+ function grantProductDefaultPermissions(NftId instanceNftId, address productAddress, string memory productName) external onlyRegisteredService {
400
455
  IRegistry registry = getRegistry();
401
- IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(address(product));
456
+ IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productAddress);
402
457
 
403
458
  if (productInfo.objectType != PRODUCT()) {
404
- revert ErrorInstanceServiceInvalidComponentType(address(product), PRODUCT(), productInfo.objectType);
459
+ revert ErrorInstanceServiceInvalidComponentType(productAddress, PRODUCT(), productInfo.objectType);
405
460
  }
406
461
 
407
462
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
@@ -409,8 +464,8 @@ contract InstanceService is Service, IInstanceService {
409
464
  InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
410
465
 
411
466
  bytes4[] memory fctSelectors = new bytes4[](1);
412
- fctSelectors[0] = product.setFees.selector;
413
- instanceAccessManager.setTargetFunctionRole(product.getName(), fctSelectors, PRODUCT_OWNER_ROLE());
467
+ fctSelectors[0] = IProductComponent.setFees.selector;
468
+ instanceAccessManager.setTargetFunctionRole(productName, fctSelectors, PRODUCT_OWNER_ROLE());
414
469
  }
415
470
 
416
471
  function setTargetLocked(string memory targetName, bool locked) external {
@@ -430,6 +485,5 @@ contract InstanceService is Service, IInstanceService {
430
485
  InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
431
486
  accessManager.setTargetClosed(targetName, locked);
432
487
  }
433
-
434
488
  }
435
489
 
@@ -17,7 +17,7 @@ contract InstanceServiceManager is ProxyManager {
17
17
  constructor(
18
18
  address registryAddress
19
19
  )
20
- ProxyManager()
20
+ ProxyManager(registryAddress)
21
21
  {
22
22
  InstanceService instSrv = new InstanceService();
23
23
  // bytes memory initCode = type(InstanceService).creationCode;
@@ -61,7 +61,7 @@ abstract contract ComponentService is Service {
61
61
  owner = msg.sender;
62
62
 
63
63
  // check component has not already been registerd
64
- NftId compoentNftId = _registry.getNftId(componentAddress);
64
+ NftId compoentNftId = getRegistry().getNftId(componentAddress);
65
65
  if(compoentNftId.gtz()) {
66
66
  revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
67
67
  }
@@ -88,7 +88,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
88
88
 
89
89
  // create log entries
90
90
  // solhint-disable avoid-tx-origin
91
- emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
91
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
92
92
  emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
93
93
  // solhing-enable
94
94
  }
@@ -134,6 +134,9 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
134
134
  StateId stateOld = metadata.state;
135
135
  require(stateOld.gtz(), "ERROR:KVS-041:NOT_EXISTING");
136
136
 
137
+ // ensure state transistion is valid
138
+ checkTransition(metadata.objectType, stateOld, state);
139
+
137
140
  // update metadata (and state)
138
141
  address updatedBy = msg.sender;
139
142
  Blocknumber lastUpdatedIn = metadata.updatedIn;
@@ -143,7 +146,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
143
146
 
144
147
  // create log entry
145
148
  // solhint-disable-next-line avoid-tx-origin
146
- emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
149
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
147
150
  }
148
151
 
149
152
  function exists(Key32 key32) public view returns (bool) {
@@ -1,19 +1,27 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
+
4
6
  import {NftId} from "../../types/NftId.sol";
5
7
  import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
6
8
  import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, UNDERWRITTEN, REVOKED, DECLINED} from "../../types/StateId.sol";
7
9
  import {ILifecycle} from "./ILifecycle.sol";
8
10
 
9
- contract Lifecycle is ILifecycle {
11
+ contract Lifecycle is
12
+ Initializable,
13
+ ILifecycle
14
+ {
10
15
  mapping(ObjectType objectType => StateId initialState)
11
16
  private _initialState;
12
17
 
13
18
  mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
14
19
  private _isValidTransition;
15
20
 
16
- constructor() {
21
+ function initializeLifecycle()
22
+ public
23
+ onlyInitializing
24
+ {
17
25
  _setupBundleLifecycle();
18
26
  _setupComponentLifecycle();
19
27
  _setupPolicyLifecycle();
@@ -78,6 +86,7 @@ contract Lifecycle is ILifecycle {
78
86
  function _setupBundleLifecycle() internal {
79
87
  _initialState[BUNDLE()] = ACTIVE();
80
88
  _isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
89
+ _isValidTransition[BUNDLE()][ACTIVE()][CLOSED()] = true;
81
90
  _isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
82
91
  _isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
83
92
  }
@@ -1,7 +1,6 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
5
4
  import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
6
5
 
7
6
  import {RoleId} from "../../types/RoleId.sol";
@@ -34,15 +33,15 @@ interface IAccess {
34
33
  error ErrorIAccessRoleNameNotUnique(RoleId roleId, ShortString name);
35
34
  error ErrorIAccessRoleInvalidUpdate(RoleId roleId, bool isCustom);
36
35
  error ErrorIAccessRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
37
- error ErrorIAccessSetLockedForNonexstentRole(RoleId roleId);
38
36
  error ErrorIAccessGrantNonexstentRole(RoleId roleId);
39
37
  error ErrorIAccessRevokeNonexstentRole(RoleId roleId);
40
38
  error ErrorIAccessRenounceNonexstentRole(RoleId roleId);
41
39
 
42
40
  error ErrorIAccessTargetAddressZero();
43
- error ErrorIAccessTargetAlreadyExists(address target, ShortString name);
41
+ error ErrorIAccessTargetDoesNotExist(ShortString name);
42
+ error ErrorIAccessTargetAddressDoesNotExist(address target);
43
+ error ErrorIAccessTargetExists(address target, ShortString name);
44
44
  error ErrorIAccessTargetNameEmpty(address target);
45
45
  error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
46
- error ErrorIAccessSetLockedForNonexstentTarget(address target);
47
46
  error ErrorIAccessTargetLocked(address target);
48
47
  }
@@ -3,6 +3,7 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
5
  import {Fee} from "../../types/Fee.sol";
6
+ import {Seconds} from "../../types/Seconds.sol";
6
7
  import {Timestamp} from "../../types/Timestamp.sol";
7
8
 
8
9
  interface IBundle {
@@ -13,7 +14,7 @@ interface IBundle {
13
14
  uint256 capitalAmount; // net investment capital + net premiums - payouts
14
15
  uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
15
16
  uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
16
- uint256 lifetime;
17
+ Seconds lifetime;
17
18
  Timestamp expiredAt; // no new policies
18
19
  Timestamp closedAt; // no open policies, locked amount = 0
19
20
  }
@@ -0,0 +1,35 @@
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 {RoleId} from "../../types/RoleId.sol";
9
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
10
+ import {UFixed} from "../../types/UFixed.sol";
11
+
12
+ interface IComponents {
13
+
14
+ struct ComponentInfo {
15
+ string name; // component name (needs to be unique per instance)
16
+ IERC20Metadata token;
17
+ TokenHandler tokenHandler;
18
+ address wallet;
19
+ bytes data; // will hold component type specific additional info (eg encoded pool info)
20
+ }
21
+
22
+ struct PoolInfo {
23
+ NftId productNftId; // the nft of the product this pool is linked to
24
+ RoleId bundleOwnerRole; // the required role for bundle owners
25
+ uint256 maxCapitalAmount; // max capital amount allowed for pool
26
+ bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
27
+ bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
28
+ bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
29
+ UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
30
+ UFixed retentionLevel; // amount of collateral held in pool (default 100%)
31
+ Fee poolFee; // pool fee on net premium
32
+ Fee stakingFee; // pool fee on staked capital from investor
33
+ Fee performanceFee; // pool fee on profits from capital investors
34
+ }
35
+ }
@@ -24,6 +24,8 @@ interface IDistribution {
24
24
  DistributorType distributorType;
25
25
  bool active;
26
26
  bytes data;
27
+ uint256 sumCommisions;
28
+ uint256 numPoliciesSold;
27
29
  }
28
30
 
29
31
  struct ReferralInfo {
@@ -2,12 +2,39 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
- import {NumberId} from "../../types/NumberId.sol";
5
+ import {ClaimId} from "../../types/ClaimId.sol";
6
6
  import {ReferralId} from "../../types/Referral.sol";
7
7
  import {RiskId} from "../../types/RiskId.sol";
8
+ import {Seconds} from "../../types/Seconds.sol";
8
9
  import {Timestamp} from "../../types/Timestamp.sol";
9
10
 
10
11
  interface IPolicy {
12
+
13
+ struct Premium {
14
+ // this is the net premium calculated by the product
15
+ uint256 netPremiumAmount;
16
+ // fullPremium = netPremium + all fixed amounts + all variable amounts (excl commission and minDistribtuionOwnerFee variable part)
17
+ uint256 fullPremiumAmount;
18
+ // premium = fullPremium - discount
19
+ uint256 premiumAmount;
20
+ uint256 productFeeFixAmount;
21
+ uint256 poolFeeFixAmount;
22
+ uint256 bundleFeeFixAmount;
23
+ uint256 distributionFeeFixAmount;
24
+ uint256 productFeeVarAmount;
25
+ uint256 poolFeeVarAmount;
26
+ uint256 bundleFeeVarAmount;
27
+ uint256 distributionFeeVarAmount;
28
+ uint256 distributionOwnerFeeFixAmount;
29
+ // this is the remaining amount when the commission and discount are subtracted from the distribution fee variable part (must be at least the minDistributionOwnerFee)
30
+ uint256 distributionOwnerFeeVarAmount;
31
+ // this value is based on distributor type referenced in the referral
32
+ uint256 commissionAmount;
33
+ // this is based on referral used
34
+ uint256 discountAmount;
35
+ }
36
+
37
+ /// @dev policy data for the full policy lifecycle
11
38
  struct PolicyInfo {
12
39
  NftId productNftId;
13
40
  NftId bundleNftId;
@@ -16,7 +43,7 @@ interface IPolicy {
16
43
  uint256 sumInsuredAmount;
17
44
  uint256 premiumAmount;
18
45
  uint256 premiumPaidAmount;
19
- uint256 lifetime;
46
+ Seconds lifetime;
20
47
  bytes applicationData;
21
48
  bytes policyData;
22
49
  uint16 claimsCount;
@@ -37,7 +64,7 @@ interface IPolicy {
37
64
 
38
65
  // claimId neeeds to be encoded policyNftId:claimId combination
39
66
  struct PayoutInfo {
40
- NumberId claimId;
67
+ ClaimId claimId;
41
68
  uint256 amount;
42
69
  bytes data;
43
70
  Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
@@ -5,21 +5,19 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
5
5
 
6
6
  import {Fee} from "../../types/Fee.sol";
7
7
  import {NftId} from "../../types/NftId.sol";
8
- import {UFixed} from "../../types/UFixed.sol";
8
+ import {RoleId} from "../../types/RoleId.sol";
9
9
  import {TokenHandler} from "../../shared/TokenHandler.sol";
10
+ import {UFixed} from "../../types/UFixed.sol";
10
11
 
11
12
  interface ISetup {
13
+
12
14
  struct ProductSetupInfo {
13
15
  IERC20Metadata token;
14
16
  TokenHandler tokenHandler;
15
17
  NftId distributionNftId;
16
18
  NftId poolNftId;
17
- Fee distributionFee; // default distribution fee (no referral id)
18
19
  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
20
+ Fee processingFee; // product fee on payout amounts
23
21
  bool isIntercepting; // intercepts nft transfers (for products)
24
22
  address wallet;
25
23
  }
@@ -27,20 +25,9 @@ interface ISetup {
27
25
  struct DistributionSetupInfo {
28
26
  NftId productNftId;
29
27
  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
28
+ Fee minDistributionOwnerFee;
29
+ Fee distributionFee; // recalculated whenever any fee on the product/pool/dist/disttype is changed
44
30
  address wallet;
31
+ uint256 sumDistributionOwnerFees;
45
32
  }
46
33
  }