Contrato inteligente de solidez que interactúa con el contrato inteligente implementado

A continuación se muestran los pasos (tome nota, no hay problemas cuando pruebo esto en remix, funciona absolutamente bien)

  1. Dos contratos inteligentes, Usermapping.sol y CoffeeNetworking.sol
    1. en trufa "2_deploy_contract.js" habilite Usermapping.sol para implementar el contrato Usermapping.sol
    2. Luego obtenga la dirección del Usermapping.sol del contrato implementado.
    3. Vaya a etherscan y convierta la dirección a mayúsculas (si no hago este paso, el compilador de trufas arroja un error en la dirección de suma de verificación no válida)
    4. Actualice la dirección recién convertida a CoffeeNetworking.sol.
    5. Luego actualice el archivo de trufa "2_deploy_contract.js" para deshabilitar la configuración de implementación de Usermapping.sol y actualice con CoffeeNetowking.sol.
    6. Luego, finalmente, migre la trufa para CoffeeNetworking.sol, sin problemas en la implementación.
  2. Para interacción, truffle console --network dev
  3. Cuando ejecuto la siguiente función en la consola de trufas, la transacción se realiza,CoffeeNetworking.at('0xfd95F4AF776ba4F0E6D13fEc18763cA59336494c').then(function(instance){ return instance.addValue(25)}).then(function(result){ console.log("Result", result) })
  4. Para obtener el valor establecido de la función anterior, ejecuto la función a continuación, pero no pude ver el valor del resultado 25. (No hay problema si uso directamente Usermapping.at (usermappingaddress) para ejecutar la misma funciónCoffeeNetworking.at('0xfd95F4AF776ba4F0E6D13fEc18763cA59336494c').then(function(instance){ return instance.getValue()}).then(function(result){ console.log("Result", result) })

//Asignación de usuarios.sol

pragma solidity ^0.4.23;
        contract Usermapping {
            uint256 public value;
            bytes32 public name;
            function addValue(uint a) public returns (bool)
            {
                value = a;
                return true;
            }
            function getValue() public view returns(uint256)
            {
                return value;
            }
            function setName(bytes32 nameSet) public returns(bool){
                name = nameSet;
                return true;
            }
             function getName() public view returns(bytes32){
                return name;
            }
        }

        var B = artifacts.require("./Usermapping.sol");
          module.exports = function(deployer){
        deployer.deploy(B)
       }

//CoffeeNetowkring.sol

pragma solidity ^0.4.23;

contract CoffeeNetworking{ 
    Usermapping u  = Usermapping(0x9B3a12cF7D8560DCd3d5D148cDCBCb9E1617D06F); 
    uint256 public version =1;
    // address add = 0x9B3a12cF7D8560DCd3d5D148cDCBCb9E1617D06F;  

    constructor () public {
    //   u = Usermapping(0xE1D685Fb942903986A9639da688d62E463BFC0DB);  
    }

    function addValue(uint a) public returns (bool){
        // Usermapping u = Usermapping(add);
        return u.addValue(a);
    }

    function getValue() public view returns (uint256){
        // Usermapping u = Usermapping(add);
        return u.getValue();
    }

    function setName(bytes32 name) public returns(bool){
        // Usermapping u = Usermapping(add);
        return u.setName(name);
    }

     function getName() public view returns(bytes32){
        // Usermapping u = Usermapping(add);
        return u.getName();
    }

}

contract Usermapping {
    uint256 public value;
    bytes32 public name;
    function addValue(uint a) public returns (bool);
    function getValue() public view returns(uint256);
    function setName(bytes32 nameSet) public returns(bool);
    function getName() public view returns(bytes32);
}

Respuestas (1)

gethestá devolviendo hash de transacción y remixestá devolviendo valor. Esta es una diferencia fundamental en el comportamiento de gethy remix. Las transacciones no devuelven un valor de contrato al front-end porque las transacciones no se extraen de inmediato ni se incluyen en la cadena de bloques. Para obtener valores de una función, debe usar eventos de solidez o debe usar llamadas en Ethereum.

Consulte este blog para comprender más acerca de las llamadas y transacciones en solidez.

Consulte este blog para comprender más acerca de los eventos de solidez.