Quantum Chainquantumcha.in ↗
Protocol overview

Understand the chain before building on it.

Quantum Chain is a public blockchain with post-quantum transaction authorization and an EVM-compatible execution environment called the Quantum Virtual Machine. Existing contract knowledge carries over, but account keys, signed transaction envelopes, and signature verification are different.

Network identity

Mainnet and the permanent Sandbox.

PropertyQuantum SandboxQuantum Mainnet
Network codequantum-sandboxquantum-mainnet
Chain ID20804 (0x5144)20803 (0x5143)
P2P network ID2080420803
Genesis hash0x3d9c6813ee3edd227abb5345aff55d6e2e76bc9db3a031d92d0e2bd54c8997e70x3517886b1e875e8ab5229f4ced47be7020c81775d93abac25824ca113b7a0816
Native currencyQuantum (QUANTUM), 18 decimalsQuantum (QUANTUM), 18 decimals
ConsensusClique Proof of AuthorityClique Proof of Authority
Configured block period3 seconds15 seconds

A chain ID provides replay protection, but it does not uniquely identify a deployed chain. Validate the genesis hash as well. Both released SDKs use the permanent Sandbox in examples without hard-coding it into transaction construction.

Architecture

From an application request to chain state.

ApplicationChooses the transfer, contract call, or deployment and applies business policy.
Transaction layerResolves fields and serializes the canonical unsigned Quantum envelope.
SignerSigns the exact 32-byte digest and returns the public key and signature.
Quantum nodeAccepts raw bytes, executes them in the QVM, and produces a receipt.

Validators and full nodes execute the same deterministic state transition. RPC gateways expose chain state and accept complete signed transactions. The chain does not know about SDK download users, Qustody vault accounts, application sessions, or your internal approval model.

QVM and EVM

Contract execution is familiar. Authorization is not.

AreaWhat carries overWhat changes
ContractsSolidity compilation, ABI encoding, bytecode, storage, events, logs, calls, and gas estimationContracts that verify user signatures must use the Quantum verification primitive
Addresses20-byte values displayed as 0x plus 40 hexadecimal charactersThe address is derived from a post-quantum public key
TransactionsNonce, gas, value, recipient, calldata, receipts, status, and logsThe signed envelope carries a large public key and signature instead of recoverable ECDSA fields
RPC toolingJSON-RPC shapes and common ABI codecs remain usefulEthereum wallets and signers cannot produce a valid Quantum transaction
On-chain signature checksA contract can authorize a digest and expected signerecrecover-based code must be redesigned around the precompile at 0x0b
Tooling boundaryUse viem, ethers, web3.py, Solidity tools, or Foundry for ABI and contract workflows where appropriate. Use the Quantum SDK or another canonical Quantum signer for keys, signing, and transaction serialization.

Migration checklist

Accounts and keys

A Quantum account starts with a post-quantum keypair.

Private key
Secret signing material. It stays inside the chosen signing boundary and must never be sent to RPC.
Public key
The canonical 1,952-byte verification key. Signed transactions carry it so the sender can be derived and the signature can be checked.
Address
The low 20 bytes of Keccak-256(publicKey), displayed as a normal hexadecimal address.
Signing digest
The exact 32-byte Keccak-256 result produced from the canonical unsigned transaction serialization.
Signature
The canonical 3,293-byte signature over the signing digest.

Use QuantumWallet.generate() in JavaScript or Signer.generate() in Python for disposable development keys. For production, place keys behind an approved signer boundary. Do not derive Quantum accounts with a standard Ethereum wallet or secp256k1 mnemonic path.

Transaction model

The digest and wire bytes are protocol data.

Do not recreate these rules in application code. The SDKs mirror the authoritative Go implementation and expose immutable structured transactions plus canonical serialization helpers.

Legacy envelope

RLP([chainId, nonce, gasPrice, gasLimit, to, value, data, signature, publicKey])

Dynamic-fee envelope

0x02 || RLP([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, accessList, signature, publicKey])

For an unsigned transaction, the signature and public-key fields are empty. The signing digest is Keccak-256 of that canonical unsigned serialization. After signing, both fields are attached and the transaction hash is Keccak-256 of the complete signed serialization.

  1. Resolve chain ID, pending nonce, gas and fee fields.
  2. Construct an unsigned transaction with binary calldata.
  3. Digest the canonical unsigned bytes into exactly 32 bytes.
  4. Sign through a Quantum-compatible signer.
  5. Attach the exact signature and public key.
  6. Serialize the signed transaction once.
  7. Submit with qc_sendRawTransaction and retain the local hash.
  8. Confirm a successful receipt before treating the operation as complete.
On-chain verification

The QVM exposes a post-quantum verification precompile.

The precompile is at address 0x000000000000000000000000000000000000000b. It accepts exactly 5,277 bytes in this order:

[32-byte digest][1,952-byte public key][3,293-byte signature]

It returns 32 bytes. The last byte is 0x01 when the signature is valid and 0x00 when it is invalid. An incorrect input length fails the call.

QuantumSignature.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;

library QuantumSignature {
    address internal constant VERIFY = address(0x0b);

    function isValid(
        bytes32 digest,
        bytes memory publicKey,
        bytes memory signature
    ) internal view returns (bool) {
        if (publicKey.length != 1952 || signature.length != 3293) return false;
        (bool ok, bytes memory output) = VERIFY.staticcall(
            bytes.concat(digest, publicKey, signature)
        );
        return ok && output.length == 32 && uint256(bytes32(output)) == 1;
    }
}
No address recoveryThe precompile returns a verification boolean. Derive and compare the expected address separately from the public key. Do not copy an Ethereum ecrecover interface and assume equivalent return data.
Security scope

Post-quantum signatures solve one part of the system.

They protect transaction authorization against the class of attacks addressed by the chosen post-quantum signature construction. They do not automatically secure application servers, private-key storage, dependencies, RPC access, smart-contract logic, governance, validators, or operational policy.