Я знаю, что этот вопрос задавался так много раз. Но я не смог решить свою проблему.
Я пытаюсь подключиться к удаленному узлу, расположенному на сервере.
На моем сервере работает geth на rinkeby, и RPC должен быть включен благодаря этой команде:
admin.startRPC("0.0.0.0", 8545, "*", "web3,db,net,eth")
В моем коде (NodeJS) у меня есть следующее:
function getNode(callback) {
var web3;
console.log(web3);
web3 = new Web3(new Web3.providers.HttpProvider("https://X.X.X.X:8545"));
console.log(web3);
if (web3 != null) {
console.log("GOT WEB3");
callback(null, web3);
} else {
console.log("did not get web3");
callback("ERROR", web3);
}
}
Переменная web3 не определена в первом журнале и возвращает объект после того, как я получаю поставщика HTTP.
Однако у меня есть эта ошибка в моей консоли:
Ошибка: неверный ответ JSON RPC: "" в Object.InvalidResponse (D:\node_modules\web3\lib\web3\errors.js:38:16) в XMLHttpRequest.request.onreadystatechange (D:\node_modules\web3\lib\web3 \httpprovider.js:119:24)
Что я сделал не так?
Изменить: TCP и UDP открыты на порту 8545.
ОБНОВЛЕНИЕ 1
Текущая команда для запуска geth:
geth --rinkeby console -rpc -rpcaddr "0.0.0.0" --rpccorsdomain "*"
Текущий код NodeJS:
function getNode(callback) {
var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider("https://server_external_ip:8545/"), function(error, result) {
if (error) {
console.log(error);
callback("ERROR", web3);
} else {
console.log(web3.isConnected());
callback(null, web3);
}
});
}
Вот что мне дает netstat:
tcp6 0 0 :::8545 :::* LISTEN 3565/geth
Результат: serverless дает мне тайм-аут. Если тайм-аут не указан, он работает бесконечно, ничего не получая.
Вам нужно заставить geth прослушивать IP-адрес, с которого ваш сервер доступен извне:
admin.startRPC(<external ip address>, 8545, "*", "web3,db,net,eth")
Если вы укажете локальный хост, geth будет принимать только локальные соединения, т.е. соединения, исходящие с той же машины, но не с удаленной.
Error: listen tcp MY.IP.IS.HERE:8545: bind: cannot assign requested address
lsof -i TCP| fgrep LISTEN
(в Linux)?geth 2809 myname 33u IPv6 47912 0t0 TCP *:30303 (LISTEN)
Та же ошибка для случайных портовError: HTTP server already running on 0.0.0.0:8545
СКБюргель
Web3
васrequire
в коде?Итерация 122442