@etherisc/gif-next 0.0.2-b9366f5-670 → 0.0.2-b95860d-028

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 (436) hide show
  1. package/README.md +1 -1
  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 +148 -222
  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 +88 -186
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +125 -198
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +99 -107
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +75 -57
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +29 -0
  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 +1551 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2090 -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 +1484 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1244 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1605 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2108 -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 +48 -31
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +29 -84
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +51 -105
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +165 -138
  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 +280 -72
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +77 -242
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -87
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +189 -98
  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 +130 -204
  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 +71 -53
  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 +84 -182
  99. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  100. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +91 -159
  101. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +75 -83
  103. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  104. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +103 -186
  105. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  106. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +82 -22
  107. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  108. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +178 -187
  109. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +117 -105
  111. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  112. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +53 -0
  113. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  114. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +92 -46
  115. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  116. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +200 -115
  117. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  118. package/artifacts/contracts/pool/Pool.sol/Pool.json +103 -173
  119. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  120. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +308 -264
  121. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +108 -88
  123. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  124. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +71 -144
  125. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +72 -80
  127. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  128. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +140 -197
  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 +194 -200
  133. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  134. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +116 -104
  135. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  136. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +29 -0
  137. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  138. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +64 -8
  139. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  140. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +140 -0
  141. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  142. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +80 -51
  143. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  144. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +129 -70
  145. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  146. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +29 -0
  147. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  148. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +252 -166
  149. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +107 -91
  151. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  152. package/artifacts/contracts/product/PricingService.sol/PricingService.json +154 -219
  153. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  154. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +87 -91
  155. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  156. package/artifacts/contracts/product/Product.sol/Product.json +140 -197
  157. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  158. package/artifacts/contracts/product/RiskService.sol/RiskService.json +65 -138
  159. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +69 -77
  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 +285 -33
  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 +0 -18
  169. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  170. package/artifacts/contracts/registry/Registry.sol/Registry.json +491 -94
  171. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  172. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +283 -143
  173. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  174. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +78 -284
  175. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  176. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -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 +129 -221
  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 +63 -157
  187. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  188. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +351 -263
  189. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  190. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +120 -110
  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 +92 -0
  195. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  196. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +50 -28
  197. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +321 -19
  199. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  200. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +71 -53
  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 +84 -182
  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 +2 -2
  236. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  237. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +2 -2
  238. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  239. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +50 -28
  240. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  241. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  242. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  243. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
  244. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  245. package/artifacts/contracts/staking/Staking.sol/Staking.json +133 -207
  246. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  247. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  248. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  249. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +99 -88
  250. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  251. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -12
  252. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  253. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +71 -165
  254. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  255. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +71 -79
  256. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  257. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +144 -103
  258. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  259. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  260. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  261. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  263. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  266. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  268. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  270. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  271. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  272. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  274. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  275. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  276. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  278. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  280. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  282. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  284. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  286. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  288. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  293. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
  297. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
  299. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  300. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  301. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  302. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  303. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +55 -70
  304. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  305. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  306. package/contracts/authorization/AccessAdmin.sol +64 -59
  307. package/contracts/authorization/Authorization.sol +111 -39
  308. package/contracts/authorization/IAccess.sol +1 -0
  309. package/contracts/authorization/IAccessAdmin.sol +4 -3
  310. package/contracts/authorization/IAuthorization.sol +13 -7
  311. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  312. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  313. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  314. package/contracts/distribution/BasicDistribution.sol +2 -1
  315. package/contracts/distribution/Distribution.sol +5 -15
  316. package/contracts/distribution/DistributionService.sol +61 -43
  317. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  318. package/contracts/examples/fire/DamageLevel.sol +59 -0
  319. package/contracts/examples/fire/FirePool.sol +75 -0
  320. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  321. package/contracts/examples/fire/FireProduct.sol +412 -0
  322. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  323. package/contracts/examples/fire/FireUSD.sol +26 -0
  324. package/contracts/{example_components → examples}/unpermissioned/SimpleDistribution.sol +4 -4
  325. package/contracts/{example_components → examples}/unpermissioned/SimpleOracle.sol +4 -4
  326. package/contracts/{example_components → examples}/unpermissioned/SimplePool.sol +4 -4
  327. package/contracts/{example_components → examples}/unpermissioned/SimpleProduct.sol +10 -10
  328. package/contracts/instance/IInstance.sol +4 -1
  329. package/contracts/instance/IInstanceService.sol +0 -20
  330. package/contracts/instance/Instance.sol +21 -12
  331. package/contracts/instance/InstanceAdmin.sol +22 -30
  332. package/contracts/instance/InstanceAuthorizationV3.sol +9 -19
  333. package/contracts/instance/InstanceReader.sol +83 -18
  334. package/contracts/instance/InstanceService.sol +19 -76
  335. package/contracts/instance/InstanceServiceManager.sol +6 -7
  336. package/contracts/instance/module/IComponents.sol +9 -4
  337. package/contracts/instance/module/IPolicy.sol +2 -2
  338. package/contracts/oracle/BasicOracle.sol +0 -1
  339. package/contracts/oracle/IOracleService.sol +2 -1
  340. package/contracts/oracle/Oracle.sol +5 -16
  341. package/contracts/oracle/OracleService.sol +47 -35
  342. package/contracts/oracle/OracleServiceManager.sol +6 -6
  343. package/contracts/pool/BasicPool.sol +14 -26
  344. package/contracts/pool/BasicPoolAuthorization.sol +0 -1
  345. package/contracts/pool/BundleService.sol +32 -9
  346. package/contracts/pool/BundleServiceManager.sol +6 -6
  347. package/contracts/pool/IBundleService.sol +9 -0
  348. package/contracts/pool/IPoolComponent.sol +18 -8
  349. package/contracts/pool/IPoolService.sol +21 -14
  350. package/contracts/pool/Pool.sol +39 -30
  351. package/contracts/pool/PoolService.sol +99 -83
  352. package/contracts/pool/PoolServiceManager.sol +4 -4
  353. package/contracts/product/ApplicationService.sol +11 -8
  354. package/contracts/product/ApplicationServiceManager.sol +4 -4
  355. package/contracts/product/BasicProduct.sol +6 -6
  356. package/contracts/product/BasicProductAuthorization.sol +0 -1
  357. package/contracts/product/ClaimService.sol +190 -86
  358. package/contracts/product/ClaimServiceManager.sol +4 -4
  359. package/contracts/product/IClaimService.sol +3 -2
  360. package/contracts/product/IPolicyService.sol +10 -3
  361. package/contracts/product/IPricingService.sol +9 -9
  362. package/contracts/product/IProductComponent.sol +23 -3
  363. package/contracts/product/PolicyService.sol +145 -35
  364. package/contracts/product/PolicyServiceManager.sol +4 -4
  365. package/contracts/product/PricingService.sol +8 -12
  366. package/contracts/product/PricingServiceManager.sol +3 -3
  367. package/contracts/product/Product.sol +83 -53
  368. package/contracts/product/RiskService.sol +4 -5
  369. package/contracts/product/RiskServiceManager.sol +4 -4
  370. package/contracts/registry/ChainNft.sol +65 -36
  371. package/contracts/registry/IRegistry.sol +54 -17
  372. package/contracts/registry/IRegistryService.sol +5 -12
  373. package/contracts/registry/ITransferInterceptor.sol +0 -1
  374. package/contracts/registry/Registry.sol +341 -200
  375. package/contracts/registry/RegistryAdmin.sol +124 -50
  376. package/contracts/registry/RegistryService.sol +35 -46
  377. package/contracts/registry/RegistryServiceManager.sol +2 -2
  378. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  379. package/contracts/registry/ReleaseRegistry.sol +203 -187
  380. package/contracts/registry/ServiceAuthorizationV3.sol +14 -19
  381. package/contracts/shared/Component.sol +26 -18
  382. package/contracts/shared/ComponentService.sol +230 -136
  383. package/contracts/shared/ComponentServiceManager.sol +8 -5
  384. package/contracts/shared/ComponentVerifyingService.sol +22 -13
  385. package/contracts/shared/ContractLib.sol +38 -0
  386. package/contracts/shared/IComponent.sol +6 -2
  387. package/contracts/shared/IComponentService.sol +25 -13
  388. package/contracts/shared/IInstanceLinkedComponent.sol +3 -11
  389. package/contracts/shared/ILifecycle.sol +3 -1
  390. package/contracts/shared/INftOwnable.sol +2 -0
  391. package/contracts/shared/IPolicyHolder.sol +12 -22
  392. package/contracts/shared/IRegisterable.sol +11 -0
  393. package/contracts/shared/InitializableERC165.sol +2 -2
  394. package/contracts/shared/InstanceLinkedComponent.sol +71 -30
  395. package/contracts/shared/KeyValueStore.sol +1 -1
  396. package/contracts/shared/Lifecycle.sol +15 -4
  397. package/contracts/shared/NftOwnable.sol +22 -6
  398. package/contracts/shared/PolicyHolder.sol +15 -52
  399. package/contracts/shared/Registerable.sol +19 -9
  400. package/contracts/shared/RegistryLinked.sol +3 -2
  401. package/contracts/shared/Service.sol +20 -18
  402. package/contracts/staking/IStakingService.sol +0 -3
  403. package/contracts/staking/Staking.sol +5 -6
  404. package/contracts/staking/StakingManager.sol +8 -6
  405. package/contracts/staking/StakingReader.sol +12 -5
  406. package/contracts/staking/StakingService.sol +3 -17
  407. package/contracts/staking/StakingServiceManager.sol +2 -2
  408. package/contracts/type/Amount.sol +15 -0
  409. package/contracts/type/ClaimId.sol +6 -1
  410. package/contracts/type/NftId.sol +1 -0
  411. package/contracts/type/ObjectType.sol +1 -0
  412. package/contracts/type/PayoutId.sol +10 -10
  413. package/contracts/type/RiskId.sol +15 -1
  414. package/contracts/type/RoleId.sol +0 -12
  415. package/contracts/type/StateId.sol +14 -1
  416. package/contracts/type/UFixed.sol +4 -0
  417. package/contracts/upgradeability/ProxyManager.sol +68 -34
  418. package/contracts/upgradeability/Versionable.sol +2 -2
  419. package/package.json +2 -1
  420. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  421. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  422. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  423. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  424. package/artifacts/contracts/example_components/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +0 -4
  425. package/artifacts/contracts/example_components/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +0 -1558
  426. package/artifacts/contracts/example_components/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +0 -4
  427. package/artifacts/contracts/example_components/unpermissioned/SimpleOracle.sol/SimpleOracle.json +0 -1318
  428. package/artifacts/contracts/example_components/unpermissioned/SimplePool.sol/SimplePool.dbg.json +0 -4
  429. package/artifacts/contracts/example_components/unpermissioned/SimplePool.sol/SimplePool.json +0 -1664
  430. package/artifacts/contracts/example_components/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +0 -4
  431. package/artifacts/contracts/example_components/unpermissioned/SimpleProduct.sol/SimpleProduct.json +0 -2125
  432. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  433. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  434. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  435. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  436. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -0,0 +1,412 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ACTIVE, PAUSED} from "../../type/StateId.sol";
5
+ import {Amount, AmountLib} from "../../type/Amount.sol";
6
+ import {BasicProduct} from "../../product/BasicProduct.sol";
7
+ import {ClaimId} from "../../type/ClaimId.sol";
8
+ import {DamageLevel, DAMAGE_SMALL, DAMAGE_MEDIUM, DAMAGE_LARGE} from "./DamageLevel.sol";
9
+ import {IAuthorization} from "../../authorization/IAuthorization.sol";
10
+ import {IPolicy} from "../../instance/module/IPolicy.sol";
11
+ import {NftId} from "../../type/NftId.sol";
12
+ import {PayoutId} from "../../type/PayoutId.sol";
13
+ import {POLICY} from "../../type/ObjectType.sol";
14
+ import {ReferralLib} from "../../type/Referral.sol";
15
+ import {RiskId, RiskIdLib} from "../../type/RiskId.sol";
16
+ import {Seconds} from "../../type/Seconds.sol";
17
+ import {Timestamp, TimestampLib} from "../../type/Timestamp.sol";
18
+ import {UFixed, UFixedLib} from "../../type/UFixed.sol";
19
+
20
+ // solhint-disable-next-line func-name-mixedcase
21
+ function HALF_YEAR() pure returns (Seconds) {
22
+ return Seconds.wrap(180 * 86400);
23
+ }
24
+
25
+ // solhint-disable-next-line func-name-mixedcase
26
+ function ONE_YEAR() pure returns (Seconds) {
27
+ return Seconds.wrap(360 * 86400);
28
+ }
29
+
30
+ /// @dev This is the product component for the fire insurance example.
31
+ /// It show how to insure a house for a given suminsured in a city.
32
+ /// The risk is based on the city.
33
+ /// If a fire is reported in the city, the policy holder is able to submit a claim and get a payout.
34
+ contract FireProduct is
35
+ BasicProduct
36
+ {
37
+ struct Fire {
38
+ string cityName;
39
+ DamageLevel damageLevel;
40
+ Timestamp reportedAt;
41
+ }
42
+
43
+ error ErrorFireProductCityUnknown(string cityName);
44
+ error ErrorFireProductTimestampInFuture();
45
+ error ErrorFireProductFireAlreadyReported();
46
+ error ErrorFireProductAlreadyClaimed();
47
+ error ErrorFireProductPolicyNotActive(NftId policyNftId);
48
+ error ErrorFireProductPolicyNotYetActive(NftId policyNftId, Timestamp activateAt);
49
+ error ErrorFireProductPolicyExpired(NftId policyNftId, Timestamp expiredAt);
50
+ error ErrorFireProductUnknownDamageLevel(DamageLevel damageLevel);
51
+ error ErrorFireProductFireUnknown(uint256 fireId);
52
+ error ErrorFireProductNotPolicyOwner(NftId nftId, address owner);
53
+ error ErrorFireProductFireNotInCoveredCity(uint256 fireId, string cityName);
54
+
55
+ string[] private _cities;
56
+ // map from city name to the RiskId
57
+ mapping(string cityName => RiskId risk) private _riskMapping;
58
+
59
+ // map from city name to the damage level and the time of the report
60
+ mapping(uint256 fireId => Fire) private _fires;
61
+ mapping(uint256 fireId => mapping (NftId policyId => bool claimed)) private _claimed;
62
+
63
+ constructor(
64
+ address registry,
65
+ NftId instanceNftid,
66
+ string memory componentName,
67
+ address token,
68
+ address pool,
69
+ IAuthorization authorization
70
+ )
71
+ {
72
+ address initialOwner = msg.sender;
73
+
74
+ _initialize(
75
+ registry,
76
+ instanceNftid,
77
+ componentName,
78
+ token,
79
+ pool,
80
+ authorization,
81
+ initialOwner);
82
+ }
83
+
84
+ function _initialize(
85
+ address registry,
86
+ NftId instanceNftid,
87
+ string memory componentName,
88
+ address token,
89
+ address pool,
90
+ IAuthorization authorization,
91
+ address initialOwner
92
+ )
93
+ internal
94
+ initializer
95
+ {
96
+ _initializeBasicProduct(
97
+ registry,
98
+ instanceNftid,
99
+ authorization,
100
+ initialOwner,
101
+ componentName,
102
+ token,
103
+ false, // is interceptor
104
+ false, // has distribution
105
+ 0); // number of oracles
106
+ }
107
+
108
+ function cities() public view returns (uint256) {
109
+ return _cities.length;
110
+ }
111
+
112
+ function city(uint256 idx) public view returns (string memory) {
113
+ return _cities[idx];
114
+ }
115
+
116
+ function riskId(string memory cityName) public view returns (RiskId) {
117
+ return _riskMapping[cityName];
118
+ }
119
+
120
+ function pauseCity(
121
+ string memory cityName
122
+ )
123
+ public
124
+ restricted()
125
+ {
126
+ if (_riskMapping[cityName].eqz()) {
127
+ revert ErrorFireProductCityUnknown(cityName);
128
+ }
129
+
130
+ _updateRiskState(
131
+ _riskMapping[cityName],
132
+ PAUSED()
133
+ );
134
+ }
135
+
136
+ function unpauseCity(
137
+ string memory cityName
138
+ )
139
+ public
140
+ restricted()
141
+ {
142
+ if (_riskMapping[cityName].eqz()) {
143
+ revert ErrorFireProductCityUnknown(cityName);
144
+ }
145
+
146
+ _updateRiskState(
147
+ _riskMapping[cityName],
148
+ ACTIVE()
149
+ );
150
+ }
151
+
152
+ function calculatePremium(
153
+ string memory cityName,
154
+ Amount sumInsured,
155
+ Seconds lifetime,
156
+ NftId bundleNftId
157
+ )
158
+ public
159
+ view
160
+ returns (Amount premiumAmount)
161
+ {
162
+ RiskId risk = _riskMapping[cityName];
163
+ if (risk.eqz()) {
164
+ revert ErrorFireProductCityUnknown(cityName);
165
+ }
166
+ premiumAmount = calculatePremium(
167
+ sumInsured,
168
+ risk,
169
+ lifetime,
170
+ "",
171
+ bundleNftId,
172
+ ReferralLib.zero());
173
+ }
174
+
175
+ function calculateNetPremium(
176
+ Amount sumInsured,
177
+ RiskId,
178
+ Seconds lifetime,
179
+ bytes memory
180
+ )
181
+ external
182
+ view
183
+ virtual override
184
+ returns (Amount netPremiumAmount)
185
+ {
186
+ UFixed numDays = UFixedLib.toUFixed(lifetime.toInt() / 86400);
187
+ // to simplify time calculation we assume 360 days per year
188
+ UFixed pctOfYear = numDays / UFixedLib.toUFixed(360);
189
+ Amount premiumPerYear = AmountLib.toAmount(sumInsured.toInt() / 20);
190
+ return premiumPerYear.multiplyWith(pctOfYear);
191
+ }
192
+
193
+ function createApplication(
194
+ string memory cityName,
195
+ Amount sumInsured,
196
+ Seconds lifetime,
197
+ NftId bundleNftId
198
+ )
199
+ public
200
+ restricted()
201
+ returns (NftId policyNftId)
202
+ {
203
+ address applicationOwner = msg.sender;
204
+ RiskId risk = initializeCity(cityName);
205
+
206
+ Amount premiumAmount = calculatePremium(
207
+ sumInsured,
208
+ risk,
209
+ lifetime,
210
+ "",
211
+ bundleNftId,
212
+ ReferralLib.zero());
213
+
214
+ return _createApplication(
215
+ applicationOwner,
216
+ risk,
217
+ sumInsured,
218
+ premiumAmount,
219
+ lifetime,
220
+ bundleNftId,
221
+ ReferralLib.zero(),
222
+ ""
223
+ );
224
+ }
225
+
226
+ function initializeCity(
227
+ string memory cityName
228
+ )
229
+ public
230
+ returns (RiskId risk)
231
+ {
232
+ if (! _riskMapping[cityName].eqz()) {
233
+ return _riskMapping[cityName];
234
+ }
235
+ _cities.push(cityName);
236
+ risk = RiskIdLib.toRiskId(cityName);
237
+ _createRisk(risk, "");
238
+ _riskMapping[cityName] = risk;
239
+ }
240
+
241
+ /// @dev Calling this method will lock the sum insured amount in the pool and activate the policy at the given time.
242
+ /// It will also collect the tokens payment for the premium. An approval with the correct amount towards the TokenHandler of the product is therefor required.
243
+ function createPolicy(
244
+ NftId policyNftId,
245
+ Timestamp activateAt
246
+ )
247
+ public
248
+ restricted()
249
+ onlyOwner()
250
+ {
251
+ _createPolicy(policyNftId, activateAt);
252
+ _collectPremium(policyNftId, activateAt);
253
+ }
254
+
255
+ /// @dev Decline the policy application
256
+ function decline(
257
+ NftId policyNftId
258
+ )
259
+ public
260
+ restricted()
261
+ onlyOwner()
262
+ {
263
+ _decline(policyNftId);
264
+ }
265
+
266
+ function expire(
267
+ NftId policyNftId,
268
+ Timestamp expireAt
269
+ )
270
+ public
271
+ restricted()
272
+ onlyOwner()
273
+ returns (Timestamp)
274
+ {
275
+ return _expire(policyNftId, expireAt);
276
+ }
277
+
278
+ function close(
279
+ NftId policyNftId
280
+ )
281
+ public
282
+ restricted()
283
+ onlyOwner()
284
+ {
285
+ _close(policyNftId);
286
+ }
287
+
288
+ function reportFire(
289
+ uint256 fireId,
290
+ string memory cityName,
291
+ DamageLevel damageLevel,
292
+ Timestamp reportedAt
293
+ )
294
+ public
295
+ restricted()
296
+ {
297
+ if (_riskMapping[cityName].eqz()) {
298
+ revert ErrorFireProductCityUnknown(cityName);
299
+ }
300
+
301
+ if (reportedAt > TimestampLib.blockTimestamp()) {
302
+ revert ErrorFireProductTimestampInFuture();
303
+ }
304
+
305
+ if (! _fires[fireId].reportedAt.eqz()) {
306
+ revert ErrorFireProductFireAlreadyReported();
307
+ }
308
+
309
+ _fires[fireId] = Fire({
310
+ cityName: cityName,
311
+ damageLevel: damageLevel,
312
+ reportedAt: reportedAt
313
+ });
314
+ }
315
+
316
+ function fire(uint256 fireId) public view returns (Fire memory) {
317
+ return _fires[fireId];
318
+ }
319
+
320
+ function submitClaim(
321
+ NftId policyNftId,
322
+ uint256 fireId
323
+ )
324
+ public
325
+ restricted()
326
+ onlyNftOwner(policyNftId)
327
+ onlyNftOfType(policyNftId, POLICY())
328
+ returns (ClaimId claimId, PayoutId payoutId)
329
+ {
330
+ IPolicy.PolicyInfo memory policyInfo = _getInstanceReader().getPolicyInfo(policyNftId);
331
+ _checkClaimConditions(policyNftId, policyInfo, fireId);
332
+
333
+ Fire memory theFire = _fires[fireId];
334
+ _claimed[fireId][policyNftId] = true;
335
+
336
+ Amount claimAmount = _getClaimAmount(policyNftId, policyInfo.sumInsuredAmount, theFire.damageLevel);
337
+
338
+ claimId = _submitClaim(policyNftId, claimAmount, abi.encodePacked(fireId));
339
+ _confirmClaim(policyNftId, claimId, claimAmount, "");
340
+
341
+ payoutId = _createPayout(policyNftId, claimId, claimAmount, "");
342
+ _processPayout(policyNftId, payoutId);
343
+ }
344
+
345
+ function _checkClaimConditions(
346
+ NftId policyNftId,
347
+ IPolicy.PolicyInfo memory policyInfo,
348
+ uint256 fireId
349
+ )
350
+ internal
351
+ view
352
+ {
353
+ // check fire exists
354
+ if (_fires[fireId].reportedAt.eqz()) {
355
+ revert ErrorFireProductFireUnknown(fireId);
356
+ }
357
+
358
+ // check fire is in same city as policy coverage
359
+ if (_riskMapping[_fires[fireId].cityName] != policyInfo.riskId) {
360
+ revert ErrorFireProductFireNotInCoveredCity(fireId, _fires[fireId].cityName);
361
+ }
362
+
363
+ // check policy has not been claimed yet for this fire
364
+ if (_claimed[fireId][policyNftId]) {
365
+ revert ErrorFireProductAlreadyClaimed();
366
+ }
367
+
368
+ Fire memory theFire = _fires[fireId];
369
+
370
+ // check fire is during policy lifetime
371
+ if (theFire.reportedAt < policyInfo.activatedAt) {
372
+ revert ErrorFireProductPolicyNotYetActive(policyNftId, policyInfo.activatedAt);
373
+ }
374
+
375
+ if (theFire.reportedAt >= policyInfo.expiredAt) {
376
+ revert ErrorFireProductPolicyExpired(policyNftId, policyInfo.expiredAt);
377
+ }
378
+ }
379
+
380
+ function _getClaimAmount(
381
+ NftId policyNftId,
382
+ Amount sumInsured,
383
+ DamageLevel damageLevel
384
+ )
385
+ internal
386
+ view
387
+ returns (Amount)
388
+ {
389
+ Amount claimAmount = sumInsured.multiplyWith(_damageLevelToPayoutPercentage(damageLevel));
390
+ Amount maxPayoutRemaining = _getInstanceReader().getRemainingClaimableAmount(policyNftId);
391
+
392
+ // if payout is higher than the remaining maximum payout, then claim what is remaining
393
+ if (maxPayoutRemaining < claimAmount) {
394
+ return maxPayoutRemaining;
395
+ }
396
+
397
+ return claimAmount;
398
+ }
399
+
400
+ function _damageLevelToPayoutPercentage(DamageLevel damageLevel) internal pure returns (UFixed) {
401
+ if (damageLevel.eq(DAMAGE_SMALL())) {
402
+ return UFixedLib.toUFixed(25, -2);
403
+ } else if (damageLevel.eq(DAMAGE_MEDIUM())) {
404
+ return UFixedLib.toUFixed(5, -1);
405
+ } else if (damageLevel.eq(DAMAGE_LARGE())) {
406
+ return UFixedLib.toUFixed(1);
407
+ } else {
408
+ revert ErrorFireProductUnknownDamageLevel(damageLevel);
409
+ }
410
+ }
411
+
412
+ }
@@ -0,0 +1,44 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {BasicProductAuthorization} from "../../product/BasicProductAuthorization.sol";
5
+ import {FireProduct} from "./FireProduct.sol";
6
+ import {IAccess} from "../../../contracts/authorization/IAccess.sol";
7
+ import {PUBLIC_ROLE} from "../../../contracts/type/RoleId.sol";
8
+
9
+
10
+ contract FireProductAuthorization
11
+ is BasicProductAuthorization
12
+ {
13
+
14
+ constructor(string memory poolName)
15
+ BasicProductAuthorization(poolName)
16
+ {}
17
+
18
+ function _setupTargetAuthorizations()
19
+ internal
20
+ virtual override
21
+ {
22
+ super._setupTargetAuthorizations();
23
+ IAccess.FunctionInfo[] storage functions;
24
+
25
+ // authorize public role (open access to any account, only allows to lock target)
26
+ functions = _authorizeForTarget(getTargetName(), PUBLIC_ROLE());
27
+ // fully public functions
28
+ _authorize(functions, FireProduct.createApplication.selector, "createApplication");
29
+
30
+ // only owner
31
+ _authorize(functions, FireProduct.createPolicy.selector, "createPolicy");
32
+ _authorize(functions, FireProduct.decline.selector, "decline");
33
+ _authorize(functions, FireProduct.expire.selector, "expire");
34
+ _authorize(functions, FireProduct.close.selector, "close");
35
+
36
+ // only policy nft owner
37
+ _authorize(functions, FireProduct.submitClaim.selector, "submitClaim");
38
+
39
+ // TODO: add custom role for fire reporter
40
+ _authorize(functions, FireProduct.reportFire.selector, "reportFire");
41
+ }
42
+
43
+ }
44
+
@@ -0,0 +1,26 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
+
6
+ /// @dev FireUSD is a stablecoin with 6 decimals and an initial supply of 1 Billion tokens.
7
+ contract FireUSD is ERC20 {
8
+
9
+ string public constant NAME = "FireUSD";
10
+ string public constant SYMBOL = "HOT";
11
+ uint8 public constant DECIMALS = 6;
12
+ uint256 public constant INITIAL_SUPPLY = 10**12 * 10**DECIMALS; // 1'000'000'000'000
13
+
14
+ constructor()
15
+ ERC20(NAME, SYMBOL)
16
+ {
17
+ _mint(
18
+ _msgSender(),
19
+ INITIAL_SUPPLY
20
+ );
21
+ }
22
+
23
+ function decimals() public pure override returns(uint8) {
24
+ return DECIMALS;
25
+ }
26
+ }
@@ -12,7 +12,7 @@ contract SimpleDistribution is
12
12
 
13
13
  constructor(
14
14
  address registry,
15
- NftId instanceNftId,
15
+ NftId productNftId,
16
16
  IAuthorization authorization,
17
17
  address initialOwner,
18
18
  address token
@@ -20,7 +20,7 @@ contract SimpleDistribution is
20
20
  {
21
21
  initialize(
22
22
  registry,
23
- instanceNftId,
23
+ productNftId,
24
24
  authorization,
25
25
  initialOwner,
26
26
  "SimpleDistribution",
@@ -29,7 +29,7 @@ contract SimpleDistribution is
29
29
 
30
30
  function initialize(
31
31
  address registry,
32
- NftId instanceNftId,
32
+ NftId productNftId,
33
33
  IAuthorization authorization,
34
34
  address initialOwner,
35
35
  string memory name,
@@ -41,7 +41,7 @@ contract SimpleDistribution is
41
41
  {
42
42
  _initializeBasicDistribution(
43
43
  registry,
44
- instanceNftId,
44
+ productNftId,
45
45
  authorization,
46
46
  initialOwner,
47
47
  name,
@@ -32,7 +32,7 @@ contract SimpleOracle is
32
32
 
33
33
  constructor(
34
34
  address registry,
35
- NftId instanceNftId,
35
+ NftId productNftId,
36
36
  IAuthorization authorization,
37
37
  address initialOwner,
38
38
  address token
@@ -40,7 +40,7 @@ contract SimpleOracle is
40
40
  {
41
41
  initialize(
42
42
  registry,
43
- instanceNftId,
43
+ productNftId,
44
44
  authorization,
45
45
  initialOwner,
46
46
  "SimpleOracle",
@@ -50,7 +50,7 @@ contract SimpleOracle is
50
50
 
51
51
  function initialize(
52
52
  address registry,
53
- NftId instanceNftId,
53
+ NftId productNftId,
54
54
  IAuthorization authorization,
55
55
  address initialOwner,
56
56
  string memory name,
@@ -62,7 +62,7 @@ contract SimpleOracle is
62
62
  {
63
63
  _initializeBasicOracle(
64
64
  registry,
65
- instanceNftId,
65
+ productNftId,
66
66
  authorization,
67
67
  initialOwner,
68
68
  name,
@@ -16,7 +16,7 @@ contract SimplePool is
16
16
 
17
17
  constructor(
18
18
  address registry,
19
- NftId instanceNftId,
19
+ NftId productNftId,
20
20
  address token,
21
21
  IAuthorization authorization,
22
22
  address initialOwner
@@ -24,7 +24,7 @@ contract SimplePool is
24
24
  {
25
25
  initialize(
26
26
  registry,
27
- instanceNftId,
27
+ productNftId,
28
28
  token,
29
29
  authorization,
30
30
  initialOwner
@@ -33,7 +33,7 @@ contract SimplePool is
33
33
 
34
34
  function initialize(
35
35
  address registry,
36
- NftId instanceNftId,
36
+ NftId productNftId,
37
37
  address token,
38
38
  IAuthorization authorization,
39
39
  address initialOwner
@@ -44,7 +44,7 @@ contract SimplePool is
44
44
  {
45
45
  _initializeBasicPool(
46
46
  registry,
47
- instanceNftId,
47
+ productNftId,
48
48
  authorization,
49
49
  token,
50
50
  "SimplePool",
@@ -32,25 +32,25 @@ contract SimpleProduct is
32
32
 
33
33
  constructor(
34
34
  address registry,
35
- NftId instanceNftid,
35
+ NftId instanceNftId,
36
36
  IAuthorization authorization,
37
37
  address initialOwner,
38
38
  address token,
39
39
  bool isInterceptor,
40
- address pool,
41
- address distribution
40
+ bool hasDistribution,
41
+ uint8 numberOfOracles
42
42
  )
43
43
  {
44
44
  initialize(
45
45
  registry,
46
- instanceNftid,
46
+ instanceNftId,
47
47
  authorization,
48
48
  initialOwner,
49
49
  "SimpleProduct",
50
50
  token,
51
51
  isInterceptor,
52
- pool,
53
- distribution);
52
+ hasDistribution,
53
+ numberOfOracles);
54
54
  }
55
55
 
56
56
 
@@ -62,8 +62,8 @@ contract SimpleProduct is
62
62
  string memory name,
63
63
  address token,
64
64
  bool isInterceptor,
65
- address pool,
66
- address distribution
65
+ bool hasDistribution,
66
+ uint8 numberOfOracles
67
67
  )
68
68
  public
69
69
  virtual
@@ -77,8 +77,8 @@ contract SimpleProduct is
77
77
  name,
78
78
  token,
79
79
  isInterceptor,
80
- pool,
81
- distribution);
80
+ hasDistribution,
81
+ numberOfOracles);
82
82
 
83
83
  _oracleService = IOracleService(_getServiceAddress(ORACLE()));
84
84
  }
@@ -10,6 +10,7 @@ import {InstanceReader} from "./InstanceReader.sol";
10
10
  import {InstanceStore} from "./InstanceStore.sol";
11
11
  import {IRegisterable} from "../shared/IRegisterable.sol";
12
12
  import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
13
+ import {NftId} from "../type/NftId.sol";
13
14
  import {RoleId} from "../type/RoleId.sol";
14
15
  import {Seconds} from "../type/Seconds.sol";
15
16
  import {UFixed} from "../type/UFixed.sol";
@@ -38,6 +39,9 @@ interface IInstance is
38
39
  uint64 requestsCount;
39
40
  }
40
41
 
42
+ /// @dev Register a product with the instance.
43
+ function registerProduct(address product) external returns (NftId productNftId);
44
+
41
45
  function createRole(string memory roleName, string memory adminName) external returns (RoleId roleId, RoleId admin);
42
46
  function grantRole(RoleId roleId, address account) external;
43
47
  function revokeRole(RoleId roleId, address account) external;
@@ -55,7 +59,6 @@ interface IInstance is
55
59
  function withdrawStakingRewardReserves(Amount dipAmount) external returns (Amount newBalance);
56
60
 
57
61
  // get instance release and supporting contracts
58
- function getMajorVersion() external pure returns (VersionPart majorVersion);
59
62
  function getInstanceReader() external view returns (InstanceReader);
60
63
  function getBundleSet() external view returns (BundleSet);
61
64
  function getInstanceAdmin() external view returns (InstanceAdmin);
@@ -68,25 +68,5 @@ interface IInstanceService is IService {
68
68
  /// @dev Defunds the staking reward reserves for the specified target.
69
69
  function withdrawStakingRewardReserves(Amount dipAmount) external returns (Amount newBalance);
70
70
 
71
- /// @dev Sets up the component authorization for the specified instance.
72
- /// The authorization is based on the authz specification provided by the component via getAuthorization.
73
- function initializeAuthorization(NftId instanceNftId, IInstanceLinkedComponent component) external;
74
-
75
- function createComponentTarget(
76
- NftId instanceNftId,
77
- address targetAddress,
78
- string memory targetName,
79
- bytes4[][] memory selectors,
80
- RoleId[] memory roles
81
- ) external;
82
-
83
- function createGifTarget(
84
- NftId instanceNftId,
85
- address targetAddress,
86
- string memory targetName,
87
- bytes4[][] memory selectors,
88
- RoleId[] memory roles
89
- ) external;
90
-
91
71
  function setComponentLocked(bool locked) external;
92
72
  }