@etherisc/gif-next 3.0.0-15742bc-193 → 3.0.0-1998581-354
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 +15 -19
- 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/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 -2
- 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/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +2 -2
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +2 -2
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +2 -2
- 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 +2 -2
- 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/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/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 +183 -28
- 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 +2 -2
- 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 -669
- 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/originalV1.sol/FlightDelayChainlink.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +2 -2
- 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 +2 -2
- 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/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/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- 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 +102 -114
- 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 +2 -2
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2 -2
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +1 -1
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +2 -2
- 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/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- 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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +2 -2
- 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/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- 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 +2 -2
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- 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 +2 -2
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +2 -2
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +2 -2
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +2 -2
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- 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 +2 -2
- 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/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- 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 +2 -2
- 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/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 +2 -2
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +101 -113
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +110 -122
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +56 -62
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
- 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/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +51 -26
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +14 -14
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- 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 +633 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +25 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- 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/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- 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/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- 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/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +25 -0
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- 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 -48
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +2 -2
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +25 -25
- 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 +2 -2
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
- 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 -2
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestIdSet.sol/LibRequestIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- 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/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- 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/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/InstanceAdmin.sol +0 -1
- package/contracts/instance/InstanceReader.sol +16 -4
- package/contracts/oracle/BasicOracle.sol +1 -0
- package/contracts/oracle/Oracle.sol +2 -2
- package/contracts/product/PolicyServiceLib.sol +5 -3
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/RegistryAdmin.sol +7 -1
- package/contracts/registry/ReleaseAdmin.sol +8 -1
- package/contracts/shared/ComponentService.sol +5 -0
- package/contracts/shared/IAuthorizedComponent.sol +15 -0
- package/contracts/shared/IComponentService.sol +1 -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/Staking.sol +1 -0
- package/package.json +1 -1
| @@ -6,20 +6,19 @@ import {Amount} from "../type/Amount.sol"; | |
| 6 6 | 
             
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 7 7 | 
             
            import {IService} from "../shared/IService.sol";
         | 
| 8 8 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 9 | 
            -
            import { | 
| 9 | 
            +
            import {ObjectType} from "../type/ObjectType.sol";
         | 
| 10 10 |  | 
| 11 11 | 
             
            /// @dev component base class
         | 
| 12 12 | 
             
            /// component examples are staking, product, distribution, pool and oracle
         | 
| 13 13 | 
             
            interface IAccountingService is 
         | 
| 14 14 | 
             
                IService
         | 
| 15 15 | 
             
            {
         | 
| 16 | 
            -
                event  | 
| 17 | 
            -
                    NftId nftId, | 
| 18 | 
            -
                     | 
| 19 | 
            -
                     | 
| 20 | 
            -
                     | 
| 21 | 
            -
                     | 
| 22 | 
            -
                    Amount newFixedFee
         | 
| 16 | 
            +
                event LogAccountingServiceBalanceChanged(
         | 
| 17 | 
            +
                    NftId indexed nftId,
         | 
| 18 | 
            +
                    Amount indexed amount,
         | 
| 19 | 
            +
                    Amount indexed feeAmount,
         | 
| 20 | 
            +
                    bool increase,
         | 
| 21 | 
            +
                    ObjectType objectType
         | 
| 23 22 | 
             
                );
         | 
| 24 23 |  | 
| 25 24 | 
             
                function decreaseComponentFees(InstanceStore instanceStore, NftId componentNftId, Amount feeAmount) external;
         | 
| @@ -279,10 +279,11 @@ contract AccessAdmin is | |
| 279 279 | 
             
                {
         | 
| 280 280 | 
             
                    Selector selector = SelectorSetLib.at(_targetFunctions[target], idx);
         | 
| 281 281 | 
             
                    func = _functionInfo[target][selector];
         | 
| 282 | 
            -
                    roleId =  | 
| 283 | 
            -
             | 
| 284 | 
            -
             | 
| 285 | 
            -
             | 
| 282 | 
            +
                    roleId = AccessAdminLib.getFunctionRoleId(_authority, target, selector);
         | 
| 283 | 
            +
                    // roleId = RoleIdLib.toRoleId(
         | 
| 284 | 
            +
                    //     _authority.getTargetFunctionRole(
         | 
| 285 | 
            +
                    //         target, 
         | 
| 286 | 
            +
                    //         selector.toBytes4()));
         | 
| 286 287 | 
             
                }
         | 
| 287 288 |  | 
| 288 289 |  | 
| @@ -318,7 +319,7 @@ contract AccessAdmin is | |
| 318 319 | 
             
                        (RoleId roleId, bool exists) = getRoleForName(roleInfo.name.toString());
         | 
| 319 320 |  | 
| 320 321 | 
             
                        if (!exists) {
         | 
| 321 | 
            -
                            if (!AccessAdminLib.isDynamicRoleId(authzRoleId)) {
         | 
| 322 | 
            +
                            if (!AccessAdminLib.isDynamicRoleId(authzRoleId) || roleInfo.targetType == TargetType.Custom) {
         | 
| 322 323 | 
             
                                roleId = authzRoleId;
         | 
| 323 324 | 
             
                            }
         | 
| 324 325 |  | 
| @@ -656,24 +657,4 @@ contract AccessAdmin is | |
| 656 657 | 
             
                        AccessAdminLib.toFunctionGrantingString(this, func.name, roleId),
         | 
| 657 658 | 
             
                        lastUpdateIn);
         | 
| 658 659 | 
             
                }
         | 
| 659 | 
            -
             | 
| 660 | 
            -
             | 
| 661 | 
            -
                function _checkAuthorization( 
         | 
| 662 | 
            -
                    address authorization,
         | 
| 663 | 
            -
                    ObjectType expectedDomain, 
         | 
| 664 | 
            -
                    VersionPart expectedRelease,
         | 
| 665 | 
            -
                    bool expectServiceAuthorization,
         | 
| 666 | 
            -
                    bool checkAlreadyInitialized
         | 
| 667 | 
            -
                )
         | 
| 668 | 
            -
                    internal
         | 
| 669 | 
            -
                    view
         | 
| 670 | 
            -
                {
         | 
| 671 | 
            -
                    AccessAdminLib.checkAuthorization(
         | 
| 672 | 
            -
                        address(_authorization), 
         | 
| 673 | 
            -
                        authorization, 
         | 
| 674 | 
            -
                        expectedDomain, 
         | 
| 675 | 
            -
                        expectedRelease, 
         | 
| 676 | 
            -
                        expectServiceAuthorization,
         | 
| 677 | 
            -
                        checkAlreadyInitialized);
         | 
| 678 | 
            -
                }
         | 
| 679 660 | 
             
            }
         | 
| @@ -7,16 +7,17 @@ import {IAccess} from "./IAccess.sol"; | |
| 7 7 | 
             
            import {IAccessAdmin} from "./IAccessAdmin.sol";
         | 
| 8 8 | 
             
            import {IAuthorization} from "./IAuthorization.sol";
         | 
| 9 9 | 
             
            import {IComponent} from "../shared/IComponent.sol";
         | 
| 10 | 
            -
            import { | 
| 10 | 
            +
            import {IAuthorizedComponent} from "../shared/IAuthorizedComponent.sol";
         | 
| 11 11 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 12 12 | 
             
            import {IService} from "../shared/IService.sol";
         | 
| 13 13 | 
             
            import {IServiceAuthorization} from "./IServiceAuthorization.sol";
         | 
| 14 14 |  | 
| 15 | 
            +
            import {AccessManagerCloneable} from "./AccessManagerCloneable.sol";
         | 
| 15 16 | 
             
            import {BlocknumberLib} from "../type/Blocknumber.sol";
         | 
| 16 17 | 
             
            import {ContractLib} from "../shared/ContractLib.sol";
         | 
| 17 18 | 
             
            import {ObjectType} from "../type/ObjectType.sol";
         | 
| 18 19 | 
             
            import {RoleId, RoleIdLib, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
         | 
| 19 | 
            -
            import {SelectorLib} from "../type/Selector.sol";
         | 
| 20 | 
            +
            import {Selector, SelectorLib} from "../type/Selector.sol";
         | 
| 20 21 | 
             
            import {Str, StrLib} from "../type/String.sol";
         | 
| 21 22 | 
             
            import {TimestampLib} from "../type/Timestamp.sol";
         | 
| 22 23 | 
             
            import {VersionPart, VersionPartLib} from "../type/Version.sol";
         | 
| @@ -338,7 +339,7 @@ library AccessAdminLib { // ACCESS_ADMIN_LIB | |
| 338 339 | 
             
                    checkIsRegistered(address(accessAdmin.getRegistry()), componentAddress, expectedType);
         | 
| 339 340 |  | 
| 340 341 | 
             
                    VersionPart expecteRelease = accessAdmin.getRelease();
         | 
| 341 | 
            -
                     | 
| 342 | 
            +
                    IAuthorizedComponent component = IAuthorizedComponent(componentAddress);
         | 
| 342 343 | 
             
                    componentAuthorization = component.getAuthorization();
         | 
| 343 344 |  | 
| 344 345 | 
             
                    checkAuthorization(
         | 
| @@ -481,6 +482,22 @@ library AccessAdminLib { // ACCESS_ADMIN_LIB | |
| 481 482 | 
             
                }
         | 
| 482 483 |  | 
| 483 484 |  | 
| 485 | 
            +
                function getFunctionRoleId(
         | 
| 486 | 
            +
                    AccessManagerCloneable authority,
         | 
| 487 | 
            +
                    address target,
         | 
| 488 | 
            +
                    Selector selector
         | 
| 489 | 
            +
                )
         | 
| 490 | 
            +
                    public
         | 
| 491 | 
            +
                    view
         | 
| 492 | 
            +
                    returns (RoleId functionRoleId)
         | 
| 493 | 
            +
                {
         | 
| 494 | 
            +
                    return RoleIdLib.toRoleId(
         | 
| 495 | 
            +
                        authority.getTargetFunctionRole(
         | 
| 496 | 
            +
                            target, 
         | 
| 497 | 
            +
                            selector.toBytes4()));
         | 
| 498 | 
            +
                }
         | 
| 499 | 
            +
             | 
| 500 | 
            +
             | 
| 484 501 | 
             
                function getServiceRoleId(
         | 
| 485 502 | 
             
                    address serviceAddress,
         | 
| 486 503 | 
             
                    IAccess.TargetType serviceTargetType
         | 
| @@ -11,6 +11,7 @@ import {InstanceReader} from "../../instance/InstanceReader.sol"; | |
| 11 11 | 
             
            import {NftId} from "../../type/NftId.sol";
         | 
| 12 12 | 
             
            import {RequestId} from "../../type/RequestId.sol";
         | 
| 13 13 | 
             
            import {RiskId, RiskIdLib} from "../../type/RiskId.sol";
         | 
| 14 | 
            +
            import {Seconds} from "../../type/Seconds.sol";
         | 
| 14 15 | 
             
            import {StateId} from "../../type/StateId.sol";
         | 
| 15 16 | 
             
            import {Str} from "../../type/String.sol";
         | 
| 16 17 | 
             
            import {Timestamp, TimestampLib} from "../../type/Timestamp.sol";
         | 
| @@ -18,39 +19,30 @@ import {Timestamp, TimestampLib} from "../../type/Timestamp.sol"; | |
| 18 19 |  | 
| 19 20 | 
             
            library FlightLib {
         | 
| 20 21 |  | 
| 21 | 
            -
                 | 
| 22 | 
            +
                event LogFlightProductErrorUnprocessableStatus(RequestId requestId, RiskId riskId, bytes1 status);
         | 
| 23 | 
            +
                event LogFlightProductErrorUnexpectedStatus(RequestId requestId, RiskId riskId, bytes1 status, int256 delayMinutes);
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                error ErrorFlightProductRiskInvalid(RiskId riskId);
         | 
| 26 | 
            +
                error ErrorFlightProductPremiumAmountTooSmall(Amount premiumAmount, Amount minPremium);
         | 
| 27 | 
            +
                error ErrorFlightProductPremiumAmountTooLarge(Amount premiumAmount, Amount maxPremium);
         | 
| 28 | 
            +
                error ErrorFlightProductArrivalBeforeDepartureTime(Timestamp departureTime, Timestamp arrivalTime);
         | 
| 29 | 
            +
                error ErrorFlightProductArrivalAfterMaxFlightDuration(Timestamp arrivalTime, Timestamp maxArrivalTime, Seconds maxDuration);
         | 
| 30 | 
            +
                error ErrorFlightProductDepartureBeforeMinTimeBeforeDeparture(Timestamp departureTime, Timestamp now, Seconds minTimeBeforeDeparture);
         | 
| 31 | 
            +
                error ErrorFlightProductDepartureAfterMaxTimeBeforeDeparture(Timestamp departureTime, Timestamp now, Seconds maxTimeBeforeDeparture);
         | 
| 32 | 
            +
                error ErrorFlightProductNotEnoughObservations(uint256 observations, uint256 minObservations);
         | 
| 33 | 
            +
                error ErrorFlightProductClusterRisk(Amount totalSumInsured, Amount maxTotalPayout);
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                function checkApplicationData(
         | 
| 22 36 | 
             
                    FlightProduct flightProduct,
         | 
| 23 37 | 
             
                    Str flightData, 
         | 
| 24 38 | 
             
                    Timestamp departureTime,
         | 
| 25 39 | 
             
                    Timestamp arrivalTime,
         | 
| 26 | 
            -
                    Amount premiumAmount | 
| 27 | 
            -
                    uint256[6] memory statistics,
         | 
| 28 | 
            -
                    // signature fields
         | 
| 29 | 
            -
                    uint8 v, 
         | 
| 30 | 
            -
                    bytes32 r, 
         | 
| 31 | 
            -
                    bytes32 s
         | 
| 40 | 
            +
                    Amount premiumAmount
         | 
| 32 41 | 
             
                )
         | 
| 33 42 | 
             
                    public
         | 
| 34 43 | 
             
                    view
         | 
| 35 44 | 
             
                {
         | 
| 36 45 | 
             
                    _checkApplicationData(flightProduct, premiumAmount, arrivalTime, departureTime);
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                    (
         | 
| 39 | 
            -
                        address actualSigner,,
         | 
| 40 | 
            -
                        bool success
         | 
| 41 | 
            -
                    ) = flightProduct.getFlightMessageVerifier().verifyRatingsHash(
         | 
| 42 | 
            -
                        flightData,
         | 
| 43 | 
            -
                        departureTime,
         | 
| 44 | 
            -
                        arrivalTime,
         | 
| 45 | 
            -
                        premiumAmount,
         | 
| 46 | 
            -
                        statistics,
         | 
| 47 | 
            -
                        v, r, s);
         | 
| 48 | 
            -
             | 
| 49 | 
            -
                    if (!success) {
         | 
| 50 | 
            -
                        revert FlightProduct.ErrorApplicationDataSignatureMismatch(
         | 
| 51 | 
            -
                            flightProduct.getFlightMessageVerifier().getExpectedSigner(),
         | 
| 52 | 
            -
                            actualSigner);
         | 
| 53 | 
            -
                    }
         | 
| 54 46 | 
             
                }
         | 
| 55 47 |  | 
| 56 48 |  | 
| @@ -63,67 +55,49 @@ library FlightLib { | |
| 63 55 | 
             
                    internal
         | 
| 64 56 | 
             
                    view
         | 
| 65 57 | 
             
                {
         | 
| 58 | 
            +
                    bool testMode = flightProduct.isTestMode();
         | 
| 59 | 
            +
             | 
| 66 60 | 
             
                    // solhint-disable
         | 
| 67 61 | 
             
                    if (premiumAmount < flightProduct.MIN_PREMIUM()) {
         | 
| 68 | 
            -
                        revert  | 
| 62 | 
            +
                        revert ErrorFlightProductPremiumAmountTooSmall(premiumAmount, flightProduct.MIN_PREMIUM());
         | 
| 69 63 | 
             
                    }
         | 
| 70 64 | 
             
                    if (premiumAmount > flightProduct.MAX_PREMIUM()) {
         | 
| 71 | 
            -
                        revert  | 
| 65 | 
            +
                        revert ErrorFlightProductPremiumAmountTooLarge(premiumAmount, flightProduct.MAX_PREMIUM());
         | 
| 72 66 | 
             
                    }
         | 
| 73 67 | 
             
                    if (arrivalTime <= departureTime) {
         | 
| 74 | 
            -
                        revert  | 
| 68 | 
            +
                        revert ErrorFlightProductArrivalBeforeDepartureTime(departureTime, arrivalTime);
         | 
| 75 69 | 
             
                    }
         | 
| 76 | 
            -
             | 
| 77 70 | 
             
                    if (arrivalTime > departureTime.addSeconds(flightProduct.MAX_FLIGHT_DURATION())) {
         | 
| 78 | 
            -
                        revert  | 
| 71 | 
            +
                        revert ErrorFlightProductArrivalAfterMaxFlightDuration(arrivalTime, departureTime, flightProduct.MAX_FLIGHT_DURATION());
         | 
| 79 72 | 
             
                    }
         | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 73 | 
            +
             | 
| 74 | 
            +
                    // test mode allows the creation for policies that are outside restricted policy creation times
         | 
| 75 | 
            +
                    if (!testMode && departureTime < TimestampLib.current().addSeconds(flightProduct.MIN_TIME_BEFORE_DEPARTURE())) {
         | 
| 76 | 
            +
                        revert ErrorFlightProductDepartureBeforeMinTimeBeforeDeparture(departureTime, TimestampLib.current(), flightProduct.MIN_TIME_BEFORE_DEPARTURE());
         | 
| 82 77 | 
             
                    }
         | 
| 83 | 
            -
                    if (departureTime > TimestampLib.current().addSeconds(flightProduct.MAX_TIME_BEFORE_DEPARTURE())) {
         | 
| 84 | 
            -
                        revert  | 
| 78 | 
            +
                    if (!testMode && departureTime > TimestampLib.current().addSeconds(flightProduct.MAX_TIME_BEFORE_DEPARTURE())) {
         | 
| 79 | 
            +
                        revert ErrorFlightProductDepartureAfterMaxTimeBeforeDeparture(departureTime, TimestampLib.current(), flightProduct.MAX_TIME_BEFORE_DEPARTURE());
         | 
| 85 80 | 
             
                    }
         | 
| 86 81 | 
             
                    // solhint-enable
         | 
| 87 82 | 
             
                }
         | 
| 88 83 |  | 
| 89 84 |  | 
| 90 | 
            -
                 | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
                 | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
                 | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
                 | 
| 102 | 
            -
                //     // Validate input parameters
         | 
| 103 | 
            -
                //     if (premium < flightProduct.MIN_PREMIUM()) { errors = errors | (uint256(1) << 0); }
         | 
| 104 | 
            -
                //     if (premium > flightProduct.MAX_PREMIUM()) { errors = errors | (uint256(1) << 1); }
         | 
| 105 | 
            -
                //     if (arrivalTime < departureTime) { errors = errors | (uint256(1) << 2); }
         | 
| 106 | 
            -
                //     if (arrivalTime > departureTime.addSeconds(flightProduct.MAX_FLIGHT_DURATION())) { errors = errors | (uint256(1) << 3); }
         | 
| 107 | 
            -
                //     if (departureTime < TimestampLib.current().addSeconds(flightProduct.MIN_TIME_BEFORE_DEPARTURE())) { errors = errors | (uint256(1) << 4); }
         | 
| 108 | 
            -
                //     if (departureTime > TimestampLib.current().addSeconds(flightProduct.MAX_TIME_BEFORE_DEPARTURE())) { errors = errors | (uint256(1) << 5); }
         | 
| 109 | 
            -
             | 
| 110 | 
            -
                //     (, bool exists, FlightProduct.FlightRisk memory flightRisk) = getFlightRisk(
         | 
| 111 | 
            -
                //         flightProduct.getInstanceReader(), flightProduct.getNftId(), carrierFlightNumber, departureTime, arrivalTime);
         | 
| 112 | 
            -
             | 
| 113 | 
            -
                //     if (exists) {
         | 
| 114 | 
            -
                //         Amount sumInsured = AmountLib.toAmount(premium.toInt() * flightRisk.premiumMultiplier);
         | 
| 115 | 
            -
                //         if (flightRisk.sumOfSumInsuredAmounts + sumInsured > flightProduct.MAX_TOTAL_PAYOUT()) {
         | 
| 116 | 
            -
                //             errors = errors | (uint256(1) << 6);
         | 
| 117 | 
            -
                //         }
         | 
| 118 | 
            -
                //     }
         | 
| 119 | 
            -
             | 
| 120 | 
            -
                //     return errors;
         | 
| 121 | 
            -
                // }
         | 
| 85 | 
            +
                function checkClusterRisk(
         | 
| 86 | 
            +
                    Amount sumOfSumInsuredAmounts,
         | 
| 87 | 
            +
                    Amount sumInsuredAmount,
         | 
| 88 | 
            +
                    Amount maxTotalPayout
         | 
| 89 | 
            +
                )
         | 
| 90 | 
            +
                    public
         | 
| 91 | 
            +
                    pure
         | 
| 92 | 
            +
                {
         | 
| 93 | 
            +
                    if (sumOfSumInsuredAmounts + sumInsuredAmount > maxTotalPayout) {
         | 
| 94 | 
            +
                        revert ErrorFlightProductClusterRisk(sumOfSumInsuredAmounts + sumInsuredAmount, maxTotalPayout);
         | 
| 95 | 
            +
                    }
         | 
| 96 | 
            +
                }
         | 
| 122 97 |  | 
| 123 98 |  | 
| 124 99 | 
             
                /// @dev calculates payout option based on flight status and delay minutes.
         | 
| 125 100 | 
             
                /// Is not a view function as it emits log evens in case of unexpected status.
         | 
| 126 | 
            -
                // TODO decide if reverts instead of log events could work too (and convert the function into a view function)
         | 
| 127 101 | 
             
                function checkAndGetPayoutOption(
         | 
| 128 102 | 
             
                    RequestId requestId,
         | 
| 129 103 | 
             
                    RiskId riskId, 
         | 
| @@ -138,13 +112,13 @@ library FlightLib { | |
| 138 112 |  | 
| 139 113 | 
             
                    // check status
         | 
| 140 114 | 
             
                    if (status != "L" && status != "A" && status != "C" && status != "D") {
         | 
| 141 | 
            -
                        emit  | 
| 115 | 
            +
                        emit LogFlightProductErrorUnprocessableStatus(requestId, riskId, status);
         | 
| 142 116 | 
             
                        return payoutOption;
         | 
| 143 117 | 
             
                    }
         | 
| 144 118 |  | 
| 145 119 | 
             
                    if (status == "A") {
         | 
| 146 120 | 
             
                        // todo: active, reschedule oracle call + 45 min
         | 
| 147 | 
            -
                        emit  | 
| 121 | 
            +
                        emit LogFlightProductErrorUnexpectedStatus(requestId, riskId, status, delayMinutes);
         | 
| 148 122 | 
             
                        return payoutOption;
         | 
| 149 123 | 
             
                    }
         | 
| 150 124 |  | 
| @@ -167,7 +141,7 @@ library FlightLib { | |
| 167 141 | 
             
                {
         | 
| 168 142 | 
             
                    // check we have enough observations
         | 
| 169 143 | 
             
                    if (statistics[0] < flightProduct.MIN_OBSERVATIONS()) {
         | 
| 170 | 
            -
                        revert  | 
| 144 | 
            +
                        revert ErrorFlightProductNotEnoughObservations(statistics[0], flightProduct.MIN_OBSERVATIONS());
         | 
| 171 145 | 
             
                    }
         | 
| 172 146 |  | 
| 173 147 | 
             
                    weight = 0;
         | 
| @@ -200,10 +174,10 @@ library FlightLib { | |
| 200 174 | 
             
                    )
         | 
| 201 175 | 
             
                {
         | 
| 202 176 | 
             
                    if (premium < flightProduct.MIN_PREMIUM()) { 
         | 
| 203 | 
            -
                        revert  | 
| 177 | 
            +
                        revert ErrorFlightProductPremiumAmountTooSmall(premium, flightProduct.MIN_PREMIUM()); 
         | 
| 204 178 | 
             
                    }
         | 
| 205 179 | 
             
                    if (premium > flightProduct.MAX_PREMIUM()) { 
         | 
| 206 | 
            -
                        revert  | 
| 180 | 
            +
                        revert ErrorFlightProductPremiumAmountTooLarge(premium, flightProduct.MAX_PREMIUM()); 
         | 
| 207 181 | 
             
                    }
         | 
| 208 182 |  | 
| 209 183 | 
             
                    sumInsuredAmount = AmountLib.zero();
         | 
| @@ -222,13 +196,43 @@ library FlightLib { | |
| 222 196 | 
             
                }
         | 
| 223 197 |  | 
| 224 198 |  | 
| 199 | 
            +
                function getPayoutOption(
         | 
| 200 | 
            +
                    InstanceReader reader,
         | 
| 201 | 
            +
                    NftId productNftId,
         | 
| 202 | 
            +
                    RiskId riskId
         | 
| 203 | 
            +
                )
         | 
| 204 | 
            +
                    public
         | 
| 205 | 
            +
                    view
         | 
| 206 | 
            +
                    returns (
         | 
| 207 | 
            +
                        bool exists,
         | 
| 208 | 
            +
                        bool statusAvailable,
         | 
| 209 | 
            +
                        uint8 payoutOption
         | 
| 210 | 
            +
                    )
         | 
| 211 | 
            +
                {
         | 
| 212 | 
            +
                    FlightProduct.FlightRisk memory flightRisk;
         | 
| 213 | 
            +
                    (exists, flightRisk) = getFlightRisk(
         | 
| 214 | 
            +
                        reader, 
         | 
| 215 | 
            +
                        productNftId, 
         | 
| 216 | 
            +
                        riskId,
         | 
| 217 | 
            +
                        false);
         | 
| 218 | 
            +
                    
         | 
| 219 | 
            +
                    statusAvailable = flightRisk.statusUpdatedAt.gtz();
         | 
| 220 | 
            +
                    payoutOption = flightRisk.payoutOption;
         | 
| 221 | 
            +
                }
         | 
| 222 | 
            +
             | 
| 223 | 
            +
             | 
| 225 224 | 
             
                function getPayoutAmount(
         | 
| 226 225 | 
             
                    bytes memory applicationData, 
         | 
| 227 226 | 
             
                    uint8 payoutOption
         | 
| 228 227 | 
             
                )
         | 
| 229 228 | 
             
                    public
         | 
| 229 | 
            +
                    pure
         | 
| 230 230 | 
             
                    returns (Amount payoutAmount)
         | 
| 231 231 | 
             
                {
         | 
| 232 | 
            +
                    if (payoutOption == type(uint8).max) {
         | 
| 233 | 
            +
                        return AmountLib.zero();
         | 
| 234 | 
            +
                    }
         | 
| 235 | 
            +
             | 
| 232 236 | 
             
                    // retrieve payout amounts from application data
         | 
| 233 237 | 
             
                    (, Amount[5] memory payoutAmounts) = abi.decode(
         | 
| 234 238 | 
             
                        applicationData, (Amount, Amount[5]));
         | 
| @@ -243,7 +247,9 @@ library FlightLib { | |
| 243 247 | 
             
                    NftId productNftId, 
         | 
| 244 248 | 
             
                    Str flightData,
         | 
| 245 249 | 
             
                    Timestamp departureTime, 
         | 
| 246 | 
            -
                     | 
| 250 | 
            +
                    string memory departureTimeLocal,
         | 
| 251 | 
            +
                    Timestamp arrivalTime,
         | 
| 252 | 
            +
                    string memory arrivalTimeLocal
         | 
| 247 253 | 
             
                )
         | 
| 248 254 | 
             
                    public
         | 
| 249 255 | 
             
                    view
         | 
| @@ -254,17 +260,21 @@ library FlightLib { | |
| 254 260 | 
             
                    )
         | 
| 255 261 | 
             
                {
         | 
| 256 262 | 
             
                    riskId = getRiskId(productNftId, flightData);
         | 
| 257 | 
            -
                    (exists, flightRisk) = getFlightRisk(reader, productNftId, riskId);
         | 
| 263 | 
            +
                    (exists, flightRisk) = getFlightRisk(reader, productNftId, riskId, false);
         | 
| 258 264 |  | 
| 259 265 | 
             
                    // create new risk if not existing
         | 
| 260 266 | 
             
                    if (!exists) {
         | 
| 261 267 | 
             
                        flightRisk = FlightProduct.FlightRisk({
         | 
| 262 268 | 
             
                            flightData: flightData,
         | 
| 263 269 | 
             
                            departureTime: departureTime,
         | 
| 270 | 
            +
                            departureTimeLocal: departureTimeLocal,
         | 
| 264 271 | 
             
                            arrivalTime: arrivalTime,
         | 
| 272 | 
            +
                            arrivalTimeLocal: arrivalTimeLocal,
         | 
| 265 273 | 
             
                            sumOfSumInsuredAmounts: AmountLib.toAmount(0),
         | 
| 266 274 | 
             
                            status: bytes1(0),
         | 
| 267 | 
            -
                            delayMinutes: 0 | 
| 275 | 
            +
                            delayMinutes: 0,
         | 
| 276 | 
            +
                            payoutOption: uint8(0),
         | 
| 277 | 
            +
                            statusUpdatedAt: TimestampLib.zero()});
         | 
| 268 278 | 
             
                    }
         | 
| 269 279 | 
             
                }
         | 
| 270 280 |  | 
| @@ -272,7 +282,8 @@ library FlightLib { | |
| 272 282 | 
             
                function getFlightRisk(
         | 
| 273 283 | 
             
                    InstanceReader reader,
         | 
| 274 284 | 
             
                    NftId productNftId,
         | 
| 275 | 
            -
                    RiskId riskId
         | 
| 285 | 
            +
                    RiskId riskId,
         | 
| 286 | 
            +
                    bool requireRiskExists
         | 
| 276 287 | 
             
                )
         | 
| 277 288 | 
             
                    public
         | 
| 278 289 | 
             
                    view
         | 
| @@ -284,6 +295,10 @@ library FlightLib { | |
| 284 295 | 
             
                    // check if risk exists
         | 
| 285 296 | 
             
                    exists = reader.isProductRisk(productNftId, riskId);
         | 
| 286 297 |  | 
| 298 | 
            +
                    if (!exists && requireRiskExists) {
         | 
| 299 | 
            +
                        revert ErrorFlightProductRiskInvalid(riskId);
         | 
| 300 | 
            +
                    }
         | 
| 301 | 
            +
             | 
| 287 302 | 
             
                    // get risk data if risk exists
         | 
| 288 303 | 
             
                    if (exists) {
         | 
| 289 304 | 
             
                        flightRisk = abi.decode(
         | 
| @@ -0,0 +1,234 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";
         | 
| 5 | 
            +
            import {IERC721Metadata} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
         | 
| 6 | 
            +
            import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            import {IPolicy} from "../../instance/module/IPolicy.sol";
         | 
| 9 | 
            +
            import {IRegistry} from "../../registry/IRegistry.sol";
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            import {Amount} from "../../type/Amount.sol";
         | 
| 12 | 
            +
            import {ChainNft} from "../../registry/ChainNft.sol";
         | 
| 13 | 
            +
            import {FlightProduct} from "./FlightProduct.sol";
         | 
| 14 | 
            +
            import {InstanceReader} from "../../instance/InstanceReader.sol";
         | 
| 15 | 
            +
            import {NftId, NftIdLib} from "../../type/NftId.sol";
         | 
| 16 | 
            +
            import {RiskId} from "../../type/RiskId.sol";
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 19 | 
            +
            /**
         | 
| 20 | 
            +
             * @title FlightNft
         | 
| 21 | 
            +
             * @dev FlightNft provides NFT data for flight delay policies.
         | 
| 22 | 
            +
             */
         | 
| 23 | 
            +
            // contract FlightNft is IERC721Metadata {
         | 
| 24 | 
            +
            contract FlightNft is
         | 
| 25 | 
            +
                ERC721, 
         | 
| 26 | 
            +
                Ownable
         | 
| 27 | 
            +
            {
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                error ErrorFlightNftNotMinter();
         | 
| 30 | 
            +
                error ErrorFlightNftAlreadyMinted(uint256 tokenId);
         | 
| 31 | 
            +
                error ErrorFlightNftNotAvailable(uint256 tokenId);
         | 
| 32 | 
            +
                error ErrorFlightNftNotFlightPolicy(uint256 tokenId);
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                ChainNft public immutable chainNft;
         | 
| 35 | 
            +
                FlightProduct public immutable flightProduct;
         | 
| 36 | 
            +
                InstanceReader public immutable instanceReader;
         | 
| 37 | 
            +
                IRegistry public registry;
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                address public minter;
         | 
| 40 | 
            +
                string private _baseUri;
         | 
| 41 | 
            +
             | 
| 42 | 
            +
             | 
| 43 | 
            +
                modifier onlyMinter() {
         | 
| 44 | 
            +
                    if(msg.sender != minter) {
         | 
| 45 | 
            +
                        revert ErrorFlightNftNotMinter();
         | 
| 46 | 
            +
                    }
         | 
| 47 | 
            +
                    _;
         | 
| 48 | 
            +
                }
         | 
| 49 | 
            +
             | 
| 50 | 
            +
             | 
| 51 | 
            +
                constructor(
         | 
| 52 | 
            +
                    address flightProductAddress,
         | 
| 53 | 
            +
                    string memory nftName,
         | 
| 54 | 
            +
                    string memory nftSymbol,
         | 
| 55 | 
            +
                    string memory baseUri
         | 
| 56 | 
            +
                ) 
         | 
| 57 | 
            +
                    ERC721(nftName, nftSymbol)
         | 
| 58 | 
            +
                    Ownable(msg.sender)
         | 
| 59 | 
            +
                {
         | 
| 60 | 
            +
                    flightProduct = FlightProduct(flightProductAddress);
         | 
| 61 | 
            +
                    registry = flightProduct.getRegistry();
         | 
| 62 | 
            +
                    chainNft = ChainNft(registry.getChainNftAddress());
         | 
| 63 | 
            +
                    instanceReader = flightProduct.getInstance().getInstanceReader();
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                    minter = msg.sender;
         | 
| 66 | 
            +
                    _baseUri = baseUri;
         | 
| 67 | 
            +
                }
         | 
| 68 | 
            +
             | 
| 69 | 
            +
             | 
| 70 | 
            +
                /**
         | 
| 71 | 
            +
                 * Set the base URI to the specified value.
         | 
| 72 | 
            +
                 * Once set, this results in tokenURI() to return <baseUri><tokenId>.
         | 
| 73 | 
            +
                 */
         | 
| 74 | 
            +
                function setBaseURI(string memory baseUri)
         | 
| 75 | 
            +
                    public 
         | 
| 76 | 
            +
                    onlyOwner()
         | 
| 77 | 
            +
                {
         | 
| 78 | 
            +
                    _baseUri = baseUri;
         | 
| 79 | 
            +
                }
         | 
| 80 | 
            +
             | 
| 81 | 
            +
             | 
| 82 | 
            +
                /**
         | 
| 83 | 
            +
                 * Set the minter address.
         | 
| 84 | 
            +
                 */
         | 
| 85 | 
            +
                function setMinter(address minterAddress)
         | 
| 86 | 
            +
                    public 
         | 
| 87 | 
            +
                    onlyOwner()
         | 
| 88 | 
            +
                {
         | 
| 89 | 
            +
                    minter = minterAddress;
         | 
| 90 | 
            +
                }
         | 
| 91 | 
            +
             | 
| 92 | 
            +
             | 
| 93 | 
            +
                /**
         | 
| 94 | 
            +
                 * Mints a metadata NFT for the specified chainNft NFT.
         | 
| 95 | 
            +
                 * Only the minter can mint such NFTs.
         | 
| 96 | 
            +
                 */
         | 
| 97 | 
            +
                function mint(uint256 tokenId)
         | 
| 98 | 
            +
                    external
         | 
| 99 | 
            +
                    onlyMinter()
         | 
| 100 | 
            +
                {
         | 
| 101 | 
            +
                    // verify nft does not yet exist
         | 
| 102 | 
            +
                    if (_ownerOf(tokenId) != address(0)) {
         | 
| 103 | 
            +
                        revert ErrorFlightNftAlreadyMinted(tokenId);
         | 
| 104 | 
            +
                    }
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                    // verify nft on chainNft exists
         | 
| 107 | 
            +
                    // also checks if nft exists (ERC721NonexistentToken)
         | 
| 108 | 
            +
                    address nftOwner = chainNft.ownerOf(tokenId);
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                    // verify nft is flight delay policy
         | 
| 111 | 
            +
                    if (registry.getParentNftId(NftIdLib.toNftId(tokenId)) != registry.getNftIdForAddress(address(flightProduct))) {
         | 
| 112 | 
            +
                        revert ErrorFlightNftNotFlightPolicy(tokenId);
         | 
| 113 | 
            +
                    }   
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                    _mint(nftOwner, tokenId);
         | 
| 116 | 
            +
                }
         | 
| 117 | 
            +
             | 
| 118 | 
            +
             | 
| 119 | 
            +
                /**
         | 
| 120 | 
            +
                 * @dev Return the NFT token URI for the specified token.
         | 
| 121 | 
            +
                 * No check is performed to ensure the token exists.
         | 
| 122 | 
            +
                 */
         | 
| 123 | 
            +
                function tokenURI(uint256 tokenId) public view override returns (string memory) {
         | 
| 124 | 
            +
                    string memory baseURI = _baseURI();
         | 
| 125 | 
            +
                    return bytes(baseURI).length > 0 ? string.concat(baseURI, toString(tokenId)) : "";
         | 
| 126 | 
            +
                }
         | 
| 127 | 
            +
             | 
| 128 | 
            +
             | 
| 129 | 
            +
                /**
         | 
| 130 | 
            +
                 * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
         | 
| 131 | 
            +
                 * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
         | 
| 132 | 
            +
                 * by default, can be overridden in child contracts.
         | 
| 133 | 
            +
                 */
         | 
| 134 | 
            +
                function _baseURI() internal override view returns (string memory) {
         | 
| 135 | 
            +
                    return _baseUri;
         | 
| 136 | 
            +
                }
         | 
| 137 | 
            +
             | 
| 138 | 
            +
             | 
| 139 | 
            +
                function approve(address to, uint256 tokenId) public override { _revert(); }
         | 
| 140 | 
            +
                function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override { _revert(); }
         | 
| 141 | 
            +
                function setApprovalForAll(address operator, bool approved) public override { _revert(); }
         | 
| 142 | 
            +
                function transferFrom(address from, address to, uint256 tokenId) public override { _revert(); }
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                function balanceOf(address owner) public override view returns (uint256 balance) {
         | 
| 145 | 
            +
                    return chainNft.balanceOf(owner);
         | 
| 146 | 
            +
                }
         | 
| 147 | 
            +
             | 
| 148 | 
            +
                function getApproved(uint256 tokenId) public override view returns (address operator) {
         | 
| 149 | 
            +
                    return chainNft.getApproved(tokenId);
         | 
| 150 | 
            +
                }
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                function isApprovedForAll(address owner, address operator) public override view returns (bool) {
         | 
| 153 | 
            +
                    return chainNft.isApprovedForAll(owner, operator);
         | 
| 154 | 
            +
                }
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                function ownerOf(uint256 tokenId) public override view returns (address owner) {
         | 
| 157 | 
            +
                    return chainNft.ownerOf(tokenId);
         | 
| 158 | 
            +
                }
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                function supportsInterface(bytes4 interfaceId) public override view returns (bool) {
         | 
| 161 | 
            +
                    return chainNft.supportsInterface(interfaceId);
         | 
| 162 | 
            +
                }
         | 
| 163 | 
            +
             | 
| 164 | 
            +
             | 
| 165 | 
            +
                function getPolicyData(NftId policyNftId)
         | 
| 166 | 
            +
                    public
         | 
| 167 | 
            +
                    view
         | 
| 168 | 
            +
                    returns (
         | 
| 169 | 
            +
                        RiskId riskId,
         | 
| 170 | 
            +
                        string memory flightData,
         | 
| 171 | 
            +
                        string memory departureTimeLocal,
         | 
| 172 | 
            +
                        string memory arrivalTimeLocal,
         | 
| 173 | 
            +
                        Amount premiumAmount, 
         | 
| 174 | 
            +
                        Amount[5] memory payoutAmounts,
         | 
| 175 | 
            +
                        bytes1 status,
         | 
| 176 | 
            +
                        int256 delayMinutes
         | 
| 177 | 
            +
                    )
         | 
| 178 | 
            +
                {
         | 
| 179 | 
            +
                    IPolicy.PolicyInfo memory info = instanceReader.getPolicyInfo(policyNftId);
         | 
| 180 | 
            +
             | 
| 181 | 
            +
                    // get financial data
         | 
| 182 | 
            +
                    premiumAmount = info.premiumAmount;
         | 
| 183 | 
            +
             | 
| 184 | 
            +
                    if (info.applicationData.length > 0) {
         | 
| 185 | 
            +
                        (, payoutAmounts) = abi.decode(info.applicationData, (Amount, Amount[5]));
         | 
| 186 | 
            +
                    }
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                    // get risk data
         | 
| 189 | 
            +
                    riskId = info.riskId;
         | 
| 190 | 
            +
                    bytes memory data = instanceReader.getRiskInfo(riskId).data;
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                    if (data.length > 0) {
         | 
| 193 | 
            +
                        FlightProduct.FlightRisk memory flightRisk = flightProduct.decodeFlightRiskData(data);
         | 
| 194 | 
            +
                        flightData = flightRisk.flightData.toString();
         | 
| 195 | 
            +
                        departureTimeLocal = flightRisk.departureTimeLocal;
         | 
| 196 | 
            +
                        arrivalTimeLocal = flightRisk.arrivalTimeLocal;
         | 
| 197 | 
            +
                        status = flightRisk.status;
         | 
| 198 | 
            +
                        delayMinutes = flightRisk.delayMinutes;
         | 
| 199 | 
            +
                    }
         | 
| 200 | 
            +
                }
         | 
| 201 | 
            +
             | 
| 202 | 
            +
             | 
| 203 | 
            +
                function toString(uint256 value) public pure returns (string memory) {
         | 
| 204 | 
            +
                    if (value == 0) {
         | 
| 205 | 
            +
                        return "0";
         | 
| 206 | 
            +
                    }
         | 
| 207 | 
            +
             | 
| 208 | 
            +
                    uint256 temp = value;
         | 
| 209 | 
            +
                    uint256 digits = 0;
         | 
| 210 | 
            +
                    while (temp != 0) {
         | 
| 211 | 
            +
                        digits++;
         | 
| 212 | 
            +
                        temp /= 10;
         | 
| 213 | 
            +
                    }
         | 
| 214 | 
            +
             | 
| 215 | 
            +
                    bytes memory buffer = new bytes(digits);
         | 
| 216 | 
            +
                    uint index = digits - 1;
         | 
| 217 | 
            +
             | 
| 218 | 
            +
                    temp = value;
         | 
| 219 | 
            +
                    while (temp != 0) {
         | 
| 220 | 
            +
                        buffer[index] = bytes1(uint8(48 + temp % 10));
         | 
| 221 | 
            +
                        temp /= 10;
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                        if (index > 0) {
         | 
| 224 | 
            +
                            index--;
         | 
| 225 | 
            +
                        }
         | 
| 226 | 
            +
                    }
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                    return string(buffer);
         | 
| 229 | 
            +
                }
         | 
| 230 | 
            +
             | 
| 231 | 
            +
                function _revert() private pure {
         | 
| 232 | 
            +
                    revert("FlightNft: Use GIF Chain NFT contract to interact with NFTs. See function getChainNft()");
         | 
| 233 | 
            +
                }
         | 
| 234 | 
            +
            }
         |