@etherisc/gif-next 0.0.2-b1fff40-773 → 0.0.2-b2070b1-995

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