LPsLux Proposals
LP-1200

C-Chain - Core EVM Specification

Implemented

Core specification for the C-Chain (Contract Chain), Lux Network's EVM-compatible smart contract chain

Category
Core
Created
2025-12-11

Abstract

LP-1200 specifies the C-Chain (Contract Chain), Lux Network's EVM-compatible smart contract blockchain. The C-Chain runs a full Ethereum Virtual Machine, enabling deployment of Solidity and Vyper smart contracts with full tooling compatibility.

Motivation

An EVM-compatible chain provides:

  1. Developer Experience: Familiar tooling and languages
  2. Ecosystem Compatibility: Direct deployment of existing contracts
  3. DeFi Foundation: Native support for DeFi protocols
  4. Tooling Support: Works with Foundry, Hardhat, Remix, etc.

Specification

Chain Parameters

ParameterValue
Chain IDC
VM IDevm
VM Nameevm
EVM Chain ID96369 (Mainnet), 96368 (Testnet)
Block Time~2 seconds
ConsensusQuasar

Implementation

Go Packages:

  • github.com/luxfi/node/vms/cchainvm (VM wrapper)
  • github.com/luxfi/geth (EVM implementation)
import (
    cvm "github.com/luxfi/node/vms/cchainvm"
    "github.com/luxfi/node/utils/constants"
)

// VM ID constant
var EVMID = constants.EVMID // ids.ID{'e', 'v', 'm'}

// Create C-Chain VM
factory := &cvm.Factory{}
vm, err := factory.New(logger)

Directory Structure

node/vms/cchainvm/        # VM wrapper
├── factory.go            # VM factory
├── vm.go                 # Main VM implementation
└── *_test.go             # Tests

geth/                     # EVM implementation (luxfi/geth)
├── core/                 # Core EVM logic
│   ├── state/           # State management
│   ├── vm/              # Virtual machine
│   └── types/           # Transaction types
├── plugin/evm/          # Plugin interface
└── rpc/                 # JSON-RPC API

EVM Compatibility

C-Chain maintains full EVM equivalence:

FeatureStatus
EVM OpcodesFull support
SolidityFull support
VyperFull support
PrecompilesStandard + Lux extensions
JSON-RPCFull Ethereum compatibility
Web3.js/EthersFull compatibility

Lux-Specific Precompiles

AddressNameGasDescription
0x0100secp256r13,450P-256 signature verification
0x0200ML-DSA50,000Post-quantum signatures
0x0201ML-KEM30,000Post-quantum key encapsulation
0x0300WarpVerify100,000Cross-chain message verification

Transaction Types

TypeEIPDescription
Legacy-Pre-EIP-2718 transactions
Access ListEIP-2930With access list
Dynamic FeeEIP-1559Base fee + priority fee
BlobEIP-4844For blob transactions

Gas Mechanics

type GasConfig struct {
    MinBaseFee     uint64 // 25 gwei
    MaxBaseFee     uint64 // 1000 gwei
    BlockGasLimit  uint64 // 15,000,000
    TargetGasUsage uint64 // 50% of limit
}

LP-176 Dynamic Gas:

  • Base fee adjusts based on block utilization
  • Target: 50% block capacity
  • Max change: 12.5% per block

API Endpoints

JSON-RPC (eth namespace)

MethodDescription
eth_blockNumberGet latest block number
eth_getBalanceGet account balance
eth_sendTransactionSend transaction
eth_callExecute read-only call
eth_estimateGasEstimate gas for transaction
eth_getLogsGet event logs

Lux Extensions (lux namespace)

MethodDescription
lux_getAtomicTxGet atomic transaction
lux_issueTxIssue atomic transaction
lux_getUTXOsGet atomic UTXOs

REST Endpoints

POST /ext/bc/C/rpc              # JSON-RPC endpoint
GET  /ext/bc/C/lux/getUTXOs     # Get atomic UTXOs
POST /ext/bc/C/lux/issueTx      # Issue atomic tx

Smart Contract Standards

C-Chain supports all standard ERC/LRC token standards:

StandardLPDescription
LRC-20LP-2300Fungible tokens
LRC-721LP-2500Non-fungible tokens
LRC-1155LP-2501Multi-tokens
LRC-4626LP-2400Tokenized vaults

Cross-Chain Operations

Atomic Transactions

type AtomicTx struct {
    NetworkID    uint32
    BlockchainID ids.ID
    Ins          []*AtomicInput
    Outs         []*AtomicOutput
}

Warp Messaging

interface IWarpMessenger {
    function sendWarpMessage(bytes calldata payload) external returns (bytes32);
    function getVerifiedWarpMessage(uint32 index) external view returns (WarpMessage memory);
}

Configuration

{
  "cchainvm": {
    "enabledEIPs": [1559, 2718, 2930, 4844],
    "gasLimit": 15000000,
    "minBaseFee": 25000000000,
    "targetBlockRate": 2,
    "allowUnprotectedTxs": false,
    "precompiles": {
      "secp256r1": true,
      "mldsa": true,
      "mlkem": true,
      "warp": true
    }
  }
}

Performance

MetricValue
Block Time~2 seconds
Transaction Throughput~4,500 TPS
Finality~2 seconds
Gas Limit15,000,000

Rationale

Design decisions for C-Chain:

  1. Full EVM Compatibility: Maximize ecosystem compatibility
  2. Lux Precompiles: Add network-specific functionality
  3. Atomic Transactions: Enable cross-chain operations
  4. Dynamic Gas: Prevent fee volatility

Backwards Compatibility

LP-1200 supersedes LP-12. Both old and new numbers resolve to this document.

Test Cases

# Test C-Chain VM
cd node && go test ./vms/cchainvm/... -v

# Test EVM implementation
cd geth && go test ./core/vm/... -v

# Test precompiles
go test ./core/vm/contracts_test.go -v

# Smart contract tests
cd standard && forge test

Reference Implementation

Repositories:

  • github.com/luxfi/node (VM wrapper)
  • github.com/luxfi/geth (EVM implementation)

Packages:

  • vms/cchainvm
  • geth/core/vm
  • geth/plugin/evm

Security Considerations

  1. Reentrancy: Standard EVM reentrancy protections
  2. Gas Limits: Prevent DoS via gas limits
  3. Precompile Security: Audited implementations
  4. Atomic TX Security: Cross-chain atomicity guarantees
LPTitleRelationship
LP-0012C-Chain SpecificationSuperseded by this LP
LP-2100PrecompilesSub-specification
LP-2200Gas MechanicsSub-specification
LP-2300Smart Contract StandardsSub-specification
LP-2400DeFi ProtocolsSub-specification
LP-2600Rollups/L2Sub-specification

Copyright and related rights waived via CC0.