¿Cómo usar infura con web3 para hablar con el nodo ropsten remoto?

Entiendo que necesitamos mnemotécnicos, ya que lo usamos al implementar el contrato con truffle para poder enviar éter desde las claves privadas de nuestra cuenta ropsten. No pude encontrar una manera de usar lo mismo en mi archivo server.js para llamar a funciones de contrato. Quiero crear una aplicación web que no use un nodo local ni metamáscara y todas las transacciones sean realizadas por mi cuenta. Estoy compartiendo mi código que derivé de varias fuentes, pero no sé por qué no se ejecuta:

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
    })

Error al que me enfrento: UnhandledPromiseRejectionWarning: Error: Invalid JSON RPC response: ""creo que devuelve una promesa que no puedo usar. ¡Necesito ayuda! y si hay formas alternativas de hacer lo mismo, me emociona saber

Respuestas (1)

No necesita la condición web3, porque nadie puede inyectar web3 en su aplicación nodejs.

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

Parece que la URL no es correcta, según el error, asegúrese de usar la URL correcta.