@etherisc/gif-next 0.0.2-abde86b-349 → 0.0.2-ac4bee9-682

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 (408) hide show
  1. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +96 -37
  3. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  4. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
  6. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  7. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -13
  9. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
  11. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  13. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  14. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +139 -157
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +77 -17
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +102 -96
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +152 -86
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +104 -60
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +92 -81
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +29 -0
  31. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  32. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  33. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  34. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1429 -0
  35. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
  37. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1979 -0
  39. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
  41. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  43. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +151 -132
  45. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +133 -127
  47. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +249 -188
  49. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +530 -229
  51. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  52. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +53 -31
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +31 -86
  57. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  58. package/artifacts/contracts/instance/Instance.sol/Instance.json +78 -40
  59. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +148 -118
  61. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  62. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +113 -135
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +91 -133
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +72 -40
  69. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +172 -111
  71. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  73. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  76. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  78. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  80. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  86. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  87. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  88. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +121 -139
  89. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  90. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +77 -17
  91. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  92. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +87 -76
  94. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
  96. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +97 -91
  98. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  99. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +102 -47
  100. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +72 -36
  102. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  103. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +97 -119
  104. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  105. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
  106. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  107. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +205 -103
  108. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +108 -60
  110. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  111. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +72 -15
  112. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  113. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +87 -115
  114. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  115. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +213 -195
  116. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  117. package/artifacts/contracts/pool/Pool.sol/Pool.json +97 -130
  118. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  119. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +294 -255
  120. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +83 -47
  122. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  123. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +82 -32
  124. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +69 -33
  126. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  127. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +142 -92
  128. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  129. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +77 -17
  130. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  131. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +175 -82
  132. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  133. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +102 -58
  134. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  135. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +29 -0
  136. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  137. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +56 -0
  138. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  139. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +65 -1
  140. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  141. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +80 -51
  142. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  143. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +128 -73
  144. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  145. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +29 -0
  146. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  147. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +154 -61
  148. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  149. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +87 -47
  150. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  151. package/artifacts/contracts/product/PricingService.sol/PricingService.json +165 -107
  152. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  153. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +85 -45
  154. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  155. package/artifacts/contracts/product/Product.sol/Product.json +138 -88
  156. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  157. package/artifacts/contracts/product/RiskService.sol/RiskService.json +76 -26
  158. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  159. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +66 -30
  160. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  161. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  162. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  163. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +72 -15
  164. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  165. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
  166. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  167. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  168. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  169. package/artifacts/contracts/registry/Registry.sol/Registry.json +116 -51
  170. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  171. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +206 -165
  172. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  173. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +161 -61
  174. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  175. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +65 -29
  176. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  177. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  178. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  179. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +123 -225
  180. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  181. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  182. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  183. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  184. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  185. package/artifacts/contracts/shared/Component.sol/Component.json +76 -66
  186. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  187. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +425 -155
  188. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  189. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +103 -63
  190. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  191. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +42 -0
  192. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  193. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +21 -2
  194. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  195. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +66 -51
  196. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  197. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +388 -19
  198. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  199. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +87 -76
  200. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  201. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  202. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  203. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  204. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  205. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  206. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  207. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  208. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
  209. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  210. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  211. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  212. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  213. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  214. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +97 -91
  215. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  216. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  217. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  218. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  219. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  220. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  221. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  222. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +18 -2
  223. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  224. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  225. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  226. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +66 -8
  227. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  228. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  229. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  230. package/artifacts/contracts/shared/Service.sol/Service.json +42 -0
  231. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  232. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +388 -35
  233. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  234. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
  235. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  236. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
  237. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  238. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +84 -87
  239. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  240. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  241. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  242. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
  243. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  244. package/artifacts/contracts/staking/Staking.sol/Staking.json +154 -166
  245. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  246. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  247. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  248. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +81 -51
  249. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  250. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -12
  251. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  252. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +82 -53
  253. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  254. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +69 -33
  255. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  256. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +144 -103
  257. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  258. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  259. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  260. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  262. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  265. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  267. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  269. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  270. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  271. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  272. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  273. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  274. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  275. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  276. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  277. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  278. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  279. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  280. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  281. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  282. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  283. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  284. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  285. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  286. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  287. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  292. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  298. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  299. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  300. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +44 -12
  301. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  302. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  303. package/contracts/authorization/AccessAdmin.sol +65 -61
  304. package/contracts/authorization/Authorization.sol +106 -38
  305. package/contracts/authorization/IAccess.sol +1 -0
  306. package/contracts/authorization/IAccessAdmin.sol +4 -2
  307. package/contracts/authorization/IAuthorization.sol +13 -7
  308. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  309. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  310. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  311. package/contracts/distribution/BasicDistribution.sol +2 -1
  312. package/contracts/distribution/Distribution.sol +6 -16
  313. package/contracts/distribution/DistributionService.sol +55 -36
  314. package/contracts/distribution/IDistributionComponent.sol +1 -1
  315. package/contracts/examples/fire/DamageLevel.sol +59 -0
  316. package/contracts/examples/fire/FirePool.sol +86 -0
  317. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  318. package/contracts/examples/fire/FireProduct.sol +431 -0
  319. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  320. package/contracts/examples/fire/FireUSD.sol +26 -0
  321. package/contracts/examples/unpermissioned/SimpleDistribution.sol +12 -4
  322. package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -4
  323. package/contracts/examples/unpermissioned/SimplePool.sol +38 -6
  324. package/contracts/examples/unpermissioned/SimpleProduct.sol +17 -23
  325. package/contracts/instance/IInstance.sol +4 -1
  326. package/contracts/instance/IInstanceService.sol +2 -23
  327. package/contracts/instance/Instance.sol +20 -17
  328. package/contracts/instance/InstanceAdmin.sol +17 -28
  329. package/contracts/instance/InstanceAuthorizationV3.sol +9 -19
  330. package/contracts/instance/InstanceReader.sol +10 -34
  331. package/contracts/instance/InstanceService.sol +29 -80
  332. package/contracts/instance/module/IComponents.sol +7 -5
  333. package/contracts/instance/module/IPolicy.sol +2 -1
  334. package/contracts/oracle/BasicOracle.sol +0 -1
  335. package/contracts/oracle/IOracleService.sol +2 -1
  336. package/contracts/oracle/Oracle.sol +4 -15
  337. package/contracts/oracle/OracleService.sol +47 -36
  338. package/contracts/pool/BasicPool.sol +33 -24
  339. package/contracts/pool/BasicPoolAuthorization.sol +12 -2
  340. package/contracts/pool/BundleService.sol +88 -41
  341. package/contracts/pool/IBundleService.sol +11 -5
  342. package/contracts/pool/IPoolComponent.sol +1 -7
  343. package/contracts/pool/IPoolService.sol +25 -24
  344. package/contracts/pool/Pool.sol +118 -126
  345. package/contracts/pool/PoolService.sol +203 -131
  346. package/contracts/product/ApplicationService.sol +9 -1
  347. package/contracts/product/BasicProduct.sol +8 -12
  348. package/contracts/product/BasicProductAuthorization.sol +0 -1
  349. package/contracts/product/ClaimService.sol +99 -58
  350. package/contracts/product/IClaimService.sol +2 -1
  351. package/contracts/product/IPolicyService.sol +6 -1
  352. package/contracts/product/IPricingService.sol +9 -9
  353. package/contracts/product/IProductComponent.sol +6 -0
  354. package/contracts/product/PolicyService.sol +76 -27
  355. package/contracts/product/PricingService.sol +8 -8
  356. package/contracts/product/Product.sol +56 -56
  357. package/contracts/registry/ChainNft.sol +6 -9
  358. package/contracts/registry/IRegistry.sol +6 -3
  359. package/contracts/registry/IRegistryService.sol +6 -4
  360. package/contracts/registry/ITransferInterceptor.sol +1 -2
  361. package/contracts/registry/Registry.sol +22 -4
  362. package/contracts/registry/RegistryAdmin.sol +29 -31
  363. package/contracts/registry/RegistryService.sol +37 -55
  364. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  365. package/contracts/registry/ReleaseRegistry.sol +202 -208
  366. package/contracts/registry/ServiceAuthorizationV3.sol +24 -20
  367. package/contracts/shared/Component.sol +58 -97
  368. package/contracts/shared/ComponentService.sol +285 -147
  369. package/contracts/shared/ComponentVerifyingService.sol +27 -15
  370. package/contracts/shared/ContractLib.sol +17 -1
  371. package/contracts/shared/IComponent.sol +10 -13
  372. package/contracts/shared/IComponentService.sol +38 -16
  373. package/contracts/shared/IInstanceLinkedComponent.sol +3 -11
  374. package/contracts/shared/ILifecycle.sol +3 -1
  375. package/contracts/shared/INftOwnable.sol +2 -0
  376. package/contracts/shared/IRegisterable.sol +11 -0
  377. package/contracts/shared/InstanceLinkedComponent.sol +66 -32
  378. package/contracts/shared/KeyValueStore.sol +1 -1
  379. package/contracts/shared/Lifecycle.sol +15 -4
  380. package/contracts/shared/NftOwnable.sol +23 -3
  381. package/contracts/shared/Registerable.sol +15 -7
  382. package/contracts/shared/RegistryLinked.sol +6 -12
  383. package/contracts/shared/Service.sol +4 -7
  384. package/contracts/shared/TokenHandler.sol +324 -66
  385. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  386. package/contracts/staking/IStaking.sol +9 -4
  387. package/contracts/staking/IStakingService.sol +0 -3
  388. package/contracts/staking/Staking.sol +31 -24
  389. package/contracts/staking/StakingReader.sol +12 -5
  390. package/contracts/staking/StakingService.sol +69 -23
  391. package/contracts/type/Amount.sol +15 -0
  392. package/contracts/type/ClaimId.sol +6 -1
  393. package/contracts/type/NftId.sol +1 -0
  394. package/contracts/type/ObjectType.sol +1 -0
  395. package/contracts/type/RiskId.sol +16 -2
  396. package/contracts/type/RoleId.sol +0 -12
  397. package/contracts/type/StateId.sol +14 -1
  398. package/contracts/upgradeability/ProxyManager.sol +2 -1
  399. package/package.json +4 -3
  400. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  401. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  402. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  403. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  404. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  405. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  406. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  407. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  408. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -5,14 +5,13 @@ import {IInstance} from "../instance/IInstance.sol";
5
5
  import {InstanceReader} from "../instance/InstanceReader.sol";
6
6
  import {IRegistry} from "../registry/IRegistry.sol";
7
7
  import {NftId} from "../type/NftId.sol";
8
- import {ObjectType, COMPONENT, DISTRIBUTION, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
8
+ import {ObjectType, COMPONENT, DISTRIBUTION, ORACLE, POOL, PRODUCT, STAKING} from "../type/ObjectType.sol";
9
9
  import {Service} from "../shared/Service.sol";
10
10
 
11
11
 
12
12
  abstract contract ComponentVerifyingService is
13
13
  Service
14
14
  {
15
-
16
15
  error ErrorComponentVerifyingServiceComponentTypeInvalid(NftId componentNftId, ObjectType expectedType, ObjectType actualType);
17
16
  error ErrorComponentVerifyingServiceComponentIsLocked(NftId componentNftId);
18
17
 
@@ -28,12 +27,12 @@ abstract contract ComponentVerifyingService is
28
27
  view
29
28
  returns(
30
29
  NftId componentNftId,
31
- IRegistry.ObjectInfo memory componentInfo,
30
+ IRegistry.ObjectInfo memory objectInfo,
32
31
  IInstance instance
33
32
  )
34
33
  {
35
34
  componentNftId = getRegistry().getNftIdForAddress(msg.sender);
36
- (componentInfo, instance) = _getAndVerifyComponentInfo(
35
+ (objectInfo, instance) = _getAndVerifyComponentInfo(
37
36
  componentNftId,
38
37
  expectedType,
39
38
  true); // only active
@@ -83,7 +82,15 @@ abstract contract ComponentVerifyingService is
83
82
  }
84
83
  }
85
84
 
86
- instance = _getInstance(info.parentNftId);
85
+ if (info.objectType == STAKING()) {
86
+ return (info, instance);
87
+ }
88
+
89
+ if (info.objectType == PRODUCT()) {
90
+ instance = _getInstance(registry, info.parentNftId);
91
+ } else {
92
+ instance = _getInstanceForComponent(registry, info.parentNftId);
93
+ }
87
94
 
88
95
  // ensure component is not locked
89
96
  if (onlyActive) {
@@ -94,23 +101,28 @@ abstract contract ComponentVerifyingService is
94
101
  }
95
102
 
96
103
 
97
- /// @dev returns the linked product nft id for the specified component
98
- function _getProductNftId(
99
- InstanceReader instanceReader,
100
- NftId componentNftId
101
- )
104
+ function _getInstanceForComponent(IRegistry registry, NftId productNftId)
102
105
  internal
103
- virtual
104
106
  view
105
- returns (NftId productNftId)
107
+ returns (IInstance instance)
106
108
  {
107
- return instanceReader.getComponentInfo(componentNftId).productNftId;
109
+ return _getInstance(
110
+ registry,
111
+ registry.getObjectInfo(
112
+ productNftId).parentNftId);
113
+ }
114
+
115
+
116
+ /// @dev returns the product nft id from the registry.
117
+ /// assumes the component nft id is valid and represents a product linked component.
118
+ function _getProductNftId(NftId componentNftId) internal view returns (NftId productNftId) {
119
+ productNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
108
120
  }
109
121
 
110
122
 
111
123
  /// @dev returns an IInstance contract reference for the specified instance nft id
112
- function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
124
+ function _getInstance(IRegistry registry, NftId instanceNftId) internal view returns (IInstance) {
113
125
  return IInstance(
114
- getRegistry().getObjectAddress(instanceNftId));
126
+ registry.getObjectAddress(instanceNftId));
115
127
  }
116
128
  }
@@ -5,6 +5,7 @@ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165C
5
5
  import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
6
 
7
7
  import {IPolicyHolder} from "./IPolicyHolder.sol";
8
+ import {IRegistry} from "../registry/IRegistry.sol";
8
9
 
9
10
  library ContractLib {
10
11
 
@@ -12,6 +13,7 @@ library ContractLib {
12
13
  return ERC165Checker.supportsInterface(target, type(IPolicyHolder).interfaceId);
13
14
  }
14
15
 
16
+
15
17
  function isAccessManaged(address target) external view returns (bool) {
16
18
  if (!isContract(target)) {
17
19
  return false;
@@ -24,7 +26,21 @@ library ContractLib {
24
26
  return success;
25
27
  }
26
28
 
29
+
30
+ function isRegistry(address registry) public view returns (bool) {
31
+ if (!isContract(registry)) {
32
+ return false;
33
+ }
34
+
35
+ return supportsInterface(registry, type(IRegistry).interfaceId);
36
+ }
37
+
38
+
27
39
  function isContract(address target) public view returns (bool) {
40
+ if (target == address(0)) {
41
+ return false;
42
+ }
43
+
28
44
  uint256 size;
29
45
  assembly {
30
46
  size := extcodesize(target)
@@ -32,7 +48,7 @@ library ContractLib {
32
48
  return size > 0;
33
49
  }
34
50
 
35
- function supportsInterface(address target, bytes4 interfaceId) external view returns (bool) {
51
+ function supportsInterface(address target, bytes4 interfaceId) public view returns (bool) {
36
52
  return ERC165Checker.supportsInterface(target, interfaceId);
37
53
  }
38
54
  }
@@ -17,29 +17,26 @@ interface IComponent is
17
17
  IRegisterable,
18
18
  ITransferInterceptor
19
19
  {
20
+ error ErrorComponentProductNftIdZero();
21
+ error ErrorComponentProductNftIdNonzero();
22
+ error ErrorComponentNameLengthZero();
23
+
20
24
  error ErrorComponentNotChainNft(address caller);
21
25
 
26
+ error ErrorComponentTokenAddressNonzero();
22
27
  error ErrorComponentTokenAddressZero();
23
- error ErrorComponentNameLengthZero();
24
28
  error ErrorComponentWalletAddressZero();
25
29
  error ErrorComponentWalletAddressIsSameAsCurrent();
26
30
  error ErrorComponentWalletNotComponent();
27
31
 
28
32
  event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
29
33
  event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
30
- event LogComponentTokenHandlerApproved(address token, Amount limit);
31
-
32
- /// @dev approves token hanlder to spend up to the specified amount of tokens
33
- /// reverts if component wallet is not component itself
34
- /// only component owner (nft holder) is authorizes to call this function
35
- function approveTokenHandler(Amount spendingLimitAmount) external;
34
+ event LogComponentTokenHandlerApproved(address tokenHandler, address token, Amount limit, bool isMaxAmount);
36
35
 
37
- /// @dev sets the wallet address for the component.
38
- /// if the current wallet has tokens, these will be transferred.
39
- /// if the new wallet address is externally owned, an approval from the
40
- /// owner of the external wallet to the tokenhandler of the component that
41
- /// covers the current component balance must exist
42
- function setWallet(address walletAddress) external;
36
+ /// @dev Approves token hanlder to spend up to the specified amount of tokens.
37
+ /// Reverts if component wallet is not token handler itself.
38
+ /// Only component owner (nft holder) is authorizes to call this function.
39
+ function approveTokenHandler(IERC20Metadata token, Amount spendingLimitAmount) external;
43
40
 
44
41
  /// @dev returns the name of this component
45
42
  /// to successfully register the component with an instance the name MUST be unique in the linked instance
@@ -1,19 +1,39 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
4
5
 
5
6
  import {Amount} from "../type/Amount.sol";
6
7
  import {Fee} from "../type/Fee.sol";
7
8
  import {InstanceStore} from "../instance/InstanceStore.sol";
8
9
  import {IService} from "../shared/IService.sol";
9
10
  import {NftId} from "../type/NftId.sol";
11
+ import {ObjectType} from "../type/ObjectType.sol";
10
12
  import {UFixed} from "../type/UFixed.sol";
13
+ import {VersionPart} from "../type/Version.sol";
11
14
 
12
15
  /// @dev component base class
13
16
  /// component examples are staking, product, distribution, pool and oracle
14
17
  interface IComponentService is
15
18
  IService
16
19
  {
20
+ error ErrorComponentServiceNotInstanceLinkedComponent(address component);
21
+ error ErrorComponentServiceSenderNotRegistered(address sender);
22
+ error ErrorComponentServiceNotComponent(address component);
23
+ error ErrorComponentServiceTypeNotSupported(address component, ObjectType invalidType);
24
+ error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
25
+ error ErrorComponentServiceAlreadyRegistered(address component);
26
+ error ErrorComponentServiceReleaseMismatch(address component, VersionPart componentRelease, VersionPart parentRelease);
27
+ error ErrorComponentServiceSenderNotComponentParent(NftId senderNftId, NftId compnentParentNftId);
28
+ error ErrorComponentServiceParentNotInstance(NftId nftId, ObjectType objectType);
29
+ error ErrorComponentServiceParentNotProduct(NftId nftId, ObjectType objectType);
30
+
31
+ error ErrorProductServiceNoDistributionExpected(NftId productNftId);
32
+ error ErrorProductServiceDistributionAlreadyRegistered(NftId productNftId, NftId distributionNftId);
33
+ error ErrorProductServiceNoOraclesExpected(NftId productNftId);
34
+ error ErrorProductServiceOraclesAlreadyRegistered(NftId productNftId, uint8 expectedOracles);
35
+ error ErrorProductServicePoolAlreadyRegistered(NftId productNftId, NftId poolNftId);
36
+
17
37
  error ErrorComponentServiceNewWalletAddressZero();
18
38
  error ErrorComponentServiceWalletAddressZero();
19
39
  error ErrorComponentServiceWalletAddressIsSameAsCurrent();
@@ -22,7 +42,9 @@ interface IComponentService is
22
42
  error ErrorComponentServiceWithdrawAmountExceedsLimit(Amount withdrawnAmount, Amount withdrawLimit);
23
43
  error ErrorComponentServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
24
44
 
45
+ event LogComponentServiceRegistered(NftId instanceNftId, NftId componentNftId, ObjectType componentType, address component, address token, address initialOwner);
25
46
  event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
47
+ event LogComponentServiceWalletTokensTransferred(NftId componentNftId, address currentWallet, address newWallet, uint256 currentBalance);
26
48
  event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
27
49
  event LogComponentServiceProductFeesUpdated(NftId productNftId);
28
50
  event LogComponentServiceDistributionFeesUpdated(NftId distributionNftId);
@@ -38,13 +60,21 @@ interface IComponentService is
38
60
 
39
61
  //-------- component ----------------------------------------------------//
40
62
 
41
- /// @dev sets the components associated wallet address
63
+ /// @dev Approves the callers token handler to spend up to the specified amount of tokens.
64
+ /// Reverts if the component's token handler wallet is not the token handler itself.
65
+ function approveTokenHandler(IERC20Metadata token, Amount amount) external;
66
+
67
+ /// @dev Approves the staking token handler.
68
+ /// Reverts if the staking token handler wallet is not the token handler itself.
69
+ function approveStakingTokenHandler(IERC20Metadata token, Amount amount) external;
70
+
71
+ /// @dev Sets the components associated wallet address
42
72
  function setWallet(address newWallet) external;
43
73
 
44
- /// @dev locks the component associated with the caller
74
+ /// @dev Locks the component associated with the caller
45
75
  function lock() external;
46
76
 
47
- /// @dev unlocks the component associated with the caller
77
+ /// @dev Unlocks the component associated with the caller
48
78
  function unlock() external;
49
79
 
50
80
  /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
@@ -52,10 +82,13 @@ interface IComponentService is
52
82
  /// @return withdrawnAmount the amount that was actually withdrawn
53
83
  function withdrawFees(Amount withdrawAmount) external returns (Amount withdrawnAmount);
54
84
 
85
+ /// @dev Registers the provided component with the product (sender)
86
+ function registerComponent(address component) external returns (NftId componentNftId);
87
+
55
88
  //-------- product ------------------------------------------------------//
56
89
 
57
- /// @dev registers the sending component as a product component
58
- function registerProduct() external;
90
+ /// @dev Registers the specified product component for the instance (sender)
91
+ function registerProduct(address product) external returns (NftId productNftId);
59
92
 
60
93
  function setProductFees(
61
94
  Fee memory productFee, // product fee on net premium
@@ -67,9 +100,6 @@ interface IComponentService is
67
100
 
68
101
  //-------- distribution -------------------------------------------------//
69
102
 
70
- /// @dev registers the sending component as a distribution component
71
- function registerDistribution() external;
72
-
73
103
  function setDistributionFees(
74
104
  Fee memory distributionFee, // distribution fee for sales that do not include commissions
75
105
  Fee memory minDistributionOwnerFee // min fee required by distribution owner (not including commissions for distributors)
@@ -82,16 +112,8 @@ interface IComponentService is
82
112
  function increaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
83
113
  function decreaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
84
114
 
85
- //-------- oracle -------------------------------------------------------//
86
-
87
- /// @dev registers the sending component as an oracle component
88
- function registerOracle() external;
89
-
90
115
  //-------- pool ---------------------------------------------------------//
91
116
 
92
- /// @dev registers the sending component as a pool component
93
- function registerPool() external;
94
-
95
117
  function setPoolFees(
96
118
  Fee memory poolFee, // pool fee on net premium
97
119
  Fee memory stakingFee, // pool fee on staked capital from investor
@@ -9,19 +9,15 @@ import {IComponent} from "../shared/IComponent.sol";
9
9
  import {IAuthorization} from "../authorization/IAuthorization.sol";
10
10
  import {IInstance} from "../instance/IInstance.sol";
11
11
  import {NftId} from "../type/NftId.sol";
12
+ import {ObjectType} from "../type/ObjectType.sol";
12
13
 
13
14
  /// @dev component base class
14
15
  /// component examples are product, distribution, pool and oracle
15
16
  interface IInstanceLinkedComponent is
16
17
  IComponent
17
18
  {
18
- error ErrorComponentNotInstance(NftId instanceNftId);
19
- error ErrorComponentProductNftAlreadySet();
20
-
21
- /// @dev registers this component with the registry and instance.
22
- /// a component may only be linked once
23
- /// only initial component owner (nft holder) is authorizes to call this function
24
- function register() external;
19
+ error ErrorInstanceLinkedComponentTypeMismatch(ObjectType requiredType, ObjectType objectType);
20
+ error ErrorInstanceLinkedComponentNotProduct(NftId nftId, ObjectType objectType);
25
21
 
26
22
  /// @dev locks component to disable functions that may change state related to this component, the only exception is function "unlock"
27
23
  /// only component owner (nft holder) is authorizes to call this function
@@ -42,8 +38,4 @@ interface IInstanceLinkedComponent is
42
38
  /// @dev returns the initial component authorization specification.
43
39
  function getAuthorization() external view returns (IAuthorization authorization);
44
40
 
45
- /// @dev defines the product to which this component is linked to
46
- /// this is only relevant for pool and distribution components
47
- function getProductNftId() external view returns (NftId productNftId);
48
-
49
41
  }
@@ -6,8 +6,10 @@ import {StateId} from "../type/StateId.sol";
6
6
 
7
7
  interface ILifecycle {
8
8
 
9
- error ErrorNoLifecycle(ObjectType objectType);
9
+ error ErrorNoLifecycle(address contractAddress, ObjectType objectType);
10
+ error ErrorFromStateMissmatch(address contractAddress, ObjectType objectType, StateId actual, StateId required);
10
11
  error ErrorInvalidStateTransition(
12
+ address contractAddress,
11
13
  ObjectType objectType,
12
14
  StateId fromStateId,
13
15
  StateId toStateId
@@ -5,6 +5,7 @@ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
 
6
6
  import {IRegistryLinked} from "./IRegistryLinked.sol";
7
7
  import {NftId} from "../type/NftId.sol";
8
+ import {ObjectType} from "../type/ObjectType.sol";
8
9
 
9
10
  interface INftOwnable is
10
11
  IERC165,
@@ -12,6 +13,7 @@ interface INftOwnable is
12
13
  {
13
14
  error ErrorNftOwnableInitialOwnerZero();
14
15
  error ErrorNftOwnableNotOwner(address account);
16
+ error ErrorNftOwnableInvalidType(NftId nftId, ObjectType expectedObjectType);
15
17
 
16
18
  error ErrorNftOwnableAlreadyLinked(NftId nftId);
17
19
  error ErrorNftOwnableContractNotRegistered(address contractAddress);
@@ -3,11 +3,22 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {INftOwnable} from "./INftOwnable.sol";
5
5
  import {IRegistry} from "../registry/IRegistry.sol";
6
+ import {VersionPart} from "../type/Version.sol";
6
7
 
8
+ /// @title IRegisterable
9
+ /// @dev Marks contracts that are intended to be registered in the registry.
10
+ ///
7
11
  interface IRegisterable is
8
12
  INftOwnable
9
13
  {
14
+ /// @dev retuns the GIF release version for this contract.
15
+ /// This
16
+ function getRelease() external pure returns (VersionPart release);
10
17
 
18
+ /// @dev retuns the object info relevant for registering for this contract
19
+ /// IMPORTANT information returned by this function may only be used
20
+ /// before the contract is registered in the registry.
21
+ /// Once registered this information MUST only be accessed via the registry.
11
22
  function getInitialInfo()
12
23
  external
13
24
  view
@@ -17,7 +17,7 @@ import {IInstance} from "../instance/IInstance.sol";
17
17
  import {InstanceReader} from "../instance/InstanceReader.sol";
18
18
  import {IRegistry} from "../registry/IRegistry.sol";
19
19
  import {NftId} from "../type/NftId.sol";
20
- import {ObjectType, COMPONENT, INSTANCE} from "../type/ObjectType.sol";
20
+ import {ObjectType, COMPONENT, INSTANCE, PRODUCT} from "../type/ObjectType.sol";
21
21
  import {VersionPart} from "../type/Version.sol";
22
22
  import {RoleId, RoleIdLib} from "../type/RoleId.sol";
23
23
  import {IAccess} from "../instance/module/IAccess.sol";
@@ -48,18 +48,6 @@ abstract contract InstanceLinkedComponent is
48
48
  IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
49
49
  }
50
50
 
51
- function getInstance() public view override returns (IInstance instance) {
52
- return _getInstanceLinkedComponentStorage()._instance;
53
- }
54
-
55
- function getProductNftId() public view override returns (NftId productNftId) {
56
- return getComponentInfo().productNftId;
57
- }
58
-
59
- function getAuthorization() external view returns (IAuthorization authorization) {
60
- return _getInstanceLinkedComponentStorage()._initialAuthorization;
61
- }
62
-
63
51
  /// @inheritdoc IInstanceLinkedComponent
64
52
  function withdrawFees(Amount amount)
65
53
  external
@@ -71,6 +59,16 @@ abstract contract InstanceLinkedComponent is
71
59
  return _withdrawFees(amount);
72
60
  }
73
61
 
62
+ /// @inheritdoc IInstanceLinkedComponent
63
+ function getInstance() public view override returns (IInstance instance) {
64
+ return _getInstanceLinkedComponentStorage()._instance;
65
+ }
66
+
67
+ /// @inheritdoc IInstanceLinkedComponent
68
+ function getAuthorization() external view returns (IAuthorization authorization) {
69
+ return _getInstanceLinkedComponentStorage()._initialAuthorization;
70
+ }
71
+
74
72
  function _getInstanceLinkedComponentStorage() private pure returns (InstanceLinkedComponentStorage storage $) {
75
73
  assembly {
76
74
  $.slot := INSTANCE_LINKED_COMPONENT_LOCATION_V1
@@ -79,50 +77,94 @@ abstract contract InstanceLinkedComponent is
79
77
 
80
78
  function _initializeInstanceLinkedComponent(
81
79
  address registry,
82
- NftId instanceNftId,
80
+ NftId parentNftId,
83
81
  string memory name,
84
82
  address token,
85
83
  ObjectType componentType,
86
84
  IAuthorization authorization,
87
85
  bool isInterceptor,
88
86
  address initialOwner,
89
- bytes memory registryData, // writeonly data that will saved in the object info record of the registry
90
87
  bytes memory componentData // data that will saved with the component info in the instance store
91
88
  )
92
89
  internal
93
90
  virtual
94
91
  onlyInitializing()
95
92
  {
93
+ // validate registry, nft ids and get parent nft id
94
+ NftId instanceNftId = _checkAndGetInstanceNftId(
95
+ registry,
96
+ parentNftId,
97
+ componentType);
98
+
96
99
  // set and check linked instance
97
100
  InstanceLinkedComponentStorage storage $ = _getInstanceLinkedComponentStorage();
98
101
  $._instance = IInstance(
99
102
  IRegistry(registry).getObjectAddress(instanceNftId));
100
103
 
101
- if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
102
- revert ErrorComponentNotInstance(instanceNftId);
103
- }
104
-
104
+ // set component specific parameters
105
105
  _initializeComponent(
106
- $._instance.authority(),
106
+ $._instance.authority(), // instance linked components need to point to instance admin
107
107
  registry,
108
- instanceNftId,
108
+ parentNftId,
109
109
  name,
110
110
  token,
111
111
  componentType,
112
112
  isInterceptor,
113
113
  initialOwner,
114
- registryData,
114
+ "", // registry data
115
115
  componentData);
116
116
 
117
- // set component state
117
+ // set instance linked specific parameters
118
118
  $._instanceReader = $._instance.getInstanceReader();
119
119
  $._initialAuthorization = authorization;
120
120
  $._componentService = IComponentService(_getServiceAddress(COMPONENT()));
121
121
 
122
+ // register interfaces
122
123
  _registerInterface(type(IAccessManaged).interfaceId);
123
124
  _registerInterface(type(IInstanceLinkedComponent).interfaceId);
124
125
  }
125
126
 
127
+
128
+ function _checkAndGetInstanceNftId(
129
+ address registryAddress,
130
+ NftId parentNftId,
131
+ ObjectType componentType
132
+ )
133
+ internal
134
+ view
135
+ returns (NftId instanceNftId)
136
+ {
137
+ // if product, then parent is already instance
138
+ if (componentType == PRODUCT()) {
139
+ _checkAndGetRegistry(registryAddress, parentNftId, INSTANCE());
140
+ return parentNftId;
141
+ }
142
+
143
+ // if not product parent is product, and parent of product is instance
144
+ IRegistry registry = _checkAndGetRegistry(registryAddress, parentNftId, PRODUCT());
145
+ return registry.getObjectInfo(parentNftId).parentNftId;
146
+ }
147
+
148
+ /// @dev checks the and gets registry.
149
+ /// validates registry using a provided nft id and expected object type.
150
+ function _checkAndGetRegistry(
151
+ address registryAddress,
152
+ NftId objectNftId,
153
+ ObjectType requiredType
154
+ )
155
+ internal
156
+ view
157
+ returns (IRegistry registry)
158
+ {
159
+ registry = IRegistry(registryAddress);
160
+ IRegistry.ObjectInfo memory info = registry.getObjectInfo(objectNftId);
161
+
162
+ if (info.objectType != requiredType) {
163
+ revert ErrorInstanceLinkedComponentTypeMismatch(requiredType, info.objectType);
164
+ }
165
+ }
166
+
167
+
126
168
  /// @dev for instance linked components the wallet address stored in the instance store.
127
169
  /// updating needs to go throug component service
128
170
  function _setWallet(address newWallet) internal virtual override onlyOwner {
@@ -139,7 +181,7 @@ abstract contract InstanceLinkedComponent is
139
181
  info = _getInstanceReader().getComponentInfo(getNftId());
140
182
 
141
183
  // check if also registered with instance
142
- if (info.wallet != address(0)) {
184
+ if (address(info.tokenHandler) != address(0)) {
143
185
  return info;
144
186
  }
145
187
  }
@@ -160,12 +202,4 @@ abstract contract InstanceLinkedComponent is
160
202
  {
161
203
  return _getInstanceLinkedComponentStorage()._componentService.withdrawFees(amount);
162
204
  }
163
-
164
-
165
- /// @dev returns the service address for the specified domain
166
- /// gets address via lookup from registry using the major version form the linked instance
167
- function _getServiceAddress(ObjectType domain) internal view returns (address service) {
168
- VersionPart majorVersion = _getInstanceLinkedComponentStorage()._instance.getMajorVersion();
169
- return getRegistry().getServiceAddress(domain, majorVersion);
170
- }
171
205
  }
@@ -94,7 +94,7 @@ abstract contract KeyValueStore is
94
94
 
95
95
  // update state
96
96
  if(state != KEEP_STATE()) {
97
- checkTransition(metadata.objectType, stateOld, state);
97
+ checkTransition(stateOld, metadata.objectType, stateOld, state);
98
98
  metadata.state = state;
99
99
 
100
100
  // solhint-disable-next-line avoid-tx-origin
@@ -49,8 +49,9 @@ abstract contract Lifecycle is
49
49
  }
50
50
 
51
51
  function checkTransition(
52
+ StateId stateId,
52
53
  ObjectType objectType,
53
- StateId fromId,
54
+ StateId expectedFromId,
54
55
  StateId toId
55
56
  )
56
57
  public
@@ -58,12 +59,22 @@ abstract contract Lifecycle is
58
59
  {
59
60
  // revert if no life cycle support
60
61
  if (_initialState[objectType].eqz()) {
61
- revert ErrorNoLifecycle(objectType);
62
+ revert ErrorNoLifecycle(address(this), objectType);
63
+ }
64
+
65
+ // revert if current state is not expected `from` state
66
+ if(stateId != expectedFromId) {
67
+ revert ErrorFromStateMissmatch(address(this), objectType, stateId, expectedFromId);
62
68
  }
63
69
 
64
70
  // enforce valid state transition
65
- if (!_isValidTransition[objectType][fromId][toId]) {
66
- revert ErrorInvalidStateTransition(objectType, fromId, toId);
71
+ if (!_isValidTransition[objectType][stateId][toId]) {
72
+ revert ErrorInvalidStateTransition(
73
+ address(this),
74
+ objectType,
75
+ stateId,
76
+ toId
77
+ );
67
78
  }
68
79
  }
69
80
 
@@ -4,6 +4,7 @@ pragma solidity ^0.8.20;
4
4
  import {InitializableERC165} from "./InitializableERC165.sol";
5
5
  import {INftOwnable} from "./INftOwnable.sol";
6
6
  import {NftId} from "../type/NftId.sol";
7
+ import {ObjectType} from "../type/ObjectType.sol";
7
8
  import {RegistryLinked} from "./RegistryLinked.sol";
8
9
 
9
10
  contract NftOwnable is
@@ -27,18 +28,36 @@ contract NftOwnable is
27
28
  _;
28
29
  }
29
30
 
31
+ modifier onlyNftOwner(NftId nftId) {
32
+ if(!getRegistry().isOwnerOf(nftId, msg.sender)) {
33
+ revert ErrorNftOwnableNotOwner(msg.sender);
34
+ }
35
+ _;
36
+ }
37
+
38
+ modifier onlyNftOfType(NftId nftId, ObjectType expectedObjectType) {
39
+ _checkNftType(nftId, expectedObjectType);
40
+ _;
41
+ }
42
+
43
+ function _checkNftType(NftId nftId, ObjectType expectedObjectType) internal view {
44
+ if(!getRegistry().isObjectType(nftId, expectedObjectType)) {
45
+ revert ErrorNftOwnableInvalidType(nftId, expectedObjectType);
46
+ }
47
+ }
48
+
30
49
 
31
50
  /// @dev initialization for upgradable contracts
32
51
  // used in _initializeRegisterable
33
52
  function _initializeNftOwnable(
34
- address initialOwner,
35
- address registryAddress
53
+ address registry,
54
+ address initialOwner
36
55
  )
37
56
  internal
38
57
  virtual
39
58
  onlyInitializing()
40
59
  {
41
- _initializeRegistryLinked(registryAddress);
60
+ _initializeRegistryLinked(registry);
42
61
  _initializeERC165();
43
62
 
44
63
  if(initialOwner == address(0)) {
@@ -100,6 +119,7 @@ contract NftOwnable is
100
119
 
101
120
 
102
121
  function _getNftOwnableStorage() private pure returns (NftOwnableStorage storage $) {
122
+ // solhint-disable-next-line no-inline-assembly
103
123
  assembly {
104
124
  $.slot := NFT_OWNABLE_STORAGE_LOCATION_V1
105
125
  }