@etherisc/gif-next 3.0.0-f9be4a0-294 → 3.0.0-fb87f3a-607

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