@etherisc/gif-next 3.0.0-f9be4a0-294 → 3.0.0-fbbe3fc-042

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 (293) hide show
  1. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +2 -2
  3. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +2 -2
  5. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  7. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +44 -56
  8. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +145 -100
  10. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  13. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  19. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  20. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +2 -2
  21. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
  23. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +2 -2
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +2 -2
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  30. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  31. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  32. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +2 -2
  33. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  34. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +2 -2
  35. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  36. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2 -2
  37. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  38. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +2 -2
  39. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  40. package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.dbg.json +1 -1
  41. package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.json +290 -62
  42. package/artifacts/contracts/examples/flight/FlightMessageVerifier.sol/FlightMessageVerifier.dbg.json +1 -1
  43. package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.dbg.json +1 -1
  44. package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.json +64 -28
  45. package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.dbg.json +1 -1
  46. package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.json +82 -35
  47. package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.dbg.json +1 -1
  48. package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.json +2 -2
  49. package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.dbg.json +1 -1
  50. package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.json +2 -2
  51. package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.dbg.json +1 -1
  52. package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.json +504 -196
  53. package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.dbg.json +1 -1
  54. package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.json +83 -36
  55. package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.dbg.json +1 -1
  56. package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.json +212 -2
  57. package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.dbg.json +1 -1
  58. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  59. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +2 -2
  60. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
  61. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +2 -2
  62. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  63. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +2 -2
  64. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  65. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +2 -2
  66. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
  67. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +2 -2
  68. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  69. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2 -2
  70. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
  71. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +2 -2
  72. package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +1 -1
  73. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  74. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  75. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +1 -1
  76. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  77. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  79. package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
  80. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  81. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +102 -114
  82. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  83. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
  84. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  85. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +58 -34
  86. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
  88. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  89. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
  90. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  91. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2 -2
  92. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +1 -1
  93. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +2 -2
  94. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +1 -1
  95. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +2 -2
  96. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  97. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  98. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  99. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  100. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  101. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +1 -1
  102. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +2 -2
  103. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  104. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  105. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  106. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  107. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  108. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  109. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  110. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +2 -2
  111. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  112. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  113. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  114. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  115. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  117. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  118. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  119. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  120. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  121. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  122. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  123. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +2 -2
  124. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  125. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +2 -2
  126. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  127. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +2 -2
  128. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  129. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  130. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  131. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  132. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
  133. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +2 -2
  134. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  135. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +2 -2
  136. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  137. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +2 -2
  138. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  139. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
  140. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  141. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
  142. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  143. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  144. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
  145. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  146. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +2 -2
  147. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
  149. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  150. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  151. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  152. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  153. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  154. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  155. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  156. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +2 -2
  157. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +1 -1
  158. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +2 -2
  159. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +2 -2
  161. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  162. package/artifacts/contracts/product/PricingService.sol/PricingService.json +2 -2
  163. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  164. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  165. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  166. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  167. package/artifacts/contracts/product/RiskService.sol/RiskService.json +2 -2
  168. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  169. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +2 -2
  170. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  171. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  172. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  173. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +1 -1
  174. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  175. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  176. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  177. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  178. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +101 -113
  179. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +1 -1
  180. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +2 -2
  181. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  182. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  183. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  184. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  185. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
  186. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +110 -122
  187. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  188. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  189. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +56 -62
  190. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  191. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
  192. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  193. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  194. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  195. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  196. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +2 -2
  197. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  198. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +2 -2
  199. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  200. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +1 -1
  201. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +1 -1
  202. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +1 -1
  203. package/artifacts/contracts/shared/IAuthorizedComponent.sol/IAuthorizedComponent.dbg.json +4 -0
  204. package/artifacts/contracts/shared/IAuthorizedComponent.sol/IAuthorizedComponent.json +633 -0
  205. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  206. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  207. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  208. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  209. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  210. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  211. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  212. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  213. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  214. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  215. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  216. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  217. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  218. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  219. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  220. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  221. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  222. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  223. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  224. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
  225. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  226. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  227. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  228. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +1 -1
  229. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  230. package/artifacts/contracts/staking/Staking.sol/Staking.json +2 -2
  231. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +1 -1
  232. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +2 -2
  233. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  234. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +2 -2
  235. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  236. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  237. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  238. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +2 -2
  239. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  240. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
  241. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  242. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2 -2
  243. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +1 -1
  244. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +2 -2
  245. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  246. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  247. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  248. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  250. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  254. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  255. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
  256. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  258. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  260. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/RequestIdSet.sol/LibRequestIdSet.dbg.json +1 -1
  263. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  272. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  274. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  275. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  276. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  277. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  278. package/contracts/authorization/AccessAdmin.sol +25 -23
  279. package/contracts/authorization/AccessAdminLib.sol +20 -3
  280. package/contracts/examples/flight/FlightLib.sol +66 -77
  281. package/contracts/examples/flight/FlightOracle.sol +4 -0
  282. package/contracts/examples/flight/FlightOracleAuthorization.sol +24 -5
  283. package/contracts/examples/flight/FlightProduct.sol +240 -100
  284. package/contracts/examples/flight/FlightProductAuthorization.sol +33 -8
  285. package/contracts/examples/flight/FlightUSD.sol +3 -1
  286. package/contracts/instance/InstanceAdmin.sol +0 -1
  287. package/contracts/instance/InstanceReader.sol +6 -0
  288. package/contracts/registry/RegistryAdmin.sol +7 -1
  289. package/contracts/registry/ReleaseAdmin.sol +8 -1
  290. package/contracts/shared/IAuthorizedComponent.sol +15 -0
  291. package/contracts/shared/IInstanceLinkedComponent.sol +2 -5
  292. package/contracts/shared/InstanceLinkedComponent.sol +2 -1
  293. package/package.json +1 -1
@@ -1,13 +1,13 @@
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";
8
9
 
9
10
  import {Amount, AmountLib} from "../../type/Amount.sol";
10
- import {BasicProduct} from "../../product/BasicProduct.sol";
11
11
  import {ClaimId} from "../../type/ClaimId.sol";
12
12
  import {FeeLib} from "../../type/Fee.sol";
13
13
  import {FlightLib} from "./FlightLib.sol";
@@ -16,6 +16,7 @@ import {FlightOracle} from "./FlightOracle.sol";
16
16
  import {InstanceReader} from "../../instance/InstanceReader.sol";
17
17
  import {NftId, NftIdLib} from "../../type/NftId.sol";
18
18
  import {PayoutId} from "../../type/PayoutId.sol";
19
+ import {Product} from "../../product/Product.sol";
19
20
  import {ReferralLib} from "../../type/Referral.sol";
20
21
  import {RiskId, RiskIdLib} from "../../type/RiskId.sol";
21
22
  import {RequestId} from "../../type/RequestId.sol";
@@ -26,16 +27,17 @@ import {Timestamp, TimestampLib} from "../../type/Timestamp.sol";
26
27
 
27
28
  /// @dev FlightProduct implements the flight delay product.
28
29
  contract FlightProduct is
29
- BasicProduct
30
+ Product
30
31
  {
31
32
 
32
33
  event LogRequestFlightRatings(uint256 requestId, bytes32 carrierFlightNumber, uint256 departureTime, uint256 arrivalTime, bytes32 riskId);
33
34
  event LogRequestFlightStatus(uint256 requestId, uint256 arrivalTime, bytes32 carrierFlightNumber, bytes32 departureYearMonthDay);
34
35
  event LogPayoutTransferred(bytes32 bpKey, uint256 claimId, uint256 payoutId, uint256 amount);
35
36
  event LogFlightStatusProcessed(RequestId requestId, RiskId riskId, bytes1 status, int256 delayMinutes, uint8 payoutOption);
37
+ event LogFlightPoliciesProcessed(RiskId riskId, uint8 payoutOption, uint256 policiesProcessed, uint256 policiesRemaining);
36
38
 
37
39
  // TODO convert error logs to custom errors
38
- event LogError(string error, uint256 index, uint256 stored, uint256 calculated);
40
+ // event LogError(string error, uint256 index, uint256 stored, uint256 calculated);
39
41
  event LogPolicyExpired(bytes32 bpKey);
40
42
 
41
43
  event LogErrorRiskInvalid(RequestId requestId, RiskId riskId);
@@ -43,6 +45,14 @@ contract FlightProduct is
43
45
  event LogErrorUnexpectedStatus(RequestId requestId, RiskId riskId, bytes1 status, int256 delayMinutes);
44
46
 
45
47
  error ErrorApplicationDataSignatureMismatch(address expectedSigner, address actualSigner);
48
+ error ErrorFlightProductClusterRisk(Amount totalSumInsured, Amount maxTotalPayout);
49
+ error ErrorFlightProductPremiumAmountTooSmall(Amount premiumAmount, Amount minPremium);
50
+ error ErrorFlightProductPremiumAmountTooLarge(Amount premiumAmount, Amount maxPremium);
51
+ error ErrorFlightProductArrivalBeforeDepartureTime(Timestamp departureTime, Timestamp arrivalTime);
52
+ error ErrorFlightProductArrivalAfterMaxFlightDuration(Timestamp arrivalTime, Timestamp maxArrivalTime, Seconds maxDuration);
53
+ error ErrorFlightProductDepartureBeforeMinTimeBeforeDeparture(Timestamp departureTime, Timestamp now, Seconds minTimeBeforeDeparture);
54
+ error ErrorFlightProductDepartureAfterMaxTimeBeforeDeparture(Timestamp departureTime, Timestamp now, Seconds maxTimeBeforeDeparture);
55
+ error ErrorFlightProductNotEnoughObservations(uint256 observations, uint256 minObservations);
46
56
 
47
57
  // solhint-disable
48
58
  // Minimum observations for valid prediction
@@ -76,28 +86,50 @@ contract FlightProduct is
76
86
  uint8[6] public WEIGHT_PATTERN = [0, 0, 0, 30, 50, 50];
77
87
  uint8 public constant MAX_WEIGHT = 50;
78
88
 
89
+ bool internal _testMode;
90
+
79
91
  // GIF V3 specifics
80
92
  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)
93
+ NftId internal _oracleNftId;
87
94
  // solhint-enable
88
95
 
89
- FlightMessageVerifier internal _flightMessageVerifier;
90
-
91
96
 
92
97
  struct FlightRisk {
93
98
  Str flightData; // example: "LX 180 ZRH BKK 20241104"
94
99
  Timestamp departureTime;
100
+ // this field contains static data required by the frontend and is not directly used by the product
101
+ string departureTimeLocal; // example "2024-10-14T10:10:00.000 Asia/Seoul"
95
102
  Timestamp arrivalTime;
103
+ // this field contains static data required by the frontend and is not directly used by the product
104
+ string arrivalTimeLocal; // example "2024-10-14T10:10:00.000 Asia/Seoul"
96
105
  Amount sumOfSumInsuredAmounts;
97
106
  // uint256 premiumMultiplier; // what is this? UFixed?
98
107
  // uint256 weight; // what is this? UFixed?
99
108
  bytes1 status; // 'L'ate, 'C'ancelled, 'D'iverted, ...
100
109
  int256 delayMinutes;
110
+ uint8 payoutOption;
111
+ Timestamp statusUpdatedAt;
112
+ }
113
+
114
+ struct ApplicationData {
115
+ Str flightData;
116
+ Timestamp departureTime;
117
+ string departureTimeLocal;
118
+ Timestamp arrivalTime;
119
+ string arrivalTimeLocal;
120
+ Amount premiumAmount;
121
+ uint256[6] statistics;
122
+ }
123
+
124
+
125
+ struct PermitData {
126
+ address owner;
127
+ address spender;
128
+ uint256 value;
129
+ uint256 deadline;
130
+ uint8 v;
131
+ bytes32 r;
132
+ bytes32 s;
101
133
  }
102
134
 
103
135
 
@@ -105,8 +137,7 @@ contract FlightProduct is
105
137
  address registry,
106
138
  NftId instanceNftid,
107
139
  string memory componentName,
108
- IAuthorization authorization,
109
- FlightMessageVerifier messageVerifier
140
+ IAuthorization authorization
110
141
  )
111
142
  {
112
143
  address initialOwner = msg.sender;
@@ -117,8 +148,6 @@ contract FlightProduct is
117
148
  componentName,
118
149
  authorization,
119
150
  initialOwner);
120
-
121
- _flightMessageVerifier = messageVerifier;
122
151
  }
123
152
 
124
153
  //--- external functions ------------------------------------------------//
@@ -131,42 +160,94 @@ contract FlightProduct is
131
160
  getNftId()).oracleNftId[0];
132
161
  }
133
162
 
163
+ function calculatePayoutAmounts(
164
+ FlightProduct flightProduct,
165
+ Amount premium,
166
+ uint256[6] memory statistics
167
+ )
168
+ external
169
+ view
170
+ returns (
171
+ uint256 weight,
172
+ Amount[5] memory payoutAmounts,
173
+ Amount sumInsuredAmount // simply the max of payoutAmounts
174
+ )
175
+ {
176
+ return FlightLib.calculatePayoutAmounts(
177
+ flightProduct,
178
+ premium,
179
+ statistics);
180
+ }
134
181
 
135
- function createPolicy(
182
+ /// @dev Creates a policy using a permit for the policy holder.
183
+ /// The policy holder is defined as the owner parameter of the permit data.
184
+ /// NOTE: This function makes the assumption that the product token
185
+ /// supports permits. This assumption is not verfied.
186
+ function createPolicyWithPermit(
187
+ PermitData memory permit,
188
+ ApplicationData memory application
189
+ )
190
+ external
191
+ virtual
192
+ restricted()
193
+ returns (
194
+ RiskId riskId,
195
+ NftId policyNftId
196
+ )
197
+ {
198
+ // process permit data
199
+ _processPermit(permit);
200
+
201
+ // create policy
202
+ address policyHolder = permit.owner;
203
+ (
204
+ riskId,
205
+ policyNftId
206
+ ) = _createPolicy(
207
+ policyHolder,
208
+ application.flightData,
209
+ application.departureTime,
210
+ application.departureTimeLocal,
211
+ application.arrivalTime,
212
+ application.arrivalTimeLocal,
213
+ application.premiumAmount,
214
+ application.statistics);
215
+ }
216
+
217
+
218
+ function _createPolicy(
136
219
  address policyHolder,
137
220
  Str flightData,
138
221
  Timestamp departureTime,
222
+ string memory departureTimeLocal,
139
223
  Timestamp arrivalTime,
224
+ string memory arrivalTimeLocal,
140
225
  Amount premiumAmount,
141
- uint256[6] memory statistics,
142
- // signature fields
143
- uint8 v,
144
- bytes32 r,
145
- bytes32 s
226
+ uint256[6] memory statistics
146
227
  )
147
- external
228
+ internal
148
229
  virtual
149
- restricted()
150
230
  returns (
151
231
  RiskId riskId,
152
232
  NftId policyNftId
153
233
  )
154
234
  {
155
235
  // checks
156
- FlightLib.checkApplicationDataAndSignature(
236
+ // disabled for now - using rbac for security
237
+ FlightLib.checkApplicationData(
157
238
  this,
158
239
  flightData,
159
240
  departureTime,
160
241
  arrivalTime,
161
- premiumAmount,
162
- statistics,
163
- v, r, s);
242
+ premiumAmount);
164
243
 
165
244
  (riskId, policyNftId) = _prepareApplication(
166
245
  policyHolder,
167
246
  flightData,
168
247
  departureTime,
248
+ departureTimeLocal,
169
249
  arrivalTime,
250
+ arrivalTimeLocal,
170
251
  premiumAmount,
171
252
  statistics);
172
253
 
@@ -194,49 +275,6 @@ contract FlightProduct is
194
275
  }
195
276
 
196
277
 
197
- function _prepareApplication(
198
- address policyHolder,
199
- Str flightData,
200
- Timestamp departureTime,
201
- Timestamp arrivalTime,
202
- Amount premiumAmount,
203
- uint256[6] memory statistics
204
- )
205
- internal
206
- virtual
207
- returns (
208
- RiskId riskId,
209
- NftId policyNftId
210
- )
211
- {
212
- Amount[5] memory payoutAmounts;
213
- Amount sumInsuredAmount;
214
-
215
- (
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
237
- }
238
-
239
-
240
278
  /// @dev Callback for flight status oracle.
241
279
  /// Function may only be alled by oracle service.
242
280
  function flightStatusCallback(
@@ -280,9 +318,27 @@ contract FlightProduct is
280
318
  maxPoliciesToProcess);
281
319
  }
282
320
 
321
+
322
+ /// @dev Manual fallback function for product owner.
323
+ function processPayoutsAndClosePolicies(
324
+ RiskId riskId,
325
+ uint8 maxPoliciesToProcess
326
+ )
327
+ external
328
+ virtual
329
+ restricted()
330
+ onlyOwner()
331
+ {
332
+ _processPayoutsAndClosePolicies(
333
+ riskId,
334
+ maxPoliciesToProcess);
335
+ }
336
+
337
+
283
338
  //--- owner functions ---------------------------------------------------//
284
339
 
285
- /// @dev Call after product registration with the instance, when the product token/tokenhandler is available
340
+ /// @dev Call after product registration with the instance
341
+ /// when the product token/tokenhandler is available
286
342
  function completeSetup()
287
343
  external
288
344
  virtual
@@ -300,6 +356,8 @@ contract FlightProduct is
300
356
 
301
357
 
302
358
  function setDefaultBundle(NftId bundleNftId) external restricted() onlyOwner() { _defaultBundleNftId = bundleNftId; }
359
+ function setTestMode(bool testMode) external restricted() onlyOwner() { _testMode = testMode; }
360
+
303
361
  function approveTokenHandler(IERC20Metadata token, Amount amount) external restricted() onlyOwner() { _approveTokenHandler(token, amount); }
304
362
  function setLocked(bool locked) external onlyOwner() { _setLocked(locked); }
305
363
  function setWallet(address newWallet) external restricted() onlyOwner() { _setWallet(newWallet); }
@@ -307,7 +365,6 @@ contract FlightProduct is
307
365
 
308
366
  //--- view functions ----------------------------------------------------//
309
367
 
310
-
311
368
  function calculateNetPremium(
312
369
  Amount, // sumInsuredAmount: not used in this product
313
370
  RiskId, // riskId: not used in this product
@@ -323,31 +380,87 @@ contract FlightProduct is
323
380
  }
324
381
 
325
382
 
326
- function getFlightMessageVerifier()
327
- external
328
- view
329
- returns (FlightMessageVerifier)
383
+ function getOracleNftId() public view returns (NftId oracleNftId) { return _oracleNftId; }
384
+ function isTestMode() public view returns (bool) { return _testMode; }
385
+ function decodeFlightRiskData(bytes memory data) public pure returns (FlightRisk memory) { return abi.decode(data, (FlightRisk)); }
386
+
387
+ //--- internal functions ------------------------------------------------//
388
+
389
+
390
+ function _processPermit(
391
+ PermitData memory permit
392
+ )
393
+ internal
394
+ virtual
395
+ restricted()
330
396
  {
331
- return _flightMessageVerifier;
397
+ address tokenAddress = address(getToken());
398
+
399
+ // process permit data
400
+ ERC20Permit(tokenAddress).permit(
401
+ permit.owner,
402
+ permit.spender,
403
+ permit.value,
404
+ permit.deadline,
405
+ permit.v,
406
+ permit.r,
407
+ permit.s);
332
408
  }
333
409
 
334
410
 
335
- function getOracleNftId()
336
- public
337
- view
338
- returns (NftId oracleNftId)
339
- {
340
- return _oracleNftId;
341
- }
411
+ function _prepareApplication(
412
+ address policyHolder,
413
+ Str flightData,
414
+ Timestamp departureTime,
415
+ string memory departureTimeLocal,
416
+ Timestamp arrivalTime,
417
+ string memory arrivalTimeLocal,
418
+ Amount premiumAmount,
419
+ uint256[6] memory statistics
420
+ )
421
+ internal
422
+ virtual
423
+ returns (
424
+ RiskId riskId,
425
+ NftId policyNftId
426
+ )
427
+ {
428
+ Amount[5] memory payoutAmounts;
429
+ Amount sumInsuredAmount;
342
430
 
431
+ (
432
+ riskId,
433
+ payoutAmounts,
434
+ sumInsuredAmount
435
+ ) = _createRiskAndPayoutAmounts(
436
+ flightData,
437
+ departureTime,
438
+ departureTimeLocal,
439
+ arrivalTime,
440
+ arrivalTimeLocal,
441
+ premiumAmount,
442
+ statistics);
343
443
 
344
- //--- internal functions ------------------------------------------------//
444
+ policyNftId = _createApplication(
445
+ policyHolder,
446
+ riskId,
447
+ sumInsuredAmount,
448
+ premiumAmount,
449
+ LIFETIME,
450
+ _defaultBundleNftId,
451
+ ReferralLib.zero(),
452
+ abi.encode(
453
+ premiumAmount,
454
+ payoutAmounts)); // application data
455
+ }
345
456
 
346
457
 
347
458
  function _createRiskAndPayoutAmounts(
348
459
  Str flightData,
349
460
  Timestamp departureTime,
461
+ string memory departureTimeLocal,
350
462
  Timestamp arrivalTime,
463
+ string memory arrivalTimeLocal,
351
464
  Amount premiumAmount,
352
465
  uint256[6] memory statistics
353
466
  )
@@ -373,7 +486,9 @@ contract FlightProduct is
373
486
  riskId = _checkAndUpdateFlightRisk(
374
487
  flightData,
375
488
  departureTime,
489
+ departureTimeLocal,
376
490
  arrivalTime,
491
+ arrivalTimeLocal,
377
492
  sumInsuredAmount,
378
493
  weight);
379
494
  }
@@ -382,7 +497,9 @@ contract FlightProduct is
382
497
  function _checkAndUpdateFlightRisk(
383
498
  Str flightData,
384
499
  Timestamp departureTime,
500
+ string memory departureTimeLocal,
385
501
  Timestamp arrivalTime,
502
+ string memory arrivalTimeLocal,
386
503
  Amount sumInsuredAmount,
387
504
  uint256 weight
388
505
  )
@@ -397,7 +514,9 @@ contract FlightProduct is
397
514
  getNftId(),
398
515
  flightData,
399
516
  departureTime,
400
- arrivalTime);
517
+ departureTimeLocal,
518
+ arrivalTime,
519
+ arrivalTimeLocal);
401
520
 
402
521
  // create risk, if new
403
522
  if (!exists) {
@@ -406,10 +525,9 @@ contract FlightProduct is
406
525
  }
407
526
 
408
527
  // 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
- );
528
+ if (flightRisk.sumOfSumInsuredAmounts + sumInsuredAmount > MAX_TOTAL_PAYOUT) {
529
+ revert ErrorFlightProductClusterRisk(flightRisk.sumOfSumInsuredAmounts + sumInsuredAmount, MAX_TOTAL_PAYOUT);
530
+ }
413
531
 
414
532
  // update existing risk with additional sum insured amount
415
533
  flightRisk.sumOfSumInsuredAmounts = flightRisk.sumOfSumInsuredAmounts + sumInsuredAmount;
@@ -435,16 +553,25 @@ contract FlightProduct is
435
553
  ) = FlightLib.getFlightRisk(reader, getNftId(), riskId);
436
554
 
437
555
  if (!exists) {
556
+ // TODO decide to switch from log to error
438
557
  emit LogErrorRiskInvalid(requestId, riskId);
439
558
  return;
559
+ } else {
560
+ // update status, if not yet set
561
+ if (flightRisk.statusUpdatedAt.eqz()) {
562
+ flightRisk.status = status;
563
+ flightRisk.delayMinutes = delayMinutes;
564
+ flightRisk.payoutOption = FlightLib.checkAndGetPayoutOption(
565
+ requestId, riskId, status, delayMinutes);
566
+ flightRisk.statusUpdatedAt = TimestampLib.current();
567
+
568
+ _updateRisk(riskId, abi.encode(flightRisk));
569
+ }
570
+ // TODO revert in else case?
440
571
  }
441
572
 
442
- uint8 payoutOption = FlightLib.checkAndGetPayoutOption(
443
- requestId, riskId, status, delayMinutes);
444
-
445
- _processPayoutsAndClosePolicies(
573
+ (,, uint8 payoutOption) = _processPayoutsAndClosePolicies(
446
574
  riskId,
447
- payoutOption,
448
575
  maxPoliciesToProcess);
449
576
 
450
577
  // logging
@@ -452,22 +579,32 @@ contract FlightProduct is
452
579
  }
453
580
 
454
581
 
455
- // REMARK caller responsible to check that risk exists.
456
582
  function _processPayoutsAndClosePolicies(
457
583
  RiskId riskId,
458
- uint8 payoutOption,
459
584
  uint8 maxPoliciesToProcess
460
585
  )
461
586
  internal
462
587
  virtual
588
+ returns (
589
+ bool riskExists,
590
+ bool statusAvailable,
591
+ uint8 payoutOption
592
+ )
463
593
  {
464
594
  // determine numbers of policies to process
465
595
  InstanceReader reader = _getInstanceReader();
596
+ (riskExists, statusAvailable, payoutOption) = FlightLib.getPayoutOption(reader, getNftId(), riskId);
597
+
598
+ // return with default values if risk does not exist or status is not yet available
599
+ if (!riskExists || !statusAvailable) {
600
+ return (riskExists, statusAvailable, payoutOption);
601
+ }
602
+
466
603
  uint256 policiesToProcess = reader.policiesForRisk(riskId);
467
- policiesToProcess = policiesToProcess < maxPoliciesToProcess ? policiesToProcess : maxPoliciesToProcess;
604
+ uint256 policiesProcessed = policiesToProcess < maxPoliciesToProcess ? policiesToProcess : maxPoliciesToProcess;
468
605
 
469
606
  // go trough policies
470
- for (uint256 i = 0; i < policiesToProcess; i++) {
607
+ for (uint256 i = 0; i < policiesProcessed; i++) {
471
608
  NftId policyNftId = reader.getPolicyForRisk(riskId, i);
472
609
 
473
610
  // create payout (if any)
@@ -486,6 +623,9 @@ contract FlightProduct is
486
623
  _expire(policyNftId, TimestampLib.current());
487
624
  _close(policyNftId);
488
625
  }
626
+
627
+ // logging
628
+ emit LogFlightPoliciesProcessed(riskId, payoutOption, policiesProcessed, policiesToProcess - policiesProcessed);
489
629
  }
490
630
 
491
631
 
@@ -516,7 +656,7 @@ contract FlightProduct is
516
656
  internal
517
657
  initializer
518
658
  {
519
- _initializeBasicProduct(
659
+ __Product_init(
520
660
  registry,
521
661
  instanceNftId,
522
662
  componentName,
@@ -3,19 +3,42 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IAccess} from "../../../contracts/authorization/IAccess.sol";
5
5
 
6
+ import {AccessAdminLib} from "../../authorization/AccessAdminLib.sol";
6
7
  import {BasicProductAuthorization} from "../../product/BasicProductAuthorization.sol";
7
8
  import {FlightProduct} from "./FlightProduct.sol";
8
9
  import {ORACLE} from "../../../contracts/type/ObjectType.sol";
9
- import {PUBLIC_ROLE} from "../../../contracts/type/RoleId.sol";
10
+ import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../../../contracts/type/RoleId.sol";
10
11
 
11
12
 
12
13
  contract FlightProductAuthorization
13
14
  is BasicProductAuthorization
14
15
  {
15
16
 
16
- constructor(string memory poolName)
17
- BasicProductAuthorization(poolName)
18
- {}
17
+ uint64 public constant STATISTICS_PROVIDER_ROLE_IDX = 1; // 1st custom role for flight product
18
+ string public constant STATISTICS_PROVIDER_ROLE_NAME = "StatisticsProviderRole";
19
+ RoleId public STATISTICS_PROVIDER_ROLE;
20
+
21
+
22
+ constructor(string memory productName)
23
+ BasicProductAuthorization(productName)
24
+ { }
25
+
26
+
27
+ function _setupRoles()
28
+ internal
29
+ override
30
+ {
31
+ STATISTICS_PROVIDER_ROLE = AccessAdminLib.getCustomRoleId(STATISTICS_PROVIDER_ROLE_IDX);
32
+
33
+ _addRole(
34
+ STATISTICS_PROVIDER_ROLE,
35
+ AccessAdminLib.roleInfo(
36
+ ADMIN_ROLE(),
37
+ TargetType.Custom,
38
+ 1, // max member count special case: instance nft owner is sole role owner
39
+ STATISTICS_PROVIDER_ROLE_NAME));
40
+ }
41
+
19
42
 
20
43
  function _setupTargetAuthorizations()
21
44
  internal
@@ -28,12 +51,14 @@ contract FlightProductAuthorization
28
51
  functions = _authorizeForTarget(getMainTargetName(), getServiceRole(ORACLE()));
29
52
  _authorize(functions, FlightProduct.flightStatusCallback.selector, "flightStatusCallback");
30
53
 
31
- // authorize public role (open access to any account, only allows to lock target)
32
- functions = _authorizeForTarget(getMainTargetName(), PUBLIC_ROLE());
33
- _authorize(functions, FlightProduct.createPolicy.selector, "createPolicy");
54
+ // authorize statistics provider role
55
+ functions = _authorizeForTarget(getMainTargetName(), STATISTICS_PROVIDER_ROLE);
56
+ _authorize(functions, FlightProduct.createPolicyWithPermit.selector, "createPolicyWithPermit");
34
57
 
35
- // only owner
58
+ // authorize public role (additional authz via onlyOwner)
59
+ functions = _authorizeForTarget(getMainTargetName(), PUBLIC_ROLE());
36
60
  _authorize(functions, FlightProduct.processFlightStatus.selector, "processFlightStatus");
61
+ _authorize(functions, FlightProduct.processPayoutsAndClosePolicies.selector, "processPayoutsAndClosePolicies");
37
62
  _authorize(functions, FlightProduct.completeSetup.selector, "completeSetup");
38
63
  _authorize(functions, FlightProduct.setDefaultBundle.selector, "setDefaultBundle");
39
64
  _authorize(functions, FlightProduct.approveTokenHandler.selector, "approveTokenHandler");
@@ -2,9 +2,10 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
+ import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
5
6
 
6
7
  /// @dev FireUSD is a stablecoin with 6 decimals and an initial supply of 1 Billion tokens.
7
- contract FlightUSD is ERC20 {
8
+ contract FlightUSD is ERC20Permit {
8
9
 
9
10
  string public constant NAME = "FlightUSD";
10
11
  string public constant SYMBOL = "FLTD";
@@ -12,6 +13,7 @@ contract FlightUSD is ERC20 {
12
13
  uint256 public constant INITIAL_SUPPLY = 10**12 * 10**DECIMALS; // 1'000'000'000'000
13
14
 
14
15
  constructor()
16
+ ERC20Permit(NAME)
15
17
  ERC20(NAME, SYMBOL)
16
18
  {
17
19
  _mint(
@@ -130,7 +130,6 @@ contract InstanceAdmin is
130
130
  _createTarget(target, name, TargetType.Instance, true);
131
131
  }
132
132
 
133
-
134
133
  /// @dev Initializes the authorization for the specified component.
135
134
  /// Important: The component MUST be registered.
136
135
  function initializeComponentAuthorization(
@@ -466,6 +466,12 @@ contract InstanceReader {
466
466
  }
467
467
 
468
468
 
469
+ /// @dev Returns the role ID for the given index.
470
+ function getRoleForName(string memory name) public view returns (RoleId roleId, bool exists) {
471
+ return _instanceAdmin.getRoleForName(name);
472
+ }
473
+
474
+
469
475
  /// @dev Returns the role ID for the instance owner role.
470
476
  /// This role may be used as a "root" admin role for other custom roles defined for this instance.
471
477
  function getInstanceOwnerRole() public pure returns (RoleId roleId) {
@@ -85,7 +85,13 @@ contract RegistryAdmin is
85
85
  registry,
86
86
  release);
87
87
 
88
- _checkAuthorization(authorization, REGISTRY(), release, false, true);
88
+ AccessAdminLib.checkAuthorization(
89
+ address(_authorization),
90
+ authorization,
91
+ REGISTRY(),
92
+ release,
93
+ false, // expectServiceAuthorization
94
+ false); // checkAlreadyInitialized);
89
95
 
90
96
  _registry = registry;
91
97
  _authorization = IAuthorization(authorization);