@etherisc/gif-next 0.0.2-a714036-117 → 0.0.2-a78920e-322

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 (451) hide show
  1. package/README.md +32 -8
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -32
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  14. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +159 -397
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +99 -329
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +229 -292
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +125 -117
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +89 -129
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +101 -62
  32. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  33. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  34. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  35. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1415 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1965 -0
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
  42. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1429 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1163 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1592 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2267 -0
  52. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  53. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +71 -49
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +31 -99
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +90 -141
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +184 -139
  62. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +467 -88
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +96 -258
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +99 -87
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +339 -140
  72. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  74. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  76. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  77. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  79. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  80. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  81. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  87. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  88. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  89. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +111 -349
  90. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  91. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
  92. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  94. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +77 -117
  95. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  96. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
  97. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  98. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +87 -317
  99. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  100. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +107 -159
  101. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +99 -83
  103. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  104. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +110 -340
  105. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  106. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
  107. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  108. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +209 -274
  109. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +127 -119
  111. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  112. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +84 -47
  113. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  114. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +99 -150
  115. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  116. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +277 -205
  117. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  118. package/artifacts/contracts/pool/Pool.sol/Pool.json +107 -348
  119. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  120. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +371 -388
  121. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +112 -100
  123. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  124. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +92 -168
  125. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +90 -86
  127. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  128. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +149 -333
  129. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  130. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
  131. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  132. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +311 -187
  133. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  134. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +139 -103
  135. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  136. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +34 -0
  137. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  138. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +176 -6
  139. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  140. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +267 -141
  141. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  142. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
  143. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  144. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +136 -130
  145. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  146. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
  147. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  148. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +365 -349
  149. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +119 -99
  151. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  152. package/artifacts/contracts/product/PricingService.sol/PricingService.json +215 -309
  153. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  154. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +117 -117
  155. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  156. package/artifacts/contracts/product/Product.sol/Product.json +147 -331
  157. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  158. package/artifacts/contracts/product/RiskService.sol/RiskService.json +638 -0
  159. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  160. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +718 -0
  161. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  162. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  163. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  164. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +310 -34
  165. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  166. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
  167. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  168. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  169. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  170. package/artifacts/contracts/registry/Registry.sol/Registry.json +516 -95
  171. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  172. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +296 -143
  173. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  174. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +94 -284
  175. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  176. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +91 -75
  177. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  178. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  179. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  180. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +131 -223
  181. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  182. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  183. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  184. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  185. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  186. package/artifacts/contracts/shared/Component.sol/Component.json +73 -274
  187. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  188. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +503 -283
  189. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  190. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +140 -114
  191. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  192. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
  193. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  194. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +111 -0
  195. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  196. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +66 -77
  197. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +467 -33
  199. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  200. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +77 -117
  201. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  202. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  203. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  204. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  205. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  206. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  207. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  208. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  209. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  210. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
  211. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  212. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  213. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  214. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  215. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  216. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  217. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +87 -317
  218. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  219. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  220. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  221. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  222. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  223. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  224. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  225. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  226. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  227. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  228. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  229. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
  230. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  231. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  232. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  233. package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
  234. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  235. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +697 -25
  236. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  237. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
  238. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  239. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  240. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  241. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +111 -114
  242. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  243. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  244. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  245. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +63 -93
  246. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  247. package/artifacts/contracts/staking/Staking.sol/Staking.json +190 -379
  248. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  249. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  250. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  251. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +118 -99
  252. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  253. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  254. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  255. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +87 -165
  256. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  257. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +95 -79
  258. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  259. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +169 -128
  260. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  261. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
  262. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  263. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  265. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  268. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  270. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  272. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  273. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  274. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  276. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  277. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  278. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  280. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  282. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  284. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  286. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  288. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  290. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  292. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  296. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  299. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  300. package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
  301. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
  303. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  305. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  306. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  307. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +71 -70
  308. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  309. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  310. package/contracts/authorization/AccessAdmin.sol +64 -59
  311. package/contracts/authorization/Authorization.sol +111 -40
  312. package/contracts/authorization/IAccess.sol +1 -0
  313. package/contracts/authorization/IAccessAdmin.sol +4 -3
  314. package/contracts/authorization/IAuthorization.sol +13 -7
  315. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  316. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  317. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  318. package/contracts/distribution/BasicDistribution.sol +4 -3
  319. package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
  320. package/contracts/distribution/Distribution.sol +12 -23
  321. package/contracts/distribution/DistributionService.sol +99 -82
  322. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  323. package/contracts/distribution/IDistributionComponent.sol +1 -1
  324. package/contracts/distribution/IDistributionService.sol +14 -11
  325. package/contracts/examples/fire/DamageLevel.sol +59 -0
  326. package/contracts/examples/fire/FirePool.sol +86 -0
  327. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  328. package/contracts/examples/fire/FireProduct.sol +431 -0
  329. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  330. package/contracts/examples/fire/FireUSD.sol +26 -0
  331. package/contracts/examples/unpermissioned/SimpleDistribution.sol +65 -0
  332. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  333. package/contracts/examples/unpermissioned/SimplePool.sol +108 -0
  334. package/contracts/examples/unpermissioned/SimpleProduct.sol +345 -0
  335. package/contracts/instance/IInstance.sol +10 -31
  336. package/contracts/instance/IInstanceService.sol +2 -28
  337. package/contracts/instance/Instance.sol +30 -54
  338. package/contracts/instance/InstanceAdmin.sol +55 -38
  339. package/contracts/instance/InstanceAuthorizationV3.sol +11 -21
  340. package/contracts/instance/InstanceReader.sol +115 -25
  341. package/contracts/instance/InstanceService.sol +79 -142
  342. package/contracts/instance/InstanceServiceManager.sol +6 -7
  343. package/contracts/instance/InstanceStore.sol +11 -1
  344. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  345. package/contracts/instance/module/IComponents.sol +11 -8
  346. package/contracts/instance/module/IPolicy.sol +26 -25
  347. package/contracts/oracle/BasicOracle.sol +0 -1
  348. package/contracts/oracle/IOracleService.sol +2 -1
  349. package/contracts/oracle/Oracle.sol +6 -16
  350. package/contracts/oracle/OracleService.sol +56 -42
  351. package/contracts/oracle/OracleServiceManager.sol +6 -6
  352. package/contracts/pool/BasicPool.sol +35 -26
  353. package/contracts/pool/BasicPoolAuthorization.sol +14 -4
  354. package/contracts/pool/BundleService.sol +126 -79
  355. package/contracts/pool/BundleServiceManager.sol +6 -6
  356. package/contracts/pool/IBundleService.sol +17 -10
  357. package/contracts/pool/IPoolComponent.sol +19 -15
  358. package/contracts/pool/IPoolService.sol +66 -43
  359. package/contracts/pool/Pool.sol +145 -128
  360. package/contracts/pool/PoolService.sol +287 -195
  361. package/contracts/pool/PoolServiceManager.sol +4 -4
  362. package/contracts/product/ApplicationService.sol +59 -30
  363. package/contracts/product/ApplicationServiceManager.sol +4 -4
  364. package/contracts/product/BasicProduct.sol +9 -12
  365. package/contracts/product/BasicProductAuthorization.sol +0 -1
  366. package/contracts/product/ClaimService.sol +315 -118
  367. package/contracts/product/ClaimServiceManager.sol +4 -4
  368. package/contracts/product/IApplicationService.sol +1 -0
  369. package/contracts/product/IClaimService.sol +31 -7
  370. package/contracts/product/IPolicyService.sol +34 -36
  371. package/contracts/product/IPricingService.sol +10 -10
  372. package/contracts/product/IProductComponent.sol +23 -4
  373. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  374. package/contracts/product/PolicyService.sol +383 -217
  375. package/contracts/product/PolicyServiceManager.sol +4 -4
  376. package/contracts/product/PricingService.sol +54 -54
  377. package/contracts/product/PricingServiceManager.sol +3 -3
  378. package/contracts/product/Product.sol +110 -89
  379. package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
  380. package/contracts/product/RiskServiceManager.sol +39 -0
  381. package/contracts/registry/ChainNft.sol +68 -38
  382. package/contracts/registry/IRegistry.sol +57 -18
  383. package/contracts/registry/IRegistryService.sol +5 -12
  384. package/contracts/registry/ITransferInterceptor.sol +1 -2
  385. package/contracts/registry/Registry.sol +350 -201
  386. package/contracts/registry/RegistryAdmin.sol +151 -54
  387. package/contracts/registry/RegistryService.sol +35 -46
  388. package/contracts/registry/RegistryServiceManager.sol +2 -2
  389. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  390. package/contracts/registry/ReleaseRegistry.sol +204 -204
  391. package/contracts/registry/ServiceAuthorizationV3.sol +27 -23
  392. package/contracts/shared/Component.sol +69 -115
  393. package/contracts/shared/ComponentService.sol +345 -170
  394. package/contracts/shared/ComponentServiceManager.sol +8 -5
  395. package/contracts/shared/ComponentVerifyingService.sol +28 -17
  396. package/contracts/shared/ContractLib.sol +54 -0
  397. package/contracts/shared/IComponent.sol +10 -13
  398. package/contracts/shared/IComponentService.sol +44 -18
  399. package/contracts/shared/IInstanceLinkedComponent.sol +6 -32
  400. package/contracts/shared/ILifecycle.sol +3 -1
  401. package/contracts/shared/INftOwnable.sol +2 -0
  402. package/contracts/shared/IPolicyHolder.sol +12 -22
  403. package/contracts/shared/IRegisterable.sol +11 -0
  404. package/contracts/shared/InitializableERC165.sol +2 -2
  405. package/contracts/shared/InstanceLinkedComponent.sol +71 -46
  406. package/contracts/shared/KeyValueStore.sol +1 -1
  407. package/contracts/shared/Lifecycle.sol +15 -4
  408. package/contracts/shared/NftOwnable.sol +27 -7
  409. package/contracts/shared/PolicyHolder.sol +15 -52
  410. package/contracts/shared/Registerable.sol +19 -11
  411. package/contracts/shared/RegistryLinked.sol +9 -14
  412. package/contracts/shared/Service.sol +20 -18
  413. package/contracts/shared/TokenHandler.sol +366 -27
  414. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  415. package/contracts/staking/IStaking.sol +11 -5
  416. package/contracts/staking/IStakingService.sol +0 -3
  417. package/contracts/staking/StakeManagerLib.sol +18 -25
  418. package/contracts/staking/Staking.sol +39 -50
  419. package/contracts/staking/StakingManager.sol +8 -6
  420. package/contracts/staking/StakingReader.sol +12 -5
  421. package/contracts/staking/StakingService.sol +77 -35
  422. package/contracts/staking/StakingServiceManager.sol +2 -2
  423. package/contracts/staking/TargetManagerLib.sol +7 -3
  424. package/contracts/type/Amount.sol +15 -0
  425. package/contracts/type/ClaimId.sol +6 -1
  426. package/contracts/type/NftId.sol +1 -0
  427. package/contracts/type/ObjectType.sol +16 -11
  428. package/contracts/type/PayoutId.sol +10 -10
  429. package/contracts/type/RiskId.sol +16 -2
  430. package/contracts/type/RoleId.sol +0 -12
  431. package/contracts/type/Seconds.sol +8 -0
  432. package/contracts/type/StateId.sol +15 -1
  433. package/contracts/type/UFixed.sol +4 -0
  434. package/contracts/upgradeability/ProxyManager.sol +68 -34
  435. package/contracts/upgradeability/Versionable.sol +2 -2
  436. package/package.json +4 -3
  437. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  438. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  439. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  440. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  441. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  442. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  443. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  444. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  445. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  446. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  447. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  448. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  449. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  450. package/contracts/product/ProductServiceManager.sol +0 -39
  451. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -11,15 +11,18 @@ contract ComponentServiceManager is ProxyManager {
11
11
 
12
12
  /// @dev initializes proxy manager with service implementation
13
13
  constructor(
14
- address registryAddress
14
+ address authority,
15
+ address registry,
16
+ bytes32 salt
15
17
  )
16
- ProxyManager(registryAddress)
17
18
  {
18
19
  ComponentService svc = new ComponentService();
19
- bytes memory data = abi.encode(registryAddress, address(this));
20
- IVersionable versionable = deploy(
20
+ bytes memory data = abi.encode(registry, authority);
21
+ IVersionable versionable = initialize(
22
+ registry,
21
23
  address(svc),
22
- data);
24
+ data,
25
+ salt);
23
26
 
24
27
  _componentService = ComponentService(address(versionable));
25
28
  }
@@ -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
- componentNftId = getRegistry().getNftId(msg.sender);
36
- (componentInfo, instance) = _getAndVerifyComponentInfo(
34
+ componentNftId = getRegistry().getNftIdForAddress(msg.sender);
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,24 +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().getObjectInfo(
115
- instanceNftId).objectAddress);
126
+ registry.getObjectAddress(instanceNftId));
116
127
  }
117
128
  }
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
5
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
+
7
+ import {IPolicyHolder} from "./IPolicyHolder.sol";
8
+ import {IRegistry} from "../registry/IRegistry.sol";
9
+
10
+ library ContractLib {
11
+
12
+ function isPolicyHolder(address target) external view returns (bool) {
13
+ return ERC165Checker.supportsInterface(target, type(IPolicyHolder).interfaceId);
14
+ }
15
+
16
+
17
+ function isAccessManaged(address target) external view returns (bool) {
18
+ if (!isContract(target)) {
19
+ return false;
20
+ }
21
+
22
+ (bool success, ) = target.staticcall(
23
+ abi.encodeWithSelector(
24
+ IAccessManaged.authority.selector));
25
+
26
+ return success;
27
+ }
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
+
39
+ function isContract(address target) public view returns (bool) {
40
+ if (target == address(0)) {
41
+ return false;
42
+ }
43
+
44
+ uint256 size;
45
+ assembly {
46
+ size := extcodesize(target)
47
+ }
48
+ return size > 0;
49
+ }
50
+
51
+ function supportsInterface(address target, bytes4 interfaceId) public view returns (bool) {
52
+ return ERC165Checker.supportsInterface(target, interfaceId);
53
+ }
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
- error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
27
30
  error ErrorComponentWalletNotComponent();
28
31
 
29
32
  event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
30
33
  event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
31
- event LogComponentTokenHandlerApproved(address token, Amount limit);
32
-
33
- /// @dev approves token hanlder to spend up to the specified amount of tokens
34
- /// reverts if component wallet is not component itself
35
- /// only component owner (nft holder) is authorizes to call this function
36
- function approveTokenHandler(Amount spendingLimitAmount) external;
34
+ event LogComponentTokenHandlerApproved(address tokenHandler, address token, Amount limit, bool isMaxAmount);
37
35
 
38
- /// @dev sets the wallet address for the component
39
- /// if the current wallet has tokens, these will be transferred
40
- /// if the new wallet address is externally owned, an approval from the
41
- /// owner of the external wallet for the component to move all tokens 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,43 @@
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 ErrorComponentServiceNotRegistered(address instanceAddress);
32
+ error ErrorComponentServiceNotInstance(address instanceAddress, ObjectType objectType);
33
+ error ErrorComponentServiceInstanceVersionMismatch(address instanceAddress, VersionPart instanceVersion);
34
+
35
+ error ErrorProductServiceNoDistributionExpected(NftId productNftId);
36
+ error ErrorProductServiceDistributionAlreadyRegistered(NftId productNftId, NftId distributionNftId);
37
+ error ErrorProductServiceNoOraclesExpected(NftId productNftId);
38
+ error ErrorProductServiceOraclesAlreadyRegistered(NftId productNftId, uint8 expectedOracles);
39
+ error ErrorProductServicePoolAlreadyRegistered(NftId productNftId, NftId poolNftId);
40
+
17
41
  error ErrorComponentServiceNewWalletAddressZero();
18
42
  error ErrorComponentServiceWalletAddressZero();
19
43
  error ErrorComponentServiceWalletAddressIsSameAsCurrent();
@@ -22,7 +46,9 @@ interface IComponentService is
22
46
  error ErrorComponentServiceWithdrawAmountExceedsLimit(Amount withdrawnAmount, Amount withdrawLimit);
23
47
  error ErrorComponentServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
24
48
 
49
+ event LogComponentServiceRegistered(NftId instanceNftId, NftId componentNftId, ObjectType componentType, address component, address token, address initialOwner);
25
50
  event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
51
+ event LogComponentServiceWalletTokensTransferred(NftId componentNftId, address currentWallet, address newWallet, uint256 currentBalance);
26
52
  event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
27
53
  event LogComponentServiceProductFeesUpdated(NftId productNftId);
28
54
  event LogComponentServiceDistributionFeesUpdated(NftId distributionNftId);
@@ -38,24 +64,35 @@ interface IComponentService is
38
64
 
39
65
  //-------- component ----------------------------------------------------//
40
66
 
41
- /// @dev sets the components associated wallet address
67
+ /// @dev Approves the callers token handler to spend up to the specified amount of tokens.
68
+ /// Reverts if the component's token handler wallet is not the token handler itself.
69
+ function approveTokenHandler(IERC20Metadata token, Amount amount) external;
70
+
71
+ /// @dev Approves the staking token handler.
72
+ /// Reverts if the staking token handler wallet is not the token handler itself.
73
+ function approveStakingTokenHandler(IERC20Metadata token, Amount amount) external;
74
+
75
+ /// @dev Sets the components associated wallet address
42
76
  function setWallet(address newWallet) external;
43
77
 
44
- /// @dev locks the component associated with the caller
45
- function lock() external;
78
+ /// @dev Locks/Unlocks the given component - call from instanceService
79
+ function setLockedFromInstance(address componentAddress, bool locked) external;
46
80
 
47
- /// @dev unlocks the component associated with the caller
48
- function unlock() external;
81
+ /// @dev Locks/Unlocks the given component - call from component
82
+ function setLockedFromComponent(address componentAddress, bool locked) external;
49
83
 
50
84
  /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
51
85
  /// @param withdrawAmount the amount to withdraw
52
86
  /// @return withdrawnAmount the amount that was actually withdrawn
53
87
  function withdrawFees(Amount withdrawAmount) external returns (Amount withdrawnAmount);
54
88
 
89
+ /// @dev Registers the provided component with the product (sender)
90
+ function registerComponent(address component) external returns (NftId componentNftId);
91
+
55
92
  //-------- product ------------------------------------------------------//
56
93
 
57
- /// @dev registers the sending component as a product component
58
- function registerProduct() external;
94
+ /// @dev Registers the specified product component for the instance (sender)
95
+ function registerProduct(address product) external returns (NftId productNftId);
59
96
 
60
97
  function setProductFees(
61
98
  Fee memory productFee, // product fee on net premium
@@ -67,9 +104,6 @@ interface IComponentService is
67
104
 
68
105
  //-------- distribution -------------------------------------------------//
69
106
 
70
- /// @dev registers the sending component as a distribution component
71
- function registerDistribution() external;
72
-
73
107
  function setDistributionFees(
74
108
  Fee memory distributionFee, // distribution fee for sales that do not include commissions
75
109
  Fee memory minDistributionOwnerFee // min fee required by distribution owner (not including commissions for distributors)
@@ -82,16 +116,8 @@ interface IComponentService is
82
116
  function increaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
83
117
  function decreaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
84
118
 
85
- //-------- oracle -------------------------------------------------------//
86
-
87
- /// @dev registers the sending component as an oracle component
88
- function registerOracle() external;
89
-
90
119
  //-------- pool ---------------------------------------------------------//
91
120
 
92
- /// @dev registers the sending component as a pool component
93
- function registerPool() external;
94
-
95
121
  function setPoolFees(
96
122
  Fee memory poolFee, // pool fee on net premium
97
123
  Fee memory stakingFee, // pool fee on staked capital from investor
@@ -1,56 +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";
5
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
-
7
4
  import {Amount} from "../type/Amount.sol";
8
5
  import {IComponent} from "../shared/IComponent.sol";
9
6
  import {IAuthorization} from "../authorization/IAuthorization.sol";
10
- import {IComponents} from "../instance/module/IComponents.sol";
11
7
  import {IInstance} from "../instance/IInstance.sol";
12
- import {IInstanceService} from "../instance/IInstanceService.sol";
13
- import {IProductService} from "../product/IProductService.sol";
14
- import {IRegisterable} from "../shared/IRegisterable.sol";
15
8
  import {NftId} from "../type/NftId.sol";
16
9
  import {ObjectType} from "../type/ObjectType.sol";
17
- import {TokenHandler} from "../shared/TokenHandler.sol";
18
10
 
19
11
  /// @dev component base class
20
12
  /// component examples are product, distribution, pool and oracle
21
13
  interface IInstanceLinkedComponent is
22
14
  IComponent
23
15
  {
24
- error ErrorComponentNotProductService(address caller);
25
- error ErrorComponentNotInstance(NftId instanceNftId);
26
- error ErrorComponentProductNftAlreadySet();
27
-
28
- /// @dev registers this component with the registry and instance.
29
- /// a component may only be linked once
30
- /// only initial component owner (nft holder) is authorizes to call this function
31
- function register() external;
16
+ error ErrorInstanceLinkedComponentTypeMismatch(ObjectType requiredType, ObjectType objectType);
17
+ error ErrorInstanceLinkedComponentNotProduct(NftId nftId, ObjectType objectType);
32
18
 
33
- /// @dev locks component to disable functions that may change state related to this component, the only exception is function "unlock"
34
- /// only component owner (nft holder) is authorizes to call this function
35
- function lock() external;
36
-
37
- /// @dev unlocks component to (re-)enable functions that may change state related to this component
38
- /// only component owner (nft holder) is authorizes to call this function
39
- function unlock() external;
19
+ /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
20
+ /// @param amount the amount to withdraw
21
+ /// @return withdrawnAmount the amount that was actually withdrawn
22
+ function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
40
23
 
41
24
  /// @dev defines the instance to which this component is linked to
42
25
  function getInstance() external view returns (IInstance instance);
43
26
 
44
- /// @dev defines the product to which this component is linked to
45
- /// this is only relevant for pool and distribution components
46
- function getProductNftId() external view returns (NftId productNftId);
47
-
48
27
  /// @dev returns the initial component authorization specification.
49
28
  function getAuthorization() external view returns (IAuthorization authorization);
50
29
 
51
- /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
52
- /// @param amount the amount to withdraw
53
- /// @return withdrawnAmount the amount that was actually withdrawn
54
- function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
55
-
56
30
  }
@@ -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);
@@ -9,37 +9,27 @@ import {ClaimId} from "../type/ClaimId.sol";
9
9
  import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
10
10
  import {NftId} from "../type/NftId.sol";
11
11
  import {PayoutId} from "../type/PayoutId.sol";
12
+ import {Timestamp} from "../type/Timestamp.sol";
12
13
 
13
- /// @dev generic interface for contracts that need to hold policies and receive payouts
14
- /// GIF will notify policy holder contracts for policy creation and payout execution
14
+ /// @dev Generic interface for contracts that need to hold policies and receive payouts.
15
+ /// The framework notifies policy holder contracts for policy creation/expiry, claim confirmation and payout execution
15
16
  interface IPolicyHolder is
16
17
  IERC165,
17
18
  IERC721Receiver,
18
19
  IRegistryLinked
19
20
  {
20
21
 
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;
22
+ /// @dev Callback function that will be called after successful policy activation.
23
+ /// Active policies may open claims under the activated policy.
24
+ function policyActivated(NftId policyNftId, Timestamp activatedAt) external;
24
25
 
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;
26
+ /// @dev Callback function to indicate the specified policy has expired.
27
+ /// expired policies no longer accept new claims.
28
+ function policyExpired(NftId policyNftId, Timestamp expiredAt) external;
29
29
 
30
- /// @dev request for a payout by the requesting policy
31
- /// the contract implements its use case specific handling for such requests.
32
- /// eg. creation of a pending payout, a corresponding claim against one of the policies held by the IPolicyHolder
33
- function requestPayout(NftId requestingPolicyNftId, Amount requestedPayoutAmount) external;
34
-
35
- /// @dev callback function to notify the confirmation of the specified claim
36
- /// active policies may open claims under the activated policy
30
+ /// @dev Callback function to notify the confirmation of the specified claim.
37
31
  function claimConfirmed(NftId policyNftId, ClaimId claimId, Amount amount) external;
38
32
 
39
- /// @dev callback function that will be called after a successful payout
40
- function payoutExecuted(NftId policyNftId, PayoutId payoutId, address beneficiary, Amount amount) external;
41
-
42
- /// @dev determines policy and claim specific beneficiary address
43
- /// returned address will override GIF default where the policy nft holder is treated as beneficiary
44
- function getBeneficiary(NftId policyNftId, PayoutId payoutId) external view returns (address beneficiary);
33
+ /// @dev Callback function to notify the successful payout.
34
+ function payoutExecuted(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary) external;
45
35
  }
@@ -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
@@ -11,13 +11,13 @@ contract InitializableERC165 is
11
11
  mapping(bytes4 => bool) private _isSupported;
12
12
 
13
13
  // @dev initializes with support for ERC165
14
- function initializeERC165() public onlyInitializing() {
14
+ function _initializeERC165() internal onlyInitializing() {
15
15
  _isSupported[type(IERC165).interfaceId] = true;
16
16
  }
17
17
 
18
18
  // @dev register support for provided interfaceId
19
19
  // includes initialization for ERC165_ID if not yet done
20
- function registerInterface(bytes4 interfaceId) public onlyInitializing() {
20
+ function _registerInterface(bytes4 interfaceId) internal onlyInitializing() {
21
21
  _isSupported[interfaceId] = true;
22
22
  }
23
23