En Node.js conectado a Geth: solc.compile antepone un ':' adicional antes de contractName

Estoy probando el siguiente script en Node.js mientras ejecuto un nodo conectado a Rinkeby Testnet (desde https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethcontract ):

const fs = require("fs");
const solc = require('solc')

let source = fs.readFileSync('nameContract.sol', 'utf8');
let compiledContract = solc.compile(source, 1);
let abi = compiledContract.contracts['nameContract'].interface;
let bytecode = compiledContract.contracts['nameContract'].bytecode;
let gasEstimate = web3.eth.estimateGas({data: bytecode});
let MyContract = web3.eth.contract(JSON.parse(abi));

Sin embargo, este código no funciona en mi computadora: cuando inicio sesión, compiledContractpuedo ver que la clave en el mapeo es :nameContracty no nameContract.

Cuando reemplazo en el código nameContractpor :nameContract, funciona. Revisé mi archivo de Solidity y no hay errores de tipeo.

¿Tienes alguna idea de por qué sucede esto? Estoy usando Git BASH en Windows10.

Respuestas (1)

Sé que esto llega un poco tarde, pero no es un error, es una característica, consulte El nombre del contrato comienza con dos puntos en la salida compilada :

  • Informe:

solc.compile(exampleContract)devuelve lo siguiente. Sería bueno eliminar los dos puntos antes del nombre del contrato.

{
  "contracts": {
     ":NameOfContract": {...}
  }
}
  • Resolución:

Para que las referencias a los contratos no sean ambiguas en la salida, las versiones más recientes del compilador anteponen cada contrato con :. Esto se ampliará aún más en la próxima versión, donde se devolverá un objeto json adecuado, así que esté atento a una "solución".

  • Nota:

Cierro esto porque no es un "error", solo funciona el compilador.