solc-js

1.0.1 • Public • Published

Join the chat at https://gitter.im/ethereum/play

solc-js

cross-browser solidity compiler for the web

smaller and faster alternative to solc for browser-only environments

In nodejs you can instead use solc or solc-native

How can I help?

  1. Open issues on things that are broken
  2. Fix open issues by sending PRs
  3. Add documentation

Install

npm install solc-js

Usage

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))
}

Standard Output Format

{
  "abi": [{}, {}],
  "contractName": "SimpleStorage",
  "errors": [{}],
  "metadata": {compiler: {}, language: "Solidity", output: {}, settings: {}, sources: {}, …},
  "success": true,
  "version": "0.5.0+commit.1d4f565a"
}

Other related projects

License

MIT

Package Sidebar

Install

npm i solc-js

Weekly Downloads

61

Version

1.0.1

License

MIT

Unpacked Size

3.08 MB

Total Files

14

Last publish

Collaborators

  • serapath