Ether.Camp web3 js interactúa con el contrato: ¿qué estoy haciendo mal?

Tengo un contrato de trabajo que hice en ether.camp con solidity, funciona según lo deseado a través de la interfaz de contrato IDE y ahora estoy tratando de vincularlo a una GUI html con web3.

Con este fin, he estado siguiendo una serie de tutoriales, pero por lo que puedo ver, ¿lo que estoy haciendo debería funcionar pero parece que no se está conectando con el contrato?

HTML:

<form>
   <button id="call"  type="submit">Call</button>
</form>
<script src="https://code.jquery.com/jquery-2.2.1.min.js"></script>
<script src="dist/app.js"></script>

aplicación.js

var async = require('async');
var Web3 = require('web3');
var ethTx = require('ethereumjs-tx');
var SolidityFunction = require('web3/lib/web3/function');

var abi = [{
    "name": "removeElement(address)",
    "type": "function",
    "inputs": [
    {
        "name": "key",
        "type": "address"
    }
    ]
}];

var sandboxId = '<my sandbox id>';
var url = 'https://<my user>.by.ether.camp:8555/sandbox/' + sandboxId;
var web3 = new Web3(new Web3.providers.HttpProvider(url));

web3.eth.defaultAccount = '0xdedb49385ad5b94a16f236a6890cf9e0b1e30392';

$( "button" ).click(function() {
    alert("button was clicked"); //just checking the jquery was working 
    var contract = web3.eth.contract(abi).at('0x17956ba5f4291844bc25aedb27e69bc11b5bda39'); //The contract address as per the ethercamp IDE
    contract.call().removeElement("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba");
});

La removeElement(address key)función en el contrato funciona absolutamente bien desde el IDE. ¿Sospecho que el código anterior en realidad no está 'conectando' al contrato? Ojalá pudiera ser más detallado, pero no estoy seguro de qué es lo que no funciona aquí.

¡Gracias!

contract.call().removeElement("0x2ad...");me parece extraño Estoy más acostumbrado a ver contract.removeElement.call("0x2ad...");o contract.removeElement("0x2ad...");.
Lo intentaré sin call()- reposicionarlo todavía parece no hacer nada :(
Quitar call()no parece funcionar. Recibo la alertboxmulta que muestra que se activa el clic del botón, pero no sucede nada con el contrato. Hacer exactamente lo mismo removeElementen el IDE funciona, pero no desde web3
Abra la consola de su navegador, escriba var contract = web3.eth.contract(abi).at('0x179...');luego contract.removeElement()y vea lo que sale.
Está bien, lo entiendo ReferenceError: web3 is not defined, pero podemos ver arriba que soy.
Me sorprende cómo llamas a NodeJS var Web3 = require('web3');en el navegador.
¿Cómo lograrías normalmente lo que estoy tratando de hacer? ¿Tiene un enlace a las mejores prácticas? Muchas gracias
Obtenga el archivo web3.js de github.com/ethereum/wiki/wiki/JavaScript-API e inclúyalo como un script en su html.
¿Ves algún mensaje de error en la consola del navegador? Cuando hace clic en el botón, ¿ve la transacción en el cuadro de diálogo de transacciones del IDE? El código está construido por browserify con gulp, es por eso que usa CommonJS require. Si desea utilizar web3 desde la consola, agreguewindow.web3 = web3;
Hola Alex, no aparece nada en el cuadro de diálogo de transacciones cuando trato de interactuar con el contrato usando el botón. (Modifiqué el código como se muestra a continuación eliminando call() ). Hay 1 error en la consola cuando hago clic en el botón y después del cuadro de alerta. crítico o no?TypeError: json.outputs is undefined [313]</SolidityFunction() app.js:30314 [307]</addFunctionsToContract/<() app.js:29204 map() self-hosted [307]</addFunctionsToContract() app.js:29201 [307]</ContractFactory.prototype.at() app.js:29400 [226]</<() app.js:23346 n.event.dispatch() jquery-2.2.1.min.js:3 n.event.add/r.handle()
¿Ese error JSON sugiere un abi malformado?

Respuestas (1)

Quería pedir detalles, pero no puedo publicar comentarios.

  1. Debería sercontract.removeElement("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")
  2. ¿Ves algún mensaje de error en la consola del navegador?
  3. Cuando hace clic en el botón, ¿ve la transacción en el cuadro de diálogo de transacciones del IDE?
  4. El código está construido por browserify con gulp, es por eso que usa CommonJS require. Si desea utilizar web3 desde la consola, agreguewindow.web3 = web3;
He votado a favor y ahora tienes suficiente reputación para publicar comentarios. Comience a publicar comentarios y luego edítelos para que sea una respuesta completa y válida . Gracias
@eth gracias! Lo cambiaré cuando tenga más detalles.