contratos indefinidos. nombre del contrato después de compilar con solc

Después de compilar un contrato inteligente con solc. Estoy enfrentando algunos problemas y me encantaría recibir algunos consejos para la depuración/solución de problemas.

Descripción

    $ node
    > var solc = require("solc")  
    > var src = `contract yoThere {
        string public msg;
        function yoThere() {
          msg = "Hey lol";
        }

        function greet() constant returns(string) {
          return msg;
        }
     }
     `

     > var comp = solc.compile(src)
  • Consultar contratos

    > comp.contracts.yoThere  
    undefined
    

Aunque, si lo intento, comp.contractsdevuelve todo el contrato. Lo que me gustaría hacer es comp.contracts.yoThere.bytecodepor ejemplo.

No sé si los dos puntos antes del nombre :yoThereson una indicación de algo que hice mal:

    > comp.contracts
    { ':yoThere': 
      { assembly: { '.code': [Array], '.data': [Object] },
      // ...

Cualquier ayuda o sugerencia en la dirección correcta sería muy apreciada.

comp.contracts[":yoThere"].bytecodedevuelve lo que estoy buscando. No estoy seguro de por qué :se agrega delante del nombre del contrato en la compilación.

Respuestas (1)

De acuerdo con el problema 83 de github para solc-js, "si compila desde algo que no es un archivo, el compilador usa el nombre de archivo vacío y agrega un nombre de :archivo y nombre de contrato separados".

Esto parece haber sido introducido desde solc 0.4.9.

Dado que se agregan los dos puntos (como se indica en el comentario a la pregunta original), comp.contracts[":yoThere"].bytecodeproporciona el resultado deseado. Si no desea agregar los dos puntos , compile desde un archivo.