@etherisc/gif-next 3.0.0-c867220-635 → 3.0.0-cdd3800-286

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 (350) hide show
  1. package/README.md +2 -0
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +2 -2
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +2 -2
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
  7. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +44 -56
  9. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +145 -100
  11. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +2 -2
  13. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  15. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  21. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +2 -2
  23. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
  25. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +2 -2
  28. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +2 -2
  30. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  33. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  34. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +12 -12
  35. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +2 -2
  37. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +34 -34
  39. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +20 -20
  41. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  42. package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.dbg.json +4 -0
  43. package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.json +799 -0
  44. package/artifacts/contracts/examples/flight/FlightMessageVerifier.sol/FlightMessageVerifier.dbg.json +4 -0
  45. package/artifacts/contracts/examples/flight/FlightMessageVerifier.sol/FlightMessageVerifier.json +229 -0
  46. package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.dbg.json +4 -0
  47. package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.json +1305 -0
  48. package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.dbg.json +4 -0
  49. package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.json +896 -0
  50. package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.dbg.json +4 -0
  51. package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.json +1466 -0
  52. package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.dbg.json +4 -0
  53. package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.json +844 -0
  54. package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.dbg.json +4 -0
  55. package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.json +2165 -0
  56. package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.dbg.json +4 -0
  57. package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.json +891 -0
  58. package/artifacts/contracts/examples/flight/FlightProductManager.sol/FlightProductManager.dbg.json +4 -0
  59. package/artifacts/contracts/examples/flight/FlightProductManager.sol/FlightProductManager.json +711 -0
  60. package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.dbg.json +4 -0
  61. package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.json +586 -0
  62. package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.dbg.json +4 -0
  63. package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.json +901 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  65. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +17 -17
  66. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
  67. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +2 -2
  68. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  69. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +14 -14
  70. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  71. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +18 -18
  72. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
  73. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +2 -2
  74. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  75. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +20 -20
  76. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
  77. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +20 -20
  78. package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +1 -1
  79. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  80. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  81. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +1 -1
  82. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  83. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1 -1
  84. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  86. package/artifacts/contracts/instance/Instance.sol/Instance.json +5 -5
  87. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  88. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +102 -114
  89. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  90. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
  91. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  92. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +236 -75
  93. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
  95. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  96. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
  97. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  98. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2 -2
  99. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +1 -1
  100. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +2 -2
  101. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +1 -1
  102. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +2 -2
  103. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  104. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  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 +2 -2
  110. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  111. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  112. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +1 -1
  113. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +2 -2
  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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  121. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +2 -2
  122. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  123. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  124. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  125. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  126. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  127. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  128. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  129. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  130. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  131. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  132. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  133. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  134. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +2 -2
  135. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  136. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +2 -2
  137. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +2 -2
  139. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  140. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  141. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  142. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  143. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
  144. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +2 -2
  145. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  146. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +2 -2
  147. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +2 -2
  149. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  150. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
  151. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  152. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
  153. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  154. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  155. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +20 -20
  156. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  157. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +2 -2
  158. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  159. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
  160. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  161. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  162. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  163. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  164. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  165. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  166. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  167. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +2 -2
  168. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +1 -1
  169. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +20 -12
  170. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  171. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +2 -2
  172. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  173. package/artifacts/contracts/product/PricingService.sol/PricingService.json +2 -2
  174. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  175. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  176. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  177. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  178. package/artifacts/contracts/product/RiskService.sol/RiskService.json +2 -2
  179. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  180. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +2 -2
  181. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  182. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  183. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  184. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +1 -1
  185. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  186. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  187. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  188. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  189. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +101 -113
  190. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +1 -1
  191. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +2 -2
  192. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  193. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  194. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  195. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  196. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
  197. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +110 -122
  198. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  199. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  200. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  201. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +56 -62
  202. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  203. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
  204. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  205. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  206. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  207. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  208. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +2 -2
  209. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  210. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +2 -2
  211. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  212. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +2 -2
  213. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +1 -1
  214. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +1 -1
  215. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +1 -1
  216. package/artifacts/contracts/shared/IAuthorizedComponent.sol/IAuthorizedComponent.dbg.json +4 -0
  217. package/artifacts/contracts/shared/IAuthorizedComponent.sol/IAuthorizedComponent.json +633 -0
  218. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  219. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  220. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  221. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  222. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  223. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  224. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  225. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  226. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  227. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  228. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  229. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  230. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  231. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  232. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  233. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  234. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  235. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  236. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  237. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  238. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  239. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  240. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  241. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  242. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
  243. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +2 -2
  244. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  245. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +2 -2
  246. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  247. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  248. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +1 -1
  249. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  250. package/artifacts/contracts/staking/Staking.sol/Staking.json +2 -2
  251. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +1 -1
  252. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +2 -2
  253. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  254. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +2 -2
  255. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  256. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  257. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  258. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +2 -2
  259. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  260. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
  261. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  262. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2 -2
  263. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +1 -1
  264. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +2 -2
  265. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  266. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  267. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  268. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +2 -2
  272. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  274. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  276. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  278. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  279. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
  280. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +2 -2
  281. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  282. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  283. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  284. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  285. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  286. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +22 -25
  287. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  289. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +23 -4
  291. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  293. package/artifacts/contracts/type/RequestIdSet.sol/LibRequestIdSet.dbg.json +4 -0
  294. package/artifacts/contracts/type/RequestIdSet.sol/LibRequestIdSet.json +33 -0
  295. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  297. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  299. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  300. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +21 -2
  301. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/String.sol/StrLib.json +21 -2
  306. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +36 -4
  308. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  310. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  311. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  312. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  313. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
  314. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  315. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  316. package/contracts/authorization/AccessAdmin.sol +25 -23
  317. package/contracts/authorization/AccessAdminLib.sol +20 -3
  318. package/contracts/examples/flight/FlightLib.sol +337 -0
  319. package/contracts/examples/flight/FlightMessageVerifier.sol +128 -0
  320. package/contracts/examples/flight/FlightOracle.sol +197 -0
  321. package/contracts/examples/flight/FlightOracleAuthorization.sol +53 -0
  322. package/contracts/examples/flight/FlightPool.sol +89 -0
  323. package/contracts/examples/flight/FlightPoolAuthorization.sol +37 -0
  324. package/contracts/examples/flight/FlightProduct.sol +659 -0
  325. package/contracts/examples/flight/FlightProductAuthorization.sol +70 -0
  326. package/contracts/examples/flight/FlightProductManager.sol +49 -0
  327. package/contracts/examples/flight/FlightUSD.sol +28 -0
  328. package/contracts/examples/flight/originalV1.sol +396 -0
  329. package/contracts/instance/IInstance.sol +1 -1
  330. package/contracts/instance/Instance.sol +1 -1
  331. package/contracts/instance/InstanceAdmin.sol +0 -1
  332. package/contracts/instance/InstanceReader.sol +41 -7
  333. package/contracts/oracle/BasicOracle.sol +1 -0
  334. package/contracts/oracle/IOracleService.sol +12 -12
  335. package/contracts/oracle/Oracle.sol +2 -2
  336. package/contracts/product/BasicProductAuthorization.sol +3 -2
  337. package/contracts/product/PolicyServiceLib.sol +5 -3
  338. package/contracts/registry/RegistryAdmin.sol +7 -1
  339. package/contracts/registry/ReleaseAdmin.sol +8 -1
  340. package/contracts/shared/EcdsaChecker.sol +5 -0
  341. package/contracts/shared/IAuthorizedComponent.sol +15 -0
  342. package/contracts/shared/IInstanceLinkedComponent.sol +2 -5
  343. package/contracts/shared/InstanceLinkedComponent.sol +60 -19
  344. package/contracts/type/ObjectType.sol +2 -31
  345. package/contracts/type/Referral.sol +6 -0
  346. package/contracts/type/RequestIdSet.sol +62 -0
  347. package/contracts/type/Seconds.sol +4 -0
  348. package/contracts/type/String.sol +30 -0
  349. package/contracts/type/Timestamp.sol +10 -1
  350. package/package.json +2 -1
@@ -0,0 +1,659 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
5
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
+
7
+ import {IAuthorization} from "../../authorization/IAuthorization.sol";
8
+ import {IComponents} from "../../instance/module/IComponents.sol";
9
+ import {IPolicy} from "../../instance/module/IPolicy.sol";
10
+
11
+ import {Amount, AmountLib} from "../../type/Amount.sol";
12
+ import {ClaimId} from "../../type/ClaimId.sol";
13
+ import {Component} from "../../shared/Component.sol";
14
+ import {FeeLib} from "../../type/Fee.sol";
15
+ import {FlightLib} from "./FlightLib.sol";
16
+ import {FlightMessageVerifier} from "./FlightMessageVerifier.sol";
17
+ import {FlightOracle} from "./FlightOracle.sol";
18
+ import {InstanceReader} from "../../instance/InstanceReader.sol";
19
+ import {NftId, NftIdLib} from "../../type/NftId.sol";
20
+ import {PayoutId} from "../../type/PayoutId.sol";
21
+ import {Product} from "../../product/Product.sol";
22
+ import {ReferralLib} from "../../type/Referral.sol";
23
+ import {RiskId, RiskIdLib} from "../../type/RiskId.sol";
24
+ import {RequestId} from "../../type/RequestId.sol";
25
+ import {Seconds, SecondsLib} from "../../type/Seconds.sol";
26
+ import {Str} from "../../type/String.sol";
27
+ import {Timestamp, TimestampLib} from "../../type/Timestamp.sol";
28
+
29
+
30
+ /// @dev FlightProduct implements the flight delay product.
31
+ contract FlightProduct is
32
+ Product
33
+ {
34
+
35
+ event LogFlightPolicyPurchased(NftId policyNftId, string flightData, Amount premiumAmount);
36
+ event LogFlightPolicyClosed(NftId policyNftId, Amount payoutAmount);
37
+
38
+ event LogFlightStatusProcessed(RequestId requestId, RiskId riskId, bytes1 status, int256 delayMinutes, uint8 payoutOption);
39
+ event LogFlightPoliciesProcessed(RiskId riskId, uint8 payoutOption, uint256 policiesProcessed, uint256 policiesRemaining);
40
+
41
+ // solhint-disable
42
+ Amount public MIN_PREMIUM;
43
+ Amount public MAX_PREMIUM;
44
+ Amount public MAX_PAYOUT;
45
+ Amount public MAX_TOTAL_PAYOUT; // Maximum risk per flight/risk
46
+
47
+ // Minimum time before departure for applying
48
+ Seconds public MIN_TIME_BEFORE_DEPARTURE;
49
+ // Maximum time before departure for applying
50
+ Seconds public MAX_TIME_BEFORE_DEPARTURE;
51
+ // Maximum duration of flight
52
+ Seconds public MAX_FLIGHT_DURATION;
53
+ // Max time to process claims after departure
54
+ Seconds public LIFETIME;
55
+
56
+ // ['observations','late15','late30','late45','cancelled','diverted']
57
+ // no payouts for delays of 30' or less
58
+ uint8[6] public WEIGHT_PATTERN;
59
+ // Minimum number of observations for valid prediction/premium calculation
60
+ uint256 public MIN_OBSERVATIONS;
61
+ // Maximum cumulated weighted premium per risk
62
+ uint256 public MARGIN_PERCENT;
63
+ // Maximum number of policies to process in one callback
64
+ uint8 public MAX_POLICIES_TO_PROCESS;
65
+ // solhint-enable
66
+
67
+ bool internal _testMode;
68
+
69
+ // GIF V3 specifics
70
+ NftId internal _defaultBundleNftId;
71
+ NftId internal _oracleNftId;
72
+
73
+
74
+ struct FlightRisk {
75
+ Str flightData; // example: "LX 180 ZRH BKK 20241104"
76
+ Timestamp departureTime;
77
+ // this field contains static data required by the frontend and is not directly used by the product
78
+ string departureTimeLocal; // example "2024-10-14T10:10:00.000 Asia/Seoul"
79
+ Timestamp arrivalTime;
80
+ // this field contains static data required by the frontend and is not directly used by the product
81
+ string arrivalTimeLocal; // example "2024-10-14T10:10:00.000 Asia/Seoul"
82
+ Amount sumOfSumInsuredAmounts;
83
+ bytes1 status; // 'L'ate, 'C'ancelled, 'D'iverted, ...
84
+ int256 delayMinutes;
85
+ uint8 payoutOption;
86
+ Timestamp statusUpdatedAt;
87
+ }
88
+
89
+
90
+ struct ApplicationData {
91
+ Str flightData;
92
+ Timestamp departureTime;
93
+ string departureTimeLocal;
94
+ Timestamp arrivalTime;
95
+ string arrivalTimeLocal;
96
+ Amount premiumAmount;
97
+ uint256[6] statistics;
98
+ }
99
+
100
+
101
+ struct PermitData {
102
+ address owner;
103
+ address spender;
104
+ uint256 value;
105
+ uint256 deadline;
106
+ uint8 v;
107
+ bytes32 r;
108
+ bytes32 s;
109
+ }
110
+
111
+
112
+ constructor(
113
+ address registry,
114
+ NftId instanceNftId,
115
+ string memory componentName,
116
+ IAuthorization authorization
117
+ )
118
+ {
119
+ address initialOwner = msg.sender;
120
+
121
+ _initialize(
122
+ registry,
123
+ instanceNftId,
124
+ componentName,
125
+ authorization,
126
+ initialOwner);
127
+ }
128
+
129
+
130
+ //--- external functions ------------------------------------------------//
131
+ //--- unpermissioned functions ------------------------------------------//
132
+
133
+ function setOracleNftId()
134
+ external
135
+ {
136
+ _oracleNftId = _getInstanceReader().getProductInfo(
137
+ getNftId()).oracleNftId[0];
138
+ }
139
+
140
+ function calculatePayoutAmounts(
141
+ FlightProduct flightProduct,
142
+ Amount premium,
143
+ uint256[6] memory statistics
144
+ )
145
+ external
146
+ view
147
+ returns (
148
+ uint256 weight,
149
+ Amount[5] memory payoutAmounts,
150
+ Amount sumInsuredAmount // simply the max of payoutAmounts
151
+ )
152
+ {
153
+ return FlightLib.calculatePayoutAmounts(
154
+ flightProduct,
155
+ premium,
156
+ statistics);
157
+ }
158
+
159
+ /// @dev Creates a policy using a permit for the policy holder.
160
+ /// The policy holder is defined as the owner parameter of the permit data.
161
+ /// NOTE: This function makes the assumption that the product token
162
+ /// supports permits. This assumption is not verfied.
163
+ function createPolicyWithPermit(
164
+ PermitData memory permit,
165
+ ApplicationData memory application
166
+ )
167
+ external
168
+ virtual
169
+ restricted()
170
+ returns (
171
+ RiskId riskId,
172
+ NftId policyNftId
173
+ )
174
+ {
175
+ // process permit data
176
+ _processPermit(permit);
177
+
178
+ // create policy
179
+ address policyHolder = permit.owner;
180
+ (
181
+ riskId,
182
+ policyNftId
183
+ ) = _createPolicy(
184
+ policyHolder,
185
+ application.flightData,
186
+ application.departureTime,
187
+ application.departureTimeLocal,
188
+ application.arrivalTime,
189
+ application.arrivalTimeLocal,
190
+ application.premiumAmount,
191
+ application.statistics);
192
+ }
193
+
194
+
195
+ function _createPolicy(
196
+ address policyHolder,
197
+ Str flightData,
198
+ Timestamp departureTime,
199
+ string memory departureTimeLocal,
200
+ Timestamp arrivalTime,
201
+ string memory arrivalTimeLocal,
202
+ Amount premiumAmount,
203
+ uint256[6] memory statistics
204
+ )
205
+ internal
206
+ virtual
207
+ returns (
208
+ RiskId riskId,
209
+ NftId policyNftId
210
+ )
211
+ {
212
+ // checks
213
+ // disabled for now - using rbac for security
214
+ FlightLib.checkApplicationData(
215
+ this,
216
+ flightData,
217
+ departureTime,
218
+ arrivalTime,
219
+ premiumAmount);
220
+
221
+ (riskId, policyNftId) = _prepareApplication(
222
+ policyHolder,
223
+ flightData,
224
+ departureTime,
225
+ departureTimeLocal,
226
+ arrivalTime,
227
+ arrivalTimeLocal,
228
+ premiumAmount,
229
+ statistics);
230
+
231
+ _createPolicy(
232
+ policyNftId,
233
+ TimestampLib.zero(), // do not ativate yet
234
+ premiumAmount); // max premium amount
235
+
236
+ // interactions (token transfer + callback to token holder, if contract)
237
+ _collectPremium(
238
+ policyNftId,
239
+ departureTime); // activate at scheduled departure time of flight
240
+
241
+ // send oracle request for flight status (interacts with flight oracle contract)
242
+ _sendRequest(
243
+ _oracleNftId,
244
+ abi.encode(
245
+ FlightOracle.FlightStatusRequest(
246
+ riskId,
247
+ flightData,
248
+ departureTime)),
249
+ // allow up to 30 days to process the claim
250
+ arrivalTime.addSeconds(SecondsLib.fromDays(30)),
251
+ "flightStatusCallback");
252
+
253
+ emit LogFlightPolicyPurchased(policyNftId, flightData.toString(), premiumAmount);
254
+ }
255
+
256
+
257
+ /// @dev Callback for flight status oracle.
258
+ /// Function may only be alled by oracle service.
259
+ function flightStatusCallback(
260
+ RequestId requestId,
261
+ bytes memory responseData
262
+ )
263
+ external
264
+ virtual
265
+ restricted()
266
+ {
267
+ FlightOracle.FlightStatusResponse memory response = abi.decode(
268
+ responseData, (FlightOracle.FlightStatusResponse));
269
+
270
+ _processFlightStatus(
271
+ requestId,
272
+ response.riskId,
273
+ response.status,
274
+ response.delayMinutes);
275
+ }
276
+
277
+
278
+ function resendRequest(RequestId requestId)
279
+ external
280
+ virtual
281
+ restricted()
282
+ {
283
+ _resendRequest(requestId);
284
+ }
285
+
286
+
287
+ /// @dev Manual fallback function for product owner.
288
+ function processPayoutsAndClosePolicies(
289
+ RiskId riskId,
290
+ uint8 maxPoliciesToProcess
291
+ )
292
+ external
293
+ virtual
294
+ restricted()
295
+ onlyOwner()
296
+ {
297
+ _processPayoutsAndClosePolicies(
298
+ riskId,
299
+ maxPoliciesToProcess);
300
+ }
301
+
302
+
303
+ //--- owner functions ---------------------------------------------------//
304
+
305
+ /// @dev Call after product registration with the instance
306
+ /// when the product token/tokenhandler is available
307
+ function setConstants(
308
+ Amount minPremium,
309
+ Amount maxPremium,
310
+ Amount maxPayout,
311
+ Amount maxTotalPayout,
312
+ Seconds minTimeBeforeDeparture,
313
+ Seconds maxTimeBeforeDeparture,
314
+ uint8 maxPoliciesToProcess
315
+ )
316
+ external
317
+ virtual
318
+ restricted()
319
+ onlyOwner()
320
+ {
321
+ MIN_PREMIUM = minPremium;
322
+ MAX_PREMIUM = maxPremium;
323
+ MAX_PAYOUT = maxPayout;
324
+ MAX_TOTAL_PAYOUT = maxTotalPayout;
325
+
326
+ MIN_TIME_BEFORE_DEPARTURE = minTimeBeforeDeparture;
327
+ MAX_TIME_BEFORE_DEPARTURE = maxTimeBeforeDeparture;
328
+ MAX_POLICIES_TO_PROCESS = maxPoliciesToProcess;
329
+ }
330
+
331
+ function setDefaultBundle(NftId bundleNftId) external restricted() onlyOwner() { _defaultBundleNftId = bundleNftId; }
332
+ function setTestMode(bool testMode) external restricted() onlyOwner() { _testMode = testMode; }
333
+
334
+ function approveTokenHandler(IERC20Metadata token, Amount amount) external restricted() onlyOwner() { _approveTokenHandler(token, amount); }
335
+ function setLocked(bool locked) external onlyOwner() { _setLocked(locked); }
336
+ function setWallet(address newWallet) external restricted() onlyOwner() { _setWallet(newWallet); }
337
+
338
+
339
+ //--- view functions ----------------------------------------------------//
340
+
341
+ function calculateNetPremium(
342
+ Amount, // sumInsuredAmount: not used in this product
343
+ RiskId, // riskId: not used in this product
344
+ Seconds, // lifetime: not used in this product, a flight is a one time risk
345
+ bytes memory applicationData // holds the premium amount the customer is willing to pay
346
+ )
347
+ external
348
+ virtual override
349
+ view
350
+ returns (Amount netPremiumAmount)
351
+ {
352
+ (netPremiumAmount, ) = abi.decode(applicationData, (Amount, Amount[5]));
353
+ }
354
+
355
+
356
+ function getOracleNftId() public view returns (NftId oracleNftId) { return _oracleNftId; }
357
+ function isTestMode() public view returns (bool) { return _testMode; }
358
+ function decodeFlightRiskData(bytes memory data) public pure returns (FlightRisk memory) { return abi.decode(data, (FlightRisk)); }
359
+
360
+ //--- internal functions ------------------------------------------------//
361
+
362
+
363
+ function _processPermit(
364
+ PermitData memory permit
365
+ )
366
+ internal
367
+ virtual
368
+ restricted()
369
+ {
370
+ address tokenAddress = address(getToken());
371
+
372
+ // process permit data
373
+ ERC20Permit(tokenAddress).permit(
374
+ permit.owner,
375
+ permit.spender,
376
+ permit.value,
377
+ permit.deadline,
378
+ permit.v,
379
+ permit.r,
380
+ permit.s);
381
+ }
382
+
383
+
384
+ function _prepareApplication(
385
+ address policyHolder,
386
+ Str flightData,
387
+ Timestamp departureTime,
388
+ string memory departureTimeLocal,
389
+ Timestamp arrivalTime,
390
+ string memory arrivalTimeLocal,
391
+ Amount premiumAmount,
392
+ uint256[6] memory statistics
393
+ )
394
+ internal
395
+ virtual
396
+ returns (
397
+ RiskId riskId,
398
+ NftId policyNftId
399
+ )
400
+ {
401
+ Amount[5] memory payoutAmounts;
402
+ Amount sumInsuredAmount;
403
+
404
+ (
405
+ riskId,
406
+ payoutAmounts,
407
+ sumInsuredAmount
408
+ ) = _createRiskAndPayoutAmounts(
409
+ flightData,
410
+ departureTime,
411
+ departureTimeLocal,
412
+ arrivalTime,
413
+ arrivalTimeLocal,
414
+ premiumAmount,
415
+ statistics);
416
+
417
+ policyNftId = _createApplication(
418
+ policyHolder,
419
+ riskId,
420
+ sumInsuredAmount,
421
+ premiumAmount,
422
+ LIFETIME,
423
+ _defaultBundleNftId,
424
+ ReferralLib.zero(),
425
+ abi.encode(
426
+ premiumAmount,
427
+ payoutAmounts)); // application data
428
+ }
429
+
430
+
431
+ function _createRiskAndPayoutAmounts(
432
+ Str flightData,
433
+ Timestamp departureTime,
434
+ string memory departureTimeLocal,
435
+ Timestamp arrivalTime,
436
+ string memory arrivalTimeLocal,
437
+ Amount premiumAmount,
438
+ uint256[6] memory statistics
439
+ )
440
+ internal
441
+ virtual
442
+ returns (
443
+ RiskId riskId,
444
+ Amount[5] memory payoutAmounts,
445
+ Amount sumInsuredAmount
446
+ )
447
+ {
448
+ uint256 weight;
449
+
450
+ (
451
+ weight,
452
+ payoutAmounts,
453
+ sumInsuredAmount
454
+ ) = FlightLib.calculatePayoutAmounts(
455
+ this,
456
+ premiumAmount,
457
+ statistics);
458
+
459
+ riskId = _checkAndUpdateFlightRisk(
460
+ flightData,
461
+ departureTime,
462
+ departureTimeLocal,
463
+ arrivalTime,
464
+ arrivalTimeLocal,
465
+ sumInsuredAmount,
466
+ weight);
467
+ }
468
+
469
+
470
+ function _checkAndUpdateFlightRisk(
471
+ Str flightData,
472
+ Timestamp departureTime,
473
+ string memory departureTimeLocal,
474
+ Timestamp arrivalTime,
475
+ string memory arrivalTimeLocal,
476
+ Amount sumInsuredAmount,
477
+ uint256 weight
478
+ )
479
+ internal
480
+ virtual
481
+ returns (RiskId riskId)
482
+ {
483
+ bool exists;
484
+ FlightRisk memory flightRisk;
485
+ (riskId, exists, flightRisk) = FlightLib.getFlightRisk(
486
+ _getInstanceReader(),
487
+ getNftId(),
488
+ flightData,
489
+ departureTime,
490
+ departureTimeLocal,
491
+ arrivalTime,
492
+ arrivalTimeLocal);
493
+
494
+ // create risk, if new
495
+ if (!exists) {
496
+ bytes32 riskKey = FlightLib.getRiskKey(flightData);
497
+ _createRisk(riskKey, abi.encode(flightRisk));
498
+ }
499
+
500
+ FlightLib.checkClusterRisk(
501
+ flightRisk.sumOfSumInsuredAmounts,
502
+ sumInsuredAmount,
503
+ MAX_TOTAL_PAYOUT);
504
+
505
+ // update existing risk with additional sum insured amount
506
+ flightRisk.sumOfSumInsuredAmounts = flightRisk.sumOfSumInsuredAmounts + sumInsuredAmount;
507
+ _updateRisk(riskId, abi.encode(flightRisk));
508
+ }
509
+
510
+
511
+ function _processFlightStatus(
512
+ RequestId requestId,
513
+ RiskId riskId,
514
+ bytes1 status,
515
+ int256 delayMinutes
516
+ )
517
+ internal
518
+ virtual
519
+ {
520
+ // check risk exists
521
+ InstanceReader reader = _getInstanceReader();
522
+ (
523
+ bool exists,
524
+ FlightRisk memory flightRisk
525
+ ) = FlightLib.getFlightRisk(reader, getNftId(), riskId, true);
526
+
527
+ // update status, if not yet set
528
+ if (flightRisk.statusUpdatedAt.eqz()) {
529
+ flightRisk.statusUpdatedAt = TimestampLib.current();
530
+ flightRisk.status = status;
531
+ flightRisk.delayMinutes = delayMinutes;
532
+ flightRisk.payoutOption = FlightLib.checkAndGetPayoutOption(
533
+ requestId, riskId, status, delayMinutes);
534
+
535
+ _updateRisk(riskId, abi.encode(flightRisk));
536
+ }
537
+
538
+ (,, uint8 payoutOption) = _processPayoutsAndClosePolicies(
539
+ riskId,
540
+ MAX_POLICIES_TO_PROCESS);
541
+
542
+ // logging
543
+ emit LogFlightStatusProcessed(requestId, riskId, status, delayMinutes, payoutOption);
544
+ }
545
+
546
+
547
+ function _processPayoutsAndClosePolicies(
548
+ RiskId riskId,
549
+ uint8 maxPoliciesToProcess
550
+ )
551
+ internal
552
+ virtual
553
+ returns (
554
+ bool riskExists,
555
+ bool statusAvailable,
556
+ uint8 payoutOption
557
+ )
558
+ {
559
+ // determine numbers of policies to process
560
+ InstanceReader reader = _getInstanceReader();
561
+ (riskExists, statusAvailable, payoutOption) = FlightLib.getPayoutOption(reader, getNftId(), riskId);
562
+
563
+ // return with default values if risk does not exist or status is not yet available
564
+ if (!riskExists || !statusAvailable) {
565
+ return (riskExists, statusAvailable, payoutOption);
566
+ }
567
+
568
+ uint256 policiesToProcess = reader.policiesForRisk(riskId);
569
+ uint256 policiesProcessed = policiesToProcess < maxPoliciesToProcess ? policiesToProcess : maxPoliciesToProcess;
570
+
571
+ // go trough policies
572
+ for (uint256 i = 0; i < policiesProcessed; i++) {
573
+ NftId policyNftId = reader.getPolicyForRisk(riskId, i);
574
+ Amount payoutAmount = FlightLib.getPayoutAmount(
575
+ reader.getPolicyInfo(policyNftId).applicationData,
576
+ payoutOption);
577
+
578
+ // create claim/payout (if applicable)
579
+ _resolvePayout(
580
+ policyNftId,
581
+ payoutAmount);
582
+
583
+ // expire and close policy
584
+ _expire(policyNftId, TimestampLib.current());
585
+ _close(policyNftId);
586
+
587
+ emit LogFlightPolicyClosed(policyNftId, payoutAmount);
588
+ }
589
+
590
+ // logging
591
+ emit LogFlightPoliciesProcessed(riskId, payoutOption, policiesProcessed, policiesToProcess - policiesProcessed);
592
+ }
593
+
594
+
595
+ function _resolvePayout(
596
+ NftId policyNftId,
597
+ Amount payoutAmount
598
+ )
599
+ internal
600
+ virtual
601
+ {
602
+ // no action if no payout
603
+ if (payoutAmount.eqz()) {
604
+ return;
605
+ }
606
+
607
+ // create confirmed claim
608
+ ClaimId claimId = _submitClaim(policyNftId, payoutAmount, "");
609
+ _confirmClaim(policyNftId, claimId, payoutAmount, "");
610
+
611
+ // create and execute payout
612
+ PayoutId payoutId = _createPayout(policyNftId, claimId, payoutAmount, "");
613
+ _processPayout(policyNftId, payoutId);
614
+ }
615
+
616
+
617
+ function _initialize(
618
+ address registry,
619
+ NftId instanceNftId,
620
+ string memory componentName,
621
+ IAuthorization authorization,
622
+ address initialOwner
623
+ )
624
+ internal
625
+ initializer()
626
+ {
627
+ __Product_init(
628
+ registry,
629
+ instanceNftId,
630
+ componentName,
631
+ IComponents.ProductInfo({
632
+ isProcessingFundedClaims: false,
633
+ isInterceptingPolicyTransfers: false,
634
+ hasDistribution: false,
635
+ expectedNumberOfOracles: 1,
636
+ numberOfOracles: 0,
637
+ poolNftId: NftIdLib.zero(),
638
+ distributionNftId: NftIdLib.zero(),
639
+ oracleNftId: new NftId[](0)
640
+ }),
641
+ IComponents.FeeInfo({
642
+ productFee: FeeLib.zero(),
643
+ processingFee: FeeLib.zero(),
644
+ distributionFee: FeeLib.zero(),
645
+ minDistributionOwnerFee: FeeLib.zero(),
646
+ poolFee: FeeLib.zero(),
647
+ stakingFee: FeeLib.zero(),
648
+ performanceFee: FeeLib.zero()
649
+ }),
650
+ authorization,
651
+ initialOwner); // number of oracles
652
+
653
+ MAX_FLIGHT_DURATION = SecondsLib.fromDays(2);
654
+ LIFETIME = SecondsLib.fromDays(30);
655
+ WEIGHT_PATTERN = [0, 0, 0, 30, 50, 50];
656
+ MIN_OBSERVATIONS = 10;
657
+ MARGIN_PERCENT = 30;
658
+ }
659
+ }