¿Cómo llamar al método get de un contrato de otro?

Quiero llamar a un método de un contrato de otro contrato. Ya leí este post: llamando a un contrato a otro método de contrato , pero no me funciona.

Cuando creo la persona que llama e intento ejecutar el método Set(), funciona perfectamente, pero si llamo a Get(), siempre devuelve '0'.

¿Alguien me puede ayudar?

Estos son mi código simple:

pragma solidity ^0.4.0;


contract callee{

    uint public x;

    constructor() public
    {
        x = 1;
    }

    function set (uint k) public
    {
        x = k;
    }

    function get () public view returns (uint)
    {
        return x;
    }

}

contract caller{

    callee c;

    constructor() public
    {
        c = new callee();
    }

    function get() public view returns (uint k)
    {
        return c.get();
    }

    function set(uint k) public
    {
        c.set(k);
    }

    function get_calle() public view returns (callee)
    {
        return c;
    }


}

Estoy usando Web3 Provider y Remix para probar.

He intentado llamar a get() desde el receptor de la llamada después de obtener su ubicación y devuelve el valor correcto, por lo que los métodos set() funcionan. ¿Por qué no puedo usar get() de la persona que llama?

invocación de métodos desde remix usando Web3

¡Gracias!

Respuestas (1)

El que calleecreaste no es con el que callerestá interactuando. Está creando uno nuevo.

Reemplazar

c = new callee();

con

c = callee(0xabcdef);

Pero en lugar de 0xabcdefponer en la dirección del calleecontrato desplegado.

Ese no es el punto. Quiero crear un nuevo destinatario y editar su estado. Simplemente implemento el contrato de la persona que llama que crea la persona que llama y luego ejecuto get después del conjunto. Como puede ver en la imagen, estoy trabajando en la misma persona a la que llama, pero get() de la persona que llama devuelve 0 mientras que get() de la persona que llama devuelve 10.
Ah entiendo, mi mal. Lo probé usando Remix, con Injected Web3 en Rinkeby y tuve el mismo problema. Podría setde callerpero solo obtuvo getun resultado preciso de callee. Pero cuando copié la dirección de caller, eliminé callery volví a abrir una instancia en esa dirección, getparece funcionar. ¿Obtienes el mismo resultado?
Lo intenté, pero siempre obtengo 0
Es extraño, puede ser un error con Remix porque, como dije, funciona para mí cuando reinicio la persona que llama y no veo ningún problema con su código de Solidity.
¡Está bien, gracias! ¿Qué debo probar?
Si es un problema con Remix, puede probar con un navegador diferente o ir a la pestaña de soporte y pedir ayuda allí.
Intenté usar solo geth (definiendo el ABI, extrayendo el contrato y llamando al método) pero el resultado siempre es 0. Si pruebo en JavaScript VM funciona perfectamente, ¿dónde puede estar el problema? Realmente necesito su ayuda por favor!