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