State committees

Fast-finality state proofs for optimistic rollups. Easily integrate restaked cross-chain security into any existing messaging or bridging protocol.

struct block {
    var block_header,
    var current_committee,
    var next_committee,
    }

struct block_attestation {
    var block,
    var signer_public_keys,
    var bls_signature,
    var previous_block_attestation
    }

SHARED CROSS-CHAIN STATE SECURITY POWERED BY RESTAKING AND ZK COPROCESSING

integrate with Trustless cross-chain states

Lagrange State Proofs use restaked collateral to bring fast and provable one-slot finality to optimistic rollups. Request a state proof and verify it cross-chain. It's that simple.

// Create a configuration to request an array of 2 state proofs for Arbitrum rollup blocks

const providerUrl = {
    arbitrum: "https://arbitrum-mainnet.infura.io/v3/PROJECT-ID"
};

const proofRequests = [
    {
       chain: 'Arbitrum',
       block: 91504300,
    },
    {
       chain: 'Arbitrum',
       block: 91504301,
    }
];

// Request state proofs generated by the Arbitrum State Committee

const lagrangeSDK = initializeSDK(providerUrl);
const arbitrumStateProofs = await               lagrangeSDK.getProof(proofRequests);

//Create a dataframe of storage proofs for 1024 consecutive blocks of Polygon

var dataframe = polygon.createDataFrame({
   block_range_start:
        polygon.currentBlock() - 1024,
   block_range_start:
        polygon.currentBlock(),
   interval: 1,
   content:{
        address:"0xb794f...68",
        keys:[
         {name: liquidity_1,           memory:"0x56e81...21"},
         {name: liquidity_2,           memory:"0x56211...32"},
        ]
   }
})

// Create a configuration to request an array of 2 state proofs for Arbitrum rollup blocks

const providerUrl = {
    arbitrum: https://arbitrummainnet.infura.io/v3/PROJECT-ID"
};

const proofRequests = [
    {
       chain: 'Arbitrum',
       block: 91504300,
    },
    {
       chain: 'Arbitrum',
       block: 91504301,
    }
];

// Request state proofs generated by the Arbitrum State Committee

const lagrangeSDK = initializeSDK(providerUrl);
const arbitrumStateProofs = await               lagrangeSDK.getProof(proofRequests);

//Create a dataframe of storage proofs for 1024 consecutive blocks of Polygon

var dataframe = polygon.createDataFrame({
   block_range_start:
        polygon.currentBlock() - 1024,
   block_range_start:
        polygon.currentBlock(),
   interval: 1,
   content:{
        address:"0xb794f...68",
        keys:[
         {name: liquidity_1,           memory:"0x56e81...21"},
         {name: liquidity_2,           memory:"0x56211...32"},
        ]
   }
})

Easy to verify On and off chain

Easily verify a state proof directly on any EVM chain in a Lagrange verifier contract or integrate it with an existing cross-chain bridge or messaging protocol through simple off-chain verification.

//Integrate a state proof into any existing messaging protocol or bridge with a simple function call

const
validity = await lagrangeSDK.verify({
    publicStatement: arbitrumStateProofs.publicStatement,
    proof: arbitrumStateProofs.proof
})

//Or verify a state proof on-chain through a simple verifier contract call

await lagrangeSDK.submitStateProof({
    chain: "ethereum",
    provider: rpc_provider,
    publicStatement: arbitrumStateProofs.publicStatement,
    proof: arbitrumStateProofs.proof
})

//Integrate a state proof into any existing messaging protocol or bridge with a simple function call

const validity = await lagrangeSDK.verify({
    publicStatement: arbitrumStateProofs.publicStatement,
    proof: arbitrumStateProofs.proof
})

//Or verify a state proof on-chain through a simple verifier contract call

await lagrangeSDK.submitStateProof({
    chain: "ethereum",
    provider: rpc_provider,
    publicStatement: arbitrumStateProofs.publicStatement,
    proof: arbitrumStateProofs.proof
})

Aggregate Multi-Chain States into One Proof

Customize your proof requirements, select your chains and aggregate your proofs. Lagrange State Proofs make it easy to combine proofs of present and historical blocks across multiple chains.

// Create a configuration to request an array of state proofs for Optimism, Base and Arbitrum rollup blocks

const proofRequests = [
    {
       chain: 'Optimism',
       block: 98960825,
    },
    {
       chain: 'Base',
       block: 4553170,
    },
    {
       chain: 'Arbitrum',
       block: 91504300,
    },
    {
       chain: 'Arbitrum',
       block: 91504301,
    },
           .
           .
           .

    {
       chain: 'Arbitrum',
       block: 91504399,
    }
];

Logo SND.XYZ

Sign up to stay up to date on Lagrange

Want to become an early development partner? Sign up to build on the Lagrange Protocol today.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.