PageSourceSearch

https://elastos-docs.onrender.com/assets/js/87ed9a85.a49ba939.js

js elastos-docs.onrender.com collected 2026-10-03 11:41:42 UTC 10,696 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkelastos_docs=globalThis.webpackChunkelastos_docs||[]).push([[3532],{390(e,n,r){r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>x,frontMatter:()=>l,metadata:()=>s,toc:()=>o});const s=JSON.parse('{"id":"blockchain/nodes/ports","title":"Port Reference","description":"Complete port reference for all Elastos node components on MainNet and TestNet, with firewall configuration examples.","source":"@site/docs/blockchain/nodes/ports.md","sourceDirName":"blockchain/nodes","slug":"/blockchain/nodes/ports","permalink":"/blockchain/nodes/ports","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":7,"frontMatter":{"type":"how-to","sidebar_position":7,"title":"Port Reference","description":"Complete port reference for all Elastos node components on MainNet and TestNet, with firewall configuration examples.","chains":["all"],"keywords":["Elastos","World Computer","node","ports","networking","firewall","reference"],"image":"/img/og-blockchain.jpg"},"sidebar":"blockchainSidebar","previous":{"title":"Node Configuration Reference","permalink":"/blockchain/nodes/configuration"},"next":{"title":"Monitoring & Alerting","permalink":"/blockchain/nodes/monitoring"}}');var t=r(74848),d=r(28453);const l={type:"how-to",sidebar_position:7,title:"Port Reference",description:"Complete port reference for all Elastos node components on MainNet and TestNet, with firewall configuration examples.",chains:["all"],keywords:["Elastos","World Computer","node","ports","networking","firewall","reference"],image:"/img/og-blockchain.jpg"},i="Port Reference",c={},o=[{value:"MainNet Ports",id:"mainnet-ports",level:2},{value:"TestNet Ports",id:"testnet-ports",level:2},{value:"Firewall Rules",id:"firewall-rules",level:2},{value:"Port Purpose Reference",id:"port-purpose-reference",level:2}];function h(e){const n={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,d.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"port-reference",children:"Port Reference"})}),"\n",(0,t.jsx)(n.h2,{id:"mainnet-ports",children:"MainNet Ports"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Chain"}),(0,t.jsx)(n.th,{children:"Protocol"}),(0,t.jsx)(n.th,{children:"Port"}),(0,t.jsx)(n.th,{children:"Purpose"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"ELA"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20333"}),(0,t.jsx)(n.td,{children:"Node info (HttpInfoPort)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"ELA"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20334"}),(0,t.jsx)(n.td,{children:"REST API"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"ELA"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20335"}),(0,t.jsx)(n.td,{children:"WebSocket"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"ELA"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20336"}),(0,t.jsx)(n.td,{children:"JSON-RPC"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"ELA"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20338"}),(0,t.jsx)(n.td,{children:"P2P"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"ELA"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20339"}),(0,t.jsx)(n.td,{children:"BPoS consensus"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"ESC"}),(0,t.jsx)(n.td,{children:"UDP"}),(0,t.jsx)(n.td,{children:"20630"}),(0,t.jsx)(n.td,{children:"Bootnode discovery"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"ESC"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20632"}),(0,t.jsx)(n.td,{children:"Oracle RPC / WebSocket"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"ESC"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20636"}),(0,t.jsx)(n.td,{children:"JSON-RPC (HTTP)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"ESC"}),(0,t.jsx)(n.td,{children:"TCP+UDP"}),(0,t.jsx)(n.td,{children:"20638"}),(0,t.jsx)(n.td,{children:"P2P"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"ESC"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20639"}),(0,t.jsx)(n.td,{children:"PBFT consensus"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"EID"}),(0,t.jsx)(n.td,{children:"UDP"}),(0,t.jsx)(n.td,{children:"20640"}),(0,t.jsx)(n.td,{children:"Bootnode discovery"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"EID"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20642"}),(0,t.jsx)(n.td,{children:"Oracle RPC / WebSocket"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"EID"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20646"}),(0,t.jsx)(n.td,{children:"JSON-RPC (HTTP)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"EID"}),(0,t.jsx)(n.td,{children:"TCP+UDP"}),(0,t.jsx)(n.td,{children:"20648"}),(0,t.jsx)(n.td,{children:"P2P"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"EID"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20649"}),(0,t.jsx)(n.td,{children:"PBFT consensus"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"PG"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20672"}),(0,t.jsx)(n.td,{children:"Oracle RPC / WebSocket"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"PG"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20676"}),(0,t.jsx)(n.td,{children:"JSON-RPC (HTTP)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"PG"}),(0,t.jsx)(n.td,{children:"TCP+UDP"}),(0,t.jsx)(n.td,{children:"20678"}),(0,t.jsx)(n.td,{children:"P2P"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"PG"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20679"}),(0,t.jsx)(n.td,{children:"PBFT consensus"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Arbiter"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20536"}),(0,t.jsx)(n.td,{children:"JSON-RPC"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Arbiter"}),(0,t.jsx)(n.td,{children:"TCP"}),(0,t.jsx)(n.td,{children:"20538"}),(0,t.jsx)(n.td,{children:"REST API / P2P"})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"testnet-ports",children:"TestNet Ports"}),"\n",(0,t.jsxs)(n.p,{children:["TestNet uses the ",(0,t.jsx)(n.code,{children:"21xxx"})," port range instead of ",(0,t.jsx)(n.code,{children:"20xxx"}),". Replace the leading ",(0,t.jsx)(n.code,{children:"20"})," with ",(0,t.jsx)(n.code,{children:"21"})," for all ports above."]}),"\n",(0,t.jsxs)(n.p,{children:["Example: ELA JSON-RPC is ",(0,t.jsx)(n.code,{children:"21336"})," on TestNet instead of ",(0,t.jsx)(n.code,{children:"20336"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"firewall-rules",children:"Firewall Rules"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Minimal (ELA full node only
1):"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'# P2P is required \u2014 without it, your node cannot participate in the network\nsudo ufw allow 20338/tcp comment "ELA P2P"\n\n# BPoS port \u2014 required if you are a registered supernode\nsudo ufw allow 20339/tcp comment "ELA BPoS"\n\n# Deny RPC from external access (it should only be accessed locally)\nsudo ufw deny 20336/tcp comment "ELA RPC - local only"\n'})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Full supernode:"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'# ELA\nsudo ufw allow 20338/tcp comment "ELA P2P"\nsudo ufw allow 20339/tcp comment "ELA BPoS"\n\n# ESC\nsudo ufw allow 20638/tcp comment "ESC P2P TCP"\nsudo ufw allow 20638/udp comment "ESC P2P UDP"\nsudo ufw allow 20639/tcp comment "ESC PBFT"\n\n# EID\nsudo ufw allow 20648/tcp comment "EID P2P TCP"\nsudo ufw allow 20648/udp comment "EID P2P UDP"\nsudo ufw allow 20649/tcp comment "EID PBFT"\n\n# PG\nsudo ufw allow 20678/tcp comment "PG P2P TCP"\nsudo ufw allow 20678/udp comment "PG P2P UDP"\nsudo ufw allow 20679/tcp comment "PG PBFT"\n\n# Enable firewall\nsudo ufw enable\n'})}),"\n",(0,t.jsx)(n.h2,{id:"port-purpose-reference",children:"Port Purpose Reference"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Port Type"}),(0,t.jsx)(n.th,{children:"Purpose"}),(0,t.jsx)(n.th,{children:"Must Be Public?"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"P2P"})}),(0,t.jsx)(n.td,{children:"Peer-to-peer block/transaction propagation"}),(0,t.jsx)(n.td,{children:"Yes: required for network participation"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"BPoS/PBFT"})}),(0,t.jsx)(n.td,{children:"Consensus protocol messages between supernodes"}),(0,t.jsx)(n.td,{children:"Yes: required for block production"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"JSON-RPC"})}),(0,t.jsx)(n.td,{children:"API access for queries and transactions"}),(0,t.jsx)(n.td,{children:"No: keep behind firewall or reverse proxy"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"REST"})}),(0,t.jsx)(n.td,{children:"Alternative API format (ELA main chain)"}),(0,t.jsx)(n.td,{children:"No: keep behind firewall"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"WebSocket"})}),(0,t.jsx)(n.td,{children:"Subscription-based API (ESC/EID)"}),(0,t.jsx)(n.td,{children:"No: keep behind firewall or reverse proxy"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"Oracle"})}),(0,t.jsx)(n.td,{children:"Cross-chain bridge communication"}),(0,t.jsx)(n.td,{children:"No: internal only (loopback)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"Bootnode"})}),(0,t.jsx)(n.td,{children:"Initial peer discovery (UDP)"}),(0,t.jsx)(n.td,{children:"Only if running a bootnode"})]})]})]})]})}function x(e={}){const{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},28453(e,n,r){r.d(n,{R:()=>l,x:()=>i});var s=r(96540);const t={},d=s.createContext(t);function l(e){const n=s.useContext(d);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(d.Provider,{value:n},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.