Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wrap host env errors with external errors #2683

Merged
merged 2 commits into from
Aug 1, 2023

Conversation

SupunS
Copy link
Member

@SupunS SupunS commented Jul 27, 2023

Closes #2682

Description

Wrap the errors returned from host-env using the external error.
This is already done for the errors panicked from host-env.


  • Targeted PR against master branch
  • Linked to Github issue with discussion and accepted design OR link to spec that describes this work
  • Code follows the standards mentioned here
  • Updated relevant documentation
  • Re-reviewed Files changed in the Github PR explorer
  • Added appropriate labels

@SupunS SupunS force-pushed the supun/handle-external-errors branch from 43759e4 to abb7402 Compare July 27, 2023 14:54
@github-actions
Copy link

github-actions bot commented Jul 27, 2023

Cadence Benchstat comparison

This branch with compared with the base branch onflow:master commit 181924e
The command for i in {1..N}; do go test ./... -run=XXX -bench=. -benchmem -shuffle=on; done was used.
Bench tests were run a total of 7 times on each branch.

Collapsed results for better readability

old.txtnew.txt
time/opdelta
CheckContractInterfaceFungibleTokenConformance-2115µs ± 0%115µs ± 0%~(p=1.000 n=1+1)
ContractInterfaceFungibleToken-237.9µs ± 0%42.8µs ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsCCF-2153ms ± 0%153ms ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-2499ms ± 0%497ms ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-23.16µs ± 0%3.19µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.TokensWithdrawn-22.47µs ± 0%2.46µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-23.27µs ± 0%3.28µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-23.42µs ± 0%3.44µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-22.49µs ± 0%2.49µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.RewardsPaid-22.97µs ± 0%2.99µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensDeposited-23.06µs ± 0%3.02µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-22.94µs ± 0%2.94µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensMinted-22.48µs ± 0%2.45µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensWithdrawn-23.05µs ± 0%3.06µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.FeesDeducted-218.3µs ± 0%18.5µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.TokensWithdrawn-27.11µs ± 0%11.38µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-211.2µs ± 0%17.7µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-215.7µs ± 0%23.7µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-27.26µs ± 0%10.63µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.RewardsPaid-210.6µs ± 0%11.8µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited-210.0µs ± 0%10.0µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-29.03µs ± 0%8.98µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensMinted-27.21µs ± 0%7.22µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensWithdrawn-210.0µs ± 0%10.0µs ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsCCF-268.4ms ± 0%68.6ms ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-2190ms ± 0%133ms ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-21.41µs ± 0%1.42µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.TokensWithdrawn-21.16µs ± 0%1.17µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-21.44µs ± 0%1.44µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-21.55µs ± 0%1.55µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-21.17µs ± 0%1.17µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.RewardsPaid-21.32µs ± 0%1.32µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensDeposited-21.41µs ± 0%1.42µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-21.38µs ± 0%1.40µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensMinted-21.15µs ± 0%1.17µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensWithdrawn-21.40µs ± 0%1.42µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowFees.FeesDeducted-23.18µs ± 0%3.22µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowFees.TokensWithdrawn-21.75µs ± 0%1.75µs ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-22.86µs ± 0%2.84µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-24.02µs ± 0%4.01µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-21.78µs ± 0%1.81µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.RewardsPaid-22.37µs ± 0%2.37µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensDeposited-22.77µs ± 0%2.75µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-22.15µs ± 0%2.15µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensMinted-21.92µs ± 0%1.77µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensWithdrawn-22.72µs ± 0%2.71µs ± 0%~(p=1.000 n=1+1)
ExportType/composite_type-2352ns ± 0%347ns ± 0%~(p=1.000 n=1+1)
ExportType/simple_type-253.4ns ± 0%54.5ns ± 0%~(p=1.000 n=1+1)
InterpretRecursionFib-22.74ms ± 0%2.45ms ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_interpreter-21.30µs ± 0%1.29µs ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_sub-interpreter-2610ns ± 0%611ns ± 0%~(p=1.000 n=1+1)
ParseArray-28.16ms ± 0%8.10ms ± 0%~(p=1.000 n=1+1)
ParseDeploy/byte_array-213.1ms ± 0%12.2ms ± 0%~(p=1.000 n=1+1)
ParseDeploy/decode_hex-21.20ms ± 0%1.21ms ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/With_memory_metering-2188µs ± 0%186µs ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/Without_memory_metering-2146µs ± 0%150µs ± 0%~(p=1.000 n=1+1)
ParseInfix-26.98µs ± 0%7.08µs ± 0%~(p=1.000 n=1+1)
QualifiedIdentifierCreation/One_level-22.35ns ± 0%2.34ns ± 0%~(p=1.000 n=1+1)
QualifiedIdentifierCreation/Three_levels-2137ns ± 0%138ns ± 0%~(p=1.000 n=1+1)
RuntimeResourceDictionaryValues-25.16ms ± 0%5.21ms ± 0%~(p=1.000 n=1+1)
RuntimeScriptNoop-24.68µs ± 0%4.66µs ± 0%~(p=1.000 n=1+1)
SuperTypeInference/arrays-2336ns ± 0%337ns ± 0%~(p=1.000 n=1+1)
SuperTypeInference/composites-2134ns ± 0%134ns ± 0%~(p=1.000 n=1+1)
SuperTypeInference/integers-296.1ns ± 0%95.6ns ± 0%~(p=1.000 n=1+1)
ValueIsSubtypeOfSemaType-290.9ns ± 0%89.8ns ± 0%~(p=1.000 n=1+1)
 
alloc/opdelta
CheckContractInterfaceFungibleTokenConformance-249.2kB ± 0%49.2kB ± 0%~(all equal)
ContractInterfaceFungibleToken-223.4kB ± 0%23.4kB ± 0%~(all equal)
DecodeBatchEventsCCF-267.3MB ± 0%67.3MB ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-2246MB ± 0%246MB ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-21.41kB ± 0%1.41kB ± 0%~(all equal)
DecodeCCF/FlowFees.TokensWithdrawn-21.22kB ± 0%1.22kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-21.49kB ± 0%1.49kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-21.50kB ± 0%1.50kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-21.26kB ± 0%1.26kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.RewardsPaid-21.38kB ± 0%1.38kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited-21.34kB ± 0%1.34kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-21.33kB ± 0%1.33kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensMinted-21.22kB ± 0%1.22kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensWithdrawn-21.35kB ± 0%1.35kB ± 0%~(all equal)
DecodeJSON/FlowFees.FeesDeducted-26.03kB ± 0%6.03kB ± 0%~(all equal)
DecodeJSON/FlowFees.TokensWithdrawn-23.62kB ± 0%3.62kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-25.46kB ± 0%5.46kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-27.40kB ± 0%7.40kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-23.67kB ± 0%3.67kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.RewardsPaid-24.57kB ± 0%4.57kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited-24.93kB ± 0%4.93kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-24.50kB ± 0%4.50kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensMinted-23.63kB ± 0%3.63kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensWithdrawn-24.91kB ± 0%4.91kB ± 0%~(all equal)
EncodeBatchEventsCCF-237.1MB ± 0%37.1MB ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-234.0MB ± 0%34.0MB ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-2736B ± 0%736B ± 0%~(all equal)
EncodeCCF/FlowFees.TokensWithdrawn-2688B ± 0%688B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-2800B ± 0%800B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-2768B ± 0%768B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-2704B ± 0%704B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.RewardsPaid-2784B ± 0%784B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited-2752B ± 0%752B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-2736B ± 0%736B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensMinted-2688B ± 0%688B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensWithdrawn-2752B ± 0%752B ± 0%~(all equal)
EncodeJSON/FlowFees.FeesDeducted-2768B ± 0%768B ± 0%~(all equal)
EncodeJSON/FlowFees.TokensWithdrawn-2408B ± 0%408B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-2760B ± 0%760B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-2952B ± 0%952B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-2424B ± 0%424B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.RewardsPaid-2624B ± 0%624B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited-2680B ± 0%680B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-2544B ± 0%544B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensMinted-2416B ± 0%416B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensWithdrawn-2672B ± 0%672B ± 0%~(all equal)
ExportType/composite_type-2136B ± 0%136B ± 0%~(all equal)
ExportType/simple_type-20.00B 0.00B ~(all equal)
InterpretRecursionFib-21.00MB ± 0%1.00MB ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_interpreter-2976B ± 0%976B ± 0%~(all equal)
NewInterpreter/new_sub-interpreter-2200B ± 0%200B ± 0%~(all equal)
ParseArray-22.72MB ± 0%2.73MB ± 0%~(p=1.000 n=1+1)
ParseDeploy/byte_array-24.09MB ± 0%4.09MB ± 0%~(p=1.000 n=1+1)
ParseDeploy/decode_hex-2214kB ± 0%214kB ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/With_memory_metering-228.9kB ± 0%28.9kB ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/Without_memory_metering-228.9kB ± 0%28.9kB ± 0%~(p=1.000 n=1+1)
ParseInfix-21.91kB ± 0%1.92kB ± 0%~(p=1.000 n=1+1)
QualifiedIdentifierCreation/One_level-20.00B 0.00B ~(all equal)
QualifiedIdentifierCreation/Three_levels-264.0B ± 0%64.0B ± 0%~(all equal)
RuntimeResourceDictionaryValues-22.28MB ± 0%2.29MB ± 0%~(p=1.000 n=1+1)
RuntimeScriptNoop-23.02kB ± 0%3.02kB ± 0%~(all equal)
SuperTypeInference/arrays-296.0B ± 0%96.0B ± 0%~(all equal)
SuperTypeInference/composites-20.00B 0.00B ~(all equal)
SuperTypeInference/integers-20.00B 0.00B ~(all equal)
ValueIsSubtypeOfSemaType-248.0B ± 0%48.0B ± 0%~(all equal)
 
allocs/opdelta
CheckContractInterfaceFungibleTokenConformance-2806 ± 0%806 ± 0%~(all equal)
ContractInterfaceFungibleToken-2370 ± 0%370 ± 0%~(all equal)
DecodeBatchEventsCCF-21.48M ± 0%1.48M ± 0%~(all equal)
DecodeBatchEventsJSON-24.75M ± 0%4.75M ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-230.0 ± 0%30.0 ± 0%~(all equal)
DecodeCCF/FlowFees.TokensWithdrawn-226.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-230.0 ± 0%30.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-232.0 ± 0%32.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-226.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.RewardsPaid-229.0 ± 0%29.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited-231.0 ± 0%31.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-229.0 ± 0%29.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensMinted-226.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensWithdrawn-231.0 ± 0%31.0 ± 0%~(all equal)
DecodeJSON/FlowFees.FeesDeducted-2129 ± 0%129 ± 0%~(all equal)
DecodeJSON/FlowFees.TokensWithdrawn-272.0 ± 0%72.0 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-2103 ± 0%103 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-2163 ± 0%163 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-271.0 ± 0%71.0 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.RewardsPaid-288.0 ± 0%88.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited-296.0 ± 0%96.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-287.0 ± 0%87.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensMinted-272.0 ± 0%72.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensWithdrawn-296.0 ± 0%96.0 ± 0%~(all equal)
EncodeBatchEventsCCF-2467k ± 0%467k ± 0%~(all equal)
EncodeBatchEventsJSON-2757k ± 0%757k ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowFees.TokensWithdrawn-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.RewardsPaid-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited-210.0 ± 0%10.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-210.0 ± 0%10.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensMinted-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensWithdrawn-210.0 ± 0%10.0 ± 0%~(all equal)
EncodeJSON/FlowFees.FeesDeducted-217.0 ± 0%17.0 ± 0%~(all equal)
EncodeJSON/FlowFees.TokensWithdrawn-210.0 ± 0%10.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-214.0 ± 0%14.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-223.0 ± 0%23.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-210.0 ± 0%10.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.RewardsPaid-213.0 ± 0%13.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited-217.0 ± 0%17.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-212.0 ± 0%12.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensMinted-211.0 ± 0%11.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensWithdrawn-216.0 ± 0%16.0 ± 0%~(all equal)
ExportType/composite_type-23.00 ± 0%3.00 ± 0%~(all equal)
ExportType/simple_type-20.00 0.00 ~(all equal)
InterpretRecursionFib-218.9k ± 0%18.9k ± 0%~(all equal)
NewInterpreter/new_interpreter-216.0 ± 0%16.0 ± 0%~(all equal)
NewInterpreter/new_sub-interpreter-24.00 ± 0%4.00 ± 0%~(all equal)
ParseArray-259.6k ± 0%59.6k ± 0%~(all equal)
ParseDeploy/byte_array-289.4k ± 0%89.4k ± 0%~(all equal)
ParseDeploy/decode_hex-263.0 ± 0%63.0 ± 0%~(all equal)
ParseFungibleToken/With_memory_metering-2768 ± 0%768 ± 0%~(all equal)
ParseFungibleToken/Without_memory_metering-2768 ± 0%768 ± 0%~(all equal)
ParseInfix-248.0 ± 0%48.0 ± 0%~(all equal)
QualifiedIdentifierCreation/One_level-20.00 0.00 ~(all equal)
QualifiedIdentifierCreation/Three_levels-22.00 ± 0%2.00 ± 0%~(all equal)
RuntimeResourceDictionaryValues-236.9k ± 0%36.9k ± 0%~(p=1.000 n=1+1)
RuntimeScriptNoop-250.0 ± 0%50.0 ± 0%~(all equal)
SuperTypeInference/arrays-23.00 ± 0%3.00 ± 0%~(all equal)
SuperTypeInference/composites-20.00 0.00 ~(all equal)
SuperTypeInference/integers-20.00 0.00 ~(all equal)
ValueIsSubtypeOfSemaType-21.00 ± 0%1.00 ± 0%~(all equal)
 

@codecov
Copy link

codecov bot commented Jul 27, 2023

Codecov Report

Merging #2683 (abb7402) into master (181924e) will decrease coverage by 0.01%.
The diff coverage is 24.52%.

❗ Current head abb7402 differs from pull request most recent head fe2ba63. Consider uploading reports for the commit fe2ba63 to get more accurate results

@@            Coverage Diff             @@
##           master    #2683      +/-   ##
==========================================
- Coverage   78.57%   78.57%   -0.01%     
==========================================
  Files         338      338              
  Lines       78216    78237      +21     
==========================================
+ Hits        61456    61472      +16     
- Misses      14474    14476       +2     
- Partials     2286     2289       +3     
Flag Coverage Δ
unittests 78.57% <24.52%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files Changed Coverage Δ
runtime/events.go 70.27% <0.00%> (ø)
runtime/runtime.go 85.26% <ø> (ø)
runtime/stdlib/account.go 88.32% <0.00%> (ø)
runtime/stdlib/block.go 88.17% <0.00%> (ø)
runtime/stdlib/hashalgorithm.go 90.09% <0.00%> (ø)
runtime/stdlib/log.go 88.88% <0.00%> (ø)
runtime/stdlib/random.go 88.23% <0.00%> (ø)
runtime/storage.go 82.60% <0.00%> (ø)
runtime/environment.go 92.30% <30.76%> (-1.30%) ⬇️
runtime/stdlib/publickey.go 72.68% <60.00%> (+0.42%) ⬆️
... and 1 more

... and 1 file with indirect coverage changes

@SupunS SupunS force-pushed the supun/handle-external-errors branch from b2cd9a8 to fe2ba63 Compare July 27, 2023 16:21
Copy link
Member

@turbolent turbolent left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The convention for runtime interface functions is that:

  • Errors returned from the function are user errors
  • Panics are internal errors (e.g. implementation bug)

For example, when a requested block does not exist, the implementation of GetBlockAtHeight can return an error indicating that.

Why do we wrap paniced errors (internal errors) as external errors? To differentiate that they did not originate in Cadence itself?

Why would we wrap returned errors, i.e. classify user errors, as external errors?

Both questions probably stem from my lack of understanding what external errors are used/needed for.

@SupunS
Copy link
Member Author

SupunS commented Jul 31, 2023

The convention for runtime interface functions is that:

  • Errors returned from the function are user errors
  • Panics are internal errors (e.g. implementation bug)

So the problem is this convention is not always followed (and is not guaranteed to be followed either). There can be situations where certain user errors are also panicked, while internal errors are returned. This is a really grey area, sometimes a 'user error' to the host-env, etc. could actually be wrong information being sent by Cadence such that it's actually an internal error for the user.

Why do we wrap paniced errors (internal errors) as external errors? To differentiate that they did not originate in Cadence itself?

Why would we wrap returned errors, i.e. classify user errors, as external errors?

Cadence doesn't know if a returned/thrown error is actually an internal error or a user error (unless it was originated from Cadence). So there's this "external error" category where it just says it's an error that came from outside and Cadence can't determine which one it is.
Also, the wrapping doesn't wrap crashers (i.e: go-runtime errors as NPE, cast errors, etc.), it only wraps errors that were explicitly thrown/returned by the implementation.

@SupunS
Copy link
Member Author

SupunS commented Jul 31, 2023

The real problem I think is, in the cadence code base, we use panics to propagate errors (rather than returning). So any un-categorized error creates a problem at the top of the call tree where all errors are handled.
IMO the proper fix is to refactor the entire code base to use error-returning for all user-errors, and panic only the internal errors (which is not the case now). But unfortunately, that's going to be a massive refactoring.

@turbolent
Copy link
Member

@SupunS Thank you for the great explanation, that makes sense!

@SupunS SupunS merged commit 5ea8284 into master Aug 1, 2023
11 of 12 checks passed
@SupunS SupunS deleted the supun/handle-external-errors branch August 1, 2023 00:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Computation limit exceeding errors are treated as internal errors
3 participants