192.168.2.254 のローカル サーバーで実行するフル ノードをセットアップしました。基本的にブロックチェーン上の新しいヘッドをサブスクライブする単純なスクリプトを作成しようとしています。
const { ApiPromise, WsProvider } = require('@polkadot/api');
async function main () {
const wsProvider = new WsProvider('wss://192.168.2.254:9944');
const api = await ApiPromise.create({ provider: wsProvider });
let count = 0;
const unsubscribe = await api.rpc.chain.subscribeNewHeads((header) => {
console.log(`Chain is at block: #${header.number}`);
if (++count === 256) {
unsubscribe();
process.exit(0);
}
});
}
main().catch(console.error);
サーバーでは、Polkadot wiki で提案されているように、自己署名の ssl 証明書を使用して nginx もセットアップしました。ブロック構成は次のとおりです。
server {
server_name 192.168.2.254
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
proxy_pass http://localhost:9944;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_session_cache shared:cache_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";
ssl_dhparam /etc/ssl/certs/dhparam.pem;
}
デフォルトでプロバイダーを構成せずに (ws://127.0.0.1:9944 を使用します)、サーバー上でスクリプトを直接実行しても問題はありません。しかし、ローカル マシンで wss://192.168.2.254:9944 を指すように実行すると、出力は connection failed with code 1006です。
ノード listenToBlock.js ─╯</p>
2020-09-10 14:19:29 API-WS: disconnected from ws://192.168.2.254:9944 code: '1006' reason: 'connection failed'
_Event {
type: 'error',
isTrusted: false,
_yaeti: true,
target:
W3CWebSocket {
_listeners: {},
addEventListener: [Function: _addEventListener],
removeEventListener: [Function: _removeEventListener],
dispatchEvent: [Function: _dispatchEvent],
_url: 'ws://192.168.2.254:9944',
_readyState: 3,
_protocol: undefined,
_extensions: '',
_bufferedAmount: 0,
_binaryType: 'arraybuffer',
_connection: undefined,
_client:
WebSocketClient {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
config: [Object],
_req: null,
protocols: [],
origin: undefined,
url: [Url],
secure: false,
base64nonce: 'cUJFFas2Ec3aN5YlHSxehg==' },
onclose: [Function: value],
onerror: [Function: value],
onmessage: [Function: value],
onopen: [Function: value] },
cancelable: true,
stopImmediatePropagation: [Function] }
2020-09-10 14:19:30 API-WS: disconnected from ws://192.168.2.254:9944 code: '1006' reason: 'connection failed'
2020-09-10 14:19:31 API-WS: disconnected from ws://192.168.2.254:9944 code: '1006' reason: 'connection failed'
また、ブラウザで未検証の証明書を受け入れた後、開発エンドポイントを wss://192.168.2.254 に設定してhttps://polkadot.js.org/apps/#/explorerを使用しようとしましたが、成功しました。
私の最善の推測では、ローカル マシン上のスクリプトからの接続も未検証の証明書を受け入れる必要がありますが、それを支援するドキュメントが見つかりません。あなたからの助けに感謝します!