Análisis de interacción de un contrato a otro contrato

Intenté la interacción del contrato usando el siguiente código:

contract C2 { 
    function aFunction(uint aParameter) returns(uint) {
    return (10);
    }
}
contract C1 { 
    function call (uint aParameter) returns(uint){
        C2 c2 = new C2();
    return c2.aFunction(aParameter);
    }
}

Funcionó para mí. Luego cambié return c2.aFunction(aParameter);a return c2;Me devolvió una dirección (supongamos que c2_addr). Ejecuté eth.getCode(c2_addr);Simplemente devolvió "0x". Ahora tengo las siguientes preguntas:

  1. Acabo de llamar a la función "llamar" de C1 sin usar sendTransaction(). Entonces, cómo C2 c2 = new C2();se ejecuta la línea.
  2. El contrato C2 está extraído o no. En caso afirmativo, quién lo implementó cuando invoqué la función .call()y por qué no hay un código de bytes en la cadena de bloques con respecto a este contrato. Y si C2 no está minado, cómo es posible invocar su función.

Respuestas (1)

¿Que cliente estás usando?

reemplazando

return c2.aFunction(aParameter);

con

return c2;

en el contrato C1 no se compila ya que es un tipo de objeto devuelto por un método declarado para devolver enteros sin signo ( uint ).

A partir de ahora, puede devolver objetos solo dentro de las llamadas a funciones internas y no a un cliente remoto.

Editar:

He ejecutado el código. La "dirección" que está obteniendo no es una dirección, sino una conversión a bytes de la instancia del contrato c2 .

Estoy usando GETH. Cambié el tipo de retorno como "dirección" y lo verifiqué desde el navegador de solidez en línea, no hubo ningún error de compilación.
Adjunto la captura de pantalla en la pregunta. @Sebi
Ver editar. La dirección devuelta no pertenece a ningún contrato sino que es una secuencia de bytes de la instancia c2 del contrato.
¿El contrato C2 está minado o no? en caso negativo, ¿cómo están disponibles sus funciones? En caso afirmativo, ¿cuál es la dirección del contrato?
Ambos contratos están minados. Puede ver su dirección en el panel inferior derecho en el navegador solidity (por ejemplo: C1 en 0x692a70d2e424a56d2c6c27aa97d1a86395877b3a (memoria))
No está devolviendo un objeto de contrato c2 sino algunos bytes sin procesar.
Acabo de crear C1. No hay dirección con respecto a C2. Y también cómo puedo verlo en geth. Repito, ¿quién minó C2 y cuál es su dirección? @Sebi He agregado la pantalla restante.