NEXUS

Checkpoint

What is a Checkpoint?

A checkpoint is a snapshot of the CROSS network state. It is verified and signed by a sufficient number of validators and submitted to a smart contract on Binance Smart Chain. This submission process is called anchoring.

Once a checkpoint is submitted to BSC, it proves that all CROSS network blocks included in that checkpoint are finalized and form a canonical chain.In other words, by anchoring the state of the CROSS network to BSC, the trustworthiness of the CROSS network is reinforced.

Checkpoints submitted to BSC are publicly accessible, allowing anyone to verify whether the CROSS network they are connected to is in a secure and valid state.

Checkpoint Generation Process

Checkpoints are created through the following steps:

  1. A validator monitoring the CROSS network observes a sufficient number of finalized blocks.
  2. These observed blocks are collected, and a root hash is calculated.
  3. A checkpoint block is created using the calculated hash.
  4. The validator signs the checkpoint block with their private key and shares it with other validators.
  5. A designated leader validator, after collecting enough valid signatures, submits the checkpoint block and signatures to the CrossCheck contract on BSC.
  6. The CrossCheck contract verifies the authenticity of the submitted signatures and validates the checkpoint before storing it.

Checkpoint Structure

The checkpoint block submitted to BSC contains the following structure:

struct CheckBlock {
    uint64 nonce;
    uint64 start;
    uint64 end;
    uint64 createdAt;
    bytes32 rootHash;
    address proposer;
}
  • nonce: Unique identifier for the checkpoint
  • start: Starting block number of the checkpoint
  • end: Ending block number of the checkpoint
  • createdAt: Timestamp of when the checkpoint was submitted to BSC (uses BSC's block.timestamp)
  • rootHash: The computed root hash
  • proposer: Address of the validator who submitted the checkpoint

Root Hash

%%{init: {'theme': 'dark', 'themeVariables': {'background': 'transparent'}}}%%
graph BT
    B1("B1") --> H1("H(B1)")
    B2("B2") --> H2("H(B2)")
    B3("B3") --> H3("H(B3)")
    B4("B4") --> H4("H(B4)")
    B5("B5") --> H5("H(B5)")
    B6("B6") --> H6("H(B6)")
    B7("B7") --> H7("H(B7)")
    B8("B8") --> H8("H(B8)")

    H1 --> H12("H(B1+B2)")
    H2 --> H12
    H3 --> H34("H(B3+B4)")
    H4 --> H34
    H5 --> H56("H(B5+B6)")
    H6 --> H56
    H7 --> H78("H(B7+B8)")
    H8 --> H78

    H12 --> H1234("H(B12+B34)")
    H34 --> H1234
    H56 --> H5678("H(B56+B78)")
    H78 --> H5678

    H1234 --> Root("Root Hash")
    H5678 --> Root

The root hash is generated by computing the Merkle hash of block hashes from start to end.A Merkle tree is constructed using those block hashes, and the root of the tree becomes the root hash.

The block hash is derived from each block's header and serves as its unique identifier:

blockHash := blockHeader.Hash() // keccak256(rlpEncode(blockHeader))

The block hashes are then used to build the Merkle tree:

// collect block hashes
hashes := append(hashes, blockHash1, blockHash2, ..., blockHashN)
// build merkle tree
tree := merkle.NewTreeWithOpts(merkle.TreeOptions{EnableHashSorting: false, DisableHashLeaves: true})
tree.Generate(hashes, sha3.NewLegacyKeccak256())
// calculate the root hash
rootHash := tree.Root().Hash

Submission & Verification

A validator group operates to verify blocks generated on the CROSS network.

Once enough blocks are generated, validators create a checkpoint, sign it using their private key (via EIP-712), and submit it to the group.The elected leader validator confirms the consistency of the submitted checkpoints and the validity of the signatures.

When a valid checkpoint and sufficient signatures are collected, the leader submits them to the CrossCheck contract on BSC.The contract performs an additional verification on-chain to ensure data integrity and immutability.

Proof

To be updated in detail.

The CrossCheck contract allows anyone to verify whether a specific block from the CROSS network has been submitted.

First, request the Check Proof from the CROSS network:

curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"cross_getCheckProof","params":[{"blockNumber":11011},""],"id":1}' https://mainnet.cross-nexus.com:22001

Sample result:

{"jsonrpc":"2.0","id":1,"result":{"start":11000,"proof":["0x...", "0x...", ...]}}

Then use this result to request a proof verification from CrossCheck on BSC:

curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{"from":null,"to":"0xbf986f823f8d077b7ed8667e7c9de266057d48762b002401c847a7051473c658","data":"0x..."},""],"id":1}' https://<bsc_mainnet_node>

Sample result:

{"jsonrpc":"2.0","id":1,"result":"0x01"}

© 2025 NEXUS Co., Ltd. All Rights Reserved.