Я понимаю, что нам нужна мнемоника, поскольку мы использовали ее при развертывании контракта с трюфелем, чтобы иметь возможность отправлять эфир с закрытых ключей нашей учетной записи 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: ""
я думаю, что она возвращает обещание, которое я не могу использовать. Мне нужна помощь! и если есть альтернативные способы сделать то же самое, я рад узнать
Вам не нужно условие web3, потому что никто не может внедрить web3 в ваше приложение nodejs.
const web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/TOKEN"));
Похоже, что URL-адрес неверен, на основании ошибки убедитесь, что вы используете правильный URL-адрес.