@etherisc/gif-next 0.0.2-9346c9b-763 → 0.0.2-93a7619-595

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 (419) hide show
  1. package/README.md +19 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +33 -52
  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 +2 -2
  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 +0 -19
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +63 -248
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -222
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +139 -294
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +84 -124
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +21 -37
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +49 -62
  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 +1512 -0
  35. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  37. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1999 -0
  39. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -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 +4 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1432 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1192 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1566 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2001 -0
  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/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  55. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  56. package/artifacts/contracts/instance/Instance.sol/Instance.json +10 -99
  57. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  58. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +97 -100
  59. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  61. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  62. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -129
  63. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  64. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +39 -146
  65. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  66. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +61 -81
  67. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  68. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +244 -228
  69. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  71. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  74. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  76. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  78. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  84. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  85. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  86. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  87. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +47 -232
  88. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  89. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
  90. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  91. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  92. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +15 -31
  93. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  94. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +15 -216
  96. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +37 -144
  98. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +60 -80
  100. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  101. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +51 -274
  102. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  103. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  104. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  105. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +319 -188
  106. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +130 -94
  108. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  109. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +149 -23
  110. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  111. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -88
  112. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  113. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +360 -171
  114. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  115. package/artifacts/contracts/pool/Pool.sol/Pool.json +41 -270
  116. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  117. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +492 -333
  118. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  119. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +98 -82
  120. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  121. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +36 -162
  122. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +57 -89
  124. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  125. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +43 -242
  126. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  127. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  128. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  129. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +263 -181
  130. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  131. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +104 -100
  132. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  133. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  134. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  135. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +147 -6
  136. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  137. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +295 -119
  138. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  139. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
  140. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  141. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +43 -57
  142. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  143. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  144. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  145. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +406 -321
  146. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  147. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +104 -100
  148. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  149. package/artifacts/contracts/product/PricingService.sol/PricingService.json +118 -265
  150. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  151. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -120
  152. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  153. package/artifacts/contracts/product/Product.sol/Product.json +43 -242
  154. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  155. package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
  156. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  157. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -0
  158. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  159. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  160. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  161. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +240 -21
  162. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  163. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  164. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  165. package/artifacts/contracts/registry/Registry.sol/Registry.json +438 -82
  166. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  167. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +243 -131
  168. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  169. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -313
  170. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  171. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +52 -72
  172. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  173. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  174. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  175. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +24 -14
  176. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  177. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  178. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  179. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  180. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  181. package/artifacts/contracts/shared/Component.sol/Component.json +15 -205
  182. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  183. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +132 -199
  184. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  185. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +96 -114
  186. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  187. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +5 -112
  188. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  189. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  190. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  191. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +15 -20
  192. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  193. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +56 -0
  194. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  195. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +15 -31
  196. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  197. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  198. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  199. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  200. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  201. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  202. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  203. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  204. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  205. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  206. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  207. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +15 -216
  208. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  209. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  210. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  211. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  212. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  213. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -57
  214. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  215. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  216. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  217. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -97
  218. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  219. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  220. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  221. package/artifacts/contracts/shared/Service.sol/Service.json +5 -112
  222. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  223. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  224. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  225. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  226. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  227. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +42 -21
  228. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  229. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  230. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
  231. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  232. package/artifacts/contracts/staking/Staking.sol/Staking.json +100 -256
  233. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  234. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  235. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  236. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +77 -88
  237. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  238. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  239. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  240. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +31 -138
  241. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  242. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +56 -76
  243. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  244. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +89 -84
  245. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  246. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
  247. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  248. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  250. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  252. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  254. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  256. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  258. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  259. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  260. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  262. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  263. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  264. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  266. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  268. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  270. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  272. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  274. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  276. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  278. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  280. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  282. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  284. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  285. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  286. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  287. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +52 -2
  289. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  291. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  292. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  293. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +39 -70
  294. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  295. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  296. package/contracts/authorization/AccessAdmin.sol +25 -24
  297. package/contracts/authorization/Authorization.sol +5 -2
  298. package/contracts/authorization/IAccessAdmin.sol +0 -1
  299. package/contracts/distribution/BasicDistribution.sol +4 -15
  300. package/contracts/distribution/Distribution.sol +4 -10
  301. package/contracts/distribution/DistributionService.sol +41 -50
  302. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  303. package/contracts/distribution/IDistributionService.sol +9 -5
  304. package/contracts/examples/fire/DamageLevel.sol +59 -0
  305. package/contracts/examples/fire/FirePool.sol +75 -0
  306. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  307. package/contracts/examples/fire/FireProduct.sol +411 -0
  308. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  309. package/contracts/examples/fire/FireUSD.sol +26 -0
  310. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  311. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  312. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  313. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  314. package/contracts/instance/IInstance.sol +7 -30
  315. package/contracts/instance/Instance.sol +10 -35
  316. package/contracts/instance/InstanceAdmin.sol +29 -7
  317. package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
  318. package/contracts/instance/InstanceReader.sol +115 -25
  319. package/contracts/instance/InstanceService.sol +63 -41
  320. package/contracts/instance/InstanceServiceManager.sol +6 -7
  321. package/contracts/instance/InstanceStore.sol +12 -1
  322. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  323. package/contracts/instance/module/IBundle.sol +1 -1
  324. package/contracts/instance/module/IComponents.sol +4 -7
  325. package/contracts/instance/module/IDistribution.sol +0 -1
  326. package/contracts/instance/module/IPolicy.sol +24 -24
  327. package/contracts/mock/Dip.sol +1 -1
  328. package/contracts/oracle/Oracle.sol +4 -7
  329. package/contracts/oracle/OracleService.sol +11 -8
  330. package/contracts/oracle/OracleServiceManager.sol +6 -6
  331. package/contracts/pool/BasicPool.sol +7 -5
  332. package/contracts/pool/BasicPoolAuthorization.sol +5 -2
  333. package/contracts/pool/BundleService.sol +167 -48
  334. package/contracts/pool/BundleServiceManager.sol +6 -6
  335. package/contracts/pool/IBundleService.sol +31 -8
  336. package/contracts/pool/IPoolComponent.sol +18 -8
  337. package/contracts/pool/IPoolService.sol +57 -36
  338. package/contracts/pool/Pool.sol +59 -34
  339. package/contracts/pool/PoolService.sol +231 -104
  340. package/contracts/pool/PoolServiceManager.sol +4 -4
  341. package/contracts/product/ApplicationService.sol +50 -29
  342. package/contracts/product/ApplicationServiceManager.sol +4 -4
  343. package/contracts/product/BasicProduct.sol +3 -32
  344. package/contracts/product/ClaimService.sol +251 -86
  345. package/contracts/product/ClaimServiceManager.sol +4 -4
  346. package/contracts/product/IApplicationService.sol +1 -0
  347. package/contracts/product/IClaimService.sol +31 -7
  348. package/contracts/product/IPolicyService.sol +34 -32
  349. package/contracts/product/IPricingService.sol +7 -7
  350. package/contracts/product/IProductComponent.sol +17 -4
  351. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  352. package/contracts/product/PolicyService.sol +404 -193
  353. package/contracts/product/PolicyServiceManager.sol +4 -4
  354. package/contracts/product/PricingService.sol +46 -46
  355. package/contracts/product/PricingServiceManager.sol +3 -3
  356. package/contracts/product/Product.sol +90 -50
  357. package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
  358. package/contracts/product/RiskServiceManager.sol +39 -0
  359. package/contracts/registry/ChainNft.sol +65 -32
  360. package/contracts/registry/IRegistry.sol +51 -15
  361. package/contracts/registry/IRegistryService.sol +0 -9
  362. package/contracts/registry/Registry.sol +328 -197
  363. package/contracts/registry/RegistryAdmin.sol +150 -51
  364. package/contracts/registry/RegistryService.sol +55 -48
  365. package/contracts/registry/RegistryServiceManager.sol +2 -2
  366. package/contracts/registry/ReleaseRegistry.sol +12 -8
  367. package/contracts/registry/ServiceAuthorizationV3.sol +6 -8
  368. package/contracts/shared/Component.sol +25 -29
  369. package/contracts/shared/ComponentService.sol +50 -31
  370. package/contracts/shared/ComponentServiceManager.sol +8 -5
  371. package/contracts/shared/ComponentVerifyingService.sol +2 -3
  372. package/contracts/shared/ContractLib.sol +38 -0
  373. package/contracts/shared/IComponent.sol +7 -4
  374. package/contracts/shared/IComponentService.sol +5 -9
  375. package/contracts/shared/IInstanceLinkedComponent.sol +8 -15
  376. package/contracts/shared/IPolicyHolder.sol +12 -22
  377. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
  378. package/contracts/shared/InstanceLinkedComponent.sol +5 -6
  379. package/contracts/shared/NftOwnable.sol +7 -7
  380. package/contracts/shared/PolicyHolder.sol +17 -57
  381. package/contracts/shared/Registerable.sol +4 -4
  382. package/contracts/shared/RegistryLinked.sol +3 -2
  383. package/contracts/shared/Service.sol +16 -11
  384. package/contracts/shared/TokenHandler.sol +100 -19
  385. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  386. package/contracts/staking/IStaking.sol +2 -1
  387. package/contracts/staking/StakeManagerLib.sol +18 -25
  388. package/contracts/staking/Staking.sol +11 -27
  389. package/contracts/staking/StakingManager.sol +8 -6
  390. package/contracts/staking/StakingReader.sol +12 -5
  391. package/contracts/staking/StakingService.sol +10 -14
  392. package/contracts/staking/StakingServiceManager.sol +2 -2
  393. package/contracts/staking/TargetManagerLib.sol +7 -3
  394. package/contracts/type/Amount.sol +20 -3
  395. package/contracts/type/Blocknumber.sol +7 -1
  396. package/contracts/type/ClaimId.sol +6 -1
  397. package/contracts/type/NftId.sol +1 -0
  398. package/contracts/type/ObjectType.sol +16 -11
  399. package/contracts/type/PayoutId.sol +10 -10
  400. package/contracts/type/Referral.sol +1 -0
  401. package/contracts/type/RiskId.sol +15 -1
  402. package/contracts/type/Seconds.sol +21 -1
  403. package/contracts/type/StateId.sol +1 -0
  404. package/contracts/type/Timestamp.sol +11 -1
  405. package/contracts/type/UFixed.sol +33 -10
  406. package/contracts/upgradeability/ProxyManager.sol +67 -34
  407. package/contracts/upgradeability/Versionable.sol +2 -2
  408. package/package.json +2 -1
  409. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  410. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  411. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  412. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  413. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  414. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  415. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  416. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  417. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  418. package/contracts/product/ProductServiceManager.sol +0 -39
  419. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -6,7 +6,7 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana
6
6
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
7
7
  import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
8
8
 
9
- import {Amount} from "../type/Amount.sol";
9
+ import {Amount, AmountLib} from "../type/Amount.sol";
10
10
  import {IComponent} from "./IComponent.sol";
11
11
  import {IComponents} from "../instance/module/IComponents.sol";
12
12
  import {NftId, NftIdLib} from "../type/NftId.sol";
@@ -46,13 +46,21 @@ abstract contract Component is
46
46
  _;
47
47
  }
48
48
 
49
+ modifier onlyNftObjectType(NftId nftId, ObjectType expectedObjectType) {
50
+ ObjectType objectType = getRegistry().getObjectInfo(nftId).objectType;
51
+ if(!objectType.eq(expectedObjectType)) {
52
+ revert ErrorNftNotObjectType(nftId, objectType, expectedObjectType);
53
+ }
54
+ _;
55
+ }
56
+
49
57
  function _getComponentStorage() private pure returns (ComponentStorage storage $) {
50
58
  assembly {
51
59
  $.slot := COMPONENT_LOCATION_V1
52
60
  }
53
61
  }
54
62
 
55
- function initializeComponent(
63
+ function _initializeComponent(
56
64
  address authority,
57
65
  address registry,
58
66
  NftId parentNftId,
@@ -64,11 +72,11 @@ abstract contract Component is
64
72
  bytes memory registryData, // writeonly data that will saved in the object info record of the registry
65
73
  bytes memory componentData // other component specific data
66
74
  )
67
- public
75
+ internal
68
76
  virtual
69
77
  onlyInitializing()
70
78
  {
71
- initializeRegisterable(registry, parentNftId, componentType, isInterceptor, initialOwner, registryData);
79
+ _initializeRegisterable(registry, parentNftId, componentType, isInterceptor, initialOwner, registryData);
72
80
  __AccessManaged_init(authority);
73
81
 
74
82
  if (token == address(0)) {
@@ -87,8 +95,8 @@ abstract contract Component is
87
95
  $._isInterceptor = isInterceptor;
88
96
  $._data = componentData;
89
97
 
90
- registerInterface(type(IAccessManaged).interfaceId);
91
- registerInterface(type(IComponent).interfaceId);
98
+ _registerInterface(type(IAccessManaged).interfaceId);
99
+ _registerInterface(type(IComponent).interfaceId);
92
100
  }
93
101
 
94
102
 
@@ -109,11 +117,11 @@ abstract contract Component is
109
117
  revert ErrorComponentWalletNotComponent();
110
118
  }
111
119
 
120
+ emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
121
+
112
122
  IERC20Metadata(token).approve(
113
123
  address(getTokenHandler()),
114
124
  spendingLimitAmount.toInt());
115
-
116
- emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
117
125
  }
118
126
 
119
127
  function setWallet(address newWallet)
@@ -124,34 +132,22 @@ abstract contract Component is
124
132
  {
125
133
  // checks
126
134
  address currentWallet = getWallet();
127
- IERC20Metadata token = getToken();
128
- uint256 currentBalance = token.balanceOf(currentWallet);
129
-
130
- if (currentBalance > 0) {
131
- if (currentWallet == address(this)) {
132
- // move tokens from component smart contract to external wallet
133
- } else {
134
- // move tokens from external wallet to component smart contract or another external wallet
135
- uint256 allowance = token.allowance(currentWallet, address(this));
136
- if (allowance < currentBalance) {
137
- revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
138
- }
139
- }
140
- }
135
+ uint256 currentBalance = getToken().balanceOf(currentWallet);
141
136
 
142
137
  // effects
143
138
  _setWallet(newWallet);
144
139
 
145
140
  // interactions
146
141
  if (currentBalance > 0) {
147
- // transfer tokens from current wallet to new wallet
142
+ // move tokens from old to new wallet
143
+ emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
144
+
148
145
  if (currentWallet == address(this)) {
149
- // transferFrom requires self allowance too
150
- token.approve(address(this), currentBalance);
146
+ // transfer from the component requires an allowance
147
+ getTokenHandler().distributeTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
148
+ } else {
149
+ getTokenHandler().collectTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
151
150
  }
152
-
153
- SafeERC20.safeTransferFrom(token, currentWallet, newWallet, currentBalance);
154
- emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
155
151
  }
156
152
  }
157
153
 
@@ -218,7 +214,7 @@ abstract contract Component is
218
214
 
219
215
 
220
216
  function isRegistered() public virtual view returns (bool) {
221
- return getRegistry().getNftId(address(this)).gtz();
217
+ return getRegistry().getNftIdForAddress(address(this)).gtz();
222
218
  }
223
219
 
224
220
 
@@ -1,8 +1,6 @@
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";
5
-
6
4
  import {Amount, AmountLib} from "../type/Amount.sol";
7
5
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
8
6
  import {Fee, FeeLib} from "../type/Fee.sol";
@@ -21,14 +19,12 @@ import {KEEP_STATE} from "../type/StateId.sol";
21
19
  import {NftId} from "../type/NftId.sol";
22
20
  import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
23
21
  import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
24
- import {TokenHandler} from "./TokenHandler.sol";
22
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
25
23
 
26
24
  contract ComponentService is
27
25
  ComponentVerifyingService,
28
26
  IComponentService
29
27
  {
30
- using AmountLib for Amount;
31
-
32
28
  error ErrorComponentServiceAlreadyRegistered(address component);
33
29
  error ErrorComponentServiceNotComponent(address component);
34
30
  error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
@@ -52,17 +48,17 @@ contract ComponentService is
52
48
  virtual override
53
49
  initializer()
54
50
  {
55
- // TODO check this, might no longer be the way, refactor if necessary
56
- address registryAddress;
57
- address initialOwner;
58
- (registryAddress, initialOwner) = abi.decode(data, (address, address));
51
+ (
52
+ address registryAddress,
53
+ address authority
54
+ ) = abi.decode(data, (address, address));
59
55
 
60
- initializeService(registryAddress, address(0), owner);
56
+ _initializeService(registryAddress, authority, owner);
61
57
 
62
58
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
63
59
  _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
64
60
 
65
- registerInterface(type(IComponentService).interfaceId);
61
+ _registerInterface(type(IComponentService).interfaceId);
66
62
  }
67
63
 
68
64
  //-------- component ----------------------------------------------------//
@@ -117,22 +113,13 @@ contract ComponentService is
117
113
  }
118
114
  }
119
115
 
120
- // check allowance
121
- TokenHandler tokenHandler = info.tokenHandler;
122
- IERC20Metadata token = IERC20Metadata(info.token);
123
- uint256 tokenAllowance = token.allowance(componentWallet, address(tokenHandler));
124
- if (tokenAllowance < withdrawnAmount.toInt()) {
125
- revert ErrorComponentServiceWalletAllowanceTooSmall(componentWallet, address(tokenHandler), tokenAllowance, withdrawnAmount.toInt());
126
- }
127
-
128
116
  // decrease fee counters by withdrawnAmount
129
117
  _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
130
118
 
131
119
  // transfer amount to component owner
132
120
  address componentOwner = getRegistry().ownerOf(componentNftId);
133
- tokenHandler.transfer(componentWallet, componentOwner, withdrawnAmount);
134
-
135
- emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(token), withdrawnAmount);
121
+ emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
122
+ info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
136
123
  }
137
124
 
138
125
 
@@ -153,7 +140,7 @@ contract ComponentService is
153
140
  contractAddress,
154
141
  PRODUCT(),
155
142
  PRODUCT_OWNER_ROLE());
156
-
143
+
157
144
  // create product info
158
145
  IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
159
146
  instanceStore.createProduct(productNftId, productInfo);
@@ -296,6 +283,36 @@ contract ComponentService is
296
283
  _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
297
284
  }
298
285
 
286
+ //-------- distributor -------------------------------------------------------//
287
+
288
+ function increaseDistributorBalance(
289
+ InstanceStore instanceStore,
290
+ NftId distributorNftId,
291
+ Amount amount,
292
+ Amount feeAmount
293
+ )
294
+ external
295
+ virtual
296
+ // TODO re-enable once role granting is stable and fixed
297
+ // restricted()
298
+ {
299
+ _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
300
+ }
301
+
302
+ function decreaseDistributorBalance(
303
+ InstanceStore instanceStore,
304
+ NftId distributorNftId,
305
+ Amount amount,
306
+ Amount feeAmount
307
+ )
308
+ external
309
+ virtual
310
+ // TODO re-enable once role granting is stable and fixed
311
+ // restricted()
312
+ {
313
+ _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
314
+ }
315
+
299
316
  //-------- oracle -------------------------------------------------------//
300
317
 
301
318
  function registerOracle()
@@ -494,22 +511,24 @@ contract ComponentService is
494
511
 
495
512
  component.linkToRegisteredNftId();
496
513
 
497
- // setup initial component authorization
498
- _instanceService.initializeAuthorization(
499
- instance.getNftId(),
500
- component);
501
-
502
514
  // save amended component info with instance
503
515
  instanceReader = instance.getInstanceReader();
504
516
  instanceStore = instance.getInstanceStore();
505
517
 
506
- IComponents.ComponentInfo memory componentInfo = component.getComponentInfo();
507
- componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
518
+ IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
519
+ componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
520
+ address(componentInfo.token),
521
+ address(instance.getInstanceAdmin().authority()));
508
522
 
509
523
  instanceStore.createComponent(
510
524
  component.getNftId(),
511
525
  componentInfo);
512
526
 
527
+ // setup initial component authorization
528
+ _instanceService.initializeAuthorization(
529
+ instance.getNftId(),
530
+ component);
531
+
513
532
  // TODO add logging
514
533
  }
515
534
 
@@ -603,7 +622,7 @@ contract ComponentService is
603
622
  }
604
623
 
605
624
  // check component has not already been registered
606
- if (getRegistry().getNftId(componentAddress).gtz()) {
625
+ if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
607
626
  revert ErrorComponentServiceAlreadyRegistered(componentAddress);
608
627
  }
609
628
 
@@ -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
  }
@@ -32,7 +32,7 @@ abstract contract ComponentVerifyingService is
32
32
  IInstance instance
33
33
  )
34
34
  {
35
- componentNftId = getRegistry().getNftId(msg.sender);
35
+ componentNftId = getRegistry().getNftIdForAddress(msg.sender);
36
36
  (componentInfo, instance) = _getAndVerifyComponentInfo(
37
37
  componentNftId,
38
38
  expectedType,
@@ -111,7 +111,6 @@ abstract contract ComponentVerifyingService is
111
111
  /// @dev returns an IInstance contract reference for the specified instance nft id
112
112
  function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
113
113
  return IInstance(
114
- getRegistry().getObjectInfo(
115
- instanceNftId).objectAddress);
114
+ getRegistry().getObjectAddress(instanceNftId));
116
115
  }
117
116
  }
@@ -0,0 +1,38 @@
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
+
9
+ library ContractLib {
10
+
11
+ function isPolicyHolder(address target) external view returns (bool) {
12
+ return ERC165Checker.supportsInterface(target, type(IPolicyHolder).interfaceId);
13
+ }
14
+
15
+ function isAccessManaged(address target) external view returns (bool) {
16
+ if (!isContract(target)) {
17
+ return false;
18
+ }
19
+
20
+ (bool success, ) = target.staticcall(
21
+ abi.encodeWithSelector(
22
+ IAccessManaged.authority.selector));
23
+
24
+ return success;
25
+ }
26
+
27
+ function isContract(address target) public view returns (bool) {
28
+ uint256 size;
29
+ assembly {
30
+ size := extcodesize(target)
31
+ }
32
+ return size > 0;
33
+ }
34
+
35
+ function supportsInterface(address target, bytes4 interfaceId) external view returns (bool) {
36
+ return ERC165Checker.supportsInterface(target, interfaceId);
37
+ }
38
+ }
@@ -8,6 +8,8 @@ import {Amount} from "../type/Amount.sol";
8
8
  import {IComponents} from "../instance/module/IComponents.sol";
9
9
  import {IRegisterable} from "../shared/IRegisterable.sol";
10
10
  import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
11
+ import {NftId} from "../type/NftId.sol";
12
+ import {ObjectType} from "../type/ObjectType.sol";
11
13
  import {TokenHandler} from "../shared/TokenHandler.sol";
12
14
 
13
15
  /// @dev component base class
@@ -18,12 +20,12 @@ interface IComponent is
18
20
  ITransferInterceptor
19
21
  {
20
22
  error ErrorComponentNotChainNft(address caller);
23
+ error ErrorNftNotObjectType(NftId nftId, ObjectType objectType, ObjectType expectedObjectType);
21
24
 
22
25
  error ErrorComponentTokenAddressZero();
23
26
  error ErrorComponentNameLengthZero();
24
27
  error ErrorComponentWalletAddressZero();
25
28
  error ErrorComponentWalletAddressIsSameAsCurrent();
26
- error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
27
29
  error ErrorComponentWalletNotComponent();
28
30
 
29
31
  event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
@@ -35,10 +37,11 @@ interface IComponent is
35
37
  /// only component owner (nft holder) is authorizes to call this function
36
38
  function approveTokenHandler(Amount spendingLimitAmount) external;
37
39
 
38
- /// @dev sets the wallet address for the component
39
- /// if the current wallet has tokens, these will be transferred
40
+ /// @dev sets the wallet address for the component.
41
+ /// if the current wallet has tokens, these will be transferred.
40
42
  /// 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
43
+ /// owner of the external wallet to the tokenhandler of the component that
44
+ /// covers the current component balance must exist
42
45
  function setWallet(address walletAddress) external;
43
46
 
44
47
  /// @dev returns the name of this component
@@ -1,21 +1,12 @@
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
4
 
7
5
  import {Amount} from "../type/Amount.sol";
8
6
  import {Fee} from "../type/Fee.sol";
9
- import {IComponents} from "../instance/module/IComponents.sol";
10
- import {IInstance} from "../instance/IInstance.sol";
11
- import {IInstanceService} from "../instance/IInstanceService.sol";
12
7
  import {InstanceStore} from "../instance/InstanceStore.sol";
13
- import {IProductService} from "../product/IProductService.sol";
14
- import {IRegisterable} from "../shared/IRegisterable.sol";
15
8
  import {IService} from "../shared/IService.sol";
16
9
  import {NftId} from "../type/NftId.sol";
17
- import {ObjectType} from "../type/ObjectType.sol";
18
- import {TokenHandler} from "../shared/TokenHandler.sol";
19
10
  import {UFixed} from "../type/UFixed.sol";
20
11
 
21
12
  /// @dev component base class
@@ -87,6 +78,10 @@ interface IComponentService is
87
78
  function increaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
88
79
  function decreaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
89
80
 
81
+ //-------- distributor --------------------------------------------------//
82
+ function increaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
83
+ function decreaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
84
+
90
85
  //-------- oracle -------------------------------------------------------//
91
86
 
92
87
  /// @dev registers the sending component as an oracle component
@@ -109,4 +104,5 @@ interface IComponentService is
109
104
  //-------- bundle -------------------------------------------------------//
110
105
  function increaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
111
106
  function decreaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
107
+
112
108
  }
@@ -7,21 +7,14 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
7
7
  import {Amount} from "../type/Amount.sol";
8
8
  import {IComponent} from "../shared/IComponent.sol";
9
9
  import {IAuthorization} from "../authorization/IAuthorization.sol";
10
- import {IComponents} from "../instance/module/IComponents.sol";
11
10
  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
11
  import {NftId} from "../type/NftId.sol";
16
- import {ObjectType} from "../type/ObjectType.sol";
17
- import {TokenHandler} from "../shared/TokenHandler.sol";
18
12
 
19
13
  /// @dev component base class
20
14
  /// component examples are product, distribution, pool and oracle
21
15
  interface IInstanceLinkedComponent is
22
16
  IComponent
23
17
  {
24
- error ErrorComponentNotProductService(address caller);
25
18
  error ErrorComponentNotInstance(NftId instanceNftId);
26
19
  error ErrorComponentProductNftAlreadySet();
27
20
 
@@ -38,19 +31,19 @@ interface IInstanceLinkedComponent is
38
31
  /// only component owner (nft holder) is authorizes to call this function
39
32
  function unlock() external;
40
33
 
34
+ /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
35
+ /// @param amount the amount to withdraw
36
+ /// @return withdrawnAmount the amount that was actually withdrawn
37
+ function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
38
+
41
39
  /// @dev defines the instance to which this component is linked to
42
40
  function getInstance() external view returns (IInstance instance);
43
41
 
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
42
  /// @dev returns the initial component authorization specification.
49
43
  function getAuthorization() external view returns (IAuthorization authorization);
50
44
 
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);
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);
55
48
 
56
49
  }
@@ -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
  }
@@ -4,20 +4,20 @@ pragma solidity ^0.8.20;
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
  import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
6
6
 
7
- contract ERC165 is
7
+ contract InitializableERC165 is
8
8
  Initializable,
9
9
  IERC165
10
10
  {
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
 
@@ -96,14 +96,13 @@ abstract contract InstanceLinkedComponent is
96
96
  // set and check linked instance
97
97
  InstanceLinkedComponentStorage storage $ = _getInstanceLinkedComponentStorage();
98
98
  $._instance = IInstance(
99
- IRegistry(registry).getObjectInfo(
100
- instanceNftId).objectAddress);
99
+ IRegistry(registry).getObjectAddress(instanceNftId));
101
100
 
102
101
  if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
103
102
  revert ErrorComponentNotInstance(instanceNftId);
104
103
  }
105
104
 
106
- initializeComponent(
105
+ _initializeComponent(
107
106
  $._instance.authority(),
108
107
  registry,
109
108
  instanceNftId,
@@ -120,8 +119,8 @@ abstract contract InstanceLinkedComponent is
120
119
  $._initialAuthorization = authorization;
121
120
  $._componentService = IComponentService(_getServiceAddress(COMPONENT()));
122
121
 
123
- registerInterface(type(IAccessManaged).interfaceId);
124
- registerInterface(type(IInstanceLinkedComponent).interfaceId);
122
+ _registerInterface(type(IAccessManaged).interfaceId);
123
+ _registerInterface(type(IInstanceLinkedComponent).interfaceId);
125
124
  }
126
125
 
127
126
  /// @dev for instance linked components the wallet address stored in the instance store.
@@ -132,7 +131,7 @@ abstract contract InstanceLinkedComponent is
132
131
 
133
132
 
134
133
  function _getComponentInfo() internal virtual override view returns (IComponents.ComponentInfo memory info) {
135
- NftId componentNftId = getRegistry().getNftId(address(this));
134
+ NftId componentNftId = getRegistry().getNftIdForAddress(address(this));
136
135
 
137
136
  // if registered, attempt to return component info via instance reader
138
137
  if (componentNftId.gtz()) {
@@ -1,13 +1,13 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {ERC165} from "./ERC165.sol";
4
+ import {InitializableERC165} from "./InitializableERC165.sol";
5
5
  import {INftOwnable} from "./INftOwnable.sol";
6
6
  import {NftId} from "../type/NftId.sol";
7
7
  import {RegistryLinked} from "./RegistryLinked.sol";
8
8
 
9
9
  contract NftOwnable is
10
- ERC165,
10
+ InitializableERC165,
11
11
  RegistryLinked,
12
12
  INftOwnable
13
13
  {
@@ -30,16 +30,16 @@ contract NftOwnable is
30
30
 
31
31
  /// @dev initialization for upgradable contracts
32
32
  // used in _initializeRegisterable
33
- function initializeNftOwnable(
33
+ function _initializeNftOwnable(
34
34
  address initialOwner,
35
35
  address registryAddress
36
36
  )
37
- public
37
+ internal
38
38
  virtual
39
39
  onlyInitializing()
40
40
  {
41
- initializeRegistryLinked(registryAddress);
42
- initializeERC165();
41
+ _initializeRegistryLinked(registryAddress);
42
+ _initializeERC165();
43
43
 
44
44
  if(initialOwner == address(0)) {
45
45
  revert ErrorNftOwnableInitialOwnerZero();
@@ -93,7 +93,7 @@ contract NftOwnable is
93
93
  revert ErrorNftOwnableContractNotRegistered(nftOwnableAddress);
94
94
  }
95
95
 
96
- $._nftId = getRegistry().getNftId(nftOwnableAddress);
96
+ $._nftId = getRegistry().getNftIdForAddress(nftOwnableAddress);
97
97
 
98
98
  return $._nftId;
99
99
  }