QoreChain implements a 4-tier hierarchical chain architecture through the x/multilayer module. The main chain serves as the settlement and trust root, while subsidiary layers (sidechains, paychains, and rollups) handle specialized workloads with different performance and security trade-offs.
The main chain is the trust root for the entire QoreChain ecosystem.
Property
Value
Consensus
Full Triple-Pool CPoS (see Consensus Mechanism)
Security
PQC-secured with Dilithium-5 signatures
Role
Settlement layer, state anchor storage, QCAI routing engine, trust root
Block time
~5 seconds
All subsidiary layers periodically anchor their state roots to the main chain via Hierarchical Commitment Schemes (HCS).
Sidechains
Sidechains handle compute-intensive operations such as DeFi protocols, gaming engines, and IoT data processing.
Parameter
Value
Minimum validators
3
Maximum validators
10
Minimum creator stake
1,000 QOR
Maximum active sidechains
10
Target domains
DeFi, Gaming, IoT
Paychains
Paychains are optimized for high-frequency microtransactions with minimal latency.
Parameter
Value
Target block time
500 ms
Maximum active paychains
50
Minimum creator stake
100 QOR
Target domains
Payments, streaming, micro-transactions
Rollups (v1.3.0)
Rollups are application-specific chains deployed via the Rollup Development Kit (x/rdk). They register as a rollup layer type within the multilayer module.
Parameter
Value
Settlement modes
4 (optimistic, zk-proof, sovereign, hybrid)
Maximum active rollups
100
Minimum creator stake
10,000 QOR
Layer type
rollup
Target domains
DeFi, Gaming, NFT, Enterprise
Rollup deployment and configuration is covered in detail in Rollup Development Kit.
QCAI Transaction Routing
The QCAI router evaluates all active layers for each incoming transaction and selects the optimal destination using a 4-factor weighted scoring model.
Scoring Formula
Each candidate layer receives a composite score (higher is better):
Factor
Weight
Description
Congestion
0.30
Current load level (inverted: lower congestion = higher score)
Capability
0.40
How well the layer matches the transaction requirements
Cost
0.20
Fee multiplier relative to main chain (inverted: lower cost = higher score)
Latency
0.10
Expected time to finality (inverted: lower latency = higher score)
Confidence Threshold
The router requires a minimum confidence score of 0.6 before routing a transaction to a subsidiary layer. If no layer meets this threshold, the transaction defaults to the main chain.
A preferred layer hint can be supplied by the transaction sender. If the preferred layer scores at least 80% of the confidence threshold (i.e., 0.48), it is accepted as the routing target.
Payload Heuristics
When detailed transaction metadata is unavailable, the router uses payload size as a classification signal:
Payload Size
Preferred Layer
Rationale
< 256 bytes
Paychain
Likely a simple transfer or microtransaction
256 - 1,024 bytes
Main Chain
Standard transaction complexity
> 1,024 bytes
Sidechain
Likely a complex contract interaction
Hierarchical Commitment Schemes (HCS)
Subsidiary layers periodically commit their state to the main chain via state anchors. Each anchor contains a cryptographic proof of the subsidiary chain's state at a given height.
Anchor Contents
Field
Description
layer_id
Identifier of the subsidiary layer
layer_height
Block height on the subsidiary chain
state_root
Merkle root of the subsidiary chain's state tree
validator_set_hash
Hash of the validator set that signed the commitment
pqc_aggregate_signature
Dilithium-5 aggregate signature over the anchor data
transaction_count
Number of transactions since the last anchor
compressed_state_proof
Compressed state transition proof
Anchor Submission
Anchors are submitted to the main chain via MsgAnchorState. The keeper validates the anchor according to the following steps:
1
Layer exists and is active
The keeper verifies that the layer exists in state and currently has active status.
2
Minimum anchor interval elapsed
The keeper checks that at least min_anchor_interval blocks (default: 100) have elapsed since the last anchor for this layer.
3
PQC aggregate signature
The keeper ensures the PQC aggregate signature is present and valid for the anchor data.
Challenge Period
Each anchor enters a challenge period of 24 hours (86,400 seconds, configurable per layer). During this period, any party can dispute the anchor by submitting a fraud proof via MsgChallengeAnchor. If the fraud proof is valid, the anchor is invalidated and the subsidiary chain's state is rolled back to the previous anchor.
After the challenge period expires without a successful dispute, the anchor is considered finalized.
Cross-Layer Fee Bundling (CLFB)
CLFB allows a single fee payment on the source layer to cover execution across multiple layers in a cross-layer transaction path.
Fee Calculation
Where:
layer_multiplier_i is the base fee multiplier for each layer in the transaction path (main chain = 1.0).
totalGas is the estimated total gas consumption across all layers.
The result is denominated in uqor with a minimum fee of 1 uqor.
Example
A cross-layer transaction touches three layers: main chain (multiplier 1.0), a sidechain (multiplier 0.5), and a paychain (multiplier 0.1).
CLFB can be enabled or disabled globally via the cross_layer_fee_bundling parameter, and individual layers can opt out via their cross_layer_fee_bundling_enabled configuration flag.
Layer Lifecycle
Each subsidiary layer progresses through a well-defined lifecycle:
Status
Description
Allowed Transitions
Proposed
Layer has been registered but not yet activated
Active, Decommissioned
Active
Layer is operational and accepting transactions
Suspended, Decommissioned
Suspended
Layer is temporarily paused (e.g., for maintenance or due to security concerns)
Active, Decommissioned
Decommissioned
Layer is permanently shut down (terminal state)
None
Status transitions are enforced by the keeper. Invalid transitions (e.g., Decommissioned to Active) are rejected.
Parameters
Parameter
Type
Default
Description
max_sidechains
uint64
10
Maximum number of active sidechains
max_paychains
uint64
50
Maximum number of active paychains
min_anchor_interval
uint64
100
Minimum blocks between state anchors
max_anchor_interval
uint64
1,000
Maximum blocks between state anchors (forced anchor)
default_challenge_period
uint64
86,400
Default challenge period in seconds (24 hours)
min_sidechain_stake
string
1,000,000,000
Minimum stake to create a sidechain (1,000 QOR in uqor)
min_paychain_stake
string
100,000,000
Minimum stake to create a paychain (100 QOR in uqor)