solc.loadRemoteVersion no es un error de función

Estoy tratando de cargar otra versión de solc usando el siguiente código

var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
var solc = require('solc');
var fs = require('fs');
// getting a legacy version 
const input = fs.readFileSync('contracts/Token.sol').toString();

solc.loadRemoteVersion('0.4.4+commit.4633f3de.Darwin.appleclang', function(err, solcV044) {
    if (err) {
        // An error was encountered, display and quit
    }

    var output = solcV044.compile(input);
    console.log(output);
});

pero recibo un error TypeError: solc.loadRemoteVersion is not a functiony no entiendo por qué, ¿qué me estoy perdiendo?

EDITAR: No estoy seguro de lo que esto significa, pero puede ayudar a identificar el problema. cuando console.log(solc)regrese

{ version: [Function],
  compile: [Function: compile],
  useVersion: [Function: useVersion] }
/Users/mcansado/node_modules/solc/bin/soljson-latest.js:1
(function (exports, require, module, __filename, __dirname) { var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename
has instalado solcjs? npm install -g solc
Tengo sí. solcjs --versiondevoluciones0.4.13+commit.0fb4cb1a.Emscripten.clang

Respuestas (1)

El motivo es que el parámetro de versión no es correcto. Cómo solc maneja la loadRemoteVersionllamada se puede encontrar en su wrap.js:

  loadRemoteVersion: function (versionString, cb) {
  var mem = new MemoryStream(null, {readable: false});
  var url = 'https://ethereum.github.io/solc-bin/bin/soljson-' + versionString + '.js';
  https.get(url, function (response) {
    if (response.statusCode !== 200) {
      cb('Error retrieving binary: ' + response.statusMessage);
    } else {
      response.pipe(mem);
      response.on('end', function () {
        cb(null, setupMethods(requireFromString(mem.toString(), 'soljson-' + versionString + '.js')));
      });
    }
  }).on('error', function (error) {
    cb(error);
  });
},

Entonces, para responder a su pregunta primero, su versión debe ser 'v0.4.4+commit.4633f3de' , si reemplaza su '0.4.4+commit.4633f3de.Darwin.appleclang' con esto, todo debería funcionar.

Ahora para futuras referencias:

una forma rápida de averiguarlo es escribir: " https://ethereum.github.io/solc-bin/bin/soljson- YOUR_VERSION_PARAMETER .js" y luego ver si existe dicho recurso (si no existe, ver error 404 no encontrado).

Por supuesto, una mejor manera es encontrar todas las versiones solc lanzadas aquí: https://ethereum.github.io/solc-bin/bin/list.json

Para comodidad de las personas a las que no les gustan los hipervínculos, aquí hay una lista de todos los solc:

"releases": {
"0.4.16": "soljson-v0.4.16+commit.d7661dd9.js",
"0.4.15": "soljson-v0.4.15+commit.bbb8e64f.js",
"0.4.14": "soljson-v0.4.14+commit.c2215d46.js",
"0.4.13": "soljson-v0.4.13+commit.fb4cb1a.js",
"0.4.12": "soljson-v0.4.12+commit.194ff033.js",
"0.4.11": "soljson-v0.4.11+commit.68ef5810.js",
"0.4.10": "soljson-v0.4.10+commit.f0d539ae.js",
"0.4.9": "soljson-v0.4.9+commit.364da425.js",
"0.4.8": "soljson-v0.4.8+commit.60cc1668.js",
"0.4.7": "soljson-v0.4.7+commit.822622cf.js",
"0.4.6": "soljson-v0.4.6+commit.2dabbdf0.js",
"0.4.5": "soljson-v0.4.5+commit.b318366e.js",
"0.4.4": "soljson-v0.4.4+commit.4633f3de.js",
"0.4.3": "soljson-v0.4.3+commit.2353da71.js",
"0.4.2": "soljson-v0.4.2+commit.af6afb04.js",
"0.4.1": "soljson-v0.4.1+commit.4fc6fc2c.js",
"0.4.0": "soljson-v0.4.0+commit.acd334c9.js",
"0.3.6": "soljson-v0.3.6+commit.3fc68da.js",
"0.3.5": "soljson-v0.3.5+commit.5f97274.js",
"0.3.4": "soljson-v0.3.4+commit.7dab890.js",
"0.3.3": "soljson-v0.3.3+commit.4dc1cb1.js",
"0.3.2": "soljson-v0.3.2+commit.81ae2a7.js",
"0.3.1": "soljson-v0.3.1+commit.c492d9b.js",
"0.3.0": "soljson-v0.3.0+commit.11d6736.js",
"0.2.2": "soljson-v0.2.2+commit.ef92f56.js",
"0.2.1": "soljson-v0.2.1+commit.91a6b35.js",
"0.2.0": "soljson-v0.2.0+commit.4dc2445.js",
"0.1.7": "soljson-v0.1.7+commit.b4e666c.js",
"0.1.6": "soljson-v0.1.6+commit.d41f8b7.js",
"0.1.5": "soljson-v0.1.5+commit.23865e3.js",
"0.1.4": "soljson-v0.1.4+commit.5f6c3cd.js",
"0.1.3": "soljson-v0.1.3+commit.28f561.js",
"0.1.2": "soljson-v0.1.2+commit.d0d36e3.js",
"0.1.1": "soljson-v0.1.1+commit.6ff4cd6.js"
},
 "latestRelease": "0.4.16"
}

¡Espero eso ayude! ¡Salud!