# Linea Bridge SDK
## Description
The Linea SDK package a TypeScript library for seamless bridging operations between Ethereum (L1) and Linea (L2) networks. It provides functionality for interacting with contracts and retrieving message status and information.
## Features
- 🌉 **Bridge Operations**
- Claim bridged assets on L1 and L2
- Get message proof to claim on L1
- Track message status across chains
- 🔍 **Message Tracking**
- Query message status
- Monitor bridge events
- ⚡ **Gas Management**
- Automatic gas estimation
- Custom fee strategies
## Installation
```bash
npm install @consensys/linea-sdk
# or
yarn add @consensys/linea-sdk
# or
pnpm add @consensys/linea-sdk
```
## Quick Start
```typescript
import { LineaSDK } from '@consensys/linea-sdk';
// Initialize SDK
const sdk = new LineaSDK({
network: 'linea-mainnet', // or 'linea-sepolia' or 'custom'
mode: 'read-write',
l1RpcUrlOrProvider: 'YOUR_L1_RPC_URL',
l2RpcUrlOrProvider: 'YOUR_L2_RPC_URL',
l1SignerPrivateKeyOrWallet: 'YOUR_L1_PRIVATE_KEY',
l2SignerPrivateKeyOrWallet: 'YOUR_L2_PRIVATE_KEY'
});
// Get L1 and L2 contract instances
const l1Contract = sdk.getL1Contract();
const l2Contract = sdk.getL2Contract();
```
## SDK Configuration
### LineaSDKOptions
The SDK can be initialized in two modes: `read-only` or `read-write`. The configuration options differ based on the mode:
#### Read-Only Mode
```typescript
interface ReadOnlyModeOptions {
network: "linea-mainnet" | "linea-sepolia" | "custom";
mode: "read-only";
l1RpcUrlOrProvider: string | Eip1193Provider;
l2RpcUrlOrProvider: string | Eip1193Provider;
l2MessageTreeDepth?: number;
l1FeeEstimatorOptions?: {
maxFeePerGasCap?: bigint;
gasFeeEstimationPercentile?: number;
enforceMaxGasFee?: boolean;
};
l2FeeEstimatorOptions?: {
maxFeePerGasCap?: bigint;
gasFeeEstimationPercentile?: number;
enforceMaxGasFee?: boolean;
};
}
```
#### Read-Write Mode
```typescript
interface WriteModeOptions extends ReadOnlyModeOptions {
mode: "read-write";
l1SignerPrivateKeyOrWallet: string | Wallet;
l2SignerPrivateKeyOrWallet: string | Wallet;
}
```
#### Field Explanations
- `network`: `"linea-mainnet"` | `"linea-sepolia"` | `"custom"`
- Description: Specifies the blockchain network to connect to.
- Possible Values:
- `"linea-mainnet"`: Connects to the Linea Mainnet contracts.
- `"linea-sepolia"`: Connects to the Linea Sepolia testnet contracts.
- `"custom"`: Allows for a custom contracts addresses, requiring custom RPC URLs for L1 and L2.
- `mode`: `"read-only"` | `"read-write"`
- Description: Determines the operation mode of the client.
- Possible Values:
- `"read-only"`: The client operates without the ability to send transactions; it can only read data from the blockchain.
- `"read-write"`: The client can read data and also send transactions, requiring signing credentials.
- `l1RpcUrlOrProvider`: `string | Eip1193Provider`
- Description: The RPC URL or provider for connecting to Layer 1 (L1) of the blockchain.
- Options:
- `string`: A URL pointing to the L1 RPC endpoint.
- `Eip1193Provider`: An EIP-1193 compliant provider instance.
- `l2RpcUrlOrProvider`: `string | Eip1193Provider`
- Description: The RPC URL or provider for connecting to Layer 2 (L2) of the blockchain.
- Options:
- `string`: A URL pointing to the L2 RPC endpoint.
- `Eip1193Provider`: An EIP-1193 compliant provider instance.
- `l2MessageTreeDepth?`: `number` (Optional)
- Description: Specifies the depth of the L2 message tree used in cryptographic operations or data structures.
- Default: If not provided, a default value of `5` is used which is the value used in Mainnet and Sepolia.
- `l1FeeEstimatorOptions?`: (Optional)
- Description: Configuration options for estimating transaction fees on Layer 1.
- Fields:
- `maxFeePerGasCap?`: `bigint` (Optional)
- Description: The maximum gas price (in wei) you're willing to pay per unit of gas on L1.
- Default: If not provided, a default value of `100000000000n` is used.
- `gasFeeEstimationPercentile?`: `number` (Optional)
- Description: The percentile of recent gas prices to use for fee estimation (used in `eth_feeHistory`).
- Default: If not provided, a default value of `20` is used.
- `enforceMaxGasFee?`: `boolean` (Optional)
- Description: If true, ensures the gas fee does not exceed maxFeePerGasCap.
- Default: `false`
- `l2FeeEstimatorOptions?`: (Optional)
- Description: Configuration options for estimating transaction fees on Layer 2.
- Fields:
- `maxFeePerGasCap?`: `bigint` (Optional)
- Description: The maximum gas price (in wei) you're willing to pay per unit of gas on L2.
- Default: If not provided, a default value of `100000000000n` is used.
- `gasFeeEstimationPercentile?`: `number` (Optional)
- Description: The percentile of recent gas prices to use for fee estimation (used in `eth_feeHistory`).
- Default: If not provided, a default value of `20` is used.
- `enforceMaxGasFee?`: `boolean` (Optional)
- Description: If true, ensures the gas fee does not exceed maxFeePerGasCap.
- Default: `false`
- `l1SignerPrivateKeyOrWallet`: `string | Wallet` (Required in "read-write" mode)
- Description: Credentials used to sign transactions on Layer 1.
- Options:
- `string`: A hexadecimal string representing the private key.
- `Wallet`: A wallet instance (e.g., from ethers.js) containing the private key and signing functionality.
- `l2SignerPrivateKeyOrWallet`: `string | Wallet` (Required in "read-write" mode)
- Description: Credentials used to sign transactions on Layer 2.
- Options:
- `string`: A hexadecimal string representing the private key.
- `Wallet`: A wallet instance for signing L2 transactions.
#### Additional Notes
- Common Fields: The fields `network`, `mode`, `l1RpcUrlOrProvider`, `l2RpcUrlOrProvider`, `l2MessageTreeDepth`, `l1FeeEstimatorOptions`, and `l2FeeEstimatorOptions` are common to both `read-only` and `read-write` modes.
- Mode-Specific Fields:
- In `read-only` mode:
- Only the common fields are required.
- The client can interact with the blockchain to read data but cannot send transactions.
- In `read-write` mode:
- All common fields are required.
- Additional Required Fields: l1SignerPrivateKeyOrWallet and l2SignerPrivateKeyOrWallet are necessary to enable transaction signing and sending capabilities.
- Fee Estimator Options:
- `maxFeePerGasCap`: Sets an upper limit on the gas price you're willing to pay.
- `gasFeeEstimationPercentile`: Helps in choosing a gas price based on recent network activity (used in `eth_feeHistory`).
- `enforceMaxGasFee`: Ensures that the gas fee does not exceed the maxFeePerGasCap value, providing cost control.
#### Usage Summary
- To read data only from the blockchain:
- Set `mode` to `read-only`.
- Provide the necessary network and RPC configurations.
- To read and write data (send transactions):
- Set `mode` to `read-write`.
- Provide all the common fields plus the signing credentials (`l1SignerPrivateKeyOrWallet` and `l2SignerPrivateKeyOrWallet`).
## Main Components
### L1 Contract (LineaRollupClient)
The L1 contract handles operations on the Ethereum side.
#### Message Operations
```typescript
// Get message by hash
const message = await l1Contract.getMessageByMessageHash(messageHash);
// Get messages by transaction hash
const messages = await l1Contract.getMessagesByTransactionHash(txHash);
// Get message status
const status = await l1Contract.getMessageStatus(messageHash);
// Get transaction receipt by message hash
const receipt = await l1Contract.getTransactionReceiptByMessageHash(messageHash);
```
#### Claiming Operations
```typescript
// Estimate claim gas
const gas = await l1Contract.estimateClaimGas(message);
// Claim message
const tx = await l1Contract.claim(message);
```
### L2 Contract (L2MessageServiceClient)
The L2 contract handles operations on the Linea side.
#### Message Operations
```typescript
// Get message by hash
const message = await l2Contract.getMessageByMessageHash(messageHash);
// Get messages by transaction hash
const messages = await l2Contract.getMessagesByTransactionHash(txHash);
// Get message status
const status = await l2Contract.getMessageStatus(messageHash);
// Get transaction receipt by message hash
const receipt = await l2Contract.getTransactionReceiptByMessageHash(messageHash);
```
#### Claiming and Transaction Operations
```typescript
// Estimate claim gas and fees
const gasFees = await l2Contract.estimateClaimGasFees(message)
// Claim message on L2
const tx = await l2Contract.claim(message);
```
## License
This package is licensed under the [Apache 2.0](../LICENSE-APACHE) and the [MIT](../LICENSE-MIT) licenses.