All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.3.6 - 2026-09-02
- Re-export the
metadatacomponent types (MetadataCompiler,MetadataOutput,MetadataCompilationSettings, andMetadataSource) at the crate root soMetadatafields are fully usable - Re-export the
natspeccomponent types (NatspecKind,UserDocItem,DevDocItem, andDevDocError) at the crate root soUserDocandDevDocfields are fully usable - Re-export the
storage_layoutcomponent types (StorageItem,StorageType, andStorageEncoding) at the crate root soStorageLayoutfields are fully usable - Re-export
Source,SourceContent,AssemblyJson,AssemblyData,AssemblyInstruction,JumpType, andEvmat the crate root soStandardJSONInputandContractOutputfields are fully usable
0.3.5 - 2026-09-01
- Re-export the
Settingscomponent types (StopAfter,Optimizer,OptimizerDetails,YulDetails,EvmVersion,DebugSettings,RevertStrings,MetadataSettings,BytecodeHash,ModelCheckerSettings,ModelCheckerEngine,ModelCheckerTarget,ExtCalls,Invariant, andSolver) at the crate root soSettingsfields are fully usable without reaching intostandard_json::input - Add doc comments to all public types in the
astmodule
0.3.4 - 2026-08-31
- Re-export
Error,SourceOutput,ContractOutput,Ethdebug, and the remainingstandard_jsonoutput types at the crate root soStandardJSONOutputfields are fully usable without reaching intostandard_json::output
0.3.3 - 2026-08-31
- Re-export
LanguageandSettingsat the crate root soStandardJSONInputfields are fully usable without reaching intostandard_json::input
0.3.2 - 2026-08-17
- Parse
FunctionDefinition.isConstructorfrom solc < 0.5.0 artifacts so constructors are distinguishable from fallbacks - Parse
FunctionDefinition.superFunctionfrom solc < 0.6.0 artifacts so override wiring is recoverable withoutbase_functions - Parse
InheritanceSpecifier.argumentsfrom solc < 0.8.0 artifacts so base constructor arguments survive
0.3.1 - 2026-08-15
- Make
abia public module and renameAbiItemtoabi::Item
0.3.0 - 2026-08-15
- Add
AssemblyDataforevm.legacyAssembly/assemblyJson.datavalues, which are either nested assembly objects or raw hex strings - Add
SymbolAliasForeignsoimport {X}aliases accept both anIdentifiernode and the legacy declaration id from solc < 0.8.0 - Add
AssemblyInstruction.jump_type([in]/[out]) forevm.legacyAssemblyJUMP annotations (solc >= 0.8.14) - Add
YulCfgObjectand typedYulCfgKind,YulCfgBlockKind, andYulCfgExitKindfor the experimentalyulCFGJsonobject tree, including nestedfunctions,subObjects,memoryGuard,arguments,entry,numReturns,returnValues, andJumpexits - Add
OutputSelector::All(*),Evm,EvmBytecode, andEvmDeployedBytecodefor the documented prefix and wildcard selectors - Add typed
EthdebugProgram,EthdebugCompilation, andEthdebugResourcesforevm.bytecode.ethdebug,evm.deployedBytecode.ethdebug, and the globalethdebugoutput - Add legacy ABI
constantandpayablefields on functions, constructors, receive, and fallback items - Add typed
UserDoc/DevDocNatSpec output, including methods, events, errors, state variables, custom tags, the legacyreturnfield, and both object and array shapes fordevdoc.errors - Add typed
StorageLayoutforstorageLayoutandtransientStorageLayout, includingtypes: nullwhen a layout has no variables - Add typed
Metadatafor the serialized contract metadata JSON string - Add
ErrorTypeandErrorComponentenums for compiler diagnostics - Add
DebugInfoforsettings.debug.debugInfo - Add
AssemblyInstructionand typeAssemblyJson.code,.data, and.auxdata - Add
YulObject,YulCode,YulData,YulLeave, andYulContinuefor IR AST and inline assembly - Add
YulCfgfor the experimental contract-levelyulCFGJsonoutput - Add
StandardJSONOutputtypes for parsing the compiler's Standard JSON output, including diagnostics, source file outputs, and contract outputs - Add
OutputSelectorand theStandardJSONInput::output_selectionbuilder for strongly typed compiler output selection, covering all selectors documented in the Solidity compiler docs - Add
EvmVersion::AmsterdamandEvmVersion::Future(@future) variants - Add
Settings.experimentalandSettings.via_ssa_cfgfields - Model all documented Standard JSON output fields:
metadata,userdoc,devdoc, IR and storage layout outputs, EVM assembly, function debug data, generated sources, immutable references, method identifiers, gas estimates, Yul CFG, and the globalethdebugoutput - Add
SourceContent::AstandSourceContent::AssemblyJsonvariants for the experimentalSolidityASTandEVMAssemblysource modes - Add
OptimizerDetails.simple_counter_for_loop_unchecked_increment - Add a runnable
compileexample underexamples/that compiles a Solidity source file via the Standard JSON interface
AssemblyJson.datais nowHashMap<String, AssemblyData>so hex blobs and nested assembly can share the same mapSymbolAlias.foreignis nowSymbolAliasForeigninstead ofIdentifier- Keep
metadata,natspec,standard_json, andstorage_layoutprivate. Public types stay at the crate root YulCfgnow maps named objects instead of treating them as functionsYulCfgBlock.typeis nowYulCfgBlockKindandYulCfgExit.typeis nowYulCfgExitKindinstead of raw stringsGeneratedSource.languageandEthdebugCompilationSource.languageare nowLanguageinstead of raw stringsBytecode.ethdebugis nowEthdebugPrograminstead of raw JSONEthdebug.resourcesis nowEthdebugResourcesandEthdebug.compilationis nowEthdebugCompilationinstead of raw JSONuserdocanddevdocare nowUserDoc/DevDocinstead of raw JSONstorageLayoutandtransientStorageLayoutare nowStorageLayoutinstead of raw JSONirAstandirOptimizedAstare nowYulObjectinstead of raw JSONevm.legacyAssemblyis nowAssemblyJsoninstead of raw JSONgeneratedSources.astis nowYulBlockinstead of raw JSONyulCFGJsonis now a contract-levelYulCfgfield, matching solc outputError.typeis nowErrorTypeandError.componentis nowErrorComponentSeveritypreserves unknown values asSeverity::OtherSourceOutput.ast,ContractOutput.abi,ContractOutput.evm,Evm.bytecode, andBytecode.objectare now optionalStandardJSONOutput.sourcesandcontractsdefault to empty when omittedStandardJSONInput.settingsdefaults when omittedOptimizer.enabled,Optimizer.runs,YulDetails.stack_allocation,DebugSettings.revert_strings, andDebugSettings.debug_infoare now optionalYulFunctionDefinitionnow includesreturn_variablesYulLiteralnow includeshex_valueandvalueisOption<String>- Move
StandardJSONInputfromstandard_json_inputinto thestandard_json::inputmodule Settings.output_selectionnow holdsOutputSelectorvalues instead of raw stringsEvm.deployed_bytecodeis nowOption<Bytecode>since solc omits thedeployedBytecodekey when the output selection does not request it
- Parse the legacy
byteelementary type (alias forbytes1, solc < 0.8.0)
0.2.0 - 2026-08-15
ContractDefinition.abstractis nowOption<bool>instead of defaulting tofalsewhen theabstractfield is missing (solc versions before 0.6.0)ContractDefinition.used_errorsis nowOption<Vec<i64>>instead of defaulting to an empty vec when theusedErrorsfield is missing (solc versions before 0.8.4)FunctionDefinition.virtualis nowOption<bool>instead of defaulting tofalsewhen thevirtualfield is missing (solc versions before 0.6.0)ModifierDefinition.virtualis nowOption<bool>instead of defaulting tofalsewhen thevirtualfield is missing (solc versions before 0.6.0)UsingForDirective.globalis nowOption<bool>instead of defaulting tofalsewhen theglobalfield is missing (solc versions before 0.8.13)FunctionCall.try_callis nowOption<bool>instead of defaulting tofalsewhen thetryCallfield is missing (solc versions before 0.6.0)Mapping.key_name,Mapping.key_name_location,Mapping.value_name, andMapping.value_name_locationare nowOption<String>instead of defaulting to empty strings (named mappings, solc >= 0.8.18)- All
Optionfields in AST and ABI types are now omitted during serialization whenNoneinstead of being emitted asnull, matching solc's canonical output format
- Fix parsing of solc ASTs before 0.5.0, where
FunctionDefinitionlacks thekindfield (e.g. the WETH9 fixture):FunctionDefinition.kindis nowOption<FunctionKind>instead of a required field
0.1.1 - 2026-08-13
- Add AST test fixtures from Uniswap V3 pool
ImportDirective.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfieldSymbolAlias.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfieldErrorDefinition.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfieldStructDefinition.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfieldEnumDefinition.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfieldEnumValue.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfieldUserDefinedValueTypeDefinition.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfield
0.1.0 - 2026-08-07
- Add AST test fixtures from PancakePair (solc 0.5.16)
- Support legacy
InlineAssembly.operationsfield from solc versions before 0.6.0 - Support legacy name-keyed
InlineAssembly.externalReferencesentries from solc versions before 0.6.0 - Support bare string
ElementaryTypeNamevalues inElementaryTypeNameExpressionfrom solc versions before 0.6.0 UserDefinedTypeName.namefor solc versions before 0.8.0
ContractDefinition.canonical_nameis nowOption<String>to handle solc versions that omit thecanonicalNamefieldContractDefinition.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfieldContractDefinition.abstractnow defaults tofalsewhen theabstractfield is missing (solc versions before 0.6.0)ContractDefinition.used_errorsnow defaults to an empty vec when theusedErrorsfield is missing (solc versions before 0.8.4)VariableDeclaration.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfieldVariableDeclaration.mutabilityis nowOption<Mutability>to handle solc versions that omit themutabilityfieldFunctionDefinition.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfieldFunctionDefinition.virtualnow defaults tofalsewhen thevirtualfield is missing (solc versions before 0.6.0)ModifierDefinition.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfieldModifierDefinition.virtualnow defaults tofalsewhen thevirtualfield is missing (solc versions before 0.6.0)EventDefinition.name_locationis nowOption<String>to handle solc versions that omit thenameLocationfieldModifierInvocation.kindis nowOption<ModifierInvocationKind>to handle solc versions that omit thekindfieldFunctionCall.try_callnow defaults tofalsewhen thetryCallfield is missing (solc versions before 0.6.0)InlineAssembly.astis nowOption<YulBlock>to handle solc versions that omit the structured YulASTfieldInlineAssembly.evm_versionis nowOption<String>to handle solc versions that omit theevmVersionfieldExternalReference.nameis now available for legacy name-keyed external references from solc versions before 0.6.0
0.0.14 - 2026-08-03
EventDefinition.event_selectoris nowOption<String>to handle solc versions that omit theeventSelectorfieldErrorDefinition.error_selectoris nowOption<String>to handle solc versions that omit theerrorSelectorfieldUsingForDirective.globalnow defaults tofalsewhen theglobalfield is missing (solc versions before 0.8.13)
0.0.12 - 2026-07-19
- Add
StorageLocation::Transientvariant for EIP-1153 transient storage support
YulVariableDeclaration.valueis nowOption<YulExpression>to handle Solidity inline assembly variable declarations without initializers
0.0.11 - 2026-06-02
- Add AST test fixtures from
cantina-morpho-midnightaudit
- Support
&=assignment operator in AST parsing
0.0.10 - 2026-05-20
- Add ABI and AST test fixtures from 4 audit contests
codearena/2022-11-stakehousecodearena/2025-10-covenantcodearena/2026-01-olas-autonolas-governancesherlock/2026-01-opencover-insured-vaults
- Add AST test fixtures from raptor fuzzer
raptor-cheatcode - Add GitHub release workflow for automated crates.io publishing via trusted publishing
Literal.valueis nowOption<String>to handlehexStringliterals where the Solidity compiler omits thevaluefield- Track fixture JSON files in the repository instead of ignoring them
0.0.9 - 2026-03-04
- Add Default trait to all 75 AST node types including SourceUnit, ContractDefinition, and FunctionDefinition
- Wrap nullable fields in Option to handle missing data from Solidity compiler output
- ContractDefinition.used_events is now Option<Vec>
- ForStatement.is_simple_counter_loop is now Option
- native_src fields in all Yul structures are now Option