1.0.1 • Published 5 years ago

solc-js v1.0.1

Weekly downloads
85
License
MIT
Repository
github
Last release
5 years ago

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