@etherisc/gif-next 0.0.2-9620cae-586 → 0.0.2-9628b30-648

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 (589) hide show
  1. package/README.md +103 -9
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1075 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +790 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +843 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +673 -262
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1289 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +202 -5
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +456 -24
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +549 -209
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +215 -18
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +265 -16
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +473 -17
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +212 -473
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +431 -36
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +139 -381
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +814 -399
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +228 -124
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +135 -187
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +582 -141
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1484 -0
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +805 -0
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2053 -0
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +805 -0
  49. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  50. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  51. package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.dbg.json +4 -0
  52. package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.json +1208 -0
  53. package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.dbg.json +4 -0
  54. package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.json +805 -0
  55. package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.dbg.json +4 -0
  56. package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.json +1476 -0
  57. package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.dbg.json +4 -0
  58. package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.json +805 -0
  59. package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.dbg.json +4 -0
  60. package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.json +2572 -0
  61. package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.dbg.json +4 -0
  62. package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.json +805 -0
  63. package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.dbg.json +4 -0
  64. package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.json +376 -0
  65. package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.dbg.json +4 -0
  66. package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.json +901 -0
  67. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  68. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1439 -0
  69. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  70. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +805 -0
  71. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  72. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  73. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  74. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1647 -0
  75. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  76. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +805 -0
  77. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  78. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2585 -0
  79. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  80. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +805 -0
  81. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  82. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
  83. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  84. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +567 -67
  85. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  86. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +385 -60
  87. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  88. package/artifacts/contracts/instance/Instance.sol/Instance.json +573 -165
  89. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  90. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1034 -311
  91. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  92. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +369 -68
  93. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  94. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1798 -793
  95. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +399 -231
  97. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  98. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +143 -105
  99. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  100. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +983 -782
  101. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  102. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +866 -0
  103. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  104. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
  105. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  106. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  107. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  108. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  109. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  110. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  111. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
  112. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  113. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  114. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  115. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  116. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  117. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  118. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  119. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  120. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  121. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  122. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +152 -350
  123. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  124. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +424 -37
  125. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  126. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  127. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +129 -129
  128. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  129. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +98 -11
  130. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  131. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +128 -318
  132. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  133. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +198 -190
  134. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  135. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +177 -97
  136. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  137. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +198 -433
  138. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  139. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +430 -35
  140. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  141. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +574 -270
  142. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  143. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +216 -104
  144. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  145. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +383 -53
  146. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  147. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +158 -212
  148. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  149. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +711 -340
  150. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  151. package/artifacts/contracts/pool/Pool.sol/Pool.json +148 -392
  152. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  153. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +522 -0
  154. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  155. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +925 -545
  156. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  157. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +230 -106
  158. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  159. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +353 -180
  160. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  161. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +159 -99
  162. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  163. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +287 -427
  164. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  165. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +430 -35
  166. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  167. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +466 -245
  168. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  169. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +187 -123
  170. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  171. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +301 -9
  172. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  173. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +350 -18
  174. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  175. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +417 -101
  176. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  177. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +183 -80
  178. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  179. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +272 -222
  180. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  181. package/artifacts/contracts/{shared/ComponentVerifyingService.sol/ComponentVerifyingService.json → product/IRiskService.sol/IRiskService.json} +283 -157
  182. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  183. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +532 -311
  184. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  185. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +783 -0
  186. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  187. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +196 -108
  188. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  189. package/artifacts/contracts/product/PricingService.sol/PricingService.json +249 -329
  190. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  191. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +165 -137
  192. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  193. package/artifacts/contracts/product/Product.sol/Product.json +279 -419
  194. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  195. package/artifacts/contracts/product/RiskService.sol/RiskService.json +873 -0
  196. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  197. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +774 -0
  198. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  199. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  200. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  201. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +359 -48
  202. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  203. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +169 -37
  204. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  205. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  206. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  207. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  208. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  209. package/artifacts/contracts/registry/Registry.sol/Registry.json +565 -109
  210. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  211. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +791 -377
  212. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  213. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1074 -0
  214. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  215. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +136 -290
  216. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  217. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +141 -89
  218. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  219. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2152 -0
  220. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  221. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  222. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  223. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +483 -253
  224. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  225. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +489 -20
  226. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  227. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +120 -60
  228. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  229. package/artifacts/contracts/shared/Component.sol/Component.json +86 -277
  230. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  231. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +624 -560
  232. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  233. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +198 -120
  234. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  235. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +632 -0
  236. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  237. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  238. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  239. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  240. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  241. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  242. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  243. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +92 -93
  244. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  245. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +535 -240
  246. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  247. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +118 -129
  248. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  249. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +42 -6
  250. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  251. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  252. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  253. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +35 -0
  254. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  255. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  256. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  257. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +167 -0
  258. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  259. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  260. package/artifacts/contracts/shared/IService.sol/IService.json +84 -2
  261. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  262. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  263. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  264. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +117 -318
  265. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  266. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +48 -7
  267. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  268. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  269. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  270. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  271. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  272. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +41 -57
  273. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  274. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  275. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  276. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +141 -97
  277. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  278. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  279. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  280. package/artifacts/contracts/shared/Service.sol/Service.json +86 -111
  281. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  282. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +585 -12
  283. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  284. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  285. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  286. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  287. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  288. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1510 -191
  289. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  290. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +235 -123
  291. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
  292. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
  293. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  294. package/artifacts/contracts/staking/Staking.sol/Staking.json +1635 -455
  295. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  296. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +470 -0
  297. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  298. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +191 -105
  299. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  300. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +295 -183
  301. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  302. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +282 -281
  303. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  304. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +144 -96
  305. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  306. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1643 -783
  307. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
  308. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
  309. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  310. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +184 -76
  311. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  312. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/Amount.sol/AmountLib.json +63 -10
  314. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +45 -19
  316. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
  317. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
  318. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  320. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  322. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/Fee.sol/FeeLib.json +98 -37
  324. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  325. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  326. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  327. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  328. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  330. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  331. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  332. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  333. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +33 -31
  334. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  335. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  336. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  337. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +23 -4
  338. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  339. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  340. package/artifacts/contracts/type/RequestIdSet.sol/RequestIdSet.dbg.json +4 -0
  341. package/artifacts/contracts/type/RequestIdSet.sol/RequestIdSet.json +33 -0
  342. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  343. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +125 -7
  344. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  345. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +42 -157
  346. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  347. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +112 -2
  348. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  349. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  350. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  351. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  352. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  353. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  354. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  355. package/artifacts/contracts/type/String.sol/StrLib.json +50 -2
  356. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  357. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +56 -5
  358. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  359. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +109 -35
  360. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  361. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  362. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  363. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +101 -2
  364. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  365. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +11 -1
  366. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  367. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +656 -0
  368. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  369. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +142 -0
  370. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  371. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +11 -1
  372. package/contracts/accounting/AccountingService.sol +274 -0
  373. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  374. package/contracts/accounting/IAccountingService.sol +47 -0
  375. package/contracts/authorization/AccessAdmin.sol +458 -269
  376. package/contracts/authorization/AccessAdminLib.sol +396 -0
  377. package/contracts/authorization/AccessManagerCloneable.sol +146 -4
  378. package/contracts/authorization/Authorization.sol +159 -208
  379. package/contracts/authorization/IAccess.sol +25 -6
  380. package/contracts/authorization/IAccessAdmin.sol +87 -79
  381. package/contracts/authorization/IAuthorization.sol +9 -37
  382. package/contracts/authorization/IServiceAuthorization.sol +57 -17
  383. package/contracts/authorization/ServiceAuthorization.sol +255 -25
  384. package/contracts/distribution/BasicDistribution.sol +22 -30
  385. package/contracts/distribution/BasicDistributionAuthorization.sol +34 -10
  386. package/contracts/distribution/Distribution.sol +48 -84
  387. package/contracts/distribution/DistributionService.sol +276 -130
  388. package/contracts/distribution/DistributionServiceManager.sol +8 -11
  389. package/contracts/distribution/IDistributionComponent.sol +11 -14
  390. package/contracts/distribution/IDistributionService.sol +56 -26
  391. package/contracts/examples/fire/DamageLevel.sol +59 -0
  392. package/contracts/examples/fire/FirePool.sol +86 -0
  393. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  394. package/contracts/examples/fire/FireProduct.sol +433 -0
  395. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  396. package/contracts/examples/fire/FireUSD.sol +26 -0
  397. package/contracts/examples/flight/FlightOracle.sol +160 -0
  398. package/contracts/examples/flight/FlightOracleAuthorization.sol +34 -0
  399. package/contracts/examples/flight/FlightPool.sol +89 -0
  400. package/contracts/examples/flight/FlightPoolAuthorization.sol +37 -0
  401. package/contracts/examples/flight/FlightProduct.sol +661 -0
  402. package/contracts/examples/flight/FlightProductAuthorization.sol +42 -0
  403. package/contracts/examples/flight/FlightUSD.sol +26 -0
  404. package/contracts/examples/flight/originalV1.sol +396 -0
  405. package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
  406. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  407. package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
  408. package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
  409. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  410. package/contracts/examples/unpermissioned/SimpleProduct.sol +437 -0
  411. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  412. package/contracts/instance/BundleSet.sol +42 -38
  413. package/contracts/instance/IInstance.sol +102 -43
  414. package/contracts/instance/IInstanceService.sol +59 -34
  415. package/contracts/instance/Instance.sol +193 -100
  416. package/contracts/instance/InstanceAdmin.sol +275 -158
  417. package/contracts/instance/InstanceAuthorizationV3.sol +120 -56
  418. package/contracts/instance/InstanceReader.sol +500 -251
  419. package/contracts/instance/InstanceService.sol +293 -236
  420. package/contracts/instance/InstanceServiceManager.sol +8 -13
  421. package/contracts/instance/InstanceStore.sol +24 -2
  422. package/contracts/instance/RiskSet.sol +126 -0
  423. package/contracts/instance/base/BalanceStore.sol +4 -6
  424. package/contracts/instance/base/ObjectCounter.sol +1 -2
  425. package/contracts/instance/base/ObjectLifecycle.sol +13 -10
  426. package/contracts/instance/base/ObjectSet.sol +31 -33
  427. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  428. package/contracts/instance/module/IBundle.sol +6 -5
  429. package/contracts/instance/module/IComponents.sol +30 -20
  430. package/contracts/instance/module/IDistribution.sol +21 -9
  431. package/contracts/instance/module/IPolicy.sol +50 -29
  432. package/contracts/instance/module/IRisk.sol +5 -0
  433. package/contracts/mock/Dip.sol +1 -1
  434. package/contracts/oracle/BasicOracle.sol +2 -5
  435. package/contracts/oracle/BasicOracleAuthorization.sol +14 -8
  436. package/contracts/oracle/IOracle.sol +9 -4
  437. package/contracts/oracle/IOracleComponent.sol +2 -1
  438. package/contracts/oracle/IOracleService.sol +14 -13
  439. package/contracts/oracle/Oracle.sol +23 -26
  440. package/contracts/oracle/OracleService.sol +119 -87
  441. package/contracts/oracle/OracleServiceManager.sol +8 -11
  442. package/contracts/pool/BasicPool.sol +39 -41
  443. package/contracts/pool/BasicPoolAuthorization.sol +43 -11
  444. package/contracts/pool/BundleService.sol +218 -128
  445. package/contracts/pool/BundleServiceManager.sol +8 -11
  446. package/contracts/pool/IBundleService.sol +43 -33
  447. package/contracts/pool/IPoolComponent.sol +20 -10
  448. package/contracts/pool/IPoolService.sol +97 -77
  449. package/contracts/pool/Pool.sol +146 -124
  450. package/contracts/pool/PoolLib.sol +341 -0
  451. package/contracts/pool/PoolService.sol +419 -256
  452. package/contracts/pool/PoolServiceManager.sol +6 -9
  453. package/contracts/product/ApplicationService.sol +153 -80
  454. package/contracts/product/ApplicationServiceManager.sol +6 -6
  455. package/contracts/product/BasicProduct.sol +13 -46
  456. package/contracts/product/BasicProductAuthorization.sol +33 -10
  457. package/contracts/product/ClaimService.sol +382 -194
  458. package/contracts/product/ClaimServiceManager.sol +6 -6
  459. package/contracts/product/IApplicationService.sol +29 -3
  460. package/contracts/product/IClaimService.sol +48 -11
  461. package/contracts/product/IPolicyService.sol +61 -37
  462. package/contracts/product/IPricingService.sol +11 -10
  463. package/contracts/product/IProductComponent.sol +28 -5
  464. package/contracts/product/IRiskService.sol +48 -0
  465. package/contracts/product/PolicyService.sol +443 -273
  466. package/contracts/product/PolicyServiceLib.sol +139 -0
  467. package/contracts/product/PolicyServiceManager.sol +6 -9
  468. package/contracts/product/PricingService.sol +90 -84
  469. package/contracts/product/PricingServiceManager.sol +6 -9
  470. package/contracts/product/Product.sol +201 -100
  471. package/contracts/product/RiskService.sol +190 -0
  472. package/contracts/product/RiskServiceManager.sol +39 -0
  473. package/contracts/registry/ChainNft.sol +72 -40
  474. package/contracts/registry/IRegistry.sol +70 -32
  475. package/contracts/registry/IRegistryService.sol +5 -12
  476. package/contracts/registry/IRelease.sol +29 -0
  477. package/contracts/registry/ITransferInterceptor.sol +1 -2
  478. package/contracts/registry/Registry.sol +367 -207
  479. package/contracts/registry/RegistryAdmin.sol +114 -288
  480. package/contracts/registry/RegistryAuthorization.sol +336 -0
  481. package/contracts/registry/RegistryService.sol +42 -67
  482. package/contracts/registry/RegistryServiceManager.sol +5 -5
  483. package/contracts/registry/ReleaseAdmin.sol +195 -0
  484. package/contracts/registry/ReleaseLifecycle.sol +8 -3
  485. package/contracts/registry/ReleaseRegistry.sol +279 -241
  486. package/contracts/registry/ServiceAuthorizationV3.sol +205 -63
  487. package/contracts/registry/TokenRegistry.sol +61 -59
  488. package/contracts/shared/Component.sol +70 -137
  489. package/contracts/shared/ComponentService.sol +452 -346
  490. package/contracts/shared/ComponentServiceManager.sol +10 -7
  491. package/contracts/shared/ContractLib.sol +312 -0
  492. package/contracts/shared/IComponent.sol +6 -18
  493. package/contracts/shared/IComponentService.sol +50 -41
  494. package/contracts/shared/IInstanceLinkedComponent.sol +7 -27
  495. package/contracts/shared/IKeyValueStore.sol +1 -1
  496. package/contracts/shared/ILifecycle.sol +3 -1
  497. package/contracts/shared/INftOwnable.sol +4 -0
  498. package/contracts/shared/IPolicyHolder.sol +12 -22
  499. package/contracts/shared/IRegisterable.sol +22 -1
  500. package/contracts/shared/IService.sol +4 -6
  501. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +11 -3
  502. package/contracts/shared/InstanceLinkedComponent.sol +132 -49
  503. package/contracts/shared/KeyValueStore.sol +4 -4
  504. package/contracts/shared/Lifecycle.sol +15 -4
  505. package/contracts/shared/NftOwnable.sol +33 -11
  506. package/contracts/shared/PolicyHolder.sol +20 -59
  507. package/contracts/shared/Registerable.sol +52 -21
  508. package/contracts/shared/RegistryLinked.sol +9 -14
  509. package/contracts/shared/Service.sol +22 -38
  510. package/contracts/shared/TokenHandler.sol +310 -26
  511. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  512. package/contracts/staking/IStaking.sol +272 -72
  513. package/contracts/staking/IStakingService.sol +45 -78
  514. package/contracts/staking/ITargetLimitHandler.sol +17 -0
  515. package/contracts/staking/Staking.sol +533 -246
  516. package/contracts/staking/StakingLib.sol +195 -0
  517. package/contracts/staking/StakingManager.sol +14 -14
  518. package/contracts/staking/StakingReader.sol +72 -87
  519. package/contracts/staking/StakingService.sol +62 -152
  520. package/contracts/staking/StakingServiceManager.sol +9 -7
  521. package/contracts/staking/StakingStore.sol +1094 -341
  522. package/contracts/staking/TargetHandler.sol +132 -0
  523. package/contracts/staking/TargetManagerLib.sol +73 -46
  524. package/contracts/type/Amount.sol +31 -5
  525. package/contracts/type/Blocknumber.sol +22 -16
  526. package/contracts/type/ChainId.sol +101 -0
  527. package/contracts/type/ClaimId.sol +6 -1
  528. package/contracts/type/Fee.sol +8 -8
  529. package/contracts/type/Key32.sol +2 -2
  530. package/contracts/type/Key32Set.sol +62 -0
  531. package/contracts/type/NftId.sol +7 -0
  532. package/contracts/type/ObjectType.sol +73 -37
  533. package/contracts/type/PayoutId.sol +10 -10
  534. package/contracts/type/Referral.sol +7 -0
  535. package/contracts/type/RequestIdSet.sol +62 -0
  536. package/contracts/type/RiskId.sol +38 -6
  537. package/contracts/type/RoleId.sol +61 -55
  538. package/contracts/type/Seconds.sol +44 -1
  539. package/contracts/type/Selector.sol +5 -0
  540. package/contracts/type/StateId.sol +15 -1
  541. package/contracts/type/String.sol +12 -0
  542. package/contracts/type/Timestamp.sol +24 -8
  543. package/contracts/type/UFixed.sol +57 -126
  544. package/contracts/type/Version.sol +54 -5
  545. package/contracts/{shared → upgradeability}/IVersionable.sol +3 -0
  546. package/contracts/{shared → upgradeability}/ProxyManager.sol +96 -49
  547. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +24 -0
  548. package/contracts/{shared → upgradeability}/Versionable.sol +8 -5
  549. package/package.json +5 -4
  550. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  551. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  552. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  553. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  554. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  555. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  556. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  557. package/artifacts/contracts/product/IProductService.sol/IProductService.json +0 -400
  558. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  559. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  560. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  561. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  562. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
  563. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  564. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  565. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  566. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  567. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  568. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  569. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
  570. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  571. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  572. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  573. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  574. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -460
  575. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
  576. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -164
  577. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  578. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -10
  579. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  580. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  581. package/contracts/instance/module/IAccess.sol +0 -46
  582. package/contracts/product/IProductService.sol +0 -33
  583. package/contracts/product/ProductService.sol +0 -124
  584. package/contracts/product/ProductServiceManager.sol +0 -42
  585. package/contracts/shared/ComponentVerifyingService.sol +0 -117
  586. package/contracts/shared/InitializableCustom.sol +0 -177
  587. package/contracts/shared/UpgradableProxyWithAdmin.sol +0 -16
  588. package/contracts/staking/StakeManagerLib.sol +0 -231
  589. package/contracts/staking/StakingLifecycle.sol +0 -23
@@ -0,0 +1,661 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IAuthorization} from "../../authorization/IAuthorization.sol";
7
+ import {IComponents} from "../../instance/module/IComponents.sol";
8
+
9
+ import {Amount, AmountLib} from "../../type/Amount.sol";
10
+ import {BasicProduct} from "../../product/BasicProduct.sol";
11
+ import {ClaimId} from "../../type/ClaimId.sol";
12
+ import {FeeLib} from "../../type/Fee.sol";
13
+ import {FlightOracle} from "./FlightOracle.sol";
14
+ import {InstanceReader} from "../../instance/InstanceReader.sol";
15
+ import {NftId, NftIdLib} from "../../type/NftId.sol";
16
+ import {PayoutId} from "../../type/PayoutId.sol";
17
+ import {ReferralLib} from "../../type/Referral.sol";
18
+ import {RiskId, RiskIdLib} from "../../type/RiskId.sol";
19
+ import {RequestId} from "../../type/RequestId.sol";
20
+ import {Seconds, SecondsLib} from "../../type/Seconds.sol";
21
+ import {Str} from "../../type/String.sol";
22
+ import {Timestamp, TimestampLib} from "../../type/Timestamp.sol";
23
+ // import {UFixed, UFixedLib} from "../../type/UFixed.sol";
24
+
25
+
26
+ /// @dev FlightProduct implements the flight delay product.
27
+ contract FlightProduct is
28
+ BasicProduct
29
+ {
30
+
31
+ event LogRequestFlightRatings(uint256 requestId, bytes32 carrierFlightNumber, uint256 departureTime, uint256 arrivalTime, bytes32 riskId);
32
+ event LogRequestFlightStatus(uint256 requestId, uint256 arrivalTime, bytes32 carrierFlightNumber, bytes32 departureYearMonthDay);
33
+ event LogPayoutTransferred(bytes32 bpKey, uint256 claimId, uint256 payoutId, uint256 amount);
34
+ event LogFlightStatusProcessed(RequestId requrestId, RiskId riskId, bytes1 status, int256 delay, uint8 payoutOption);
35
+
36
+ event LogError(string error, uint256 index, uint256 stored, uint256 calculated);
37
+ event LogPolicyExpired(bytes32 bpKey);
38
+
39
+ event LogErrorRiskInvalid(RequestId requestId, RiskId riskId);
40
+ event LogErrorUnprocessableStatus(RequestId requestId, RiskId riskId, bytes1 status);
41
+ event LogErrorUnexpectedStatus(RequestId requestId, RiskId riskId, bytes1 status, int256 delay);
42
+
43
+ // solhint-disable
44
+ // Minimum observations for valid prediction
45
+ uint256 public immutable MIN_OBSERVATIONS = 10;
46
+ // Minimum time before departure for applying
47
+ Seconds public MIN_TIME_BEFORE_DEPARTURE = SecondsLib.fromDays(14);
48
+ // Maximum time before departure for applying
49
+ Seconds public MAX_TIME_BEFORE_DEPARTURE = SecondsLib.fromDays(90);
50
+ // Maximum duration of flight
51
+ Seconds public MAX_FLIGHT_DURATION = SecondsLib.fromDays(2);
52
+ // Check for delay after .. minutes after scheduled arrival
53
+ Seconds public CHECK_OFFSET = SecondsLib.fromHours(1);
54
+ // Max time to process claims after departure
55
+ Seconds public LIFETIME = SecondsLib.fromDays(30);
56
+
57
+ // uint256 public constant MIN_PREMIUM = 15 * 10 ** 18; // production
58
+ // All amounts in cent = multiplier is 10 ** 16!
59
+ Amount public MIN_PREMIUM;
60
+ Amount public MAX_PREMIUM;
61
+ Amount public MAX_PAYOUT;
62
+ Amount public MAX_TOTAL_PAYOUT; // Maximum risk per flight is 3x max payout.
63
+
64
+ // Maximum cumulated weighted premium per risk
65
+ uint256 public MARGIN_PERCENT = 30;
66
+
67
+ // Maximum number of policies to process in one callback
68
+ uint8 public MAX_POLICIES_TO_PROCESS = 5;
69
+
70
+ // ['observations','late15','late30','late45','cancelled','diverted']
71
+ uint8[6] public WEIGHT_PATTERN = [0, 0, 0, 30, 50, 50];
72
+ uint8 public constant MAX_WEIGHT = 50;
73
+
74
+ // GIF V3 specifics
75
+ NftId internal _defaultBundleNftId;
76
+ NftId internal _oracleNftId;
77
+
78
+ // solhint-enable
79
+
80
+ struct FlightRisk {
81
+ Str carrierFlightNumber;
82
+ Str departureYearMonthDay;
83
+ Timestamp departureTime;
84
+ Timestamp arrivalTime;
85
+ Seconds delaySeconds;
86
+ uint8 delay; // what is this?
87
+ Amount estimatedMaxTotalPayout;
88
+ uint256 premiumMultiplier; // what is this? UFixed?
89
+ uint256 weight; // what is this? UFixed?
90
+ }
91
+
92
+
93
+ constructor(
94
+ address registry,
95
+ NftId instanceNftid,
96
+ string memory componentName,
97
+ IAuthorization authorization
98
+ )
99
+ {
100
+ address initialOwner = msg.sender;
101
+
102
+ _initialize(
103
+ registry,
104
+ instanceNftid,
105
+ componentName,
106
+ authorization,
107
+ initialOwner);
108
+ }
109
+
110
+ //--- external functions ------------------------------------------------//
111
+ //--- unpermissioned functions ------------------------------------------//
112
+
113
+
114
+ function setOracleNftId()
115
+ external
116
+ {
117
+ _oracleNftId = _getInstanceReader().getProductInfo(
118
+ getNftId()).oracleNftId[0];
119
+ }
120
+
121
+ event LogFlightDebug(string message, uint256 value);
122
+
123
+ function createPolicy(
124
+ address policyHolder,
125
+ Str carrierFlightNumber,
126
+ Str departureYearMonthDay,
127
+ Timestamp departureTime,
128
+ Timestamp arrivalTime,
129
+ Amount premiumAmount,
130
+ uint256[6] memory statistics
131
+ )
132
+ external
133
+ virtual
134
+ restricted()
135
+ returns (
136
+ NftId policyNftId,
137
+ Amount[5] memory payoutAmounts
138
+ )
139
+ {
140
+ // check application parameters and calculate payouts
141
+ checkParameters(
142
+ departureTime,
143
+ arrivalTime,
144
+ premiumAmount); // TODO remove? checked here and in checkAndCalculatePayouts
145
+
146
+ (
147
+ uint256 weight,
148
+ Amount[5] memory payoutAmounts,
149
+ Amount sumInsuredAmount
150
+ ) = calculatePayoutAmounts(
151
+ premiumAmount,
152
+ statistics);
153
+
154
+ emit LogFlightDebug("payoutAmounts[0]", payoutAmounts[0].toInt());
155
+ emit LogFlightDebug("payoutAmounts[1]", payoutAmounts[1].toInt());
156
+ emit LogFlightDebug("payoutAmounts[2]", payoutAmounts[2].toInt());
157
+ emit LogFlightDebug("payoutAmounts[3]", payoutAmounts[3].toInt());
158
+ emit LogFlightDebug("payoutAmounts[4]", payoutAmounts[4].toInt());
159
+
160
+ // more checks and risk handling
161
+ RiskId riskId = _checkAndHandleFlightRisk(
162
+ carrierFlightNumber,
163
+ departureYearMonthDay,
164
+ departureTime,
165
+ arrivalTime,
166
+ sumInsuredAmount,
167
+ weight);
168
+
169
+ // effects
170
+ policyNftId = _createApplication(
171
+ policyHolder,
172
+ riskId,
173
+ sumInsuredAmount,
174
+ premiumAmount,
175
+ LIFETIME,
176
+ _defaultBundleNftId,
177
+ ReferralLib.zero(),
178
+ abi.encode(
179
+ premiumAmount,
180
+ payoutAmounts)); // application data
181
+
182
+ _createPolicy(
183
+ policyNftId,
184
+ TimestampLib.zero(), // activate at
185
+ premiumAmount); // max premium amount
186
+
187
+ // interactions (token transfer + callback to token holder, if contract)
188
+ _collectPremium(
189
+ policyNftId,
190
+ departureTime); // activate at
191
+
192
+ _sendRequest(
193
+ _oracleNftId,
194
+ abi.encode(
195
+ FlightOracle.FlightStatusRequest(
196
+ riskId,
197
+ carrierFlightNumber,
198
+ departureYearMonthDay,
199
+ departureTime)),
200
+ arrivalTime.addSeconds(CHECK_OFFSET),
201
+ "flightStatusCallback");
202
+ }
203
+
204
+ // TODO contnue here
205
+ // [] add oracle component for flight status handling
206
+ // [] refactor tests
207
+
208
+ function flightStatusCallback(
209
+ RequestId requrestId,
210
+ RiskId riskId,
211
+ bytes1 status,
212
+ int256 delay,
213
+ uint8 maxPoliciesToProcess
214
+ )
215
+ external
216
+ virtual
217
+ restricted()
218
+ {
219
+ // check risk exists
220
+ (
221
+ bool exists,
222
+ FlightRisk memory flightRisk
223
+ ) = getFlightRisk(riskId);
224
+
225
+ if (!exists) {
226
+ emit LogErrorRiskInvalid(requrestId, riskId);
227
+ return;
228
+ }
229
+
230
+ uint8 payoutOption = checkAndGetPayoutOption(
231
+ requrestId, riskId, status, delay);
232
+
233
+ _processPayoutsAndClosePolicies(
234
+ riskId,
235
+ payoutOption,
236
+ maxPoliciesToProcess);
237
+
238
+ // logging
239
+ emit LogFlightStatusProcessed(requrestId, riskId, status, delay, payoutOption);
240
+ }
241
+
242
+
243
+ function checkAndGetPayoutOption(
244
+ RequestId requrestId,
245
+ RiskId riskId,
246
+ bytes1 status,
247
+ int256 delay
248
+ )
249
+ public
250
+ virtual
251
+ returns (uint8 payoutOption)
252
+ {
253
+ // default: no payout
254
+ payoutOption = type(uint8).max;
255
+
256
+ // check status
257
+ if (status != "L" && status != "A" && status != "C" && status != "D") {
258
+ emit LogErrorUnprocessableStatus(requrestId, riskId, status);
259
+ return payoutOption;
260
+ }
261
+
262
+ if (status == "A") {
263
+ // todo: active, reschedule oracle call + 45 min
264
+ emit LogErrorUnexpectedStatus(requrestId, riskId, status, delay);
265
+ return payoutOption;
266
+ }
267
+
268
+ // trigger payout if applicable
269
+ if (status == "C") { payoutOption = 3; }
270
+ else if (status == "D") { payoutOption = 4; }
271
+ else if (delay >= 15 && delay < 30) { payoutOption = 0; }
272
+ else if (delay >= 30 && delay < 45) { payoutOption = 1; }
273
+ else if (delay >= 45) { payoutOption = 2; }
274
+ }
275
+
276
+
277
+ // REMARK caller responsible to check that risk exists.
278
+ function _processPayoutsAndClosePolicies(
279
+ RiskId riskId,
280
+ uint8 payoutOption,
281
+ uint8 maxPoliciesToProcess
282
+ )
283
+ internal
284
+ virtual
285
+ {
286
+ // determine numbers of policies to process
287
+ InstanceReader reader = _getInstanceReader();
288
+ uint256 policiesToProcess = reader.policiesForRisk(riskId);
289
+ policiesToProcess = policiesToProcess < maxPoliciesToProcess ? policiesToProcess : maxPoliciesToProcess;
290
+
291
+ // go trough policies
292
+ for (uint256 i = 0; i < policiesToProcess; i++) {
293
+ NftId policyNftId = reader.getPolicyForRisk(riskId, i);
294
+
295
+ // create payout (if any)
296
+ if (payoutOption < type(uint8).max) {
297
+ bytes memory applicationData = reader.getPolicyInfo(
298
+ policyNftId).applicationData;
299
+
300
+ _resolvePayout(
301
+ policyNftId,
302
+ _getPayoutAmount(
303
+ applicationData,
304
+ payoutOption));
305
+ }
306
+
307
+ // expire and close policy
308
+ _expire(policyNftId, TimestampLib.current());
309
+ _close(policyNftId);
310
+ }
311
+ }
312
+
313
+
314
+ function _getPayoutAmount(
315
+ bytes memory applicationData,
316
+ uint8 payoutOption
317
+ )
318
+ internal
319
+ virtual
320
+ returns (Amount payoutAmount)
321
+ {
322
+ // retrieve payout amounts from application data
323
+ (, Amount[5] memory payoutAmounts) = abi.decode(
324
+ applicationData, (Amount, Amount[5]));
325
+
326
+ // get payout amount for selected option
327
+ payoutAmount = payoutAmounts[payoutOption];
328
+ }
329
+
330
+
331
+ function _resolvePayout(
332
+ NftId policyNftId,
333
+ Amount payoutAmount
334
+ )
335
+ internal
336
+ virtual
337
+ {
338
+ // create confirmed claim
339
+ ClaimId claimId = _submitClaim(policyNftId, payoutAmount, "");
340
+ _confirmClaim(policyNftId, claimId, payoutAmount, "");
341
+
342
+ // create and execute payout
343
+ PayoutId payoutId = _createPayout(policyNftId, claimId, payoutAmount, "");
344
+ _processPayout(policyNftId, payoutId);
345
+ }
346
+
347
+ //--- owner functions ---------------------------------------------------//
348
+
349
+ /// @dev Call after product registration with the instance, when the product token/tokenhandler is available
350
+ function completeSetup()
351
+ external
352
+ virtual
353
+ restricted()
354
+ onlyOwner()
355
+ {
356
+ IERC20Metadata token = IERC20Metadata(getToken());
357
+ uint256 tokenMultiplier = 10 ** token.decimals();
358
+
359
+ MIN_PREMIUM = AmountLib.toAmount(15 * tokenMultiplier);
360
+ MAX_PREMIUM = AmountLib.toAmount(200 * tokenMultiplier);
361
+ MAX_PAYOUT = AmountLib.toAmount(500 * tokenMultiplier);
362
+ MAX_TOTAL_PAYOUT = AmountLib.toAmount(3 * MAX_PAYOUT.toInt());
363
+ }
364
+
365
+
366
+ function setDefaultBundle(NftId bundleNftId) external restricted() onlyOwner() { _defaultBundleNftId = bundleNftId; }
367
+ function approveTokenHandler(IERC20Metadata token, Amount amount) external restricted() onlyOwner() { _approveTokenHandler(token, amount); }
368
+ function setLocked(bool locked) external onlyOwner() { _setLocked(locked); }
369
+ function setWallet(address newWallet) external restricted() onlyOwner() { _setWallet(newWallet); }
370
+
371
+
372
+ //--- view functions ----------------------------------------------------//
373
+
374
+ // TODO where do we need this
375
+ function checkApplication(
376
+ Str carrierFlightNumber,
377
+ Timestamp departureTime,
378
+ Timestamp arrivalTime,
379
+ Amount premium
380
+ )
381
+ external
382
+ virtual
383
+ view
384
+ returns (uint256 errors)
385
+ {
386
+ // Validate input parameters
387
+ if (premium < MIN_PREMIUM) { errors = errors | (uint256(1) << 0); }
388
+ if (premium > MAX_PREMIUM) { errors = errors | (uint256(1) << 1); }
389
+ if (arrivalTime < departureTime) { errors = errors | (uint256(1) << 2); }
390
+ if (arrivalTime > departureTime.addSeconds(MAX_FLIGHT_DURATION)) { errors = errors | (uint256(1) << 3); }
391
+ if (departureTime < TimestampLib.current().addSeconds(MIN_TIME_BEFORE_DEPARTURE)) { errors = errors | (uint256(1) << 4); }
392
+ if (departureTime > TimestampLib.current().addSeconds(MAX_TIME_BEFORE_DEPARTURE)) { errors = errors | (uint256(1) << 5); }
393
+
394
+ (, bool exists, FlightRisk memory flightRisk) = getFlightRisk(carrierFlightNumber, departureTime, arrivalTime);
395
+ if (exists) {
396
+ Amount sumInsured = AmountLib.toAmount(premium.toInt() * flightRisk.premiumMultiplier);
397
+ if (flightRisk.estimatedMaxTotalPayout + sumInsured > MAX_TOTAL_PAYOUT) {
398
+ errors = errors | (uint256(1) << 6);
399
+ }
400
+ }
401
+
402
+ return errors;
403
+ }
404
+
405
+
406
+ function checkParameters(
407
+ Timestamp departureTime,
408
+ Timestamp arrivalTime,
409
+ Amount premium
410
+ )
411
+ internal
412
+ view
413
+ {
414
+ // solhint-disable
415
+ require(premium >= MIN_PREMIUM, "ERROR:FDD-001:INVALID_PREMIUM");
416
+ require(premium <= MAX_PREMIUM, "ERROR:FDD-002:INVALID_PREMIUM");
417
+ require(arrivalTime > departureTime, "ERROR:FDD-003:ARRIVAL_BEFORE_DEPARTURE_TIME");
418
+
419
+ // TODO decide how to handle demo mode
420
+ require(
421
+ arrivalTime <= departureTime.addSeconds(MAX_FLIGHT_DURATION),
422
+ "ERROR:FDD-004:INVALID_ARRIVAL/DEPARTURE_TIME");
423
+ require(
424
+ TimestampLib.current() >= departureTime.subtractSeconds(MAX_TIME_BEFORE_DEPARTURE),
425
+ "ERROR:FDD-005:INVALID_ARRIVAL/DEPARTURE_TIME");
426
+ require(
427
+ TimestampLib.current() <= departureTime.subtractSeconds(MIN_TIME_BEFORE_DEPARTURE),
428
+ "ERROR:FDD-012:INVALID_ARRIVAL/DEPARTURE_TIME");
429
+ // solhint-enable
430
+ }
431
+
432
+
433
+ function calculateNetPremium(
434
+ Amount, // sumInsuredAmount: not used in this product
435
+ RiskId, // riskId: not used in this product
436
+ Seconds, // lifetime: not used in this product, a flight is a one time risk
437
+ bytes memory applicationData // holds the premium amount the customer is willing to pay
438
+ )
439
+ external
440
+ virtual override
441
+ view
442
+ returns (Amount netPremiumAmount)
443
+ {
444
+ (netPremiumAmount, ) = abi.decode(applicationData, (Amount, Amount[5]));
445
+ }
446
+
447
+
448
+ // REMARK: each flight may get different payouts depending on the latest statics
449
+ function calculatePayoutAmounts(
450
+ Amount premium,
451
+ uint256[6] memory statistics
452
+ )
453
+ public
454
+ view
455
+ returns (
456
+ uint256 weight,
457
+ Amount[5] memory payoutAmounts,
458
+ Amount sumInsuredAmount // simply the max of payoutAmounts
459
+ )
460
+ {
461
+ require(premium >= MIN_PREMIUM, "ERROR:FDD-009:INVALID_PREMIUM");
462
+ require(premium <= MAX_PREMIUM, "ERROR:FDD-010:INVALID_PREMIUM");
463
+ require(statistics[0] >= MIN_OBSERVATIONS, "ERROR:FDD-011:LOW_OBSERVATIONS");
464
+
465
+ weight = 0;
466
+
467
+ for (uint256 i = 1; i < 6; i++) {
468
+ weight += WEIGHT_PATTERN[i] * statistics[i] * 10000 / statistics[0];
469
+ // 1% = 100 / 100% = 10,000
470
+ }
471
+
472
+ // To avoid div0 in the payout section, we have to make a minimal assumption on weight
473
+ if (weight == 0) {
474
+ weight = 100000 / statistics[0];
475
+ }
476
+
477
+ weight = weight * (100 + MARGIN_PERCENT) / 100;
478
+ sumInsuredAmount = AmountLib.zero();
479
+
480
+ for (uint256 i = 0; i < 5; i++) {
481
+ Amount payoutAmount = AmountLib.toAmount(
482
+ premium.toInt() * WEIGHT_PATTERN[i + 1] * 10000 / weight);
483
+
484
+ // cap payout and update sum insured if applicable
485
+ if (payoutAmount > MAX_PAYOUT) { payoutAmount = MAX_PAYOUT; }
486
+ if (payoutAmount > sumInsuredAmount) { sumInsuredAmount = payoutAmount; }
487
+
488
+ payoutAmounts[i] = payoutAmount;
489
+ }
490
+ }
491
+
492
+
493
+ function getFlightRisk(
494
+ Str carrierFlightNumber,
495
+ Timestamp departureTime,
496
+ Timestamp arrivalTime
497
+ )
498
+ public
499
+ view
500
+ returns (
501
+ RiskId riskId,
502
+ bool exists,
503
+ FlightRisk memory flightRisk
504
+ )
505
+ {
506
+ riskId = getRiskId(carrierFlightNumber, departureTime, arrivalTime);
507
+ (exists, flightRisk) = getFlightRisk(riskId);
508
+ }
509
+
510
+
511
+ function getFlightRisk(RiskId riskId)
512
+ public
513
+ view
514
+ returns (
515
+ bool exists,
516
+ FlightRisk memory flightRisk
517
+ )
518
+ {
519
+ // check if risk exists
520
+ InstanceReader reader = _getInstanceReader();
521
+ exists = reader.isProductRisk(getNftId(), riskId);
522
+
523
+ // get risk data if risk exists
524
+ if (exists) {
525
+ flightRisk = abi.decode(
526
+ reader.getRiskInfo(riskId).data, (FlightRisk));
527
+ }
528
+ }
529
+
530
+
531
+ function getRiskId(
532
+ Str carrierFlightNumber,
533
+ Timestamp departureTime,
534
+ Timestamp arrivalTime
535
+ )
536
+ public
537
+ virtual
538
+ view
539
+ returns (RiskId riskId)
540
+ {
541
+ bytes32 riskKey = _getRiskKey(carrierFlightNumber, departureTime, arrivalTime);
542
+ riskId = _getRiskId(riskKey);
543
+ }
544
+
545
+
546
+ function getOracleNftId()
547
+ public
548
+ view
549
+ returns (NftId oracleNftId)
550
+ {
551
+ return _oracleNftId;
552
+ }
553
+
554
+
555
+ //--- internal functions ------------------------------------------------//
556
+
557
+ function _checkAndHandleFlightRisk(
558
+ Str carrierFlightNumber,
559
+ Str departureYearMonthDay,
560
+ Timestamp departureTime,
561
+ Timestamp arrivalTime,
562
+ Amount sumInsuredAmount,
563
+ uint256 weight
564
+ )
565
+ internal
566
+ virtual
567
+ returns (RiskId riskId)
568
+ {
569
+ bool exists;
570
+ FlightRisk memory flightRisk;
571
+ (riskId, exists, flightRisk) = getFlightRisk(carrierFlightNumber, departureTime, arrivalTime);
572
+
573
+ // first flight for this risk
574
+ if (!exists) {
575
+ uint256 multiplier = (uint256(MAX_WEIGHT) * 10000) / weight;
576
+
577
+ flightRisk = FlightRisk({
578
+ carrierFlightNumber: carrierFlightNumber,
579
+ departureYearMonthDay: departureYearMonthDay,
580
+ departureTime: departureTime,
581
+ arrivalTime: arrivalTime,
582
+ delaySeconds: SecondsLib.zero(),
583
+ delay: 0, // TODO what is this? rename?
584
+ estimatedMaxTotalPayout: sumInsuredAmount,
585
+ premiumMultiplier: multiplier,
586
+ weight: weight
587
+ });
588
+
589
+ // create new risk including 1st sum insured amount
590
+ bytes32 riskKey = _getRiskKey(carrierFlightNumber, departureTime, arrivalTime);
591
+ _createRisk(riskKey, abi.encode(flightRisk));
592
+
593
+ // additional flights for this risk
594
+ } else {
595
+ // check for cluster risk: additional sum insured amount must not exceed MAX_TOTAL_PAYOUT
596
+ require (
597
+ flightRisk.estimatedMaxTotalPayout + sumInsuredAmount <= MAX_TOTAL_PAYOUT,
598
+ "ERROR:FDD-006:CLUSTER_RISK"
599
+ );
600
+
601
+ // update existing risk with additional sum insured amount
602
+ flightRisk.estimatedMaxTotalPayout = flightRisk.estimatedMaxTotalPayout + sumInsuredAmount;
603
+ _updateRisk(riskId, abi.encode(flightRisk));
604
+ }
605
+ }
606
+
607
+ function _getRiskKey(
608
+ Str carrierFlightNumber,
609
+ Timestamp departureTime,
610
+ Timestamp arrivalTime
611
+ )
612
+ internal
613
+ pure
614
+ returns (bytes32 riskKey)
615
+ {
616
+ return keccak256(abi.encode(carrierFlightNumber, departureTime, arrivalTime));
617
+ }
618
+
619
+
620
+ function _getRiskId(bytes32 riskKey) internal view returns (RiskId riskId) {
621
+ return RiskIdLib.toRiskId(getNftId(), riskKey);
622
+ }
623
+
624
+
625
+ function _initialize(
626
+ address registry,
627
+ NftId instanceNftId,
628
+ string memory componentName,
629
+ IAuthorization authorization,
630
+ address initialOwner
631
+ )
632
+ internal
633
+ initializer
634
+ {
635
+ _initializeBasicProduct(
636
+ registry,
637
+ instanceNftId,
638
+ componentName,
639
+ IComponents.ProductInfo({
640
+ isProcessingFundedClaims: false,
641
+ isInterceptingPolicyTransfers: false,
642
+ hasDistribution: false,
643
+ expectedNumberOfOracles: 1,
644
+ numberOfOracles: 0,
645
+ poolNftId: NftIdLib.zero(),
646
+ distributionNftId: NftIdLib.zero(),
647
+ oracleNftId: new NftId[](0)
648
+ }),
649
+ IComponents.FeeInfo({
650
+ productFee: FeeLib.zero(),
651
+ processingFee: FeeLib.zero(),
652
+ distributionFee: FeeLib.zero(),
653
+ minDistributionOwnerFee: FeeLib.zero(),
654
+ poolFee: FeeLib.zero(),
655
+ stakingFee: FeeLib.zero(),
656
+ performanceFee: FeeLib.zero()
657
+ }),
658
+ authorization,
659
+ initialOwner); // number of oracles
660
+ }
661
+ }
@@ -0,0 +1,42 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {BasicProductAuthorization} from "../../product/BasicProductAuthorization.sol";
5
+ import {FlightProduct} from "./FlightProduct.sol";
6
+ import {IAccess} from "../../../contracts/authorization/IAccess.sol";
7
+ import {PUBLIC_ROLE} from "../../../contracts/type/RoleId.sol";
8
+
9
+
10
+ contract FlightProductAuthorization
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(getMainTargetName(), PUBLIC_ROLE());
27
+
28
+ // unpermissioned
29
+ _authorize(functions, FlightProduct.createPolicy.selector, "createPolicy");
30
+
31
+ // only oracle
32
+ _authorize(functions, FlightProduct.flightStatusCallback.selector, "flightStatusCallback");
33
+
34
+ // only owner
35
+ _authorize(functions, FlightProduct.completeSetup.selector, "completeSetup");
36
+ _authorize(functions, FlightProduct.setDefaultBundle.selector, "setDefaultBundle");
37
+ _authorize(functions, FlightProduct.approveTokenHandler.selector, "approveTokenHandler");
38
+ _authorize(functions, FlightProduct.setLocked.selector, "setLocked");
39
+ _authorize(functions, FlightProduct.setWallet.selector, "setWallet");
40
+ }
41
+ }
42
+