Как использовать infura с web3 для связи с удаленным узлом ropsten?

Я понимаю, что нам нужна мнемоника, поскольку мы использовали ее при развертывании контракта с трюфелем, чтобы иметь возможность отправлять эфир с закрытых ключей нашей учетной записи ropsten. Я не смог найти способ использовать то же самое в моем файле server.js для вызова функций контракта. Я хочу создать веб-приложение, которое не использует ни локальный узел, ни метамаску, и все транзакции выполняются моей учетной записью. Я делюсь своим кодом, который я получил из разных источников, но не знаю, почему он не выполняется:

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

Ошибка, с которой я столкнулся: UnhandledPromiseRejectionWarning: Error: Invalid JSON RPC response: ""я думаю, что она возвращает обещание, которое я не могу использовать. Мне нужна помощь! и если есть альтернативные способы сделать то же самое, я рад узнать

Ответы (1)

Вам не нужно условие web3, потому что никто не может внедрить web3 в ваше приложение nodejs.

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

Похоже, что URL-адрес неверен, на основании ошибки убедитесь, что вы используете правильный URL-адрес.