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,
}
];