@etherisc/gif-next 3.0.0-b45deea-213 → 3.0.0-bc9951f-650

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