API in Node.js für Solidity Smart Contract

Wie erstelle ich eine API für Ethereum Smart Contracts in Node.js? Kann jemand gute Beispiele schicken? Ist es überhaupt eine Standardmethode, API in Node.js zu erstellen, damit es mit jeder Schnittstelle interagieren kann, da die meisten Beispiele, die ich finden kann, nur vom Frontend aus funktionieren? Ich habe den Code mit web3 erstellt, zeigt die erwartete Ausgabe, schreibt aber nichts in einen neuen Block, wie es bei Truffle der Fall ist. Mein Code-

var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
console.log("Talking with a geth server", web3.version.api);

function test(){
  var sourceCode = fs.readFileSync('contracts/digitalToken.sol','utf8')
  var compiled = solc.compile(sourceCode);
  console.log(compiled.contracts[":digitalToken"]);
  var abiArray = compiled.contracts[":digitalToken"].interface;
  abiArray = JSON.parse(abiArray);
  var MyContract = web3.eth.contract(abiArray);
  var address = "0x1f81b5fa31d049b70556628cc01f22d362c41084";
  var contractInstance = MyContract.at(address);
  console.log(contractInstance);
  var value=executeAddvid(contractInstance)
      console.log({message: "Success",value:value});
      console.log('after passing--');
      console.log({message: "Success",value:value});
  var value1=readVidByUser(contractInstance);
    console.log({message: "Success",value:value1});
      console.log('after passing--');
      console.log({message: "Success",value:value1});


}

function executeAddvid(contractInstance){
  record = contractInstance;
  return record.addVid.call('0x0000000000000000000000000000000000000124',5,"ronaldo","0xc9f5a0572d95d5dea1331edcc192dacef51ecbb7",1000000000000000000);
}

function readVidByUser(contractInstance){
  record = contractInstance;
  return record.readVidByUser.call('0x0000000000000000000000000000000000000124','0x1f81b5fa31d049b70556628cc01f22d362c41084');
}


test();

Antworten (3)

Wir haben vor kurzem APIs in node.js erstellt. Sie können sich dieses Repo als Referenz ansehen -

https://github.com/Imaginea/lms/blob/master/server/routes.js

Die Benutzeroberfläche kommuniziert mit node.js-Middleware und dann kommuniziert Middleware mit dem Ethereum-Knoten.

Grundsätzlich müssten Sie die Web3JS-Bibliothek verwenden, um es zu implementieren. Bitte überprüfen Sie den Code für weitere Details.

Hoffe das hilft.

Hey, ich habe mir Ihren Code angesehen, danke dafür, es ist ziemlich genau das, was ich tue ... Ich verwende das Web3-Modul und meine Smart-Contract-Transaktionen werden ausgeführt und geben die erwartete Ausgabe zurück, aber das Problem ist, dass, wenn ich sie zurückfrage oder weiter mache Funktionsausführungen auf der Grundlage vorheriger ausführen, verhält es sich so, als ob eine vorherige Ausführung der Funktionalität nie stattgefunden hätte. Was könnte der Grund sein? Es ist, als ob die Transaktionen in der Blockchain nicht festgeschrieben werden.
Stellen Sie den Smart Contract mit Hilfe von Truffle bereit oder stellen Sie den Vertrag vollständig mit web3 bereit? Wenn Sie den von mir freigegebenen Code sehen, haben wir den Vertrag nicht mit web3 bereitgestellt, sondern mit Truffle bereitgestellt und die bereitgestellte Vertragsadresse in einer Datei gespeichert. Geht es dir genauso?
DId wie Sie, separat bereitgestellt und dann die resultierende Vertragsadresse als fest codierten Wert in der Node-App verwenden.
Dann kann ich das Problem weiter kommentieren, wenn ich in den Code schaue. Wäre toll, wenn Sie die Frage mit einem Teil Ihres Codes aktualisieren könnten.
Dies sind meine Protokolle für test-rpc, als ich Ausführungen über Trüffel durchführte, gab es einen zusätzlichen Block als Ergebnis mit Transaktions-Hash. Aber wenn ich dasselbe mit node mache, gibt es mir nur diese Aufrufe als Protokoll, erstellt aber keinen neuen Block.
Transaction: 0x10de5b2138a10fbde58073a88d795cf21426228f3e6356f9a9ac59e9a07c3578 Gas usage: 57172 Block Number: 15 Block Time: Mon Jul 03 2017 13:28:43 GMT+0530 (IST) eth_getTransactionReceipt net_version eth_call net_version eth_call eth_call eth_call eth_call eth_call eth_call eth_call eth_call eth_call net_version eth_call eth_call eth_call eth_call eth_call eth_call net_version eth_accounts eth_getBalance
Frage aktualisiert.
Nachdem Sie sich den Code angesehen haben, würde ich Ihnen empfehlen, sich meinen Code noch einmal genau anzusehen und zu sehen, wie wir Trüffelartefakte direkt verwenden, um Vertrags-ABI zu erhalten.

Sehen Sie sich das web3 npm-Modul an. Alles ist da.

Ich verwende das web3-Modul und meine Smart-Contract-Transaktionen werden ausgeführt und geben die erwartete Ausgabe zurück, aber das Problem ist, dass, wenn ich sie zurückfrage oder weitere Funktionsausführungen auf der Grundlage vorheriger ausführe, es sich so verhält, als hätte die vorherige Ausführung der Funktionalität nie stattgefunden . Was könnte der Grund sein? Es ist, als ob die Transaktionen in der Blockchain nicht festgeschrieben werden.
Klingt nach einem Problem mit Ihrer Testkette. Was benutzt du dafür?
Wir verwenden das Test-RPC-Netzwerk, wir haben den Smart-Contract durch Trüffel überprüft. Hier ist der lustige Teil, wenn ich eine Ausführung durch Trüffel mache, wird sie festgeschrieben, und ich kann sehen, wie sich die Änderungen in der Nodejs-App widerspiegeln. Aber ich kann keine Funktionalität ausführen, die über nodejs selbst aufgerufen wird. Es gibt die erwartete Ausgabe, legt sich aber nicht fest.

Das Problem war, dass ich die .call-Funktion zum Aufrufen jeder Smartcontract-Funktion hinzugefügt habe, wenn sie nur für konstante Funktionen benötigt wird, die nur zum Lesen von Werten verwendet werden. Danke für die Unterstützung.