JavaScript bindings for the Solidity compiler with Standard JSON I/O interface
—
Legacy output translation and assembly formatting utilities for compatibility with older compiler versions and tooling.
Convert raw compiler output from older versions to Standard JSON format.
/**
* Translate legacy compiler output to Standard JSON format
* @param output - Raw compiler output object from legacy versions
* @param libraries - Optional library addresses for bytecode linking
* @returns Translated output in Standard JSON format or null if translation fails
*/
function translateJsonCompilerOutput(output: any, libraries?: any): any | null;Usage Examples:
import translate from "solc/translate";
// Translate legacy compiler output
const legacyOutput = {
contracts: {
'MyContract': {
bytecode: '608060405234801561001057...',
interface: '[{"type":"function","name":"test",...}]',
gasEstimates: { creation: [21000, 200] },
functionHashes: { "test()": "f8a8fd6d" }
}
},
errors: ['Warning: Unused variable'],
sourceList: ['Contract.sol']
};
const modernOutput = translate.translateJsonCompilerOutput(legacyOutput);
console.log(modernOutput.contracts['']['MyContract'].evm.bytecode.object);Format old JSON assembly output into human-readable text format.
/**
* Format legacy assembly JSON output for display
* @param assembly - Assembly JSON object or string
* @param source - Original source code string for context
* @returns Formatted assembly text
*/
function prettyPrintLegacyAssemblyJSON(assembly: any, source?: string): string;Usage Examples:
import translate from "solc/translate";
// Format assembly output
const assemblyJSON = {
'.code': [
{ name: 'PUSH1', value: '0x80' },
{ name: 'PUSH1', value: '0x40' },
{ name: 'MSTORE' }
],
'.data': {}
};
const sourceCode = 'contract Test { uint public value = 42; }';
const formattedAssembly = translate.prettyPrintLegacyAssemblyJSON(assemblyJSON, sourceCode);
console.log(formattedAssembly);Convert old-style version strings to semver-compatible format.
/**
* Convert old-style version strings to semver-compatible format
* @param version - Version string in any format
* @returns Semver-compatible version string
*/
function versionToSemver(version: string): string;Usage Examples:
import translate from "solc/translate";
// Convert various version formats
console.log(translate.versionToSemver("0.3.6-3fc68da5/Release-Emscripten/clang"));
// Output: "0.3.6+commit.3fc68da5"
console.log(translate.versionToSemver("0.1.3-0"));
// Output: "0.1.3"
console.log(translate.versionToSemver("0.4.5+commit.b318366e.Emscripten.clang"));
// Output: "0.4.5+commit.b318366e.Emscripten.clang" (already compatible)These utilities are primarily used for supporting older compiler versions and legacy tooling:
Legacy compilers used different output formats:
Legacy Format:
{
"contracts": {
"ContractName": {
"bytecode": "0x608060405234801561001057...",
"interface": "[{\"type\":\"function\",\"name\":\"test\"}]",
"gasEstimates": {
"creation": [21000, 200],
"external": { "test()": 500 }
}
}
}
}Modern Standard JSON:
{
"contracts": {
"filename.sol": {
"ContractName": {
"evm": {
"bytecode": {
"object": "0x608060405234801561001057...",
"linkReferences": {}
},
"gasEstimates": {
"creation": {
"executionCost": "21000",
"codeDepositCost": "200"
}
}
},
"abi": [{"type":"function","name":"test"}]
}
}
}
}Legacy assembly format used nested objects with .code and .data sections:
const legacyAssembly = {
'.code': [
{ name: 'PUSH1', value: '0x80', begin: 0, end: 5 },
{ name: 'PUSH1', value: '0x40', begin: 5, end: 10 },
{ name: 'MSTORE', begin: 10, end: 15 }
],
'.data': {
'0': {
'.code': [...],
'.data': {}
}
}
};The prettyPrintLegacyAssemblyJSON function converts this to readable text:
.code
PUSH1 0x80 contract Test { uint p...
PUSH1 0x40
MSTORE
.data
0:
.code
...import solc from "solc";
import translate from "solc/translate";
// Working with legacy compiler output
function processLegacyContract(legacyOutput: any) {
// Translate to modern format
const modernOutput = translate.translateJsonCompilerOutput(legacyOutput);
if (!modernOutput) {
throw new Error('Failed to translate legacy output');
}
// Now compatible with modern tooling
return modernOutput;
}
// Version compatibility checking
function checkVersionCompatibility(versionString: string) {
const semverVersion = translate.versionToSemver(versionString);
const [major, minor] = semverVersion.split('.').map(Number);
if (major === 0 && minor < 4) {
console.log('Very old compiler version - may need special handling');
}
return semverVersion;
}Install with Tessl CLI
npx tessl i tessl/npm-solc