@etherisc/gif-next 0.0.2-e922e07-736 → 0.0.2-e964d24-516

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 (423) hide show
  1. package/README.md +6 -83
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/{components → distribution}/Distribution.sol/Distribution.json +129 -14
  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 +780 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/{components → distribution}/IDistributionComponent.sol/IDistributionComponent.json +203 -14
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/{instance/service → distribution}/IDistributionService.sol/IDistributionService.json +110 -283
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +68 -54
  14. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  15. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  16. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +309 -2078
  18. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  19. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +183 -76
  20. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  21. package/artifacts/contracts/instance/Instance.sol/Instance.json +434 -2823
  22. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  23. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +493 -129
  24. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  25. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  26. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +406 -192
  28. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +224 -291
  30. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +45 -82
  32. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
  34. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  35. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
  36. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  37. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  39. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +44 -14
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +38 -13
  42. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  43. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
  44. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  46. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  47. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  52. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  53. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  54. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  55. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  56. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  57. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +291 -189
  58. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  59. package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +231 -165
  60. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  61. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  62. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  63. package/artifacts/contracts/{components → pool}/Pool.sol/Pool.json +160 -204
  64. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  65. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  66. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
  68. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  69. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  70. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
  72. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  73. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1376 -0
  74. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
  76. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  77. package/artifacts/contracts/{instance/service/IClaimService.sol/IClaimService.json → product/IApplicationService.sol/IApplicationService.json} +184 -100
  78. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +743 -0
  80. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  81. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +211 -100
  82. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  83. package/artifacts/contracts/{instance/service/IApplicationService.sol/IApplicationService.json → product/IPricingService.sol/IPricingService.json} +120 -166
  84. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  85. package/artifacts/contracts/{components → product}/IProductComponent.sol/IProductComponent.json +210 -21
  86. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  87. package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +86 -28
  88. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  90. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  92. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  93. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  94. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  96. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  97. package/artifacts/contracts/{components → product}/Product.sol/Product.json +121 -22
  98. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  99. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  100. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
  106. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -37
  108. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  110. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/Registry.sol/Registry.json +35 -16
  112. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +4 -4
  114. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +26 -53
  116. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -40
  118. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  119. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +30 -18
  120. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  122. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  123. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  124. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  125. package/artifacts/contracts/{components → shared}/Component.sol/Component.json +106 -7
  126. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  127. package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +114 -35
  128. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  130. package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +196 -7
  131. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
  133. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
  137. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  139. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  140. package/artifacts/contracts/shared/IService.sol/IService.json +85 -27
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +8 -21
  144. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  145. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
  146. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  147. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +20 -33
  148. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  149. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -21
  150. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  151. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  152. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  153. package/artifacts/contracts/shared/Service.sol/Service.json +91 -28
  154. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  155. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  156. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  157. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  158. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  159. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  160. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -0
  161. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  162. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +628 -0
  163. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  164. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
  165. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  166. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  167. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  168. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  169. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  170. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  171. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  172. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  173. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  174. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  175. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  176. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  177. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  178. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  179. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  180. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
  181. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  182. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  183. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  184. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  185. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  186. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  187. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  188. package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
  189. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  190. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  191. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  192. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  193. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  194. package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
  195. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  196. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  197. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  198. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
  199. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  200. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  201. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  202. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  203. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  204. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  205. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  206. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  207. package/contracts/{components → distribution}/Distribution.sol +21 -16
  208. package/contracts/distribution/DistributionService.sol +348 -0
  209. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +5 -5
  210. package/contracts/{components → distribution}/IDistributionComponent.sol +7 -7
  211. package/contracts/{instance/service → distribution}/IDistributionService.sol +19 -30
  212. package/contracts/instance/BundleManager.sol +13 -12
  213. package/contracts/instance/Cloneable.sol +7 -2
  214. package/contracts/instance/IInstance.sol +48 -63
  215. package/contracts/instance/IInstanceService.sol +31 -17
  216. package/contracts/instance/Instance.sol +131 -193
  217. package/contracts/instance/InstanceAccessManager.sol +405 -161
  218. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  219. package/contracts/instance/InstanceReader.sol +101 -26
  220. package/contracts/instance/InstanceService.sol +173 -354
  221. package/contracts/instance/InstanceServiceManager.sol +1 -1
  222. package/contracts/instance/InstanceStore.sol +211 -0
  223. package/contracts/instance/ObjectManager.sol +9 -11
  224. package/contracts/instance/base/IKeyValueStore.sol +5 -5
  225. package/contracts/instance/base/ILifecycle.sol +3 -3
  226. package/contracts/instance/base/KeyValueStore.sol +18 -41
  227. package/contracts/instance/base/Lifecycle.sol +27 -7
  228. package/contracts/instance/module/IAccess.sol +23 -16
  229. package/contracts/instance/module/IBundle.sol +10 -8
  230. package/contracts/instance/module/IComponents.sol +41 -0
  231. package/contracts/instance/module/IDistribution.sol +7 -6
  232. package/contracts/instance/module/IPolicy.sol +19 -14
  233. package/contracts/instance/module/IRisk.sol +1 -1
  234. package/contracts/instance/module/ISetup.sol +5 -18
  235. package/contracts/instance/module/ITreasury.sol +2 -2
  236. package/contracts/pool/BundleService.sol +382 -0
  237. package/contracts/{instance/service → pool}/BundleServiceManager.sol +5 -5
  238. package/contracts/pool/IBundleService.sol +118 -0
  239. package/contracts/{components → pool}/IPoolComponent.sol +19 -56
  240. package/contracts/pool/IPoolService.sol +114 -0
  241. package/contracts/{components → pool}/Pool.sol +62 -138
  242. package/contracts/pool/PoolService.sol +403 -0
  243. package/contracts/{instance/service → pool}/PoolServiceManager.sol +5 -5
  244. package/contracts/product/ApplicationService.sol +186 -0
  245. package/contracts/{instance/service → product}/ApplicationServiceManager.sol +2 -2
  246. package/contracts/product/ClaimService.sol +437 -0
  247. package/contracts/{instance/service → product}/ClaimServiceManager.sol +2 -2
  248. package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
  249. package/contracts/product/IClaimService.sol +90 -0
  250. package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
  251. package/contracts/product/IPricingService.sol +37 -0
  252. package/contracts/{components → product}/IProductComponent.sol +11 -10
  253. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  254. package/contracts/product/PolicyService.sol +376 -0
  255. package/contracts/{instance/service → product}/PolicyServiceManager.sol +5 -5
  256. package/contracts/product/PricingService.sol +275 -0
  257. package/contracts/product/PricingServiceManager.sol +51 -0
  258. package/contracts/{components → product}/Product.sol +160 -74
  259. package/contracts/product/ProductService.sol +210 -0
  260. package/contracts/{instance/service → product}/ProductServiceManager.sol +5 -5
  261. package/contracts/registry/ChainNft.sol +8 -0
  262. package/contracts/registry/IRegistry.sol +6 -4
  263. package/contracts/registry/IRegistryService.sol +6 -7
  264. package/contracts/registry/ITransferInterceptor.sol +1 -0
  265. package/contracts/registry/Registry.sol +26 -23
  266. package/contracts/registry/RegistryAccessManager.sol +1 -1
  267. package/contracts/registry/RegistryService.sol +33 -31
  268. package/contracts/registry/RegistryServiceManager.sol +0 -2
  269. package/contracts/registry/ReleaseManager.sol +24 -22
  270. package/contracts/registry/TokenRegistry.sol +2 -2
  271. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  272. package/contracts/{components → shared}/Component.sol +68 -18
  273. package/contracts/shared/ComponentService.sol +150 -0
  274. package/contracts/{components → shared}/IComponent.sol +28 -6
  275. package/contracts/shared/INftOwnable.sol +1 -1
  276. package/contracts/shared/IPolicyHolder.sol +24 -10
  277. package/contracts/shared/IRegistryLinked.sol +0 -1
  278. package/contracts/shared/IService.sol +6 -6
  279. package/contracts/shared/IVersionable.sol +1 -1
  280. package/contracts/shared/NftOwnable.sol +1 -3
  281. package/contracts/shared/PolicyHolder.sol +31 -18
  282. package/contracts/shared/ProxyManager.sol +3 -3
  283. package/contracts/shared/Registerable.sol +12 -11
  284. package/contracts/shared/RegistryLinked.sol +0 -5
  285. package/contracts/shared/Service.sol +23 -9
  286. package/contracts/shared/TokenHandler.sol +14 -6
  287. package/contracts/shared/Versionable.sol +1 -1
  288. package/contracts/staking/IStakingService.sol +102 -0
  289. package/contracts/staking/StakeingServiceManager.sol +37 -0
  290. package/contracts/staking/StakingService.sol +166 -0
  291. package/contracts/type/Amount.sol +109 -0
  292. package/contracts/{types → type}/Blocknumber.sol +1 -0
  293. package/contracts/{types → type}/ClaimId.sol +25 -2
  294. package/contracts/{types → type}/Fee.sol +17 -8
  295. package/contracts/{types → type}/NftId.sol +8 -0
  296. package/contracts/{types → type}/NftIdSet.sol +1 -1
  297. package/contracts/{types → type}/ObjectType.sol +10 -5
  298. package/contracts/{types → type}/PayoutId.sol +33 -5
  299. package/contracts/{types → type}/RoleId.sol +6 -4
  300. package/contracts/{types → type}/StateId.sol +7 -2
  301. package/contracts/{types → type}/Timestamp.sol +6 -0
  302. package/contracts/{types → type}/UFixed.sol +1 -0
  303. package/contracts/{types → type}/Version.sol +1 -0
  304. package/package.json +1 -1
  305. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  306. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  307. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
  308. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  309. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  310. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  311. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  312. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  313. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
  314. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
  315. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -968
  316. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
  317. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -665
  318. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  319. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1096
  320. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  321. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -661
  322. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
  323. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -754
  324. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
  325. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -637
  326. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  327. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1724
  328. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  329. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -801
  330. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
  331. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  332. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
  333. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  334. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  335. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  336. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +0 -347
  337. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  338. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  339. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1021
  340. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  341. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -689
  342. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  343. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -727
  344. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  345. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -649
  346. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  347. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -777
  348. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  349. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -649
  350. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  351. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  352. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  353. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  354. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  355. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
  356. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  357. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  358. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  359. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -521
  360. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  361. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  362. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  363. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  364. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  365. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
  366. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  367. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  368. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  369. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  370. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  371. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  372. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
  373. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
  374. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  375. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  376. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  377. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  378. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  379. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  380. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  381. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  382. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  383. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  384. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
  385. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
  386. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  387. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  388. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  389. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
  390. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  391. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  392. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  393. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  394. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  395. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  396. package/contracts/instance/base/ComponentService.sol +0 -134
  397. package/contracts/instance/service/ApplicationService.sol +0 -349
  398. package/contracts/instance/service/BundleService.sol +0 -299
  399. package/contracts/instance/service/ClaimService.sol +0 -151
  400. package/contracts/instance/service/DistributionService.sol +0 -450
  401. package/contracts/instance/service/IBundleService.sol +0 -55
  402. package/contracts/instance/service/IClaimService.sol +0 -61
  403. package/contracts/instance/service/IPoolService.sol +0 -20
  404. package/contracts/instance/service/PolicyService.sol +0 -394
  405. package/contracts/instance/service/PoolService.sol +0 -109
  406. package/contracts/instance/service/ProductService.sol +0 -233
  407. package/contracts/shared/ContractDeployerLib.sol +0 -72
  408. package/contracts/test/TestFee.sol +0 -25
  409. package/contracts/test/TestRegisterable.sol +0 -18
  410. package/contracts/test/TestRoleId.sol +0 -14
  411. package/contracts/test/TestService.sol +0 -25
  412. package/contracts/test/TestToken.sol +0 -26
  413. package/contracts/test/TestVersion.sol +0 -44
  414. package/contracts/test/TestVersionable.sol +0 -17
  415. package/contracts/test/Usdc.sol +0 -26
  416. package/contracts/types/ChainId.sol +0 -38
  417. package/contracts/types/NumberId.sol +0 -52
  418. /package/contracts/{types → type}/AddressSet.sol +0 -0
  419. /package/contracts/{types → type}/DistributorType.sol +0 -0
  420. /package/contracts/{types → type}/Key32.sol +0 -0
  421. /package/contracts/{types → type}/Referral.sol +0 -0
  422. /package/contracts/{types → type}/RiskId.sol +0 -0
  423. /package/contracts/{types → type}/Seconds.sol +0 -0
@@ -5,11 +5,12 @@ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
  import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
6
6
  import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
7
7
 
8
+ import {Amount} from "../type/Amount.sol";
9
+ import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
8
10
  import {ERC165} from "./ERC165.sol";
9
11
  import {IPolicyHolder} from "./IPolicyHolder.sol";
10
- import {IRegistry} from "../registry/IRegistry.sol";
11
- import {NftId} from "../types/NftId.sol";
12
- import {NumberId} from "../types/NumberId.sol";
12
+ import {NftId} from "../type/NftId.sol";
13
+ import {PayoutId} from "../type/PayoutId.sol";
13
14
  import {RegistryLinked} from "./RegistryLinked.sol";
14
15
 
15
16
  /// @dev template implementation for IPolicyHolder
@@ -22,33 +23,43 @@ contract PolicyHolder is
22
23
  // TODO fix address
23
24
  bytes32 public constant POLICY_HOLDER_STORAGE_LOCATION_V1 = 0x07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00;
24
25
 
25
- // TODO uncomment/fix/refactor
26
26
  struct PolicyHolderStorage {
27
- // mapping(NftId policyId => mapping(NumberId claimId => address beneficiary)) private _claimBeneficiary;
28
- // mapping(NftId policyId => address beneficiary) private _beneficiary;
29
- bool dummy;
27
+ mapping(NftId policyId => mapping(ClaimId claimId => address beneficiary)) _beneficiary;
30
28
  }
31
29
 
32
30
  function initializePolicyHolder(
33
- address registryAddress
31
+ address registryAddress,
32
+ address beneficiaryDefault
34
33
  )
35
34
  public
36
35
  virtual
37
36
  onlyInitializing()
38
37
  {
39
38
  initializeRegistryLinked(registryAddress);
39
+ registerInterface(type(IPolicyHolder).interfaceId);
40
40
  }
41
41
 
42
42
  /// @dev empty default implementation
43
- function policyCreatedCallback(NftId policyNftId) external virtual { }
43
+ function policyActivated(NftId policyNftId) external {}
44
44
 
45
45
  /// @dev empty default implementation
46
- function payoutExecutedCallback(NftId policyNftId, NumberId payoutId, address beneficiary, uint256 amount) external virtual { }
46
+ function policyExpired(NftId policyNftId) external {}
47
47
 
48
- /// @dev determines beneficiary address that will be used in payouts targeting this contract
49
- /// returned address will override GIF default where the policy nft holder is treated as beneficiary
50
- function getBeneficiary(NftId policyId, NumberId claimId) external virtual view returns (address beneficiary) {
51
- // TODO add implementation
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
+ }
52
63
  }
53
64
 
54
65
  //--- IERC165 functions ---------------//
@@ -65,12 +76,14 @@ contract PolicyHolder is
65
76
  return IERC721Receiver.onERC721Received.selector;
66
77
  }
67
78
 
68
- function _setBeneficiary(address beneficiary) internal {
69
-
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);
70
82
  }
71
83
 
72
- function _setBeneficiary(NftId policyId, address beneficiary) internal {
73
-
84
+ /// @dev sets policy and claim specific beneficiary
85
+ function _setBeneficiary(NftId policyNftId, ClaimId claimId, address beneficiary) internal {
86
+ _getPolicyHolderStorage()._beneficiary[policyNftId][claimId] = beneficiary;
74
87
  }
75
88
 
76
89
  function _getPolicyHolderStorage() private pure returns (PolicyHolderStorage storage $) {
@@ -3,14 +3,14 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
5
5
 
6
- import {Blocknumber, blockNumber} from "../types/Blocknumber.sol";
6
+ import {Blocknumber, blockNumber} from "../type/Blocknumber.sol";
7
7
  import {IVersionable} from "./IVersionable.sol";
8
8
  import {NftOwnable} from "./NftOwnable.sol";
9
9
  import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
10
10
  import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
11
- import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
11
+ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
12
12
  import {UpgradableProxyWithAdmin} from "./UpgradableProxyWithAdmin.sol";
13
- import {Version, VersionLib} from "../types/Version.sol";
13
+ import {Version, VersionLib} from "../type/Version.sol";
14
14
 
15
15
  /// @dev manages proxy deployments for upgradable contracs of type IVersionable
16
16
  contract ProxyManager is
@@ -3,13 +3,12 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
5
 
6
- import {NftId, zeroNftId} from "../types/NftId.sol";
6
+ import {NftId, zeroNftId} from "../type/NftId.sol";
7
7
  import {NftOwnable} from "../shared/NftOwnable.sol";
8
- import {ObjectType} from "../types/ObjectType.sol";
8
+ import {ObjectType} from "../type/ObjectType.sol";
9
9
 
10
10
  import {IRegistry} from "../registry/IRegistry.sol";
11
11
  import {IRegisterable} from "./IRegisterable.sol";
12
- import {Versionable} from "./Versionable.sol";
13
12
 
14
13
  contract Registerable is
15
14
  NftOwnable,
@@ -25,12 +24,6 @@ contract Registerable is
25
24
  bytes _data;
26
25
  }
27
26
 
28
- function _getRegisterableStorage() private pure returns (RegisterableStorage storage $) {
29
- assembly {
30
- $.slot := REGISTERABLE_LOCATION_V1
31
- }
32
- }
33
-
34
27
  function initializeRegisterable(
35
28
  address registryAddress,
36
29
  NftId parentNftId,
@@ -47,7 +40,11 @@ contract Registerable is
47
40
  initialOwner,
48
41
  registryAddress);
49
42
 
50
- RegisterableStorage storage $ = _getRegisterableStorage();
43
+ RegisterableStorage storage $;
44
+ assembly {
45
+ $.slot := REGISTERABLE_LOCATION_V1
46
+ }
47
+
51
48
  $._parentNftId = parentNftId;
52
49
  $._objectType = objectType;
53
50
  $._isInterceptor = isInterceptor;
@@ -61,7 +58,11 @@ contract Registerable is
61
58
  virtual
62
59
  returns (IRegistry.ObjectInfo memory info)
63
60
  {
64
- RegisterableStorage memory $ = _getRegisterableStorage();
61
+ RegisterableStorage storage $;
62
+ assembly {
63
+ $.slot := REGISTERABLE_LOCATION_V1
64
+ }
65
+
65
66
  info = IRegistry.ObjectInfo(
66
67
  zeroNftId(),
67
68
  $._parentNftId,
@@ -40,9 +40,4 @@ contract RegistryLinked is
40
40
  function getRegistry() public view returns (IRegistry) {
41
41
  return _registry;
42
42
  }
43
-
44
-
45
- function getRegistryAddress() public view returns (address) {
46
- return address(_registry);
47
- }
48
43
  }
@@ -1,9 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {ObjectType, SERVICE} from "../types/ObjectType.sol";
5
- import {NftId, zeroNftId} from "../types/NftId.sol";
6
- import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
4
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
+
7
+ import {ObjectType, REGISTRY, SERVICE} from "../type/ObjectType.sol";
8
+ import {NftId, zeroNftId} from "../type/NftId.sol";
9
+ import {Version, VersionPart, VersionLib, VersionPartLib} from "../type/Version.sol";
7
10
 
8
11
  import {Versionable} from "./Versionable.sol";
9
12
  import {IService} from "./IService.sol";
@@ -18,14 +21,11 @@ import {IRegistry} from "../registry/IRegistry.sol";
18
21
  abstract contract Service is
19
22
  Registerable,
20
23
  Versionable,
24
+ AccessManagedUpgradeable,
21
25
  IService
22
26
  {
23
- function getDomain() public pure virtual override returns(ObjectType);
24
27
 
25
- // version major version MUST be consistent with major version of getVersion()
26
- function getMajorVersion() public view virtual override returns(VersionPart majorVersion) {
27
- return VersionPartLib.toVersionPart(3);
28
- }
28
+ uint8 private constant GIF_MAJOR_VERSION = 3;
29
29
 
30
30
  // from Versionable
31
31
  function getVersion()
@@ -34,11 +34,12 @@ abstract contract Service is
34
34
  virtual override (IVersionable, Versionable)
35
35
  returns(Version)
36
36
  {
37
- return VersionLib.toVersion(3,0,0);
37
+ return VersionLib.toVersion(GIF_MAJOR_VERSION,0,0);
38
38
  }
39
39
 
40
40
  function initializeService(
41
41
  address registry,
42
+ address authority, // real authority for registry service adress(0) for other services
42
43
  address initialOwner
43
44
  )
44
45
  public
@@ -53,6 +54,19 @@ abstract contract Service is
53
54
  initialOwner,
54
55
  ""); // data
55
56
 
57
+ // externally provided authority
58
+ if(authority != address(0)) {
59
+ __AccessManaged_init(authority);
60
+ } else {
61
+ address registryServiceAddress = getRegistry().getServiceAddress(
62
+ REGISTRY(),
63
+ VersionPartLib.toVersionPart(GIF_MAJOR_VERSION));
64
+
65
+ // copy authority from already registered registry services
66
+ __AccessManaged_init(IAccessManaged(registryServiceAddress).authority());
67
+ }
68
+
69
+ registerInterface(type(IAccessManaged).interfaceId);
56
70
  registerInterface(type(IService).interfaceId);
57
71
  }
58
72
  }
@@ -4,6 +4,10 @@ pragma solidity ^0.8.20;
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
  import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
6
6
 
7
+ import {Amount} from "../type/Amount.sol";
8
+
9
+ /// @dev token specific transfer helper
10
+ /// relies internally on oz SafeERC20.safeTransferFrom
7
11
  contract TokenHandler {
8
12
  IERC20Metadata private _token;
9
13
 
@@ -11,17 +15,21 @@ contract TokenHandler {
11
15
  _token = IERC20Metadata(token);
12
16
  }
13
17
 
14
- // TODO add logging
15
18
  function transfer(
16
19
  address from,
17
20
  address to,
18
- uint256 amount // TODO add authz (only treasury/instance/product/pool/ service)
19
- ) external {
20
- SafeERC20.safeTransferFrom(_token, from, to, amount);
21
- // _token.transferFrom(from, to, amount);
21
+ Amount amount
22
+ )
23
+ external
24
+ {
25
+ SafeERC20.safeTransferFrom(_token, from, to, amount.toInt());
22
26
  }
23
27
 
24
- function getToken() external view returns (IERC20Metadata) {
28
+ function getToken()
29
+ external
30
+ view
31
+ returns (IERC20Metadata)
32
+ {
25
33
  return _token;
26
34
  }
27
35
  }
@@ -4,7 +4,7 @@ pragma solidity ^0.8.20;
4
4
  import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
5
 
6
6
  import {IVersionable} from "./IVersionable.sol";
7
- import {Version, VersionLib} from "../types/Version.sol";
7
+ import {Version, VersionLib} from "../type/Version.sol";
8
8
 
9
9
 
10
10
  abstract contract Versionable is
@@ -0,0 +1,102 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Amount} from "../type/Amount.sol";
5
+ import {IService} from "../shared/IService.sol";
6
+ import {NftId} from "../type/NftId.sol";
7
+ import {Seconds} from "../type/Seconds.sol";
8
+ import {Timestamp} from "../type/Timestamp.sol";
9
+
10
+
11
+ interface IStakingService is IService
12
+ {
13
+ /// @dev create a new stake with amount DIP to the specified target
14
+ /// returns the id of the newly minted stake nft
15
+ /// permissionless function
16
+ function create(
17
+ NftId targetNftId,
18
+ Amount amount
19
+ )
20
+ external
21
+ returns (
22
+ NftId stakeNftId
23
+ );
24
+
25
+ /// @dev increase an existing stake by amount DIP
26
+ /// updates the staking reward amount
27
+ /// function restricted to the current stake owner
28
+ function stake(
29
+ NftId stakeNftId,
30
+ Amount amount
31
+ )
32
+ external;
33
+
34
+ /// @dev decrease an existing stake by amount DIP
35
+ /// updates the staking reward amount
36
+ /// function restricted to the current stake owner
37
+ function unstake(
38
+ NftId stakeNftId,
39
+ Amount amount
40
+ )
41
+ external;
42
+
43
+ /// @dev closes the specified stake
44
+ /// all related stakes and all accumulated reward DIP are transferred to the current stake holder
45
+ /// function restricted to the current stake owner
46
+ function close(
47
+ NftId stakeNftId
48
+ )
49
+ external;
50
+
51
+ /// @dev re-stakes the current staked DIP as well as all accumulated rewards to the new stake target.
52
+ /// all related stakes and all accumulated reward DIP are transferred to the current stake holder
53
+ /// function restricted to the current stake owner
54
+ function reStake(
55
+ NftId stakeNftId,
56
+ NftId newTargetNftId
57
+ )
58
+ external
59
+ returns (
60
+ NftId newStakeNftId,
61
+ Timestamp unlockedAt
62
+ );
63
+
64
+ /// @dev increases the total value locked amount for the specified target by the provided token amount.
65
+ /// function is called when a new policy is collateralized
66
+ /// function restricted to the pool service
67
+ function increaseTotalValueLocked(
68
+ NftId targetNftId,
69
+ address token,
70
+ Amount amount
71
+ )
72
+ external
73
+ returns (Amount totalValueLocked);
74
+
75
+
76
+ /// @dev decreases the total value locked amount for the specified target by the provided token amount.
77
+ /// function is called when a new policy is closed or payouts are executed
78
+ /// function restricted to the pool service
79
+ function decreaseTotalValueLocked(
80
+ NftId targetNftId,
81
+ address token,
82
+ Amount amount
83
+ )
84
+ external
85
+ returns (Amount totalValueLocked);
86
+
87
+ /// @dev sends total value locked data to the global staking contract.
88
+ /// this is done via CCIP (cross chain communication)
89
+ function sendTotalValueLockedData(
90
+ NftId targetNftId,
91
+ address token
92
+ )
93
+ external;
94
+
95
+ /// @dev receives total value locked data from a staking contract on a different chain.
96
+ /// this is done via CCIP (cross chain communication)
97
+ function receiveTotalValueLockedData(
98
+ NftId targetNftId,
99
+ address token
100
+ )
101
+ external;
102
+ }
@@ -0,0 +1,37 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../shared/ProxyManager.sol";
6
+ import {StakingService} from "./StakingService.sol";
7
+
8
+ contract StakingServiceManager is
9
+ ProxyManager
10
+ {
11
+
12
+ StakingService private _stakingService;
13
+
14
+ /// @dev initializes proxy manager with service implementation
15
+ constructor(
16
+ address registryAddress
17
+ )
18
+ ProxyManager(registryAddress)
19
+ {
20
+ StakingService svc = new StakingService();
21
+ bytes memory data = abi.encode(registryAddress, address(this));
22
+ IVersionable versionable = deploy(
23
+ address(svc),
24
+ data);
25
+
26
+ _stakingService = StakingService(address(versionable));
27
+ }
28
+
29
+ //--- view functions ----------------------------------------------------//
30
+ function getStakingService()
31
+ external
32
+ view
33
+ returns (StakingService)
34
+ {
35
+ return _stakingService;
36
+ }
37
+ }
@@ -0,0 +1,166 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Amount} from "../type/Amount.sol";
5
+ import {IPoolService} from "../pool/IPoolService.sol";
6
+ import {IRegistry} from "../registry/IRegistry.sol";
7
+ import {IStakingService} from "./IStakingService.sol";
8
+ import {NftId} from "../type/NftId.sol";
9
+ import {ObjectType, POOL, STAKE} from "../type/ObjectType.sol";
10
+ import {Service} from "../shared/Service.sol";
11
+ import {Timestamp} from "../type/Timestamp.sol";
12
+
13
+
14
+ contract StakingService is
15
+ Service,
16
+ IStakingService
17
+ {
18
+ // TODO decide and implement string spec for location calculation
19
+ // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.shared.StakingService.sol")) - 1)) & ~bytes32(uint256(0xff));
20
+ bytes32 public constant STAKING_SERVICE_LOCATION_V1 = 0x6548005c3f4340f82f348c576c0ff69f7f529cadd5ad41f96aae61abceeaa300;
21
+
22
+ struct StakingServiceStorage {
23
+ IPoolService _poolService;
24
+ }
25
+
26
+ function getDomain() public pure override returns(ObjectType) {
27
+ return STAKE();
28
+ }
29
+
30
+
31
+ function create(
32
+ NftId targetNftId,
33
+ Amount amount
34
+ )
35
+ external
36
+ virtual
37
+ returns (
38
+ NftId stakeNftId
39
+ )
40
+ {
41
+
42
+ }
43
+
44
+
45
+ function stake(
46
+ NftId stakeNftId,
47
+ Amount amount
48
+ )
49
+ external
50
+ virtual
51
+ {
52
+
53
+ }
54
+
55
+
56
+ function unstake(
57
+ NftId stakeNftId,
58
+ Amount amount
59
+ )
60
+ external
61
+ virtual
62
+ {
63
+
64
+ }
65
+
66
+ function close(
67
+ NftId stakeNftId
68
+ )
69
+ external
70
+ virtual
71
+ {
72
+
73
+ }
74
+
75
+ function reStake(
76
+ NftId stakeNftId,
77
+ NftId newTargetNftId
78
+ )
79
+ external
80
+ virtual
81
+ returns (
82
+ NftId newStakeNftId,
83
+ Timestamp unlockedAt
84
+ )
85
+ {
86
+
87
+ }
88
+
89
+
90
+ function increaseTotalValueLocked(
91
+ NftId targetNftId,
92
+ address token,
93
+ Amount amount
94
+ )
95
+ external
96
+ virtual
97
+ returns (Amount totalValueLocked)
98
+ {
99
+
100
+ }
101
+
102
+
103
+ function decreaseTotalValueLocked(
104
+ NftId targetNftId,
105
+ address token,
106
+ Amount amount
107
+ )
108
+ external
109
+ virtual
110
+ returns (Amount totalValueLocked)
111
+ {
112
+
113
+ }
114
+
115
+
116
+ function sendTotalValueLockedData(
117
+ NftId targetNftId,
118
+ address token
119
+ )
120
+ external
121
+ virtual
122
+ {
123
+
124
+ }
125
+
126
+
127
+ function receiveTotalValueLockedData(
128
+ NftId targetNftId,
129
+ address token
130
+ )
131
+ external
132
+ virtual
133
+ {
134
+
135
+ }
136
+
137
+
138
+ function _initialize(
139
+ address owner,
140
+ bytes memory data
141
+ )
142
+ internal
143
+ virtual override
144
+ initializer()
145
+ {
146
+ // TODO check this, might no longer be the way, refactor if necessary
147
+ address registryAddress;
148
+ (registryAddress,) = abi.decode(data, (address, address));
149
+
150
+ StakingServiceStorage storage $ = _getStakingServiceStorage();
151
+ $._poolService = IPoolService(_getServiceAddress(POOL()));
152
+
153
+ initializeService(registryAddress, address(0), owner);
154
+ registerInterface(type(IStakingService).interfaceId);
155
+ }
156
+
157
+ function _getServiceAddress(ObjectType domain) internal view returns (address) {
158
+ return getRegistry().getServiceAddress(domain, getVersion().toMajorPart());
159
+ }
160
+
161
+ function _getStakingServiceStorage() private pure returns (StakingServiceStorage storage $) {
162
+ assembly {
163
+ $.slot := STAKING_SERVICE_LOCATION_V1
164
+ }
165
+ }
166
+ }