¿Cómo diseñar una GUI/página web que pueda interactuar con mi contrato implementado?

En este momento estoy usando MyEthereumWallet, testrpc y MetaMask para interactuar con mi contrato implementado en testrpc. Por lo tanto, estoy usando solo la pestaña "contrato" de "MyEthereumWallet", pero me gustaría cambiar el fondo, etc., para que se vea más personalizado.

Pregunta 1 : ¿Cómo puedo diseñar una GUI, como MyEthereumWallet, que me permita interactuar con mi contrato implementado?

¿Qué hay de usar contract.io para ese propósito? Por ejemplo, este vínculo, conteract.io/c/86198dcd06?function=getAddr&AddrName=propietario , iniciará automáticamente la getAddrfunción con "propietario" como argumento de la función que se define como AddrName.

Respuestas (3)

Deberá crear una página HTML que use la web3biblioteca para interactuar con su navegador habilitado para Ethereum (MetaMask, Mist, etc.).

Primero incluya web3.jso web3.min.jsen su HTML, luego podrá llamar a funciones de JavaScript que interactúan con cuentas y contratos, verificar el estado de sincronización y bloquear números, etc.

<script src="web3.min.js"></script>

Aquí hay un ejemplo de cómo instanciar una web3instancia:

if (typeof web3 !== 'undefined') {
  web3 = new Web3(web3.currentProvider);
} else {
  // browser is not web3-enabled
}

Entonces puedes usarlo así:

web3.eth.getBlock(48, function(error, result){
    if(!error)
        console.log(result)
    else
        console.error(error);
})

Aquí está la referencia de la API: https://github.com/ethereum/wiki/wiki/JavaScript-API

Aviso: la referencia de la API tiene muchos ejemplos de llamadas sincrónicas, pero web3las ha dejado obsoletas en muchos casos. La mayoría de las llamadas a funciones necesitarán especificar devoluciones de llamada.

gracias por la respuesta. Mi pregunta es: ¿dónde pones el código anterior? en el archivo HTML?
@AdrianAd Sí, todo va en el archivo HTML (o un archivo js vinculado al archivo HTML).
Intente incluir información esencial en la publicación y evite las respuestas de solo enlace. Ver meta.stackexchange.com/questions/8231/…

web3.js es lo que necesita. Es bastante simple diseñar una interfaz web que interactúe con su contrato usando web3. Tienes que hacer las instalaciones/importaciones necesarias que puedes ver en su repositorio de github.

Aquí hay una API simple escrita en el nodo que verifica el equilibrio de un token estándar erc-20.

var web3 = require('web3');
var options = { 
  host: ' http://localhost:8545',
  ipc : true,
  personal: true, 
  admin: false,
  debug: false
};
var contractABI= /*abi of contract */
var contractAddress = /* address of contract */
exports.checkCoinBalance = function(req, res) {
    var accountAddr = req.body.accountAddress;
    if(isAddress(accountAddr)==false){
        console.log("This address is not valid");
        return res.json({"success":"false","data":[{"message":"Inavlid address"}]});
    }
    var coinBalance=contract.balanceOf(accountAddr).toNumber();                 
    console.log(coinBalance);
    return res.json({"success":"true","data":[{balance: coinBalance}]});
    //return "success";
}

Espero que esto haga que las cosas sean fáciles de entender. He diseñado una interfaz web para interactuar con mi token estándar erc-20. Puede echar un vistazo al código fuente completo prashantprabhakar/ethereum-web-wallet . Espero que esto ayude. Editado:

Código de código de front-end:

$scope.checkCoinBalance = function(accountAddr) {
    var data = JSON.stringify({
        accountAddress: accountAddr
    });
    var config = {
        headers: {
            'Content-Type': 'application/json'
        }
    };
    $http.post('http://localhost:7000/eth/checkCoinBalance', data, config)
        .then(function successCallback(resp) {
                if (resp.data.success == 'true') {
                    console.log(resp.data.data[0].balance);
                    $scope.coinBalance = resp.data.data[0].balance;
                }
            },
            function failureCallback() {
                console.log('failure');
            });
}

Puede llamar a esto checkCoinBalance()con un clic de botón más o menos.

Gracias por la respuesta. Mi pregunta es ¿dónde ponemos el código anterior y cómo interactúa el archivo HTML con el código anterior?
Si tiene idea de nodo/angular, puede mirar el código que compartí. Aquí, las api están escritas en el nodo y las llamé en angularJs. Si desea la versión más simple, puede llamar a esta función con un clic de botón.