@etherisc/gif-next 0.0.2-979c9aa-391 → 0.0.2-989147f-853

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 (507) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1376 -0
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +819 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +1000 -0
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +840 -0
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +73 -83
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +275 -1359
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +289 -214
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +441 -2539
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -181
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +432 -280
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +427 -471
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +316 -145
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2847 -0
  32. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  33. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +6 -1
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  36. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  37. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +93 -14
  39. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +38 -13
  41. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
  43. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -65
  45. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  47. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  48. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  53. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  54. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  55. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  56. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +735 -0
  57. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  58. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +329 -263
  59. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  60. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1095 -0
  61. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  62. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  63. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  64. package/artifacts/contracts/pool/Pool.sol/Pool.json +1407 -0
  65. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  66. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  67. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  68. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +747 -0
  69. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  70. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  71. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  72. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +687 -0
  73. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  74. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
  75. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  76. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +787 -0
  77. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  78. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → product/IApplicationService.sol/IApplicationService.json} +231 -204
  79. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  80. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  81. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  82. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +277 -290
  83. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  84. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IPricingService.sol/IPricingService.json} +254 -243
  85. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  86. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +861 -0
  87. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  88. package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +85 -179
  89. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  90. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  91. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  92. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +779 -0
  93. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  94. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  95. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  96. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +727 -0
  97. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  98. package/artifacts/contracts/product/Product.sol/Product.json +1198 -0
  99. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  100. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  101. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +679 -0
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +283 -131
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +268 -255
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  110. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  111. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/Registry.sol/Registry.json +302 -231
  113. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  114. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +238 -0
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +313 -354
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +322 -138
  119. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  120. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +846 -0
  121. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  122. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +132 -57
  123. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  124. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  125. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  126. package/artifacts/contracts/shared/Component.sol/Component.json +873 -0
  127. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  128. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +631 -0
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  131. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  132. package/artifacts/contracts/{components/BaseComponent.sol/BaseComponent.json → shared/IComponent.sol/IComponent.json} +249 -82
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  136. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -34
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  140. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  141. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IService.sol/IService.json +84 -178
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +109 -29
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  148. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +310 -61
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -53
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  154. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  155. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Service.sol/Service.json +185 -165
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  163. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  164. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → staking/IStakingService.sol/IStakingService.json} +209 -207
  165. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  166. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
  167. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  168. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +667 -0
  169. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  170. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  171. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  172. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  173. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  174. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  175. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  176. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  177. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  178. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  179. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  180. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  181. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  182. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  183. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
  185. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  186. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  187. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  188. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  189. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  190. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  191. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  192. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  193. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  194. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  195. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  196. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  197. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  198. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -0
  199. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  200. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  201. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  202. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +39 -8
  203. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  204. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  205. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  206. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  207. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  208. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  209. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  210. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  211. package/contracts/distribution/Distribution.sol +285 -0
  212. package/contracts/distribution/DistributionService.sol +351 -0
  213. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +20 -20
  214. package/contracts/distribution/IDistributionComponent.sol +71 -0
  215. package/contracts/distribution/IDistributionService.sol +87 -0
  216. package/contracts/instance/BundleManager.sol +22 -25
  217. package/contracts/instance/IInstance.sol +56 -41
  218. package/contracts/instance/IInstanceService.sol +51 -16
  219. package/contracts/instance/Instance.sol +149 -196
  220. package/contracts/instance/InstanceAccessManager.sol +406 -167
  221. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  222. package/contracts/instance/InstanceReader.sol +102 -49
  223. package/contracts/instance/InstanceService.sol +214 -207
  224. package/contracts/instance/InstanceServiceManager.sol +15 -15
  225. package/contracts/instance/InstanceStore.sol +211 -0
  226. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +8 -3
  227. package/contracts/instance/base/IKeyValueStore.sol +14 -10
  228. package/contracts/instance/base/ILifecycle.sol +3 -3
  229. package/contracts/instance/base/KeyValueStore.sol +44 -47
  230. package/contracts/instance/base/Lifecycle.sol +28 -7
  231. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +16 -35
  232. package/contracts/instance/module/IAccess.sol +25 -19
  233. package/contracts/instance/module/IBundle.sol +11 -8
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +7 -4
  236. package/contracts/instance/module/IPolicy.sol +50 -17
  237. package/contracts/instance/module/IRisk.sol +1 -1
  238. package/contracts/instance/module/ISetup.sol +9 -22
  239. package/contracts/instance/module/ITreasury.sol +2 -2
  240. package/contracts/pool/BundleService.sol +384 -0
  241. package/contracts/{instance/service → pool}/BundleServiceManager.sol +19 -19
  242. package/contracts/pool/IBundleService.sol +118 -0
  243. package/contracts/pool/IPoolComponent.sol +114 -0
  244. package/contracts/pool/IPoolService.sol +114 -0
  245. package/contracts/pool/Pool.sol +302 -0
  246. package/contracts/pool/PoolService.sol +416 -0
  247. package/contracts/{instance/service → pool}/PoolServiceManager.sol +19 -19
  248. package/contracts/product/ApplicationService.sol +187 -0
  249. package/contracts/product/ApplicationServiceManager.sol +38 -0
  250. package/contracts/product/ClaimService.sol +443 -0
  251. package/contracts/product/ClaimServiceManager.sol +38 -0
  252. package/contracts/product/IApplicationService.sol +62 -0
  253. package/contracts/product/IClaimService.sol +93 -0
  254. package/contracts/product/IPolicyService.sol +80 -0
  255. package/contracts/product/IPricingService.sol +37 -0
  256. package/contracts/product/IProductComponent.sol +41 -0
  257. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  258. package/contracts/product/PolicyService.sol +378 -0
  259. package/contracts/{instance/service → product}/PolicyServiceManager.sol +16 -13
  260. package/contracts/product/PricingService.sol +276 -0
  261. package/contracts/product/PricingServiceManager.sol +42 -0
  262. package/contracts/product/Product.sol +379 -0
  263. package/contracts/product/ProductService.sol +212 -0
  264. package/contracts/{instance/service → product}/ProductServiceManager.sol +16 -13
  265. package/contracts/registry/ChainNft.sol +9 -1
  266. package/contracts/registry/IRegistry.sol +52 -27
  267. package/contracts/registry/IRegistryService.sol +36 -28
  268. package/contracts/registry/ITransferInterceptor.sol +1 -0
  269. package/contracts/registry/Registry.sol +253 -234
  270. package/contracts/registry/RegistryAccessManager.sol +132 -0
  271. package/contracts/registry/RegistryService.sol +81 -208
  272. package/contracts/registry/RegistryServiceManager.sol +34 -42
  273. package/contracts/registry/ReleaseManager.sol +380 -0
  274. package/contracts/registry/TokenRegistry.sol +22 -17
  275. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  276. package/contracts/shared/Component.sol +271 -0
  277. package/contracts/shared/ComponentService.sol +141 -0
  278. package/contracts/shared/ERC165.sol +14 -12
  279. package/contracts/shared/IComponent.sol +90 -0
  280. package/contracts/shared/INftOwnable.sol +12 -11
  281. package/contracts/shared/IPolicyHolder.sol +40 -0
  282. package/contracts/shared/IRegisterable.sol +4 -6
  283. package/contracts/shared/IRegistryLinked.sol +11 -0
  284. package/contracts/shared/IService.sol +7 -4
  285. package/contracts/shared/IVersionable.sol +5 -48
  286. package/contracts/shared/NftOwnable.sol +64 -80
  287. package/contracts/shared/PolicyHolder.sol +94 -0
  288. package/contracts/shared/ProxyManager.sol +126 -25
  289. package/contracts/shared/Registerable.sol +26 -41
  290. package/contracts/shared/RegistryLinked.sol +43 -0
  291. package/contracts/shared/Service.sol +41 -24
  292. package/contracts/shared/TokenHandler.sol +14 -6
  293. package/contracts/shared/Versionable.sol +4 -92
  294. package/contracts/staking/IStakingService.sol +102 -0
  295. package/contracts/staking/StakingService.sol +169 -0
  296. package/contracts/staking/StakingServiceManager.sol +40 -0
  297. package/contracts/type/Amount.sol +109 -0
  298. package/contracts/{types → type}/Blocknumber.sol +1 -0
  299. package/contracts/type/ClaimId.sol +75 -0
  300. package/contracts/{types → type}/DistributorType.sol +2 -2
  301. package/contracts/{types → type}/Fee.sol +17 -8
  302. package/contracts/{types → type}/NftId.sol +8 -0
  303. package/contracts/{types → type}/NftIdSet.sol +1 -1
  304. package/contracts/{types → type}/ObjectType.sol +17 -7
  305. package/contracts/type/PayoutId.sol +82 -0
  306. package/contracts/{types → type}/Referral.sol +4 -0
  307. package/contracts/type/RoleId.sol +139 -0
  308. package/contracts/type/Seconds.sol +54 -0
  309. package/contracts/{types → type}/StateId.sol +7 -2
  310. package/contracts/{types → type}/Timestamp.sol +18 -13
  311. package/contracts/{types → type}/UFixed.sol +1 -0
  312. package/contracts/{types → type}/Version.sol +1 -0
  313. package/package.json +3 -3
  314. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  315. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  316. package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -772
  317. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  318. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -384
  319. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  320. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -152
  321. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  322. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -275
  323. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  324. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -157
  325. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  326. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -967
  327. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  328. package/artifacts/contracts/components/Product.sol/Product.json +0 -883
  329. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  331. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  333. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  335. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  337. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  339. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  341. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  343. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  345. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  347. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  349. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  352. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  354. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  356. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  358. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  359. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  360. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  361. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  362. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  363. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  364. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  365. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  366. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  367. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  368. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  369. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  370. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  371. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  372. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  373. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  374. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  375. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  376. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +0 -285
  377. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  378. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  379. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  380. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  381. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -923
  382. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  383. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -440
  384. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  385. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  386. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  387. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -684
  388. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  389. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -428
  390. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  391. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  392. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  393. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +0 -446
  394. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  395. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  396. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  397. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  398. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -984
  399. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  400. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -464
  401. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  402. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -718
  403. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  404. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -428
  405. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  406. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -768
  407. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  408. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -420
  409. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  410. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  411. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  412. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  413. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  414. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  415. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  416. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -305
  417. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  418. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  419. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  420. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -600
  421. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  422. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  423. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  424. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  425. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  426. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -286
  427. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  428. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  429. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  430. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  431. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  432. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  433. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  434. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  435. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  436. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  437. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  438. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  439. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  440. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  441. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  442. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  443. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  444. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -123
  445. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  446. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  447. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  448. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  449. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  450. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  451. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  452. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  453. package/contracts/components/BaseComponent.sol +0 -148
  454. package/contracts/components/Distribution.sol +0 -163
  455. package/contracts/components/IBaseComponent.sol +0 -32
  456. package/contracts/components/IDistributionComponent.sol +0 -44
  457. package/contracts/components/IPoolComponent.sol +0 -66
  458. package/contracts/components/IProductComponent.sol +0 -35
  459. package/contracts/components/Pool.sol +0 -271
  460. package/contracts/components/Product.sol +0 -292
  461. package/contracts/experiment/cloning/Cloner.sol +0 -47
  462. package/contracts/experiment/errors/Require.sol +0 -38
  463. package/contracts/experiment/errors/Revert.sol +0 -44
  464. package/contracts/experiment/inheritance/A.sol +0 -53
  465. package/contracts/experiment/inheritance/B.sol +0 -28
  466. package/contracts/experiment/inheritance/C.sol +0 -34
  467. package/contracts/experiment/inheritance/IA.sol +0 -13
  468. package/contracts/experiment/inheritance/IB.sol +0 -10
  469. package/contracts/experiment/inheritance/IC.sol +0 -12
  470. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  471. package/contracts/experiment/statemachine/ISM.sol +0 -25
  472. package/contracts/experiment/statemachine/SM.sol +0 -57
  473. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  474. package/contracts/experiment/types/TypeA.sol +0 -47
  475. package/contracts/experiment/types/TypeB.sol +0 -29
  476. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  477. package/contracts/instance/IInstanceBase.sol +0 -26
  478. package/contracts/instance/InstanceBase.sol +0 -41
  479. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  480. package/contracts/instance/base/IInstanceBase.sol +0 -23
  481. package/contracts/instance/service/BundleService.sol +0 -260
  482. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  483. package/contracts/instance/service/DistributionService.sol +0 -118
  484. package/contracts/instance/service/IBundleService.sol +0 -45
  485. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  486. package/contracts/instance/service/IDistributionService.sol +0 -12
  487. package/contracts/instance/service/IPolicyService.sol +0 -87
  488. package/contracts/instance/service/IPoolService.sol +0 -20
  489. package/contracts/instance/service/PolicyService.sol +0 -508
  490. package/contracts/instance/service/PoolService.sol +0 -124
  491. package/contracts/instance/service/ProductService.sol +0 -173
  492. package/contracts/shared/ContractDeployerLib.sol +0 -72
  493. package/contracts/shared/RegisterableUpgradable.sol +0 -16
  494. package/contracts/test/TestFee.sol +0 -25
  495. package/contracts/test/TestRegisterable.sol +0 -18
  496. package/contracts/test/TestRoleId.sol +0 -14
  497. package/contracts/test/TestService.sol +0 -24
  498. package/contracts/test/TestToken.sol +0 -26
  499. package/contracts/test/TestVersion.sol +0 -44
  500. package/contracts/test/TestVersionable.sol +0 -17
  501. package/contracts/test/Usdc.sol +0 -26
  502. package/contracts/types/ChainId.sol +0 -38
  503. package/contracts/types/NumberId.sol +0 -52
  504. package/contracts/types/RoleId.sol +0 -91
  505. /package/contracts/{types → type}/AddressSet.sol +0 -0
  506. /package/contracts/{types → type}/Key32.sol +0 -0
  507. /package/contracts/{types → type}/RiskId.sol +0 -0
@@ -1,10 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Blocknumber} from "../types/Blocknumber.sol";
5
- import {Timestamp} from "../types/Timestamp.sol";
6
- import {Version} from "../types/Version.sol";
7
-
4
+ import {Version} from "../type/Version.sol";
8
5
 
9
6
  /// IMPORTANT
10
7
  // Upgradeable contract MUST:
@@ -14,7 +11,7 @@ import {Version} from "../types/Version.sol";
14
11
  // 4) implement internal _upgrade() function with onlyInitializing modifier (1st version MUST revert)
15
12
  // 5) have onlyInitialising modifier for each function callable inside _initialize()/_upgrade() (MUST use different functions for initialization/upgrade and normal operations)
16
13
  // 6) use default empty constructor -> _disableInitializer() is called from Versionable contructor
17
- // 7) use namespace storage
14
+ // 7) use namespace storage (should this be needed)
18
15
  // 8) since now inheritance is used for upgradability, contract MUST BE inherited ONLY by the next version
19
16
  // Upgradeable contract SHOULD:
20
17
  // 9) define all non private methods as virtual (in order to be able to upgrade them latter)
@@ -22,48 +19,29 @@ import {Version} from "../types/Version.sol";
22
19
  // in some cases this ok but not in the others...
23
20
  //
24
21
  // IMPORTANT
25
- // Each version MUST:
22
+ // If introducting/amending storage related to Versionable version MUST:
26
23
  // 1) define namespace storage struct if accessing storage
27
24
  // - DO NOT use structs inside, except
28
25
  // - CAN use structs ONLY inside mappings
29
26
  // 2) ALWAYS define private getter if accessing storage
30
27
  // - MUST use default implementation, CAN change ONLY return type
31
- // - MUST use the same "LOCATION_V1"
32
28
 
33
29
  interface IVersionable {
34
30
 
35
- struct VersionInfo {
36
- Version version;
37
- address implementation;
38
- address activatedBy;
39
- Timestamp activatedAt;
40
- Blocknumber activatedIn;
41
- }
42
-
43
- event LogVersionableInitialized(Version version, address implementation, address activatedBy);
44
-
45
- // TODO uncomment when all implementations are ready
46
31
  /**
47
32
  * @dev IMPORTANT
48
33
  * implementation MUST be guarded by initializer modifier
49
- * implementation MUST call internal function Versionable._updateVersionHistory
50
34
  * new version MUST inherit from previous version
51
35
  */
52
- function initialize(address implementation, address activatedBy, bytes memory activationData) external;
36
+ function initializeVersionable(address activatedBy, bytes memory activationData) external;
53
37
 
54
38
  /**
55
39
  * @dev
56
40
  * implementation MUST be guarded by reinitializer(version().toUint64()) modifier
57
- * implementation MUST call internal function Versionable._updateVersionHistory
58
41
  * new version MUST inherit from previous version
59
42
  * the first verion MUST revert
60
43
  */
61
- function upgrade(address implementation, address activatedBy, bytes memory upgradeData) external;
62
-
63
- /**
64
- * @dev returns true if the specified version has been activated for the current contract
65
- */
66
- function isInitialized(Version version) external view returns(bool);
44
+ function upgradeVersionable(bytes memory upgradeData) external;
67
45
 
68
46
  /**
69
47
  * @dev returns version of this contract
@@ -72,25 +50,4 @@ interface IVersionable {
72
50
  */
73
51
  function getVersion() external pure returns(Version);
74
52
 
75
- /**
76
- * @dev returns the number of all deployed versions of this contract
77
- */
78
- function getVersionCount() external view returns(uint256 numberOfVersions);
79
-
80
- /**
81
- * @dev returns the i-th (index) version of this contract
82
- */
83
- function getVersion(uint256 index) external view returns(Version version);
84
-
85
- /**
86
- * @dev returns the i-th (index) version info of this contract
87
- */
88
- function getVersionInfo(Version version) external view returns(VersionInfo memory versionInfo);
89
-
90
- // TODO make sure it is needed here
91
- /**
92
- * @dev returns currently active version
93
- */
94
- function getInitializedVersion() external view returns(uint64);
95
-
96
53
  }
@@ -1,134 +1,118 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {ERC165} from "./ERC165.sol";
4
5
  import {INftOwnable} from "./INftOwnable.sol";
5
- import {IRegistry} from "../registry/IRegistry.sol";
6
- import {NftId, zeroNftId} from "../types/NftId.sol";
7
-
8
- contract NftOwnable is INftOwnable {
9
-
10
- IRegistry internal _registry;
11
- NftId private _nftId;
12
- address private _initialOwner;
6
+ import {NftId} from "../type/NftId.sol";
7
+ import {RegistryLinked} from "./RegistryLinked.sol";
8
+
9
+ contract NftOwnable is
10
+ ERC165,
11
+ RegistryLinked,
12
+ INftOwnable
13
+ {
14
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.NftOwnable")) - 1)) & ~bytes32(uint256(0xff));
15
+ bytes32 public constant NFT_OWNABLE_STORAGE_LOCATION_V1 = 0x07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00;
16
+
17
+ struct NftOwnableStorage {
18
+ NftId _nftId;
19
+ address _initialOwner;
20
+ }
13
21
 
14
22
  /// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
15
23
  modifier onlyOwner() {
16
24
  if (msg.sender != getOwner()) {
17
- revert ErrorNotOwner(msg.sender);
25
+ revert ErrorNftOwnableNotOwner(msg.sender);
18
26
  }
19
27
  _;
20
28
  }
21
29
 
22
- constructor() {
23
- _initialOwner = msg.sender;
30
+
31
+ /// @dev initialization for upgradable contracts
32
+ // used in _initializeRegisterable
33
+ function initializeNftOwnable(
34
+ address initialOwner,
35
+ address registryAddress
36
+ )
37
+ public
38
+ virtual
39
+ onlyInitializing()
40
+ {
41
+ initializeRegistryLinked(registryAddress);
42
+ initializeERC165();
43
+
44
+ if(initialOwner == address(0)) {
45
+ revert ErrorNftOwnableInitialOwnerZero();
46
+ }
47
+
48
+ _getNftOwnableStorage()._initialOwner = initialOwner;
24
49
  }
25
50
 
51
+
26
52
  /// @dev links this contract to nft after registration
27
53
  // needs to be done once per registered contract and
28
54
  // reduces registry calls to check ownership
29
55
  // does not need any protection as function can only do the "right thing"
30
- function linkToRegisteredNftId() public {
31
- if (_nftId.gtz()) {
32
- revert ErrorAlreadyLinked(address(_registry), _nftId);
33
- }
56
+ function linkToRegisteredNftId()
57
+ public
58
+ virtual
59
+ {
60
+ NftOwnableStorage storage $ = _getNftOwnableStorage();
34
61
 
35
- if (address(_registry) == address(0)) {
36
- revert ErrorRegistryNotInitialized();
62
+ if ($._nftId.gtz()) {
63
+ revert ErrorNftOwnableAlreadyLinked($._nftId);
37
64
  }
38
65
 
39
66
  address contractAddress = address(this);
40
67
 
41
- if (!_registry.isRegistered(contractAddress)) {
42
- revert ErrorContractNotRegistered(contractAddress);
68
+ if (!getRegistry().isRegistered(contractAddress)) {
69
+ revert ErrorNftOwnableContractNotRegistered(contractAddress);
43
70
  }
44
71
 
45
- _nftId = _registry.getNftId(contractAddress);
72
+ $._nftId = getRegistry().getNftId(contractAddress);
46
73
  }
47
74
 
48
-
49
- function getRegistry() public view virtual override returns (IRegistry) {
50
- return _registry;
51
- }
52
-
53
-
54
75
  function getNftId() public view virtual override returns (NftId) {
55
- return _nftId;
76
+ return _getNftOwnableStorage()._nftId;
56
77
  }
57
78
 
58
-
59
79
  function getOwner() public view virtual override returns (address) {
60
- if (_nftId.gtz()) {
61
- return _registry.ownerOf(_nftId);
62
- }
63
-
64
- return _initialOwner;
65
- }
80
+ NftOwnableStorage storage $ = _getNftOwnableStorage();
66
81
 
82
+ if ($._nftId.gtz()) {
83
+ return getRegistry().ownerOf($._nftId);
84
+ }
67
85
 
68
- /// @dev initialization for upgradable contracts
69
- // used in _initializeRegisterable
70
- function _initializeNftOwnable(
71
- address initialOwner,
72
- address registryAddress
73
- )
74
- internal
75
- virtual
76
- {
77
- require(initialOwner > address(0), "NftOwnable: initial owner is 0");
78
- _initialOwner = initialOwner;
79
- _setRegistry(registryAddress);
86
+ return $._initialOwner;
80
87
  }
81
88
 
82
-
83
89
  /// @dev used in constructor of registry service manager
84
90
  // links ownership of registry service manager ot nft owner of registry service
85
91
  function _linkToNftOwnable(
86
- address registryAddress,
87
92
  address nftOwnableAddress
88
93
  )
89
94
  internal
90
- onlyOwner()
91
95
  returns (NftId)
92
96
  {
93
- if (_nftId.gtz()) {
94
- revert ErrorAlreadyLinked(address(_registry), _nftId);
95
- }
96
-
97
- _setRegistry(registryAddress);
97
+ NftOwnableStorage storage $ = _getNftOwnableStorage();
98
98
 
99
- if (!_registry.isRegistered(nftOwnableAddress)) {
100
- revert ErrorContractNotRegistered(nftOwnableAddress);
99
+ if ($._nftId.gtz()) {
100
+ revert ErrorNftOwnableAlreadyLinked($._nftId);
101
101
  }
102
102
 
103
- _nftId = _registry.getNftId(nftOwnableAddress);
104
-
105
- return _nftId;
106
- }
107
-
108
-
109
- function _setRegistry(address registryAddress)
110
- private
111
- {
112
- if (address(_registry) != address(0)) {
113
- revert ErrorRegistryAlreadyInitialized(address(_registry));
103
+ if (!getRegistry().isRegistered(nftOwnableAddress)) {
104
+ revert ErrorNftOwnableContractNotRegistered(nftOwnableAddress);
114
105
  }
115
106
 
116
- if (registryAddress == address(0)) {
117
- revert ErrorRegistryAddressZero();
118
- }
107
+ $._nftId = getRegistry().getNftId(nftOwnableAddress);
119
108
 
120
- if (registryAddress.code.length == 0) {
121
- revert ErrorNotRegistry(registryAddress);
122
- }
109
+ return $._nftId;
110
+ }
123
111
 
124
- _registry = IRegistry(registryAddress);
125
112
 
126
- try _registry.supportsInterface(type(IRegistry).interfaceId) returns (bool isRegistry) {
127
- if (!isRegistry) {
128
- revert ErrorNotRegistry(registryAddress);
129
- }
130
- } catch {
131
- revert ErrorNotRegistry(registryAddress);
113
+ function _getNftOwnableStorage() private pure returns (NftOwnableStorage storage $) {
114
+ assembly {
115
+ $.slot := NFT_OWNABLE_STORAGE_LOCATION_V1
132
116
  }
133
117
  }
134
118
  }
@@ -0,0 +1,94 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+ import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
6
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
7
+
8
+ import {Amount} from "../type/Amount.sol";
9
+ import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
10
+ import {ERC165} from "./ERC165.sol";
11
+ import {IPolicyHolder} from "./IPolicyHolder.sol";
12
+ import {NftId} from "../type/NftId.sol";
13
+ import {PayoutId} from "../type/PayoutId.sol";
14
+ import {RegistryLinked} from "./RegistryLinked.sol";
15
+
16
+ /// @dev template implementation for IPolicyHolder
17
+ contract PolicyHolder is
18
+ ERC165,
19
+ RegistryLinked,
20
+ IPolicyHolder
21
+ {
22
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.PolicyHolder")) - 1)) & ~bytes32(uint256(0xff));
23
+ // TODO fix address
24
+ bytes32 public constant POLICY_HOLDER_STORAGE_LOCATION_V1 = 0x07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00;
25
+
26
+ struct PolicyHolderStorage {
27
+ mapping(NftId policyId => mapping(ClaimId claimId => address beneficiary)) _beneficiary;
28
+ }
29
+
30
+ function initializePolicyHolder(
31
+ address registryAddress,
32
+ address beneficiaryDefault
33
+ )
34
+ public
35
+ virtual
36
+ onlyInitializing()
37
+ {
38
+ initializeRegistryLinked(registryAddress);
39
+ registerInterface(type(IPolicyHolder).interfaceId);
40
+ }
41
+
42
+ /// @dev empty default implementation
43
+ function policyActivated(NftId policyNftId) external {}
44
+
45
+ /// @dev empty default implementation
46
+ function policyExpired(NftId policyNftId) external {}
47
+
48
+ /// @dev empty default implementation
49
+ function claimConfirmed(NftId policyNftId, ClaimId claimId, Amount amount) external {}
50
+
51
+ /// @dev empty default implementation
52
+ function payoutExecuted(NftId policyNftId, PayoutId payoutId, address beneficiary, Amount amount) external {}
53
+
54
+ /// @dev returns claim specific beneficiary
55
+ /// when no such beneficiary is defined the policy specific beneficiary is returned
56
+ function getBeneficiary(NftId policyNftId, ClaimId claimId) external virtual view returns (address beneficiary) {
57
+ beneficiary = _getPolicyHolderStorage()._beneficiary[policyNftId][claimId];
58
+
59
+ // fallback to claim independent beneficiary
60
+ if(beneficiary == address(0) && claimId.gtz()) {
61
+ beneficiary = _getPolicyHolderStorage()._beneficiary[policyNftId][ClaimIdLib.zero()];
62
+ }
63
+ }
64
+
65
+ //--- IERC165 functions ---------------//
66
+ function onERC721Received(
67
+ address, // operator
68
+ address, // from
69
+ uint256, // tokenId
70
+ bytes calldata // data
71
+ )
72
+ external
73
+ virtual
74
+ returns (bytes4)
75
+ {
76
+ return IERC721Receiver.onERC721Received.selector;
77
+ }
78
+
79
+ /// @dev sets policy specific beneficiary (used when no claim specific beneficiary is defined)
80
+ function _setBeneficiary(NftId policyNftId, address beneficiary) internal {
81
+ _setBeneficiary(policyNftId, ClaimIdLib.zero(), beneficiary);
82
+ }
83
+
84
+ /// @dev sets policy and claim specific beneficiary
85
+ function _setBeneficiary(NftId policyNftId, ClaimId claimId, address beneficiary) internal {
86
+ _getPolicyHolderStorage()._beneficiary[policyNftId][claimId] = beneficiary;
87
+ }
88
+
89
+ function _getPolicyHolderStorage() private pure returns (PolicyHolderStorage storage $) {
90
+ assembly {
91
+ $.slot := POLICY_HOLDER_STORAGE_LOCATION_V1
92
+ }
93
+ }
94
+ }
@@ -1,34 +1,58 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
5
- import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
6
4
  import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
5
+ import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
7
6
 
7
+ import {Blocknumber, blockNumber} from "../type/Blocknumber.sol";
8
8
  import {IVersionable} from "./IVersionable.sol";
9
9
  import {NftOwnable} from "./NftOwnable.sol";
10
+ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
11
+ import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
12
+ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
10
13
  import {UpgradableProxyWithAdmin} from "./UpgradableProxyWithAdmin.sol";
14
+ import {Version, VersionLib} from "../type/Version.sol";
11
15
 
12
16
  /// @dev manages proxy deployments for upgradable contracs of type IVersionable
13
17
  contract ProxyManager is
14
18
  NftOwnable
15
19
  {
16
20
 
17
- event LogProxyDeployed(address indexed proxy, address initialImplementation);
18
- event LogProxyDeployedWithSalt(address indexed proxy, address initialImplementation);
19
- event LogProxyUpgraded(address indexed proxy, address upgradedImplementation);
21
+ struct VersionInfo {
22
+ Version version;
23
+ address implementation;
24
+ address activatedBy;
25
+ Timestamp activatedAt;
26
+ Blocknumber activatedIn;
27
+ }
28
+
29
+ event LogProxyManagerVersionableDeployed(address indexed proxy, address initialImplementation);
30
+ event LogProxyManagerVersionableUpgraded(address indexed proxy, address upgradedImplementation);
20
31
 
21
- error ErrorAlreadyDeployed();
22
- error ErrorAlreadyDeployedWithSalt();
23
- error ErrorNotYetDeployed();
32
+ error ErrorProxyManagerAlreadyDeployed();
33
+ error ErrorProxyManagerNotYetDeployed();
34
+
35
+ error ErrorProxyManagerZeroVersion();
36
+ error ErrorProxyManagerNextVersionNotIncreasing(Version nextVersion);
24
37
 
25
38
  UpgradableProxyWithAdmin internal _proxy;
26
- bool internal _isDeployed;
39
+
40
+ // state to keep version history
41
+ mapping(Version version => VersionInfo info) _versionHistory;
42
+ Version [] _versions;
27
43
 
28
44
  /// @dev only used to capture proxy owner
29
- constructor()
30
- NftOwnable()
31
- { }
45
+ constructor(address registry)
46
+ {
47
+ initializeProxyManager(registry);
48
+ }
49
+
50
+ function initializeProxyManager(address registry)
51
+ public
52
+ initializer()
53
+ {
54
+ initializeNftOwnable(msg.sender, registry);
55
+ }
32
56
 
33
57
  /// @dev deploy initial contract
34
58
  function deploy(address initialImplementation, bytes memory initializationData)
@@ -37,22 +61,48 @@ contract ProxyManager is
37
61
  onlyOwner()
38
62
  returns (IVersionable versionable)
39
63
  {
40
- if (_isDeployed) { revert ErrorAlreadyDeployed(); }
64
+ if (_versions.length > 0) {
65
+ revert ErrorProxyManagerAlreadyDeployed();
66
+ }
41
67
 
42
68
  address currentProxyOwner = getOwner(); // used by implementation
43
69
  address initialProxyAdminOwner = address(this); // used by proxy
44
- bytes memory data = getDeployData(initialImplementation, currentProxyOwner, initializationData);
45
70
 
46
71
  _proxy = new UpgradableProxyWithAdmin(
47
72
  initialImplementation,
48
73
  initialProxyAdminOwner,
49
- data
74
+ getDeployData(currentProxyOwner, initializationData)
50
75
  );
51
76
 
52
- _isDeployed = true;
53
77
  versionable = IVersionable(address(_proxy));
78
+ _updateVersionHistory(versionable.getVersion(), initialImplementation, currentProxyOwner);
54
79
 
55
- emit LogProxyDeployed(address(_proxy), initialImplementation);
80
+ emit LogProxyManagerVersionableDeployed(address(_proxy), initialImplementation);
81
+ }
82
+
83
+ function deployDetermenistic(address initialImplementation, bytes memory initializationData, bytes32 salt)
84
+ public
85
+ virtual
86
+ onlyOwner()
87
+ returns (IVersionable versionable)
88
+ {
89
+ if (_versions.length > 0) {
90
+ revert ErrorProxyManagerAlreadyDeployed();
91
+ }
92
+
93
+ address currentProxyOwner = getOwner();
94
+ address initialProxyAdminOwner = address(this);
95
+
96
+ _proxy = new UpgradableProxyWithAdmin{salt: salt}(
97
+ initialImplementation,
98
+ initialProxyAdminOwner,
99
+ getDeployData(currentProxyOwner, initializationData)
100
+ );
101
+
102
+ versionable = IVersionable(address(_proxy));
103
+ _updateVersionHistory(versionable.getVersion(), initialImplementation, currentProxyOwner);
104
+
105
+ emit LogProxyManagerVersionableDeployed(address(_proxy), initialImplementation);
56
106
  }
57
107
 
58
108
  /// @dev upgrade existing contract
@@ -62,33 +112,84 @@ contract ProxyManager is
62
112
  onlyOwner()
63
113
  returns (IVersionable versionable)
64
114
  {
65
- if (!_isDeployed) { revert ErrorNotYetDeployed(); }
115
+ if (_versions.length == 0) {
116
+ revert ErrorProxyManagerNotYetDeployed();
117
+ }
66
118
 
67
119
  address currentProxyOwner = getOwner();
68
120
  ProxyAdmin proxyAdmin = getProxy().getProxyAdmin();
69
121
  ITransparentUpgradeableProxy proxy = ITransparentUpgradeableProxy(address(_proxy));
70
- bytes memory data = getUpgradeData(newImplementation, currentProxyOwner, upgradeData);
71
122
 
72
123
  proxyAdmin.upgradeAndCall(
73
124
  proxy,
74
125
  newImplementation,
75
- data);
126
+ getUpgradeData(upgradeData));
76
127
 
77
128
  versionable = IVersionable(address(_proxy));
129
+ _updateVersionHistory(versionable.getVersion(), newImplementation, currentProxyOwner);
78
130
 
79
- emit LogProxyUpgraded(address(_proxy), newImplementation);
131
+ emit LogProxyManagerVersionableUpgraded(address(_proxy), newImplementation);
80
132
 
81
133
  }
82
134
 
83
- function getDeployData(address implementation, address proxyOwner, bytes memory deployData) public pure returns (bytes memory data) {
84
- return abi.encodeWithSelector(IVersionable.initialize.selector, implementation, proxyOwner, deployData);
135
+ function getDeployData(address proxyOwner, bytes memory deployData) public pure returns (bytes memory data) {
136
+ return abi.encodeWithSelector(
137
+ IVersionable.initializeVersionable.selector,
138
+ proxyOwner,
139
+ deployData);
85
140
  }
86
141
 
87
- function getUpgradeData(address implementation, address proxyOwner, bytes memory upgradeData) public pure returns (bytes memory data) {
88
- return abi.encodeWithSelector(IVersionable.upgrade.selector, implementation, proxyOwner, upgradeData);
142
+ function getUpgradeData(bytes memory upgradeData) public pure returns (bytes memory data) {
143
+ return abi.encodeWithSelector(
144
+ IVersionable.upgradeVersionable.selector,
145
+ upgradeData);
89
146
  }
90
147
 
91
148
  function getProxy() public returns (UpgradableProxyWithAdmin) {
92
149
  return _proxy;
93
150
  }
151
+
152
+ function getVersion() external view virtual returns(Version) {
153
+ return IVersionable(address(_proxy)).getVersion();
154
+ }
155
+
156
+ function getVersionCount() external view returns(uint256) {
157
+ return _versions.length;
158
+ }
159
+
160
+ function getVersion(uint256 idx) external view returns(Version) {
161
+ return _versions[idx];
162
+ }
163
+
164
+ function getVersionInfo(Version _version) external view returns(VersionInfo memory) {
165
+ return _versionHistory[_version];
166
+ }
167
+
168
+ function _updateVersionHistory(
169
+ Version newVersion,
170
+ address implementation,
171
+ address activatedBy
172
+ )
173
+ private
174
+ {
175
+ if(newVersion == VersionLib.zeroVersion()) {
176
+ revert ErrorProxyManagerZeroVersion();
177
+ }
178
+
179
+ if(_versions.length > 0) {
180
+ if(newVersion.toInt() <= _versions[_versions.length-1].toInt()) {
181
+ revert ErrorProxyManagerNextVersionNotIncreasing(newVersion);
182
+ }
183
+ }
184
+
185
+ // update version history
186
+ _versions.push(newVersion);
187
+ _versionHistory[newVersion] = VersionInfo(
188
+ newVersion,
189
+ implementation,
190
+ activatedBy,
191
+ TimestampLib.blockTimestamp(),
192
+ blockNumber()
193
+ );
194
+ }
94
195
  }