@etherisc/gif-next 0.0.2-9682fee-392 → 0.0.2-96b5b72-170

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 (437) 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 +82 -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 +156 -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 +6 -6
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +310 -2004
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +101 -52
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +430 -2762
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +99 -62
  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 +366 -71
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +157 -211
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +45 -90
  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 +1 -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 +61 -12
  39. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +8 -8
  41. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol}/ObjectManager.json +3 -3
  43. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +6 -6
  45. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  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 +234 -129
  58. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  59. package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +173 -21
  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 +83 -21
  64. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  65. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1630 -0
  66. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +712 -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 +1386 -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 +753 -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 +163 -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 +74 -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 +2 -2
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +48 -0
  106. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +66 -37
  108. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  110. package/artifacts/contracts/registry/Registry.sol/Registry.json +77 -16
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  112. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +20 -20
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  114. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +87 -53
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  116. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -40
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  118. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +95 -22
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  120. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  121. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  122. package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
  123. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  124. package/artifacts/contracts/shared/Component.sol/Component.json +723 -0
  125. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  126. package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +114 -35
  127. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  129. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → shared/IComponent.sol/IComponent.json} +177 -142
  130. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  131. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +647 -0
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
  134. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  140. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  141. package/artifacts/contracts/shared/IService.sol/IService.json +85 -27
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  144. package/artifacts/contracts/{components/Component.sol/Component.json → shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json} +60 -8
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +8 -21
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  148. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +20 -33
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -21
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  154. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  155. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Service.sol/Service.json +91 -28
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +60 -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/staking/IStaking.sol/IStaking.dbg.json +4 -0
  163. package/artifacts/contracts/{components/IComponent.sol/IComponent.json → staking/IStaking.sol/IStaking.json} +123 -121
  164. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  165. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +545 -0
  166. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  167. package/artifacts/contracts/staking/Staking.sol/Staking.json +854 -0
  168. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  169. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +640 -0
  170. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  171. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +797 -0
  172. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  173. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +632 -0
  174. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  175. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  176. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  177. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  178. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  179. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  180. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  181. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  182. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  183. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  184. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  185. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  186. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  187. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  188. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/{types → type}/NftId.sol/NftIdLib.json +5 -5
  190. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  191. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  192. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  193. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  194. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  196. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  197. package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
  198. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  200. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  202. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  203. package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
  204. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  205. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  206. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  207. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
  208. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  209. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  210. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  211. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  212. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  213. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  214. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  215. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  216. package/contracts/{components → distribution}/Distribution.sol +22 -17
  217. package/contracts/distribution/DistributionService.sol +349 -0
  218. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +5 -5
  219. package/contracts/{components → distribution}/IDistributionComponent.sol +8 -8
  220. package/contracts/{instance/service → distribution}/IDistributionService.sol +19 -30
  221. package/contracts/instance/BundleManager.sol +8 -9
  222. package/contracts/instance/IInstance.sol +43 -64
  223. package/contracts/instance/IInstanceService.sol +18 -17
  224. package/contracts/instance/Instance.sol +116 -214
  225. package/contracts/instance/InstanceAccessManager.sol +49 -28
  226. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  227. package/contracts/instance/InstanceReader.sol +96 -18
  228. package/contracts/instance/InstanceService.sol +103 -290
  229. package/contracts/instance/InstanceServiceManager.sol +1 -1
  230. package/contracts/instance/InstanceStore.sol +211 -0
  231. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +1 -1
  232. package/contracts/instance/base/IKeyValueStore.sol +14 -10
  233. package/contracts/instance/base/ILifecycle.sol +3 -3
  234. package/contracts/instance/base/KeyValueStore.sol +39 -45
  235. package/contracts/instance/base/Lifecycle.sol +17 -5
  236. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +7 -7
  237. package/contracts/instance/module/IAccess.sol +4 -4
  238. package/contracts/instance/module/IBundle.sol +10 -8
  239. package/contracts/instance/module/IComponents.sol +11 -5
  240. package/contracts/instance/module/IDistribution.sol +7 -6
  241. package/contracts/instance/module/IPolicy.sol +22 -16
  242. package/contracts/instance/module/IRisk.sol +1 -1
  243. package/contracts/instance/module/ISetup.sol +4 -4
  244. package/contracts/instance/module/ITreasury.sol +2 -2
  245. package/contracts/pool/BundleService.sol +382 -0
  246. package/contracts/{instance/service → pool}/BundleServiceManager.sol +5 -5
  247. package/contracts/pool/IBundleService.sol +118 -0
  248. package/contracts/{components → pool}/IPoolComponent.sol +15 -14
  249. package/contracts/pool/IPoolService.sol +114 -0
  250. package/contracts/{components → pool}/Pool.sol +26 -23
  251. package/contracts/pool/PoolService.sol +403 -0
  252. package/contracts/{instance/service → pool}/PoolServiceManager.sol +5 -5
  253. package/contracts/product/ApplicationService.sol +186 -0
  254. package/contracts/{instance/service → product}/ApplicationServiceManager.sol +2 -2
  255. package/contracts/product/ClaimService.sol +442 -0
  256. package/contracts/{instance/service → product}/ClaimServiceManager.sol +2 -2
  257. package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
  258. package/contracts/product/IClaimService.sol +93 -0
  259. package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
  260. package/contracts/product/IPricingService.sol +37 -0
  261. package/contracts/{components → product}/IProductComponent.sol +12 -11
  262. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  263. package/contracts/product/PolicyService.sol +376 -0
  264. package/contracts/{instance/service → product}/PolicyServiceManager.sol +5 -5
  265. package/contracts/product/PricingService.sol +275 -0
  266. package/contracts/product/PricingServiceManager.sol +51 -0
  267. package/contracts/{components → product}/Product.sol +161 -75
  268. package/contracts/product/ProductService.sol +210 -0
  269. package/contracts/{instance/service → product}/ProductServiceManager.sol +5 -5
  270. package/contracts/registry/ChainNft.sol +7 -1
  271. package/contracts/registry/IRegistry.sol +15 -6
  272. package/contracts/registry/IRegistryService.sol +10 -8
  273. package/contracts/registry/Registry.sol +45 -7
  274. package/contracts/registry/RegistryAccessManager.sol +6 -15
  275. package/contracts/registry/RegistryService.sol +52 -31
  276. package/contracts/registry/RegistryServiceManager.sol +0 -2
  277. package/contracts/registry/ReleaseManager.sol +78 -40
  278. package/contracts/registry/TokenRegistry.sol +2 -2
  279. package/contracts/shared/Component.sol +177 -0
  280. package/contracts/shared/ComponentService.sol +150 -0
  281. package/contracts/shared/IComponent.sol +58 -0
  282. package/contracts/{components/IComponent.sol → shared/IInstanceLinkedComponent.sol} +9 -31
  283. package/contracts/shared/INftOwnable.sol +1 -1
  284. package/contracts/shared/IPolicyHolder.sol +24 -10
  285. package/contracts/shared/IRegistryLinked.sol +0 -1
  286. package/contracts/shared/IService.sol +6 -6
  287. package/contracts/shared/IVersionable.sol +1 -1
  288. package/contracts/{components/Component.sol → shared/InstanceLinkedComponent.sol} +35 -15
  289. package/contracts/shared/NftOwnable.sol +1 -3
  290. package/contracts/shared/PolicyHolder.sol +31 -18
  291. package/contracts/shared/ProxyManager.sol +3 -3
  292. package/contracts/shared/Registerable.sol +12 -11
  293. package/contracts/shared/RegistryLinked.sol +0 -5
  294. package/contracts/shared/Service.sol +23 -9
  295. package/contracts/shared/TokenHandler.sol +27 -2
  296. package/contracts/shared/Versionable.sol +1 -1
  297. package/contracts/staking/IStaking.sol +30 -0
  298. package/contracts/staking/IStakingService.sol +105 -0
  299. package/contracts/staking/Staking.sol +65 -0
  300. package/contracts/staking/StakingManager.sol +46 -0
  301. package/contracts/staking/StakingService.sol +204 -0
  302. package/contracts/staking/StakingServiceManager.sol +41 -0
  303. package/contracts/type/Amount.sol +109 -0
  304. package/contracts/{types → type}/ClaimId.sol +25 -2
  305. package/contracts/{types → type}/Fee.sol +16 -8
  306. package/contracts/{types → type}/NftIdSet.sol +1 -1
  307. package/contracts/{types → type}/ObjectType.sol +14 -5
  308. package/contracts/{types → type}/PayoutId.sol +33 -5
  309. package/contracts/{types → type}/RoleId.sol +44 -9
  310. package/contracts/{types → type}/StateId.sol +6 -2
  311. package/contracts/{types → type}/Timestamp.sol +5 -0
  312. package/package.json +1 -1
  313. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  314. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  315. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
  316. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  317. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  318. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  319. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  320. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  321. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  322. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  323. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  324. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
  325. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
  326. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -968
  327. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
  328. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -665
  329. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  330. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1093
  331. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  332. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -661
  333. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
  334. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -754
  335. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
  336. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -637
  337. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  338. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1732
  339. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  340. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -805
  341. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
  342. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  343. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
  344. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  345. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  346. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  347. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  348. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  349. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1021
  350. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  351. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -689
  352. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  353. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -824
  354. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  355. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -657
  356. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  357. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -777
  358. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  359. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -649
  360. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  361. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  362. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  363. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  364. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  365. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
  366. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  367. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  368. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  369. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -521
  370. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  371. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  372. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  373. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  374. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  375. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
  376. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  377. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  378. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  379. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  380. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  381. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  382. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
  383. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
  384. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  385. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  386. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  387. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  388. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  389. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  390. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  391. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  392. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  393. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
  394. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
  395. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  396. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  397. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  398. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
  399. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  400. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  401. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  402. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  403. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  404. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  405. package/contracts/instance/base/ComponentService.sol +0 -134
  406. package/contracts/instance/service/ApplicationService.sol +0 -350
  407. package/contracts/instance/service/BundleService.sol +0 -336
  408. package/contracts/instance/service/ClaimService.sol +0 -151
  409. package/contracts/instance/service/DistributionService.sol +0 -467
  410. package/contracts/instance/service/IBundleService.sol +0 -62
  411. package/contracts/instance/service/IClaimService.sol +0 -61
  412. package/contracts/instance/service/IPoolService.sol +0 -35
  413. package/contracts/instance/service/PolicyService.sol +0 -403
  414. package/contracts/instance/service/PoolService.sol +0 -220
  415. package/contracts/instance/service/ProductService.sol +0 -241
  416. package/contracts/shared/ContractDeployerLib.sol +0 -72
  417. package/contracts/test/TestFee.sol +0 -25
  418. package/contracts/test/TestRegisterable.sol +0 -18
  419. package/contracts/test/TestRoleId.sol +0 -14
  420. package/contracts/test/TestService.sol +0 -25
  421. package/contracts/test/TestToken.sol +0 -26
  422. package/contracts/test/TestVersion.sol +0 -44
  423. package/contracts/test/TestVersionable.sol +0 -17
  424. package/contracts/test/Usdc.sol +0 -26
  425. package/contracts/types/ChainId.sol +0 -38
  426. package/contracts/types/NumberId.sol +0 -52
  427. /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
  428. /package/contracts/{types → type}/AddressSet.sol +0 -0
  429. /package/contracts/{types → type}/Blocknumber.sol +0 -0
  430. /package/contracts/{types → type}/DistributorType.sol +0 -0
  431. /package/contracts/{types → type}/Key32.sol +0 -0
  432. /package/contracts/{types → type}/NftId.sol +0 -0
  433. /package/contracts/{types → type}/Referral.sol +0 -0
  434. /package/contracts/{types → type}/RiskId.sol +0 -0
  435. /package/contracts/{types → type}/Seconds.sol +0 -0
  436. /package/contracts/{types → type}/UFixed.sol +0 -0
  437. /package/contracts/{types → type}/Version.sol +0 -0
@@ -1,35 +1,30 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
4
5
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
6
 
7
+ import {IComponent} from "../shared/IComponent.sol";
6
8
  import {IComponents} from "../instance/module/IComponents.sol";
7
9
  import {IInstance} from "../instance/IInstance.sol";
8
10
  import {IInstanceService} from "../instance/IInstanceService.sol";
9
- import {IProductService} from "../instance/service/IProductService.sol";
11
+ import {IProductService} from "../product/IProductService.sol";
10
12
  import {IRegisterable} from "../shared/IRegisterable.sol";
11
13
  import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
12
- import {NftId} from "../types/NftId.sol";
13
- import {ObjectType} from "../types/ObjectType.sol";
14
+ import {NftId} from "../type/NftId.sol";
15
+ import {ObjectType} from "../type/ObjectType.sol";
16
+ import {TokenHandler} from "../shared/TokenHandler.sol";
14
17
 
15
18
  /// @dev component base class
16
19
  /// component examples are product, distribution, pool and oracle
17
- interface IComponent is
18
- IRegisterable,
19
- ITransferInterceptor
20
+ interface IInstanceLinkedComponent is
21
+ ITransferInterceptor,
22
+ IComponent
20
23
  {
21
- error ErrorComponentNotChainNft(address caller);
22
24
  error ErrorComponentNotProductService(address caller);
23
25
  error ErrorComponentNotInstance(NftId instanceNftId);
24
26
  error ErrorComponentProductNftAlreadySet();
25
27
 
26
- error ErrorComponentWalletAddressZero();
27
- error ErrorComponentWalletAddressIsSameAsCurrent();
28
- error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
29
-
30
- event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
31
- event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
32
-
33
28
  /// @dev locks component to disable functions that may change state related to this component, the only exception is function "unlock"
34
29
  /// only component owner (nft holder) is authorizes to call this function
35
30
  function lock() external;
@@ -38,29 +33,12 @@ interface IComponent is
38
33
  /// only component owner (nft holder) is authorizes to call this function
39
34
  function unlock() external;
40
35
 
41
- /// @dev sets the wallet address for the component
42
- /// if the current wallet has tokens, these will be transferred
43
- /// if the new wallet address is externally owned, an approval from the
44
- /// owner of the external wallet for the component to move all tokens must exist
45
- function setWallet(address walletAddress) external;
46
-
47
36
  /// @dev only product service may set product nft id during registration of product setup
48
37
  function setProductNftId(NftId productNftId) external;
49
38
 
50
- /// @dev returns the name of this component
51
- /// to successfully register the component with an instance the name MUST be unique in the linked instance
52
- function getName() external view returns (string memory name);
53
-
54
- /// @dev defines which ERC20 token is used by this component
55
- function getToken() external view returns (IERC20Metadata token);
56
-
57
39
  /// @dev defines the instance to which this component is linked to
58
40
  function getInstance() external view returns (IInstance instance);
59
41
 
60
- /// @dev defines the wallet address used to hold the ERC20 tokens related to this component
61
- /// the default address is the component token address
62
- function getWallet() external view returns (address walletAddress);
63
-
64
42
  /// @dev defines the product to which this component is linked to
65
43
  /// this is only relevant for pool and distribution components
66
44
  function getProductNftId() external view returns (NftId productNftId);
@@ -4,7 +4,7 @@ pragma solidity ^0.8.20;
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
 
6
6
  import {IRegistryLinked} from "./IRegistryLinked.sol";
7
- import {NftId} from "../types/NftId.sol";
7
+ import {NftId} from "../type/NftId.sol";
8
8
 
9
9
  interface INftOwnable is
10
10
  IERC165,
@@ -4,23 +4,37 @@ pragma solidity ^0.8.20;
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
  import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
6
6
 
7
- import {IRegistry} from "../registry/IRegistry.sol";
8
- import {NftId} from "../types/NftId.sol";
9
- import {NumberId} from "../types/NumberId.sol";
7
+ import {Amount} from "../type/Amount.sol";
8
+ import {ClaimId} from "../type/ClaimId.sol";
9
+ import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
10
+ import {NftId} from "../type/NftId.sol";
11
+ import {PayoutId} from "../type/PayoutId.sol";
10
12
 
11
13
  /// @dev generic interface for contracts that need to hold policies and receive payouts
12
14
  /// GIF will notify policy holder contracts for policy creation and payout execution
13
- ///
15
+ interface IPolicyHolder is
16
+ IERC165,
17
+ IERC721Receiver,
18
+ IRegistryLinked
19
+ {
14
20
 
15
- interface IPolicyHolder is IERC165, IERC721Receiver {
21
+ /// @dev callback function that will be called after successful policy activation
22
+ /// active policies may open claims under the activated policy
23
+ function policyActivated(NftId policyNftId) external;
16
24
 
17
- /// @dev callback function that will be called after successful policy creation
18
- function policyCreatedCallback(NftId policyNftId) external;
25
+ /// @dev callback function to indicate the specified policy has expired
26
+ /// expired policies may no longer open claims
27
+ /// it is optional for products to notifiy policy holder of expired claims
28
+ function policyExpired(NftId policyNftId) external;
29
+
30
+ /// @dev callback function to notify the confirmation of the specified claim
31
+ /// active policies may open claims under the activated policy
32
+ function claimConfirmed(NftId policyNftId, ClaimId claimId, Amount amount) external;
19
33
 
20
34
  /// @dev callback function that will be called after a successful payout
21
- function payoutExecutedCallback(NftId policyNftId, NumberId payoutId, address beneficiary, uint256 amount) external;
35
+ function payoutExecuted(NftId policyNftId, PayoutId payoutId, address beneficiary, Amount amount) external;
22
36
 
23
- /// @dev determines beneficiary address that will be used in payouts targeting this contract
37
+ /// @dev determines policy and claim specific beneficiary address
24
38
  /// returned address will override GIF default where the policy nft holder is treated as beneficiary
25
- function getBeneficiary(NftId policyId, NumberId claimId) external view returns (address beneficiary);
39
+ function getBeneficiary(NftId policyNftId, ClaimId claimId) external view returns (address beneficiary);
26
40
  }
@@ -8,5 +8,4 @@ interface IRegistryLinked {
8
8
  error ErrorNotRegistry(address registryAddress);
9
9
 
10
10
  function getRegistry() external view returns (IRegistry);
11
- function getRegistryAddress() external view returns (address);
12
11
  }
@@ -1,18 +1,18 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {VersionPart} from "../types/Version.sol";
5
- import {ObjectType} from "../types/ObjectType.sol";
4
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
5
 
7
6
  import {IRegisterable} from "./IRegisterable.sol";
8
7
  import {IVersionable} from "./IVersionable.sol";
8
+ import {ObjectType} from "../type/ObjectType.sol";
9
9
 
10
10
  interface IService is
11
11
  IRegisterable,
12
- IVersionable
12
+ IVersionable,
13
+ IAccessManaged
13
14
  {
14
- error ErrorIServiceCallerUnknown(address caller);
15
-
15
+ error ErrorServiceNotImplemented();
16
+
16
17
  function getDomain() external pure returns(ObjectType serviceDomain);
17
- function getMajorVersion() external view returns(VersionPart majorVersion);
18
18
  }
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Version} from "../types/Version.sol";
4
+ import {Version} from "../type/Version.sol";
5
5
 
6
6
  /// IMPORTANT
7
7
  // Upgradeable contract MUST:
@@ -1,33 +1,34 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
5
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
4
  import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
7
+ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
7
8
 
8
- import {IComponent} from "./IComponent.sol";
9
+ import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
9
10
  import {IComponents} from "../instance/module/IComponents.sol";
10
- import {IProductService} from "../instance/service/IProductService.sol";
11
11
  import {IInstanceService} from "../instance/IInstanceService.sol";
12
12
  import {IInstance} from "../instance/IInstance.sol";
13
13
  import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
14
14
  import {InstanceReader} from "../instance/InstanceReader.sol";
15
15
  import {IRegistry} from "../registry/IRegistry.sol";
16
- import {NftId} from "../types/NftId.sol";
17
- import {ObjectType, INSTANCE, PRODUCT} from "../types/ObjectType.sol";
18
- import {VersionPart} from "../types/Version.sol";
16
+ import {NftId} from "../type/NftId.sol";
17
+ import {ObjectType, INSTANCE, PRODUCT} from "../type/ObjectType.sol";
18
+ import {VersionPart} from "../type/Version.sol";
19
19
  import {Registerable} from "../shared/Registerable.sol";
20
- import {RoleId, RoleIdLib} from "../types/RoleId.sol";
20
+ import {RoleId, RoleIdLib} from "../type/RoleId.sol";
21
21
  import {IAccess} from "../instance/module/IAccess.sol";
22
- import {VersionPart} from "../types/Version.sol";
22
+ import {TokenHandler} from "../shared/TokenHandler.sol";
23
+ import {VersionPart} from "../type/Version.sol";
23
24
 
24
25
  // TODO discuss to inherit from oz accessmanaged
25
26
  // then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
26
27
  // same pattern as for Service which is also upgradeable
27
- abstract contract Component is
28
+ abstract contract InstanceLinkedComponent is
28
29
  Registerable,
29
- IComponent,
30
- AccessManagedUpgradeable
30
+ AccessManagedUpgradeable,
31
+ IInstanceLinkedComponent
31
32
  {
32
33
  // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Component.sol")) - 1)) & ~bytes32(uint256(0xff));
33
34
  bytes32 public constant COMPONENT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
@@ -90,17 +91,32 @@ abstract contract Component is
90
91
  $._wallet = address(this);
91
92
  $._token = IERC20Metadata(token);
92
93
 
93
- registerInterface(type(IComponent).interfaceId);
94
+ registerInterface(type(IAccessManaged).interfaceId);
95
+ registerInterface(type(IInstanceLinkedComponent).interfaceId);
94
96
  }
95
97
 
96
- function lock() external onlyOwner override {
98
+ function lock() external onlyOwner {
97
99
  IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
98
100
  }
99
101
 
100
- function unlock() external onlyOwner override {
102
+ function unlock() external onlyOwner {
101
103
  IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
102
104
  }
103
105
 
106
+ function approveTokenHandler(uint256 spendingLimitAmount) external onlyOwner {
107
+ IComponents.ComponentInfo memory info = getComponentInfo();
108
+
109
+ if(info.wallet != address(this)) {
110
+ revert ErrorComponentWalletNotComponent();
111
+ }
112
+
113
+ info.token.approve(
114
+ address(info.tokenHandler),
115
+ spendingLimitAmount);
116
+
117
+ emit LogComponentTokenHandlerApproved(address(info.token), spendingLimitAmount);
118
+ }
119
+
104
120
  function setWallet(address newWallet)
105
121
  external
106
122
  override
@@ -195,6 +211,10 @@ abstract contract Component is
195
211
  return _getComponentStorage()._token;
196
212
  }
197
213
 
214
+ function getTokenHandler() public view returns (TokenHandler tokenHandler) {
215
+ return getComponentInfo().tokenHandler;
216
+ }
217
+
198
218
  function isNftInterceptor() public view override returns(bool isInterceptor) {
199
219
  return _getComponentStorage()._isNftInterceptor;
200
220
  }
@@ -1,11 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- // import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
-
6
4
  import {ERC165} from "./ERC165.sol";
7
5
  import {INftOwnable} from "./INftOwnable.sol";
8
- import {NftId} from "../types/NftId.sol";
6
+ import {NftId} from "../type/NftId.sol";
9
7
  import {RegistryLinked} from "./RegistryLinked.sol";
10
8
 
11
9
  contract NftOwnable is
@@ -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,7 +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
+
7
9
  /// @dev token specific transfer helper
10
+ /// a default token contract is provided via contract constructor
8
11
  /// relies internally on oz SafeERC20.safeTransferFrom
9
12
  contract TokenHandler {
10
13
  IERC20Metadata private _token;
@@ -13,16 +16,38 @@ contract TokenHandler {
13
16
  _token = IERC20Metadata(token);
14
17
  }
15
18
 
19
+ /// @dev transfer amount default tokens
16
20
  function transfer(
17
21
  address from,
18
22
  address to,
19
- uint256 amount
23
+ Amount amount
24
+ )
25
+ external
26
+ {
27
+ SafeERC20.safeTransferFrom(
28
+ _token,
29
+ from,
30
+ to,
31
+ amount.toInt());
32
+ }
33
+
34
+ /// @dev transfer amount of the specified token
35
+ function safeTransferFrom(
36
+ address token,
37
+ address from,
38
+ address to,
39
+ Amount amount
20
40
  )
21
41
  external
22
42
  {
23
- SafeERC20.safeTransferFrom(_token, from, to, amount);
43
+ SafeERC20.safeTransferFrom(
44
+ IERC20Metadata(token),
45
+ from,
46
+ to,
47
+ amount.toInt());
24
48
  }
25
49
 
50
+ /// @dev returns the default token defined for this TokenHandler
26
51
  function getToken()
27
52
  external
28
53
  view
@@ -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,30 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Amount} from "../type/Amount.sol";
5
+ import {IComponent} from "../shared/IComponent.sol";
6
+ import {IVersionable} from "../shared/IVersionable.sol";
7
+ import {NftId} from "../type/NftId.sol";
8
+ import {ObjectType} from "../type/ObjectType.sol";
9
+ import {Timestamp} from "../type/Timestamp.sol";
10
+
11
+ interface IStaking is
12
+ IComponent,
13
+ IVersionable
14
+ {
15
+
16
+ // info for individual stake
17
+ struct StakeInfo {
18
+ NftId nftId;
19
+ NftId targetNftId;
20
+ Amount stakeAmount;
21
+ Amount rewardAmount;
22
+ Timestamp lockedUntil;
23
+ }
24
+
25
+ struct InstanceTvlInfo {
26
+ NftId instanceNftid;
27
+ address token;
28
+ Amount tvlAmount;
29
+ }
30
+ }