Ether.Camp web3 js interagiert mit Vertrag - was mache ich falsch?

Ich habe einen Arbeitsvertrag, den ich in ether.camp solide gemacht habe, er funktioniert wie gewünscht über die IDE-Vertragsschnittstelle und jetzt versuche ich, ihn mit web3 in eine HTML-GUI einzubinden.

Zu diesem Zweck habe ich eine Reihe von Tutorials verfolgt, aber soweit ich sehen kann - sollte das, was ich tue, funktionieren, aber es sieht so aus, als wäre es nicht mit dem Vertrag verbunden?

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>

app.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");
});

Die removeElement(address key)Funktion im Vertrag funktioniert aus der IDE heraus absolut einwandfrei. Ich vermute, dass der obige Code nicht wirklich mit dem Vertrag "verbindet" ist? Ich wünschte, ich könnte detaillierter sein, aber ich bin mir nicht sicher, was hier nicht funktioniert

Danke dir!

contract.call().removeElement("0x2ad...");sieht für mich seltsam aus. Ich bin eher daran gewöhnt, contract.removeElement.call("0x2ad...");oder zu sehen contract.removeElement("0x2ad...");.
Ich werde es ohne versuchen call()- Neupositionierung scheint immer noch nichts zu tun :(
Entfernen call()scheint nicht zu funktionieren. Ich erhalte die alertboxStrafe, die zeigt, dass der Klick auf die Schaltfläche ausgelöst wird, aber dem Vertrag passiert nichts. Genauso removeElementfunktioniert es in der IDE - nur nicht von web3
Öffnen Sie Ihre Browserkonsole, geben Sie var contract = web3.eth.contract(abi).at('0x179...');dann ein contract.removeElement()und sehen Sie, was herauskommt.
Okay, ich verstehe, ReferenceError: web3 is not definedaber wir können oben sehen, dass ich es bin?
Ich bin überrascht, wie Sie einen NodeJS-Weg var Web3 = require('web3');im Browser aufrufen.
Wie würden Sie normalerweise erreichen, was ich zu tun versuche? Hast du einen Link zu Best Practices? Danke vielmals
Holen Sie sich die web3.js-Datei von github.com/ethereum/wiki/wiki/JavaScript-API und fügen Sie sie als Skript in Ihren HTML-Code ein.
Sehen Sie irgendwelche Fehlermeldungen in der Browserkonsole? Wenn Sie auf die Schaltfläche klicken, sehen Sie die Transaktion im Transaktionsdialog der IDE? Der Code wird von Browserify mit Gulp erstellt, deshalb verwendet es CommonJS require. Wenn Sie web3 von der Konsole aus verwenden möchten, fügen Sie hinzuwindow.web3 = web3;
Hallo Alex, im Transaktionsdialogfeld wird nichts angezeigt, wenn ich versuche, mit dem Vertrag über die Schaltfläche zu interagieren. (Ich habe den Code wie folgt geändert, indem ich call() entfernt habe). Es gibt 1 Fehler auf der Konsole, wenn ich auf die Schaltfläche und nach der Alertbox klicke. kritisch oder nicht?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()
Deutet dieser JSON-Fehler auf einen fehlerhaften abi hin?

Antworten (1)

Ich wollte nach Details fragen, aber ich kann keine Kommentare posten.

  1. Es sollte seincontract.removeElement("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")
  2. Sehen Sie irgendwelche Fehlermeldungen in der Browserkonsole?
  3. Wenn Sie auf die Schaltfläche klicken, sehen Sie die Transaktion im Transaktionsdialog der IDE?
  4. Der Code wird von Browserify mit Gulp erstellt, deshalb verwendet es CommonJS require. Wenn Sie web3 von der Konsole aus verwenden möchten, fügen Sie hinzuwindow.web3 = web3;
Ich habe positiv gestimmt und jetzt haben Sie genug Ansehen, um Kommentare zu posten. Bitte beginnen Sie mit dem Veröffentlichen von Kommentaren und bearbeiten Sie diese dann so, dass sie eine vollständige, gültige Antwort enthält . Vielen Dank
@eth danke! Ich werde es ändern, wenn ich mehr Details habe.