Thesettlementlayerforthemachineeconomy.

Network

Verify LayerX evidence inside an EVM call

Cross-domain precompile connector

Seven native precompiles at fixed addresses replace a bridge contract, a relayer and a message queue.

Your Paxeer contract calls LayerXVerify at 0x1012 and gets back a verified receipt, inclusion proof, state proof or discovery proof, or the call reverts. Four precompiles decode LayerX evidence with pure Go verification packages that touch no clock, network or database. Three more move value or run a local market under signed evidence. Every trust anchor arrives as calldata, so your contract decides which sequencer key, batch range or state root it accepts.

What it does

Paxeer X is one network with two execution domains: the Paxeer EVM base layer and the LayerX agent domain. The connector between them is a set of seven native precompiles at fixed EVM addresses, not a message queue or a bridge contract. Four of them decode and verify the evidence LayerX produces: signed receipts, batch headers, state witnesses and checkpoint certificates. They use pure Go verification packages with no clock, network or database access. The other three move value or run a local market on Paxeer under signed evidence.

Key capabilities

  • LayerXVerify at 0x1012 verifies receipts, inclusion proofs, state proofs and discovery proofs statelessly.
  • Addr at 0x1004 binds an EVM address to a did:layerx key, both keys consenting.
  • LayerXCustody at 0x1013 releases custodied funds only against verified withdrawal or exit evidence.
  • LayerXAnchor at 0x1014 registers checkpoints, guarantor bonds, attestations and challenges.
  • LayerXExchange 0x1015, LayerXBridge 0x1016 and Launchpad 0x1017 cover intents, attested bridging and a local AMM.
  • Each precompile is declared as a Solidity interface and implemented as a native Go function in the EVM module.

Who it's for

Solidity developers writing Paxeer contracts that must act on facts produced in the LayerX domain.

Why it matters

A contract can treat a LayerX receipt or balance as a verified fact inside a single EVM call, with no relayer, no wrapped-message queue and no trust in an off-chain operator. Every trust anchor is calldata, so the calling contract decides which sequencer key, batch range or state root it accepts.

Differentiators

Verification runs inside the EVM over LayerX's own canonical encodings rather than in a bridge contract, and the Go verifier is tested against fixtures whose verdicts come from the Rust verifier, not from the Go code under test.

Outcomes

  • Treat a LayerX receipt as a verified fact in one call
  • No relayer, no wrapped-message queue, no off-chain operator to trust
  • Your contract chooses the sequencer key and batch range it accepts

Technical notes

  • Addresses: 0x1004 Addr, 0x1012 LayerXVerify, 0x1013 LayerXCustody, 0x1014 LayerXAnchor, 0x1015 LayerXExchange, 0x1016 LayerXBridge, 0x1017 Launchpad.
  • LayerXVerify gas is 3000 + 16 per calldata byte + 4000 per signature + 100 per proof node. Signatures counted: 1 for verifyEd25519, verifyReceipt and verifyDiscoveryProof, 2 for verifyReceiptInclusion, 0 for verifyStateProof. Proof nodes are the proof or witness length divided by 32.
  • verifyEd25519 returns a boolean; every other method reverts unless the evidence verifies, so any returned value is a verified fact. Domains 0..19 are the LayerX hash-domain tags, domain 255 signs the message bytes as given, and a message may not exceed 1 MiB (codec.MaxMessageBytes = 1_048_576).
  • verifyReceiptInclusion checks the header's sequencer identity and authorised batch range, the header signature, the Merkle path to the header's receipt root, the receipt's own sequencer signature, and that the receipt's protocol version and global sequence fall inside the header's committed range.
  • LayerXVerify cannot be reached by delegatecall and is non-payable.
  • Solidity consumer interfaces exist for Addr, LayerXVerify, LayerXCustody and LayerXAnchor under contracts/src/precompiles/; the exchange, bridge and launchpad precompiles have no interface file there yet.
  • LayerXExchange records trading intents only. It never matches an order on Paxeer, and no running service yet consumes those intents on the LayerX side.
  • The custody, anchor, exchange, bridge and launchpad stores and precompiles come live at the v6.6 upgrade height; each precompile's versioned entry is registered under the latest upgrade name only.
import {LAYERX_VERIFY_CONTRACT, ILayerXVerify} from "./precompiles/ILayerXVerify.sol";

function settle(bytes calldata receipt, bytes32 sequencerKey) external {
    ILayerXVerify.ReceiptFacts memory facts =
        LAYERX_VERIFY_CONTRACT.verifyReceipt(receipt, sequencerKey);
    require(facts.resultCode == 0, "layerx activity failed");
    _credit(facts.to, facts.asset, facts.amount);
}

More in Network

Build on Paxeer.

Give your agent a wallet, set its policy, and settle your first call on LayerX.