Diferencia de comportamiento entre Metamask y conexión directa a testrpc

Supongo que hay una respuesta obvia a esta pregunta, pero me estoy perdiendo completamente el punto. Tengo un contrato muy simple con 2 funciones: un definidor que cambia un montón de campos y un captador constante que devuelve esos campos. Y tengo una aplicación javascript que interactúa con ese contrato usando truffle-contract. Detrás de escena, mi contrato se implementa en testrpc. Cuando envío un formulario, llamo a mi setter y en el bloque luego, llamo a mi getter para actualizar la página. Supongo que, como se dice en el documento, el bloque entonces solo se ejecuta una vez que se ha extraído la transacción. Ahora, cuando ejecuto mi aplicación en un navegador con Metamask deshabilitado, conectándome directamente a mi nodo con web3, todo funciona sin problemas, no es necesario actualizar la página para ver el resultado una vez que se ha enviado la transacción. Pero con Metamask, una vez que hago clic en enviar, la llamada al getter no recupera nada, y tengo que volver a cargar la página y activar el getter nuevamente para obtener datos. ¿Es por un problema en el comportamiento de testrpc? ¿Eso le suena familiar a alguien?

Aquí está el contrato:

pragma solidity ^0.4.11;

contract ChainList {
    // State variables
    address seller;
    string name;
    string description;
    uint256 price;

    // sell an article
    function sellArticle(string _name, string _description, uint256 _price) public {
        seller = msg.sender;
        name = _name;
        description = _description;
        price = _price;
    }

    // get the article
    function getArticle() public constant returns (
        address _seller,
        string _name,
        string _description,
        uint256 _price) {
        return(seller, name, description, price);
    }
}

Y aquí está el código JS que lo llama:

App.contracts.ChainList.deployed().then(function(instance) {
      return instance.sellArticle(_article_name, _description, _price, {
        from: App.account,
        gas: 500000
      });
    }).then(function(result) {
      console.log("reloading articles");
      console.log("result:", result);
      App.reloadArticles();
    }).catch(function(err) {
      console.error(err);
    });

Respuestas (2)

si intentas algo como esto en javascript? (por variable de estado)

contract.statevariable(function(err, result) {
    $("#htmlelement").html(result);
});

Podría ser que su MetaMask no esté conectado a su instancia de TestRPC. Cuando abra MetaMask, deberá hacer clic en el "menú del proveedor" de la parte superior izquierda que dice "Red principal de Ethereum" y seleccionar "Localhost 8545", o si configuró TestRPC de manera diferente, "RPC personalizado".

No, no, te garantizo que MetaMask se está conectando a mi testrpc. Lo cual se confirma cuando vuelvo a cargar la página y veo la información correcta.