Ich habe ein web3js-Skript auf einer WordPress-Website erstellt, aber wenn ich den folgenden Code ausführe, erhalte ich eine ungültige JSON-RPC-Antwort.
var Web3 = require("web3");
var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider("https://ropsten.infura.io/xxxxxxxxxxx"));
var accounts = web3.eth.accounts;
var abi=[{"constant":false,"inputs":[{"name":"document","type":"string"},{"name":"timestamp","type":"uint256"}],"name":"notarize2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"document","type":"string"}],"name":"checkDocument","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"proof","type":"bytes32"},{"name":"timestamp","type":"uint256"}],"name":"storeProof","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"source","type":"string"}],"name":"stringToBytes32","outputs":[{"name":"result","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"proof","type":"bytes32"}],"name":"hasProof","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}];
web3.eth.defaultAccount="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var poe = web3.eth.contract(abi).at("YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY");
console.log(poe.address);
result="test";
var today = new Date();
var todayI = today.getFullYear()*10000+ (today.getMonth()+1)*100+today.getDate();
console.log(todayI);
poe.notarize2(result,todayI,{gas:2000000});
Das Setup funktioniert perfekt über testrpc (localhost) und über Remix / Metamask konnte ich überprüfen, ob der Vertrag korrekt auf Ropsten bereitgestellt wird und einwandfrei funktioniert.
Irgendwelche Ideen? das ist das erste Mal, dass ich das versuche.
Versuchen Sie stattdessen, das Konto auf eine Zeichenfolgenadresse einzustellen. Als Smarx behandeln öffentliche Knoten wie Infura keine privaten Methoden wie Konten. Auch bei Verwendung von Metamask wird dieses Konto gesetzt sowie web.accounts[0]
Ich bin mir nicht sicher, ob dies Ihr einziges Problem ist, aber Sie haben kein Konto angegeben, von dem aus Sie diese Transaktion durchführen möchten. Infura kann als öffentlicher Knoten die privaten Schlüssel von niemandem speichern und kennt daher keine Konten.
Wenn Sie möchten, dass der Betrachter der Seite die Transaktion durchführt, müssen Sie so etwas wie MetaMask verwenden, anstatt sich direkt mit einem Knoten zu verbinden.
Wenn Sie die Transaktion irgendwie mit Ihrem eigenen Konto durchführen möchten, müsste dies serverseitig geschehen, da Sie den Besuchern Ihrer Website keinen Zugriff auf Ihren privaten Schlüssel gewähren können.
https://programtheblockchain.com/posts/2017/12/13/building-decentralized-apps-with-ethereum-and-javascript/ könnte hilfreich sein, insbesondere der Abschnitt „Connecting to a Node“, der die Rolle von MetaMask erklärt.
Johan De Coster
Benutzer19510
Johan De Coster
Benutzer19510