XGR Chain — Access Control & Permission Boundaries
v3.4.0 update: The current release and fork-dependent changes are specified in v3.4.0 release and activation. Interchain uses Direct-BLS message authorization and independent delivery; older checkpoint/Merkle transport descriptions do not apply to the current Interchain runtime. This does not remove the chain state/transaction tries.
Document ID: XGRCHAIN-ACCESS-CONTROL
Last updated: 2026-10-27
Audience: Node operators, validator operators, RPC operators, protocol developers, auditors
Release baseline: xgr-node v3.4.0
Release commit: cbe6f8a4ae1718429a9924dcf87f0d28591d74e1
Mainnet genesis source: xgr-network/XGR, branch main, path genesis/mainnet/genesis.json
Node implementation: xgr-network/xgr-node
Scope: Public XGRChain access-control and permission boundaries
1. Scope
This document explains the access-control and permission boundaries relevant to XGRChain.
It covers:
- infrastructure access boundaries,
- P2P access boundaries,
- node and RPC exposure,
- JSON-RPC CORS boundaries,
- debug and txpool exposure,
- validator key isolation,
- transaction validity,
- txpool admission,
- chain-parameter address-list fields,
- validator authority,
- contract-level permissions,
- separation between chain authority and external protocol/service authority,
- operational security boundaries.
This document does not define:
- XDaLa permit logic,
- XDaLa grant logic,
- XRC standard behavior,
- UI authorization,
- application-specific contract roles,
- detailed interchain route authorization or security-module configuration.
Those mechanisms are documented separately.
2. Permission layers
XGRChain has multiple independent permission layers.
They must not be collapsed into one concept.
| Layer | Purpose | Controlled by |
|---|---|---|
| Infrastructure access | Firewall, reverse proxy, TLS, rate limits, host access | Operator |
| P2P access | Node connectivity and peer discovery | libp2p configuration / network topology |
| Node/RPC exposure | Who can call local node interfaces | Operator |
| Transaction validity | Whether a transaction is valid for execution | Protocol rules |
| Txpool admission | Whether a valid transaction enters one node's local txpool | Node policy and protocol checks |
| Validator authority | Who participates in consensus | Consensus and staking state |
| Contract permissions | Contract-specific authorization | Smart contract logic |
| Chain-parameter address lists | Optional allow/block-list configuration | Published chain configuration if enabled |
| External protocol/service authority | Off-chain services, relayers or external protocol components | Separate service or contract configuration |
Important distinctions:
- a peer connection is not transaction authority,
- a valid transaction is not necessarily txpool-accepted,
- txpool acceptance is not consensus finality,
- staking active state is not always identical to current consensus participation,
- validator key possession is not sufficient if the validator is not part of the active validator set,
- schema availability does not imply network activation,
- control of an external service or interchain relayer does not grant XGRChain consensus authority,
- ownership of a smart contract does not grant node, validator or RPC authority.
3. Infrastructure boundary
Infrastructure controls operate outside the chain protocol.
They include:
- cloud firewall rules,
- host firewall rules,
- SSH access policy,
- reverse proxies,
- TLS termination,
- HTTP rate limits,
- WebSocket rate limits,
- RPC namespace filtering,
- monitoring-network isolation,
- VPN/private-network access,
- system-user permissions,
- filesystem permissions,
- backup access control.
These controls determine who can reach a node or service.
They do not modify chain rules.
Recommended baseline:
| Component | Recommended exposure |
|---|---|
| Validator SSH | Admin IPs only |
| Validator JSON-RPC | Localhost or private management network |
| Validator gRPC | Localhost/private only |
| Validator metrics | Monitoring network only |
| Validator P2P | Reachable according to validator topology |
| Public RPC HTTP | Reverse proxy / gateway |
| Public RPC WebSocket | Reverse proxy / gateway with limits |
| Debug RPC | Internal only |
| Txpool diagnostics | Internal or controlled |
| Metrics | Internal / monitoring network |
Operator security must not rely on chain-level logic.
A public HTTP endpoint is public even if the chain itself has validator or contract-level permissions.
4. P2P boundary
The P2P layer controls node connectivity.
It does not define transaction, application or consensus authorization.
P2P concepts:
| Concept | Meaning |
|---|---|
| Network key | Determines libp2p peer identity |
| Peer ID | Public identity derived from the network key |
| Bootnode | Helps peers discover each other |
| Peer connection | Active network link between nodes |
| Discovery | Mechanism for finding peers |
| P2P topic | PubSub channel for node messages |
Important boundaries:
- bootnodes help discovery,
- bootnodes do not grant validator authority,
- peer connectivity does not grant consensus authority,
- a network key does not sign transactions,
- validator keys are separate from network keys,
- public full nodes may connect without being validators,
- P2P health affects propagation and consensus reliability.
A node can be connected to peers while having no validator authority.
A validator can have validator authority but still fail operationally if P2P connectivity is broken.
5. Node/RPC exposure boundary
Node RPC exposure is controlled by the operator.
The node exposes several possible RPC surfaces.
| Surface | Purpose | Recommended exposure |
|---|---|---|
eth_* |
Ethereum-compatible wallet/app/explorer RPC plus public XGR PoS methods | Public only with limits |
net_* |
Network metadata | Public only with limits |
web3_* |
Client/version/helper methods | Public only with limits |
txpool_* |
Transaction-pool inspection | Internal / controlled |
debug_* |
Execution tracing | Internal only |
| gRPC operator services | Node management and diagnostics | Internal only |
| Metrics | Monitoring | Internal only |
Public XGR PoS methods available in the v3.4.0 node baseline include:
eth_getPosValidatorsOverview
eth_getPosValidatorDelegators
Public RPC nodes should be operationally separated from validator nodes.
Validator nodes should not be used as general public RPC infrastructure.
Recommended public RPC controls:
- reverse proxy,
- TLS,
- request rate limits,
- batch limits,
- block-range limits,
- WebSocket limits,
- namespace restrictions where available,
- abuse monitoring,
- resource monitoring.
Recommended validator controls:
- no public debug RPC,
- no public gRPC,
- no public txpool diagnostics,
- no validator key material on public RPC nodes,
- local/private JSON-RPC only,
- metrics restricted to monitoring systems.
6. JSON-RPC CORS boundary
CORS is a browser access-control mechanism.
It does not protect a node from direct non-browser clients.
The v3.4.0 node configuration exposes CORS-related settings including:
cors_allowed_origins
headers.access_control_allow_origins
Operational meaning:
| Setting | Effect |
|---|---|
| CORS origin allowed | Browser clients from that origin may call the RPC endpoint |
| CORS origin denied | Browser clients from that origin are blocked by browser policy |
| Endpoint remains reachable | Non-browser clients can still call it unless network controls prevent access |
Do not treat CORS as an RPC security boundary.
Public RPC endpoints still require:
- network-level exposure controls,
- reverse-proxy rules,
- rate limits,
- method restrictions where appropriate,
- monitoring and abuse handling.
7. Debug boundary
Debug methods are computationally expensive and may expose detailed execution behavior.
Examples include:
debug_traceTransaction
debug_traceCall
debug_traceBlockByNumber
debug_traceBlockByHash
debug_traceBlock
Recommended policy:
| Environment | Debug exposure |
|---|---|
| Public RPC | Disabled or blocked |
| Internal tracing node | Allowed for trusted operators |
| Validator node | Avoid heavy tracing; internal only if required |
| Development node | Allowed as needed |
Relevant runtime control:
--concurrent-requests-debug
Default in xgr-node v3.4.0:
32
Debug tracing should be isolated from public RPC workloads and consensus-critical validator operation.
8. Txpool boundary
The txpool is local node state.
It is not consensus state.
A transaction can be:
- validly signed but rejected by a local txpool,
- accepted by one node but not yet seen by another,
- queued because of nonce ordering,
- replaced by a higher-priced transaction,
- gossiped but rejected by peers,
- included in a block without appearing in every public txpool view.
Txpool admission checks can include:
- signature recovery,
- chain ID,
- nonce,
- account balance,
- intrinsic gas,
- block gas limit,
- transaction-type support,
- fork activation,
- effective gas price,
- node-level price limits,
- replacement-price rules,
- txpool capacity,
- per-account queue limits.
Txpool RPC methods should be treated as operator or infrastructure APIs rather than normal public application APIs.
Recommended policy:
| Method group | Exposure |
|---|---|
txpool_status |
Internal or controlled |
txpool_content |
Internal only or heavily restricted |
txpool_inspect |
Internal or controlled |
9. Transaction validity boundary
Transaction validity is enforced at protocol level.
A transaction must satisfy execution and signing rules before it can be accepted for execution.
Important validation dimensions include:
| Check | Meaning |
|---|---|
| Chain ID | Transaction belongs to the XGRChain signing domain |
| Signature | Sender can be recovered and signature is valid |
| Nonce | Sender nonce is valid |
| Balance | Sender can pay value and execution fees |
| Intrinsic gas | Transaction gas covers intrinsic cost |
| Block gas limit | Transaction gas does not exceed the block gas limit |
| Transaction type | Type is supported by the active fork configuration |
| Fee fields | Fee fields are valid for the selected transaction type |
| Base-fee rules | Effective price satisfies active fee rules |
| Contract creation | Initcode rules apply where activated |
| Access list | Access-list rules apply where activated |
This is not an allowlist system.
It is normal EVM-compatible transaction validation combined with XGRChain-specific protocol rules.
10. Chain-parameter address-list fields
The public xgr-node v3.4.0 chain-parameter schema contains optional address-list configuration fields:
contractDeployerAllowList
contractDeployerBlockList
transactionsAllowList
transactionsBlockList
bridgeAllowList
bridgeBlockList
Each address-list configuration can contain:
adminAddresses
enabledAddresses
The current published XGRChain mainnet genesis does not configure any of these address-list fields.
Therefore the current mainnet configuration does not activate a chain-level contract-deployer, transaction or bridge allow/block list through genesis configuration.
If a future published chain configuration enables these fields, its behavior must be documented against the release and network configuration that activates them.
Do not infer active access-control behavior merely because the corresponding schema fields exist in the node implementation.
Schema availability is not network activation.
11. Burn-contract fields are not permission fields
The chain-parameter schema also contains:
burnContract
burnContractDestinationAddress
Current published mainnet values:
burnContract = null
burnContractDestinationAddress = 0x0000000000000000000000000000000000000000
These fields belong to fee and gas configuration.
They are not access-control fields.
They do not grant:
- transaction permission,
- validator authority,
- RPC authority,
- contract execution authority,
- interchain authority.
12. Validator authority boundary
Validator authority is determined by the active consensus and validator-set rules.
The published XGRChain mainnet configuration defines:
IBFT
PoA: blocks 0 – 5,446,499
PoS: from block 5,446,500
validator type: BLS
For the current PoS phase, validator participation is derived from the staking-aware validator state and the active consensus validator set.
Relevant concepts include:
- validator key material,
- validator BLS public key,
- staking-contract validator state,
- validator self-stake,
- delegated active stake,
- total active current stake,
- validator active state,
- epoch-boundary activation,
- epoch-boundary deactivation,
- current consensus-header validator set,
- effective voting power,
- proposer uptime weighting,
- reward eligibility,
- slashing state.
Important distinctions:
| Field / concept | Meaning |
|---|---|
| Peer connection | Node is connected through P2P |
| Validator key | Node can sign consensus messages for that validator |
| Validator-set membership | Validator is part of the active consensus set |
| Staking active | Validator is active in staking state |
| Currently validating | Validator is represented in the current consensus validator set |
| Delegated stake | Stake delegated to a validator |
| Voting power | Consensus weight under stake-weighted PoS rules |
These concepts must not be collapsed into a single boolean.
For example, monitoring systems should not infer current consensus participation solely from staking-contract state when consensus-derived validator-set information is available.
13. Validator key isolation
Validator key material is a high-value security boundary.
Rules:
- do not store validator keys on public RPC nodes,
- do not expose validator machines as general public RPC infrastructure,
- restrict SSH access,
- use a dedicated service user,
- restrict filesystem permissions,
- back up validator keys securely,
- avoid unnecessary interactive shell access,
- monitor signer errors,
- monitor unexpected validator restarts,
- separate validator infrastructure from indexing and tracing workloads.
Validator key compromise is not an RPC-configuration incident.
It is a consensus and network-security incident.
14. Contract-level permissions
Smart contracts may implement their own permissions independently from node or consensus permissions.
Common patterns include:
- owner-only functions,
- role-based access checks,
- executor lists,
- pause authority,
- upgrade authority,
- administrative configuration,
- application-specific access control.
Contract-level permissions are enforced by contract logic.
They are separate from:
- P2P access,
- RPC exposure,
- txpool admission,
- validator-set membership,
- node filesystem permissions,
- chain-parameter address-list fields unless the contract explicitly interacts with those mechanisms.
This distinction also applies to infrastructure such as interchain routers and security modules: ownership or administrative authority over those contracts does not grant XGRChain validator or consensus authority.
Detailed contract-specific roles are outside the scope of this document.
15. External protocol and interchain authority
External protocol services may have their own operational authority boundaries.
Examples can include:
- relayer signing accounts,
- message-validation services,
- interchain validator or attestation processes,
- route-contract ownership,
- security-module administration,
- pause or emergency controls.
These are not XGRChain consensus permissions.
A relayer may be authorized to submit a transaction to XGRChain, but the submitted transaction is still subject to normal XGRChain transaction validation and contract execution rules.
Likewise, an interchain validator or security module does not become an XGRChain consensus validator merely by participating in cross-chain message verification.
Detailed XGR interchain architecture and operator security are documented separately.
16. Public RPC security baseline
Public RPC endpoints should be operated behind infrastructure controls.
Recommended controls:
- TLS reverse proxy,
- request rate limits,
- JSON-RPC batch limits,
- block-range limits,
- WebSocket read limits,
- debug namespace blocked,
- txpool diagnostics restricted,
- CORS explicitly configured,
- abuse monitoring,
- health monitoring,
- node separation from validators.
Relevant xgr-node v3.4.0 default runtime limits:
| Setting | Default |
|---|---|
| JSON-RPC batch request limit | 20 |
| JSON-RPC block-range limit | 1000 |
| Concurrent debug request limit | 32 |
| WebSocket read limit | 8192 bytes |
These are software defaults, not substitutes for infrastructure-level protection.
17. Validator RPC security baseline
Validator nodes should expose only the interfaces required for operation.
Recommended exposure:
| Interface | Exposure |
|---|---|
| P2P | Public/allowlisted according to topology |
| JSON-RPC | Localhost/private management network |
| gRPC | Localhost/private management network |
| Metrics | Monitoring network |
| Debug | Avoid; internal only if required |
| SSH | Admin IPs only |
Validator nodes should not serve as general public RPC nodes.
A production validator should not carry unrestricted public application traffic.
18. Data-directory boundary
The node data directory contains local chain state and, depending on node role, security-sensitive key material.
Rules:
- do not share one data directory between multiple running nodes,
- do not run validator and public-RPC workloads from the same validator data directory,
- do not copy validator data directories to public RPC nodes,
- keep validator data-directory permissions restrictive,
- back up validator key material securely,
- treat accidental validator-key exposure as a security incident.
Example restrictive permissions:
sudo chown -R xgr:xgr /var/lib/xgr/validator
sudo chmod -R go-rwx /var/lib/xgr/validator
Exact paths and service users depend on operator deployment.
19. Permission-boundary checklist
Public full / RPC nodes
--seal=false- no validator key material
- JSON-RPC behind a reverse proxy or gateway
- debug methods blocked or restricted
- txpool diagnostics restricted
- batch and block-range limits configured
- public methods monitored
- data directory isolated from validators
Validator nodes
--seal=true- validator key material present
- JSON-RPC local/private only
- gRPC local/private only
- P2P reachable according to network topology
- metrics restricted
- no unrestricted public application traffic
- filesystem permissions restricted
- key backups encrypted and controlled
- PoS and consensus status monitored
Bootnodes
- stable network key
- stable advertised network address
- P2P reachable
- no validator key required solely for bootnode operation
- no public RPC unless intentionally configured
- peer connectivity monitored
External services / relayers
- dedicated signing accounts where signing is required
- no validator private keys unless the service is explicitly also a validator
- least-privilege contract permissions
- restricted service credentials
- monitored transaction failures and abnormal retries
- separation from consensus validator key material
20. Summary
| Boundary | Key rule |
|---|---|
| Infrastructure | Operator-controlled; does not change chain rules |
| P2P | Connectivity only; no validator authority |
| Bootnodes | Discovery only; no consensus rights |
| JSON-RPC | Operator exposure policy; public endpoints require protection |
| CORS | Browser control only; not RPC security |
| Debug | Internal or tightly restricted |
| Txpool | Local node state; not consensus state |
| Transaction validity | Protocol-level EVM/XGRChain validation |
| Address-list schema fields | Not active on current mainnet unless explicitly configured |
| Validator authority | Derived from consensus and staking state |
| Validator keys | Must be isolated from public RPC infrastructure |
| Contract permissions | Contract-defined, not P2P/RPC-defined |
| External services / relayers | Separate authority domain; no implicit consensus rights |