XGR Chain — Access Control & Permission Boundaries
Document ID: XGRCHAIN-ACCESS-CONTROL
Last updated: 2026-05-03
Audience: Protocol developers, node operators, XDaLa integrators, auditors
Implementation status: Current public baseline for node/RPC/contract boundaries; XDaLa permits and grants are release-dependent XGR extension components
Source of truth: Public xgr-network/xgr-node releases, published XGR Chain configuration, XGR extension specifications, and official XGR Network operator announcements
1. Scope
This document explains the access-control and permission boundaries relevant to XGR Chain and XGR extension components.
It covers:
- infrastructure access boundaries
- P2P access boundaries
- node and RPC exposure
- validator key isolation
- transaction validity boundaries
- txpool admission boundaries
- chain-parameter address-list fields
- contract-level permissions
- XDaLa permit-based authorization
- XDaLa grant-based encrypted-data access
- operational security boundaries
Access control in XGR is not one single mechanism.
Different layers answer different questions.
2. Permission layers
XGR Chain uses multiple permission layers.
They must not be mixed.
| Layer | Purpose | Status |
|---|---|---|
| Infrastructure access | Firewall, reverse proxy, TLS, rate limits, host access | Operator-controlled |
| P2P access | Determines node connectivity and peer discovery | Public baseline |
| Node/RPC exposure | Determines who can call local node interfaces | Operator-controlled |
| Transaction validity | Determines whether a transaction is valid for execution | Public baseline |
| TxPool admission | Determines whether a valid transaction is accepted into a local pool | Public baseline |
| Validator authority | Determines who participates in consensus | Release/configuration-dependent |
| Contract-level permissions | Ownership, executor roles, contract-specific access | Contract-defined |
| XDaLa permits | EIP-712 signatures for XDaLa actions | XGR extension, release-dependent |
| XDaLa grants | Encrypted-data access rights | XGR extension, release-dependent |
A peer connection is not transaction authority.
A valid transaction is not necessarily txpool-accepted.
A staking contract state flag is not the same as current consensus participation.
A grant is not a chain-wide allowlist.
3. Infrastructure boundary
Infrastructure controls are operated 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
- file permissions
- backup access control
These controls decide who can reach a node or service.
They do not change 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 RPC | Internal or controlled infrastructure |
| XDaLa extension RPC | Endpoint-specific policy |
| Database-backed grant services | Private service network |
Operator security must not rely on chain-level logic.
A public HTTP endpoint is public even if the chain has validator permissions.
4. P2P boundary
The P2P layer controls node connectivity.
It does not define application authorization.
P2P concepts:
| Concept | Meaning |
|---|---|
| Network key | Determines libp2p peer identity |
| Peer ID | Public identity derived from 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 connection does not grant consensus authority
- network key does not sign transactions
- validator key is separate from network key
- public full nodes may connect without being validators
- P2P health affects propagation and consensus reliability
A node can be connected to peers and still have no validator authority.
A validator can have validator authority but fail operationally if P2P connectivity is broken.
5. Node/RPC exposure boundary
Node RPC exposure is an operator-controlled boundary.
The node may expose several RPC surfaces.
| Surface | Purpose | Recommended exposure |
|---|---|---|
eth_* |
Ethereum-compatible wallet/app/explorer RPC | 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 |
xgr_* |
XGR extension methods | Endpoint-specific |
| gRPC operator services | Node management and diagnostics | Internal only |
| Metrics | Monitoring | Internal only |
Public RPC nodes should be separated from validator nodes.
Validator nodes should not be exposed as public RPC infrastructure.
Recommended public RPC controls:
- reverse proxy
- TLS
- 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 node supports a CORS allow-origin setting through the runtime configuration.
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 |
| No firewall/rate limit | Non-browser clients can still call the endpoint if reachable |
Do not treat CORS as RPC security.
Public RPC endpoints still require:
- network-level exposure control
- reverse proxy rules
- rate limits
- method restrictions where applicable
- monitoring and abuse handling
7. Debug boundary
Debug methods are expensive and sensitive.
They can reveal detailed execution behavior and consume significant CPU/memory.
Debug methods include tracing methods such as:
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 needed |
| Development node | Allowed as needed |
The node supports a concurrent debug request limit.
Relevant runtime control:
--concurrent-requests-debug
Debug tracing should be isolated from public RPC workloads and validator-critical 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
- mined without appearing in every public txpool view
TxPool admission checks include:
- signature recovery
- chain ID
- nonce
- account balance
- intrinsic gas
- block gas limit
- transaction type support
- fork activation
- effective gas price
- node-level price limit
- replacement price rules
- txpool capacity
- per-account queue limits
TxPool RPC methods should be considered operator/infrastructure APIs, not 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 protocol-level.
A transaction must satisfy execution and signing rules.
Important validation dimensions:
| Check | Meaning |
|---|---|
| Chain ID | Transaction belongs to XGR Chain signing domain |
| Signature | Sender can be recovered and signature is valid |
| Nonce | Sender nonce is valid |
| Balance | Sender can pay value and gas |
| Intrinsic gas | Transaction gas covers intrinsic cost |
| Block gas limit | Transaction gas does not exceed block gas limit |
| Transaction type | Type is supported by active fork configuration |
| Fee fields | Fee fields are valid for the transaction type |
| Base fee | Effective price covers base-fee rules where applicable |
| Contract creation rules | Initcode rules apply where active |
| Access-list rules | Access-list rules apply where active |
This is not an allowlist system.
It is normal EVM-compatible transaction validation.
10. Chain-parameter address-list fields
The public node chain-parameter schema includes address-list configuration fields.
The structure supports fields such as:
contractDeployerAllowList
contractDeployerBlockList
transactionsAllowList
transactionsBlockList
Each address-list config can contain:
adminAddresses
enabledAddresses
The published mainnet genesis does not configure these address-list fields.
That means the current published XGR Chain configuration does not activate a chain-level contract-deployer or transaction allow/block list through genesis.
If a future published configuration uses these fields, the operational behavior must be documented against the active release that activates them.
Do not infer active chain-level allowlist behavior merely because schema fields exist in code.
Schema availability is not the same as network activation.
11. Validator authority boundary
Validator authority is determined by the active consensus and validator-set rules.
In the current published baseline, the genesis configures IBFT validator data through the genesis configuration.
In staking-enabled releases, validator authority may depend on additional staking state and activation rules.
Relevant concepts can include:
- validator registration
- validator key material
- validator set membership
- current consensus header validator set
- staking active flag
- self-stake
- delegated stake
- stake-weighted voting power
- epoch-boundary activation
- epoch-boundary deactivation
- reward eligibility
- slashing state
Important distinction:
| Field / concept | Meaning |
|---|---|
| Peer connection | Node is connected on P2P |
| Validator key | Node can sign consensus messages for that validator |
| Validator-set membership | Validator is part of active consensus set |
| Staking active | Validator is active in staking contract state |
| Currently validating | Validator is in current consensus header validator set |
| Delegated stake | Stake delegated to validator |
| Voting power | Consensus weight where stake-weighted PoS is active |
These concepts must not be collapsed into one boolean.
A dashboard should not infer current consensus participation from staking contract state alone when a dedicated consensus-derived field is available.
12. 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 public RPC infrastructure
- restrict SSH access
- use a dedicated service user
- restrict filesystem permissions
- back up validator keys securely
- avoid interactive shell access where possible
- monitor signer errors
- monitor unexpected validator restarts
- separate validator infrastructure from indexing/tracing workloads
Validator key compromise is not an RPC configuration issue.
It is a consensus/security incident.
13. Contract-level permissions
Smart contracts can implement their own permissions.
Common patterns:
- owner-only functions
- executor lists
- role checks
- session owner checks
- rule owner checks
- grant manager checks
- upgrade authority
- emergency pause authority
- delegated execution authority
Contract-level permissions are enforced by contract logic.
They are separate from:
- P2P access
- RPC exposure
- txpool admission
- validator set membership
- XDaLa off-chain grant storage
For XGR standards, contract-level permissions can be used by:
- XRC-137 rule contracts
- XRC-729 orchestration/session contracts
- key registry contracts
- application-specific contracts
Contract ownership should be audited independently from node infrastructure.
14. XRC-137 permission boundary
XRC-137 belongs to the XGR extension layer.
It defines rule-document / rule-contract behavior.
Typical permission concerns include:
- who owns the rule contract
- who can update rule content
- who can execute or reference a rule
- whether rule content is plaintext or encrypted
- whether an owner read key exists
- whether XDaLa can load the rule
- whether the caller has the required permit or contract authority
XRC-137 permissions are not chain-wide RPC permissions.
They are rule-contract and XDaLa integration permissions.
Availability depends on the deployed contract and active XGR release stack.
15. XRC-729 permission boundary
XRC-729 belongs to the XGR extension layer.
It defines orchestration/session behavior.
Typical permission concerns include:
- orchestration owner
- session owner
- executor authority
- session control authority
- wake/pause/resume/kill authority
- gas budget authority
- contract-mediated execution authority
- permit-based execution authorization
XRC-729 permissions are not validator permissions.
They control process execution and session behavior.
Availability depends on deployed contracts and active XGR release stack.
16. XDaLa permit boundary
XDaLa permits are EIP-712 typed-data signatures.
They authorize specific XDaLa actions without requiring an on-chain authorization transaction for every action.
Permit properties:
- deterministic typed-data structure
- chain ID binding
- expiry
- signer recovery
- action-specific authority checks
- wallet signing through
eth_signTypedData_v4
Permit payloads usually contain:
domaintypesprimaryTypemessagesignature
A permit proves signed authorization for a specific XDaLa action.
It does not make the signer a validator.
It does not grant P2P access.
It does not bypass transaction validity.
17. SessionPermit
SessionPermit authorizes starting or continuing a specific XDaLa session under a specific orchestration.
High-level domain fields:
| Field | Meaning |
|---|---|
name |
XDaLa SessionPermit |
version |
Permit version |
chainId |
Chain ID binding |
High-level message fields:
| Field | Meaning |
|---|---|
from |
Signer and authority holder |
ostcId |
Orchestration identifier |
ostcHash |
Hash of orchestration structure |
sessionId |
Root session ID |
maxTotalGas |
Total gas budget cap |
expiry |
Unix expiry timestamp |
High-level checks:
- typed-data domain must match expected domain
- chain ID must match network chain ID
- permit must not be expired
- recovered signer must match
message.from - signer must satisfy the required orchestration/session authority rule
18. xdalaPermit
xdalaPermit authenticates a caller for grant-management and grant-listing operations.
High-level domain fields:
| Field | Meaning |
|---|---|
name |
Non-empty domain name |
version |
Non-empty domain version |
chainId |
Chain ID binding |
High-level message fields:
| Field | Meaning |
|---|---|
from |
Signer / caller identity |
expiry |
Unix expiry timestamp |
High-level checks:
- chain ID must match
- permit must not be expired
- recovered signer identifies the caller
- endpoint parameters define the action scope
This permit is intentionally minimal.
The action scope is defined by the endpoint request parameters, such as RID, scope, grantee, owner or filters.
19. ControlPermit
ControlPermit authorizes XDaLa session control actions.
Typical actions:
pause
resume
kill
wake
High-level domain fields:
| Field | Meaning |
|---|---|
name |
Non-empty domain name |
version |
Non-empty domain version |
chainId |
Chain ID binding |
verifyingContract |
Expected control-domain verifying contract |
High-level message fields:
| Field | Meaning |
|---|---|
from |
Signer identity |
sessionId |
Root session ID |
action |
Control action |
expiry |
Unix expiry timestamp |
High-level checks:
- chain ID must match
- verifying contract must match expected control domain
- action must be allowed
- permit must not be expired
- signer must satisfy the required session-control authority rule
20. XDaLa grants boundary
XDaLa grants control encrypted-data access.
They are not chain-level allowlists.
They are not validator permissions.
They are not P2P permissions.
The grant model protects encrypted content such as:
- XRC-137 rule documents
- XDaLa engine logs
- encrypted execution output where supported
Grant storage model:
| Component | Storage | Purpose |
|---|---|---|
| Read public keys | On-chain key registry | Public keys for wrapping DEKs |
| Grants | PostgreSQL grants database | Access rights and wrapped DEKs |
| Encrypted blobs | On-chain contract data or logs/responses | Ciphertext content |
Grants are database-backed authorization records for encrypted data access.
21. Grant rights
Grant rights are bitmask-based.
| Right | Value | Meaning |
|---|---|---|
| READ | 1 |
Can decrypt content |
| WRITE | 2 |
Can update content where supported |
| MANAGE | 4 |
Can manage sub-grants |
Common combinations:
| Rights | Meaning |
|---|---|
1 |
Reader |
3 |
Reader + writer |
7 |
Owner / full rights |
Grant rights apply to encrypted content access.
They do not authorize arbitrary chain transactions.
22. Grant scope
Grants are scoped.
| Scope | Meaning |
|---|---|
1 |
Session / prepare / rule document |
2 |
Engine log |
3 |
Field-level scope, reserved |
A grant is identified by:
- RID
- scope
- grantee address
The grant database enforces uniqueness by RID, grantee and scope.
A grant for one RID/scope does not automatically grant access to another RID/scope.
23. Encryption boundary
XDaLa encryption separates plaintext access from chain execution.
High-level model:
- content is encrypted with a random data encryption key
- the encrypted blob is stored or emitted
- the data encryption key is wrapped for authorized recipients
- wrapped keys and access rights are stored in grant records
- recipients decrypt only if they have a valid grant and corresponding private key
Important security properties:
- plaintext is not exposed merely because ciphertext is public
- read public keys can be on-chain
- private read keys remain user-side
- grant records determine who can access wrapped DEKs
- expired grants should not authorize access
- READ permission is required for decryption
A grant authorizes encrypted data access, not consensus behavior.
24. Access matrix
High-level access-control matrix:
| Action | Boundary |
|---|---|
| Connect to node as peer | P2P/network configuration |
| Discover peers | Bootnode/discovery configuration |
| Serve public RPC | Infrastructure/RPC exposure |
| Submit raw transaction | RPC exposure plus transaction validity |
| Enter local txpool | TxPool admission |
| Execute transaction | Protocol validity and block inclusion |
| Participate in consensus | Active validator-set rules |
| Sign consensus messages | Validator key material |
| Trace transaction | Debug RPC exposure |
| Inspect txpool | TxPool RPC exposure |
| Manage XDaLa grants | XDaLa permit plus grant rules |
| Decrypt XDaLa content | Grant rights plus recipient private key |
| Control XDaLa session | ControlPermit / session authority |
| Update contract state | Contract-level permission and valid transaction |
Use the correct boundary for the correct action.
25. Public RPC exposure policy
Recommended public RPC exposure:
| Namespace | Public exposure |
|---|---|
eth_* |
Yes, with rate limits and method controls |
net_* |
Yes, with rate limits |
web3_* |
Yes, with rate limits |
xgr_* |
Endpoint-specific |
txpool_* |
Usually no; internal or controlled |
debug_* |
No |
| gRPC | No |
| Metrics | No |
A public RPC node should not hold validator signing material.
A validator node should not be used as a high-volume public RPC endpoint.
26. XGR extension endpoint exposure
XGR extension endpoints can have different exposure requirements.
Some may be safe for public read access.
Some may require permits.
Some may be appropriate only behind application backends.
Some may depend on off-chain services such as a grant database.
Endpoint exposure should be decided per method based on:
- whether it mutates off-chain state
- whether it reveals metadata
- whether it requires a permit
- whether it has expensive execution cost
- whether it accesses encrypted grant records
- whether it depends on private infrastructure
- whether it can be abused for enumeration
- whether it requires rate limiting
Do not expose all XGR extension endpoints merely because standard Ethereum RPC is public.
27. Operator deployment patterns
27.1 Validator node
Recommended proxy / gateway | | Public RPC WebSocket | Reverse proxy / gateway with limits | | Debug RPC | Internal only | | TxPool RPC | Internal or controlled infrastructure | | XDaLa extension RPC | Endpoint-specific policy | | Database-backed grant services | Private service network |
Operator security must not rely on chain-level logic.
A public HTTP endpoint is public even if the chain has validator permissions.
4. P2P boundary
The P2P layer controls node connectivity.
It does not define application authorization.
P2P concepts:
| Concept | Meaning |
|---|---|
| Network key | Determines libp2p peer identity |
| Peer ID | Public identity derived from 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 connection does not grant consensus authority
- network key does not sign transactions
- validator key is separate from network key
- public full nodes may connect without being validators
- P2P health affects propagation and consensus reliability
A node can be connected to peers and still have no validator authority.
A validator can have validator authority but fail operationally if P2P connectivity is broken.
5. Node/RPC exposure boundary
Node RPC exposure is an operator-controlled boundary.
The node may expose several RPC surfaces.
| Surface | Purpose | Recommended exposure |
|---|---|---|
eth_* |
Ethereum-compatible wallet/app/explorer RPC | 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 |
xgr_* |
XGR extension methods | Endpoint-specific |
| gRPC operator services | Node management and diagnostics | Internal only |
| Metrics | Monitoring | Internal only |
Public RPC nodes should be separated from validator nodes.
Validator nodes should not be exposed as public RPC infrastructure.
Recommended public RPC controls:
- reverse proxy
- TLS
- 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 node supports a CORS allow-origin setting through the runtime configuration.
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 |
| No firewall/rate limit | Non-browser clients can still call the endpoint if reachable |
Do not treat CORS as RPC security.
Public RPC endpoints still require:
- network-level exposure control
- reverse proxy rules
- rate limits
- method restrictions where applicable
- monitoring and abuse handling
7. Debug boundary
Debug methods are expensive and sensitive.
They can reveal detailed execution behavior and consume significant CPU/memory.
Debug methods include tracing methods such as:
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 needed |
| Development node | Allowed as needed |
The node supports a concurrent debug request limit.
Relevant runtime control:
--concurrent-requests-debug
Debug tracing should be isolated from public RPC workloads and validator-critical 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
- mined without appearing in every public txpool view
TxPool admission checks include:
- signature recovery
- chain ID
- nonce
- account balance
- intrinsic gas
- block gas limit
- transaction type support
- fork activation
- effective gas price
- node-level price limit
- replacement price rules
- txpool capacity
- per-account queue limits
TxPool RPC methods should be considered operator/infrastructure APIs, not 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 protocol-level.
A transaction must satisfy execution and signing rules.
Important validation dimensions:
| Check | Meaning |
|---|---|
| Chain ID | Transaction belongs to XGR Chain signing domain |
| Signature | Sender can be recovered and signature is valid |
| Nonce | Sender nonce is valid |
| Balance | Sender can pay value and gas |
| Intrinsic gas | Transaction gas covers intrinsic cost |
| Block gas limit | Transaction gas does not exceed block gas limit |
| Transaction type | Type is supported by active fork configuration |
| Fee fields | Fee fields are valid for the transaction type |
| Base fee | Effective price covers base-fee rules where applicable |
| Contract creation rules | Initcode rules apply where active |
| Access-list rules | Access-list rules apply where active |
This is not an allowlist system.
It is normal EVM-compatible transaction validation.
10. Chain-parameter address-list fields
The public node chain-parameter schema includes address-list configuration fields.
The structure supports fields such as:
contractDeployerAllowList
contractDeployerBlockList
transactionsAllowList
transactionsBlockList
Each address-list config can contain:
adminAddresses
enabledAddresses
The published mainnet genesis does not configure these address-list fields.
That means the current published XGR Chain configuration does not activate a chain-level contract-deployer or transaction allow/block list through genesis.
If a future published configuration uses these fields, the operational behavior must be documented against the active release that activates them.
Do not infer active chain-level allowlist behavior merely because schema fields exist in code.
Schema availability is not the same as network activation.
11. Validator authority boundary
Validator authority is determined by the active consensus and validator-set rules.
In the current published baseline, the genesis configures IBFT validator data through the genesis configuration.
In staking-enabled releases, validator authority may depend on additional staking state and activation rules.
Relevant concepts can include:
- validator registration
- validator key material
- validator set membership
- current consensus header validator set
- staking active flag
- self-stake
- delegated stake
- stake-weighted voting power
- epoch-boundary activation
- epoch-boundary deactivation
- reward eligibility
- slashing state
Important distinction:
| Field / concept | Meaning |
|---|---|
| Peer connection | Node is connected on P2P |
| Validator key | Node can sign consensus messages for that validator |
| Validator-set membership | Validator is part of active consensus set |
| Staking active | Validator is active in staking contract state |
| Currently validating | Validator is in current consensus header validator set |
| Delegated stake | Stake delegated to validator |
| Voting power | Consensus weight where stake-weighted PoS is active |
These concepts must not be collapsed into one boolean.
A dashboard should not infer current consensus participation from staking contract state alone when a dedicated consensus-derived field is available.
12. 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 public RPC infrastructure
- restrict SSH access
- use a dedicated service user
- restrict filesystem permissions
- back up validator keys securely
- avoid interactive shell access where possible
- monitor signer errors
- monitor unexpected validator restarts
- separate validator infrastructure from indexing/tracing workloads
Validator key compromise is not an RPC configuration issue.
It is a consensus/security incident.
13. Contract-level permissions
Smart contracts can implement their own permissions.
Common patterns:
- owner-only functions
- executor lists
- role checks
- session owner checks
- rule owner checks
- grant manager checks
- upgrade authority
- emergency pause authority
- delegated execution authority
Contract-level permissions are enforced by contract logic.
They are separate from:
- P2P access
- RPC exposure
- txpool admission
- validator set membership
- XDaLa off-chain grant storage
For XGR standards, contract-level permissions can be used by:
- XRC-137 rule contracts
- XRC-729 orchestration/session contracts
- key registry contracts
- application-specific contracts
Contract ownership should be audited independently from node infrastructure.
14. XRC-137 permission boundary
XRC-137 belongs to the XGR extension layer.
It defines rule-document / rule-contract behavior.
Typical permission concerns include:
- who owns the rule contract
- who can update rule content
- who can execute or reference a rule
- whether rule content is plaintext or encrypted
- whether an owner read key exists
- whether XDaLa can load the rule
- whether the caller has the required permit or contract authority
XRC-137 permissions are not chain-wide RPC permissions.
They are rule-contract and XDaLa integration permissions.
Availability depends on the deployed contract and active XGR release stack.
15. XRC-729 permission boundary
XRC-729 belongs to the XGR extension layer.
It defines orchestration/session behavior.
Typical permission concerns include:
- orchestration owner
- session owner
- executor authority
- session control authority
- wake/pause/resume/kill authority
- gas budget authority
- contract-mediated execution authority
- permit-based execution authorization
XRC-729 permissions are not validator permissions.
They control process execution and session behavior.
Availability depends on deployed contracts and active XGR release stack.
16. XDaLa permit boundary
XDaLa permits are EIP-712 typed-data signatures.
They authorize specific XDaLa actions without requiring an on-chain authorization transaction for every action.
Permit properties:
- deterministic typed-data structure
- chain ID binding
- expiry
- signer recovery
- action-specific authority checks
- wallet signing through
eth_signTypedData_v4
Permit payloads usually contain:
domaintypesprimaryTypemessagesignature
A permit proves signed authorization for a specific XDaLa action.
It does not make the signer a validator.
It does not grant P2P access.
It does not bypass transaction validity.
17. SessionPermit
SessionPermit authorizes starting or continuing a specific XDaLa session under a specific orchestration.
High-level domain fields:
| Field | Meaning |
|---|---|
name |
XDaLa SessionPermit |
version |
Permit version |
chainId |
Chain ID binding |
High-level message fields:
| Field | Meaning |
|---|---|
from |
Signer and authority holder |
ostcId |
Orchestration identifier |
ostcHash |
Hash of orchestration structure |
sessionId |
Root session ID |
maxTotalGas |
Total gas budget cap |
expiry |
Unix expiry timestamp |
High-level checks:
- typed-data domain must match expected domain
- chain ID must match network chain ID
- permit must not be expired
- recovered signer must match
message.from - signer must satisfy the required orchestration/session authority rule
18. xdalaPermit
xdalaPermit authenticates a caller for grant-management and grant-listing operations.
High-level domain fields:
| Field | Meaning |
|---|---|
name |
Non-empty domain name |
version |
Non-empty domain version |
chainId |
Chain ID binding |
High-level message fields:
| Field | Meaning |
|---|---|
from |
Signer / caller identity |
expiry |
Unix expiry timestamp |
High-level checks:
- chain ID must match
- permit must not be expired
- recovered signer identifies the caller
- endpoint parameters define the action scope
This permit is intentionally minimal.
The action scope is defined by the endpoint request parameters, such as RID, scope, grantee, owner or filters.
19. ControlPermit
ControlPermit authorizes XDaLa session control actions.
Typical actions:
pause
resume
kill
wake
High-level domain fields:
| Field | Meaning |
|---|---|
name |
Non-empty domain name |
version |
Non-empty domain version |
chainId |
Chain ID binding |
verifyingContract |
Expected control-domain verifying contract |
High-level message fields:
| Field | Meaning |
|---|---|
from |
Signer identity |
sessionId |
Root session ID |
action |
Control action |
expiry |
Unix expiry timestamp |
High-level checks:
- chain ID must match
- verifying contract must match expected control domain
- action must be allowed
- permit must not be expired
- signer must satisfy the required session-control authority rule
20. XDaLa grants boundary
XDaLa grants control encrypted-data access.
They are not chain-level allowlists.
They are not validator permissions.
They are not P2P permissions.
The grant model protects encrypted content such as:
- XRC-137 rule documents
- XDaLa engine logs
- encrypted execution output where supported
Grant storage model:
| Component | Storage | Purpose |
|---|---|---|
| Read public keys | On-chain key registry | Public keys for wrapping DEKs |
| Grants | PostgreSQL grants database | Access rights and wrapped DEKs |
| Encrypted blobs | On-chain contract data or logs/responses | Ciphertext content |
Grants are database-backed authorization records for encrypted data access.
21. Grant rights
Grant rights are bitmask-based.
| Right | Value | Meaning |
|---|---|---|
| READ | 1 |
Can decrypt content |
| WRITE | 2 |
Can update content where supported |
| MANAGE | 4 |
Can manage sub-grants |
Common combinations:
| Rights | Meaning |
|---|---|
1 |
Reader |
3 |
Reader + writer |
7 |
Owner / full rights |
Grant rights apply to encrypted content access.
They do not authorize arbitrary chain transactions.
22. Grant scope
Grants are scoped.
| Scope | Meaning |
|---|---|
1 |
Session / prepare / rule document |
2 |
Engine log |
3 |
Field-level scope, reserved |
A grant is identified by:
- RID
- scope
- grantee address
The grant database enforces uniqueness by RID, grantee and scope.
A grant for one RID/scope does not automatically grant access to another RID/scope.
23. Encryption boundary
XDaLa encryption separates plaintext access from chain execution.
High-level model:
- content is encrypted with a random data encryption key
- the encrypted blob is stored or emitted
- the data encryption key is wrapped for authorized recipients
- wrapped keys and access rights are stored in grant records
- recipients decrypt only if they have a valid grant and corresponding private key
Important security properties:
- plaintext is not exposed merely because ciphertext is public
- read public keys can be on-chain
- private read keys remain user-side
- grant records determine who can access wrapped DEKs
- expired grants should not authorize access
- READ permission is required for decryption
A grant authorizes encrypted data access, not consensus behavior.
24. Access matrix
High-level access-control matrix:
| Action | Boundary |
|---|---|
| Connect to node as peer | P2P/network configuration |
| Discover peers | Bootnode/discovery configuration |
| Serve public RPC | Infrastructure/RPC exposure |
| Submit raw transaction | RPC exposure plus transaction validity |
| Enter local txpool | TxPool admission |
| Execute transaction | Protocol validity and block inclusion |
| Participate in consensus | Active validator-set rules |
| Sign consensus messages | Validator key material |
| Trace transaction | Debug RPC exposure |
| Inspect txpool | TxPool RPC exposure |
| Manage XDaLa grants | XDaLa permit plus grant rules |
| Decrypt XDaLa content | Grant rights plus recipient private key |
| Control XDaLa session | ControlPermit / session authority |
| Update contract state | Contract-level permission and valid transaction |
Use the correct boundary for the correct action.
25. Public RPC exposure policy
Recommended public RPC exposure:
| Namespace | Public exposure |
|---|---|
eth_* |
Yes, with rate limits and method controls |
net_* |
Yes, with rate limits |
web3_* |
Yes, with rate limits |
xgr_* |
Endpoint-specific |
txpool_* |
Usually no; internal or controlled |
debug_* |
No |
| gRPC | No |
| Metrics | No |
A public RPC node should not hold validator signing material.
A validator node should not be used as a high-volume public RPC endpoint.
26. XGR extension endpoint exposure
XGR extension endpoints can have different exposure requirements.
Some may be safe for public read access.
Some may require permits.
Some may be appropriate only behind application backends.
Some may depend on off-chain services such as a grant database.
Endpoint exposure should be decided per method based on:
- whether it mutates off-chain state
- whether it reveals metadata
- whether it requires a permit
- whether it has expensive execution cost
- whether it accesses encrypted grant records
- whether it depends on private infrastructure
- whether it can be abused for enumeration
- whether it requires rate limiting
Do not expose all XGR extension endpoints merely because standard Ethereum RPC is public.
27. Operator deployment patterns
27.1 Validator node
Recommended validator node boundaries:
| Surface | Policy |
|---|---|
| P2P | Reachable according to validator topology |
| JSON-RPC | Local/private |
| gRPC | Local/private |
| Debug RPC | Internal only, preferably disabled from public paths |
| TxPool RPC | Internal only |
| Metrics | Monitoring network only |
| Validator key | Present and protected |
| Public HTTP gateway | Avoid |
27.2 Public RPC node
Recommended public RPC node boundaries:
| Surface | Policy |
|---|---|
| P2P | Reachable as needed |
| JSON-RPC | Public through reverse proxy |
| gRPC | Local/private |
| Debug RPC | Not public |
| TxPool RPC | Not public unless intentionally controlled |
| Metrics | Monitoring network only |
| Validator key | Absent |
| Sealing | Disabled for non-validator RPC nodes |
27.3 Internal tracing node
Recommended tracing node boundaries:
| Surface | Policy |
|---|---|
| JSON-RPC | Internal |
| Debug RPC | Internal only |
| TxPool RPC | Internal only |
| gRPC | Local/private |
| Metrics | Monitoring network |
| Validator key | Absent |
| Sealing | Disabled unless intentionally validator |
27.4 XDaLa service node
Recommended XDaLa service node boundaries:
| Surface | Policy |
|---|---|
| Standard RPC | As required by application |
| XGR extension RPC | Endpoint-specific |
| Grant database | Private service network |
| Permit validation | Required where applicable |
| Debug RPC | Internal only |
| Validator key | Absent unless also a validator by explicit design |
XDaLa service nodes may need database connectivity that normal public RPC nodes do not need.
That database boundary must be protected independently.
28. Common failure modes
28.1 Public RPC exposes debug methods
Impact:
- expensive tracing calls can overload the node
- execution internals become visible
- attackers can force high CPU/memory usage
Fix:
- block
debug_*at proxy or method-filter layer - route tracing to internal nodes only
- monitor debug request volume
28.2 Public RPC runs on validator node
Impact:
- validator resources compete with public traffic
- validator key material is colocated with public interface
- RPC abuse can affect consensus participation
Fix:
- move public RPC to non-validator nodes
- keep validator JSON-RPC local/private
- isolate validator infrastructure
28.3 CORS treated as security
Impact:
- browser access may be limited
- non-browser clients can still call the endpoint
- endpoint remains exposed
Fix:
- use firewall/reverse proxy/rate limits
- use CORS only as browser policy
- do not rely on CORS for authorization
28.4 Grant exists but decryption fails
Likely causes:
- grant expired
- READ right missing
- wrong RID
- wrong scope
- wrong grantee address
- stale read public key
- private read key mismatch
- corrupted
encDEK - unsupported encryption format
Fix:
- verify RID and scope
- verify grant rights
- verify expiry
- verify grantee address
- verify read key registration
- verify encrypted payload format
28.5 Permit rejected
Likely causes:
- wrong chain ID
- expired permit
- wrong domain name
- wrong version
- wrong verifying contract where required
- recovered signer mismatch
- signer lacks required authority
- malformed signature
- unsupported primary type
- action not allowed
Fix:
- rebuild typed data exactly
- verify chain ID
- verify expiry
- verify
primaryType - verify domain fields
- verify recovered signer
- verify contract/session authority
28.6 Transaction valid but not accepted into txpool
Likely causes:
- fee too low
- base fee not covered
priceLimitnot satisfied- nonce too low
- nonce gap
- insufficient balance
- block gas limit exceeded
- txpool full
- replacement underpriced
- wrong transaction type for active fork
Fix:
- check txpool status
- check account nonce
- check account balance
- check effective gas price
- check transaction type
- retry through a synced node
29. Security checklist
For validators:
- validator key isolated
- public RPC avoided
- debug RPC not public
- gRPC not public
- metrics private
- P2P reachable as required
- firewall configured
- filesystem permissions restricted
- backups encrypted
- signer errors monitored
For public RPC:
- no validator keys
- debug blocked
- gRPC private
- metrics private
- rate limits active
- batch limits active
- block-range limits active
- WebSocket limits active
- txpool namespace controlled
- resource usage monitored
For XDaLa/grants:
- permits verified
- chain ID checked
- expiry checked
- grant rights enforced
- grant database private
- READ required for decryption
- MANAGE required for grant administration where applicable
- read private keys stay user-side
- encrypted content treated as ciphertext only
- grant enumeration controlled
For contracts:
- owner roles reviewed
- executor roles reviewed
- upgrade authority reviewed
- session authority reviewed
- pause/emergency authority reviewed where applicable
- permissions tested before production deployment
30. Summary
| Boundary | Controls |
|---|---|
| Infrastructure | Firewall, proxy, TLS, rate limits, host access |
| P2P | Network key, peer ID, bootnodes, discovery, peer limits |
| RPC | Namespace exposure, method filtering, CORS, rate limits |
| Debug | Internal tracing access and concurrency limits |
| TxPool | Local admission rules and pool limits |
| Transaction validity | Signature, chain ID, nonce, balance, gas and fee rules |
| Validator authority | Consensus validator set and active release rules |
| Contract permissions | Contract owner/executor/role logic |
| XDaLa permits | EIP-712 signed authorization |
| XDaLa grants | RID/scope/grantee rights for encrypted data access |
The correct security model is layered.
No single mechanism replaces the others.