cross-browser solidity compiler for the web
- https://github.com/playproject-io-archive/solverify to verify solidity source code
smaller and faster alternative to solc for browser-only environments
- JavaScript bindings for the solidity compiler
- Uses the emscripten compiled solidity found in the solc-bin repository
In nodejs you can instead use solc or solc-native
- Open issues on things that are broken
- Fix open issues by sending PRs
- Add documentation
npm install solc-js
const solcjs = require('solc-js')
await solcjs(version)
const version = 'v0.5.1-stable-2018.12.03'
const compiler = await solcjs(version)
// or
// const compiler = await solcjs()
const sourceCode = `
pragma solidity >0.4.99 <0.6.0;
library OldLibrary {
function someFunction(uint8 a) public returns(bool);
}
contract NewContract {
function f(uint8 a) public returns (bool) {
return OldLibrary.someFunction(a);
}
}`
const output = await compiler(sourceCode)
await solcjs(version).version
const version = 'v0.4.25-stable-2018.09.13'
const compiler = await solcjs(version)
console.dir(compiler.version)
// { name: 'v0.4.25-stable-2018.09.13',
// url: 'https://solc-bin.ethereum.org/bin/soljson-v0.4.25+commit.59dbf8f1.js' }
await solcjs.versions()
const select = await solcjs.versions()
const { releases, nightly, all } = select
console.log(releases[0])
// v0.4.25-stable-2018.09.13
await solcjs.version2url(version)
const version = 'v0.4.25-stable-2018.09.13'
const url = await solcjs.version2url(version)
console.log(url)
// https://solc-bin.ethereum.org/bin/soljson-v0.4.25+commit.59dbf8f1.js
const version = 'latest'
const url = await solcjs.version2url(version)
console.log(url)
// https://solc-bin.ethereum.org/bin/soljson-v0.1.1+commit.6ff4cd6.js
await compiler(sourceCode)
const compiler = await solcjs()
const sourceCode = `
library OldLibrary {
function someFunction(uint8 a) public returns(bool);
}
contract NewContract {
function f(uint8 a) public returns (bool) {
return OldLibrary.someFunction(a);
}
}`
const output = await compiler(sourceCode)
const compiler = await solcjs()
const sourceCode = `
import 'https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/math/SafeMath.sol';
library OldLibrary {
function someFunction(uint8 a) public returns(bool);
}
contract NewContract {
function f(uint8 a) public returns (bool) {
return OldLibrary.someFunction(a);
}
}`
const output = await compiler(sourceCode)
await compiler(sourceCode, getImportContent)
const version = 'v0.5.1-stable-2018.12.03'
const compiler = await solcjs(version)
const solcResolver = require('solc-resolver')
const sourceCode = `
pragma solidity >0.4.99 <0.6.0;
import "lib.sol";
library OldLibrary {
function someFunction(uint8 a) public returns(bool);
}
contract NewContract {
function f(uint8 a) public returns (bool) {
return OldLibrary.someFunction(a);
}
}`
const store = new Map()
store.set('lib.sol', 'library L { function f() internal returns (uint) { return 7; } }')
const ResolverEngine = require('solc-resolver').resolverEngine;
let resolveGithub = require('resolve-github');
let resolveIpfs = require('resolve-ipfs');
let resolveHttp = require('resolve-http');
let resolverEngine = new ResolverEngine();
resolverEngine.addResolver(resolveGithub);
resolverEngine.addResolver(resolveIpfs);
resolverEngine.addResolver(resolveHttp);
const getImportContent = async function (path) {
return myDB.has(path) ? myDB.get(path) : await resolverEngine.require(path);
};
const output = await compiler(sourceCode, async (path) => {
return store.has(path) ? store.get(path) : await resolverEngine.require(path))
}
{
"abi": [{…}, {…}],
"contractName": "SimpleStorage",
"errors": [{…}],
"metadata": {compiler: {…}, language: "Solidity", output: {…}, settings: {…}, sources: {…}, …},
"success": true,
"version": "0.5.0+commit.1d4f565a"
}
MIT