Wie verwende ich infura mit web3, um mit einem entfernten Ropsten-Knoten zu sprechen?

Ich verstehe, dass wir eine Mnemonik brauchen, da wir sie bei der Bereitstellung von Verträgen mit Truffle verwendet haben, um Ether von unseren privaten Schlüsseln für das Ropsten-Konto senden zu können. Ich konnte keine Möglichkeit finden, dasselbe in meiner server.js-Datei zu verwenden, um Vertragsfunktionen aufzurufen. Ich möchte eine Webapp erstellen, die weder lokale Knoten noch Metamask verwendet und alle Transaktionen von meinem Konto durchgeführt werden. Ich teile meinen Code, den ich aus verschiedenen Quellen abgeleitet habe, weiß aber nicht, warum er nicht ausgeführt wird:

const express = require('express');
const Web3 = require('web3');
const fs = require('fs');

const app = express();
app.use(express.json());

console.log('server side code running');
app.listen(3000, () => {
    console.log('Listening on port 3000');
});

if (typeof web3 !== 'undefined') {
    web3 = new Web3(web3.currentProvider);
}
else {
    web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/<api key>"));
}

var contractabi = JSON.parse(fs.readFileSync('abi.json', 'utf8'));
var contractaddress = '0xb51adbdd256930bd6b4c613add6fcca31db49827';
var contract = new web3.eth.Contract(contractabi,contractaddress);

const privateKey = 'my private key';
const account = web3.eth.accounts.privateKeyToAccount('0x' + privateKey);
web3.eth.accounts.wallet.add(account);
web3.eth.defaultAccount = account.address;
contract.methods.set(7)
    .send({
        from: web3.eth.defaultAccount,
        gas: 2000000,
        gasPrice: 4000000000
    })

Fehler, dem ich gegenüberstehe: UnhandledPromiseRejectionWarning: Error: Invalid JSON RPC response: ""Ich glaube, es gibt ein Versprechen zurück, das ich nicht verwenden kann. Ich brauche Hilfe! und wenn es alternative Möglichkeiten gibt, dasselbe zu tun, bin ich gespannt, es zu wissen

Antworten (1)

Sie benötigen keine web3-Bedingung, da niemand web3 in Ihre nodejs-App einfügen kann.

const web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/TOKEN"));

Es sieht so aus, als ob die URL nicht korrekt ist. Stellen Sie basierend auf dem Fehler sicher, dass Sie die richtige URL verwenden.