Skip to content

Conversation

@turbolent
Copy link
Member

@turbolent turbolent commented Oct 16, 2025

Closes #4209

Description

Finish and improve the work started in #4288.

In errors that occur during decoding JSON for a particular property or index, include the path in the error.

This requires refactoring the decoding so it is performed while the path is up-to-date. Currently the properties are get, then decoded "out-of-context". Add a new get function that uses continuation-passing style to decode a property. Also update the path for all loops.

Best viewed by ignoring whitespace changes: https://github.com/onflow/cadence/pull/4302/files?w=1


  • 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

devin-ai-integration bot and others added 8 commits October 14, 2025 18:06
This commit improves error messages when JSON decoding fails by adding
context about where in the JSON structure the error occurred.

Changes:
- Added pathContext field to Decoder to track the current location
- Added path management helper methods (pushPath, popPath, getPathString)
- Added *WithContext versions of jsonObject methods that use path context
- Updated key decode methods to track and use path context

For example, instead of:
  missing property: type

Users now see:
  missing property: type (at array[0])
  missing property: type (at field:myField.type)

Closes #4209
Follow-up to address code review feedback from @turbolent.

Changes:
- Introduced pathElement interface with Append(io.Writer) method
- Created specific path element types:
  - indexPathElement: for array indices
  - fieldPathElement: for struct/resource/event field names
  - staticPathElement: for static strings like 'type'
- Updated getPathString() to use strings.Builder for efficient concatenation
- Changed pathContext from []string to []pathElement

This optimization avoids string formatting and allocation during the happy path
(successful decoding), only building the path string when an error occurs.

Addresses: #4288 (comment)
Added comprehensive tests to verify that path context is correctly included
in error messages when JSON decoding fails.

Test cases cover:
- Missing property at root level
- Missing property in array elements
- Missing property in nested array elements
- Missing property in struct fields
- Missing property in type definitions
- Missing property in complex nested structures (array[0].field:nested)

All tests verify that the error message contains both the property name
and the path context showing where in the JSON structure the error occurred.
Comprehensive refactoring to consistently use GetWithContext, GetStringWithContext,
GetSliceWithContext, GetBoolWithContext, and GetValueWithContext throughout all
decode methods.

This ensures path context is available for all decoding errors, not just in a few
select locations. Now any missing property error will include context about where
in the JSON structure the error occurred.

Updated methods:
- decodeKeyValuePair
- decodeComposite
- decodeInclusiveRange
- decodePath
- decodeFunction
- decodeTypeParameter
- decodeParameter
- decodeFieldType
- decodeAuthorization
- decodeNominalType
- decodeType
- decodeTypeValue
- decodeCapability

Addresses: #4288 (review)
- Add path tracking system using pathElement interface
- Implement indexPathElement, fieldPathElement, staticPathElement
- Refactor all decode methods to use *WithContext helpers
- Remove non-context Get* helper methods
- Add comprehensive error context tests

Closes #4209
@github-actions
Copy link

Benchstat comparison

  • Base branch: onflow:master
  • Base commit: 21639ee
Results

old.txtnew.txt
time/opdelta
pkg:github.com/onflow/cadence/runtime goos:linux goarch:amd64
ContractFunctionInvocation-4383µs ± 0%401µs ± 0%~(p=1.000 n=1+1)
pkg:github.com/onflow/cadence/encoding/ccf goos:linux goarch:amd64
DecodeBatchEventsCCF-4131ms ± 0%130ms ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-4383ms ± 0%413ms ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-42.93µs ± 0%2.92µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.TokensWithdrawn-42.20µs ± 0%2.19µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-42.87µs ± 0%2.87µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-43.24µs ± 0%3.23µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-42.19µs ± 0%2.17µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.RewardsPaid-42.55µs ± 0%2.55µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensDeposited-42.64µs ± 0%2.64µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-42.58µs ± 0%2.56µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensMinted-42.20µs ± 0%2.19µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensWithdrawn-42.63µs ± 0%2.63µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.FeesDeducted-49.42µs ± 0%10.19µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.TokensWithdrawn-45.42µs ± 0%5.89µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-48.56µs ± 0%9.29µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-412.4µs ± 0%12.7µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-45.56µs ± 0%6.09µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.RewardsPaid-47.21µs ± 0%7.77µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited-47.55µs ± 0%8.25µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-46.81µs ± 0%7.43µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensMinted-45.50µs ± 0%5.95µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensWithdrawn-47.52µs ± 0%8.22µs ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsCCF-486.3ms ± 0%86.6ms ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-496.4ms ± 0%96.3ms ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-41.91µs ± 0%1.91µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.TokensWithdrawn-41.54µs ± 0%1.62µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-41.87µs ± 0%1.87µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-42.14µs ± 0%2.17µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-41.57µs ± 0%1.58µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.RewardsPaid-41.72µs ± 0%1.71µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensDeposited-41.74µs ± 0%1.75µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-41.72µs ± 0%1.73µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensMinted-41.53µs ± 0%1.53µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensWithdrawn-41.75µs ± 0%1.76µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowFees.FeesDeducted-42.26µs ± 0%2.24µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowFees.TokensWithdrawn-41.32µs ± 0%1.32µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-42.04µs ± 0%2.05µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-42.80µs ± 0%2.76µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-41.35µs ± 0%1.34µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.RewardsPaid-41.72µs ± 0%1.72µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensDeposited-42.00µs ± 0%1.99µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-41.57µs ± 0%1.56µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensMinted-41.34µs ± 0%1.33µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensWithdrawn-41.97µs ± 0%1.96µs ± 0%~(p=1.000 n=1+1)
pkg:github.com/onflow/cadence/runtime goos:linux goarch:amd64
ExportType/composite_type-4263ns ± 0%263ns ± 0%~(p=1.000 n=1+1)
ExportType/simple_type-477.9ns ± 0%78.2ns ± 0%~(p=1.000 n=1+1)
pkg:github.com/onflow/cadence/interpreter goos:linux goarch:amd64
ImperativeFib-422.4µs ± 0%20.7µs ± 0%~(p=1.000 n=1+1)
InterpretRecursionFib-42.09ms ± 0%2.21ms ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_interpreter-41.02µs ± 0%1.04µs ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_sub-interpreter-4324ns ± 0%321ns ± 0%~(p=1.000 n=1+1)
pkg:github.com/onflow/cadence/runtime goos:linux goarch:amd64
RuntimeFungibleTokenTransferInterpreter-4612µs ± 0%569µs ± 0%~(p=1.000 n=1+1)
RuntimeFungibleTokenTransferVM-4625µs ± 0%629µs ± 0%~(p=1.000 n=1+1)
RuntimeResourceDictionaryValues-42.60ms ± 0%2.64ms ± 0%~(p=1.000 n=1+1)
RuntimeResourceTracking-411.4ms ± 0%11.9ms ± 0%~(p=1.000 n=1+1)
RuntimeScriptNoop-414.2µs ± 0%14.9µs ± 0%~(p=1.000 n=1+1)
RuntimeVMInvokeContractImperativeFib-428.8µs ± 0%28.7µs ± 0%~(p=1.000 n=1+1)
pkg:github.com/onflow/cadence/interpreter goos:linux goarch:amd64
ValueIsSubtypeOfSemaType-464.0ns ± 0%64.4ns ± 0%~(p=1.000 n=1+1)
 
alloc/opdelta
pkg:github.com/onflow/cadence/runtime goos:linux goarch:amd64
ContractFunctionInvocation-4152kB ± 0%152kB ± 0%~(p=1.000 n=1+1)
pkg:github.com/onflow/cadence/encoding/ccf goos:linux goarch:amd64
DecodeBatchEventsCCF-471.5MB ± 0%71.5MB ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-4243MB ± 0%262MB ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-41.50kB ± 0%1.50kB ± 0%~(all equal)
DecodeCCF/FlowFees.TokensWithdrawn-41.31kB ± 0%1.31kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-41.58kB ± 0%1.58kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-41.60kB ± 0%1.60kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-41.36kB ± 0%1.36kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.RewardsPaid-41.48kB ± 0%1.48kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited-41.42kB ± 0%1.42kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-41.41kB ± 0%1.41kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensMinted-41.31kB ± 0%1.31kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensWithdrawn-41.43kB ± 0%1.43kB ± 0%~(all equal)
DecodeJSON/FlowFees.FeesDeducted-45.95kB ± 0%6.37kB ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.TokensWithdrawn-43.55kB ± 0%3.84kB ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-45.40kB ± 0%5.82kB ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-47.32kB ± 0%7.80kB ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-43.61kB ± 0%3.90kB ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.RewardsPaid-44.50kB ± 0%4.86kB ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited-44.85kB ± 0%5.23kB ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-44.42kB ± 0%4.78kB ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensMinted-43.57kB ± 0%3.86kB ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensWithdrawn-44.85kB ± 0%5.23kB ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsCCF-465.8MB ± 0%65.8MB ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-440.7MB ± 0%40.7MB ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-41.29kB ± 0%1.29kB ± 0%~(all equal)
EncodeCCF/FlowFees.TokensWithdrawn-41.24kB ± 0%1.24kB ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-41.51kB ± 0%1.51kB ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-41.48kB ± 0%1.48kB ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-41.42kB ± 0%1.42kB ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.RewardsPaid-41.50kB ± 0%1.50kB ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited-41.29kB ± 0%1.29kB ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-41.27kB ± 0%1.27kB ± 0%~(all equal)
EncodeCCF/FlowToken.TokensMinted-41.24kB ± 0%1.24kB ± 0%~(all equal)
EncodeCCF/FlowToken.TokensWithdrawn-41.29kB ± 0%1.29kB ± 0%~(all equal)
EncodeJSON/FlowFees.FeesDeducted-4896B ± 0%896B ± 0%~(all equal)
EncodeJSON/FlowFees.TokensWithdrawn-4536B ± 0%536B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-4920B ± 0%920B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-41.11kB ± 0%1.11kB ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-4584B ± 0%584B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.RewardsPaid-4784B ± 0%784B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited-4808B ± 0%808B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-4672B ± 0%672B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensMinted-4544B ± 0%544B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensWithdrawn-4800B ± 0%800B ± 0%~(all equal)
pkg:github.com/onflow/cadence/runtime goos:linux goarch:amd64
ExportType/composite_type-4120B ± 0%120B ± 0%~(all equal)
ExportType/simple_type-40.00B 0.00B ~(all equal)
pkg:github.com/onflow/cadence/interpreter goos:linux goarch:amd64
ImperativeFib-48.30kB ± 0%8.30kB ± 0%~(all equal)
InterpretRecursionFib-41.19MB ± 0%1.19MB ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_interpreter-4976B ± 0%976B ± 0%~(all equal)
NewInterpreter/new_sub-interpreter-4232B ± 0%232B ± 0%~(all equal)
pkg:github.com/onflow/cadence/runtime goos:linux goarch:amd64
RuntimeFungibleTokenTransferInterpreter-4155kB ± 0%156kB ± 0%~(p=1.000 n=1+1)
RuntimeFungibleTokenTransferVM-4173kB ± 0%174kB ± 0%~(p=1.000 n=1+1)
RuntimeResourceDictionaryValues-41.76MB ± 0%1.76MB ± 0%~(p=1.000 n=1+1)
RuntimeResourceTracking-49.27MB ± 0%9.26MB ± 0%~(p=1.000 n=1+1)
RuntimeScriptNoop-47.98kB ± 0%7.98kB ± 0%~(all equal)
RuntimeVMInvokeContractImperativeFib-410.3kB ± 0%10.3kB ± 0%~(all equal)
pkg:github.com/onflow/cadence/interpreter goos:linux goarch:amd64
ValueIsSubtypeOfSemaType-448.0B ± 0%48.0B ± 0%~(all equal)
 
allocs/opdelta
pkg:github.com/onflow/cadence/runtime goos:linux goarch:amd64
ContractFunctionInvocation-42.47k ± 0%2.48k ± 0%~(p=1.000 n=1+1)
pkg:github.com/onflow/cadence/encoding/ccf goos:linux goarch:amd64
DecodeBatchEventsCCF-41.53M ± 0%1.53M ± 0%~(all equal)
DecodeBatchEventsJSON-44.68M ± 0%5.44M ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-431.0 ± 0%31.0 ± 0%~(all equal)
DecodeCCF/FlowFees.TokensWithdrawn-427.0 ± 0%27.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-431.0 ± 0%31.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-433.0 ± 0%33.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-427.0 ± 0%27.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.RewardsPaid-430.0 ± 0%30.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited-432.0 ± 0%32.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-430.0 ± 0%30.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensMinted-427.0 ± 0%27.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensWithdrawn-432.0 ± 0%32.0 ± 0%~(all equal)
DecodeJSON/FlowFees.FeesDeducted-4125 ± 0%142 ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.TokensWithdrawn-470.0 ± 0%79.0 ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-4101 ± 0%118 ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-4158 ± 0%179 ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-469.0 ± 0%78.0 ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.RewardsPaid-486.0 ± 0%99.0 ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited-495.0 ± 0%110.0 ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-485.0 ± 0%98.0 ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensMinted-470.0 ± 0%79.0 ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensWithdrawn-495.0 ± 0%110.0 ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsCCF-41.00M ± 0%1.00M ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-4902k ± 0%902k ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowFees.TokensWithdrawn-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.RewardsPaid-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited-421.0 ± 0%21.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-421.0 ± 0%21.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensMinted-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensWithdrawn-421.0 ± 0%21.0 ± 0%~(all equal)
EncodeJSON/FlowFees.FeesDeducted-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeJSON/FlowFees.TokensWithdrawn-413.0 ± 0%13.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-417.0 ± 0%17.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-426.0 ± 0%26.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-413.0 ± 0%13.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.RewardsPaid-416.0 ± 0%16.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited-420.0 ± 0%20.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-415.0 ± 0%15.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensMinted-414.0 ± 0%14.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensWithdrawn-419.0 ± 0%19.0 ± 0%~(all equal)
pkg:github.com/onflow/cadence/runtime goos:linux goarch:amd64
ExportType/composite_type-43.00 ± 0%3.00 ± 0%~(all equal)
ExportType/simple_type-40.00 0.00 ~(all equal)
pkg:github.com/onflow/cadence/interpreter goos:linux goarch:amd64
ImperativeFib-4176 ± 0%176 ± 0%~(all equal)
InterpretRecursionFib-417.7k ± 0%17.7k ± 0%~(all equal)
NewInterpreter/new_interpreter-415.0 ± 0%15.0 ± 0%~(all equal)
NewInterpreter/new_sub-interpreter-44.00 ± 0%4.00 ± 0%~(all equal)
pkg:github.com/onflow/cadence/runtime goos:linux goarch:amd64
RuntimeFungibleTokenTransferInterpreter-42.93k ± 0%2.94k ± 0%~(p=1.000 n=1+1)
RuntimeFungibleTokenTransferVM-43.06k ± 0%3.07k ± 0%~(p=1.000 n=1+1)
RuntimeResourceDictionaryValues-436.7k ± 0%36.7k ± 0%~(all equal)
RuntimeResourceTracking-4159k ± 0%159k ± 0%~(all equal)
RuntimeScriptNoop-4113 ± 0%113 ± 0%~(all equal)
RuntimeVMInvokeContractImperativeFib-4213 ± 0%213 ± 0%~(all equal)
pkg:github.com/onflow/cadence/interpreter goos:linux goarch:amd64
ValueIsSubtypeOfSemaType-41.00 ± 0%1.00 ± 0%~(all equal)
 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Better error message when failing to decode cadence json

1 participant