Parameters
This method does not take any parameters.
Response
The highest slot that can be inserted into the shred database
Code Examples
Basic Request
curl https://rpc.orbitflare.com -X POST -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getMaxShredInsertSlot"
}'
Using web3.js
import { Connection } from '@solana/web3.js';
const connection = new Connection('https://rpc.orbitflare.com');
// Get max shred insert slot
const maxShredInsertSlot = await connection.getMaxShredInsertSlot();
console.log('Max shred insert slot:', maxShredInsertSlot);
// Check if a slot can be inserted
async function canInsertSlot(slot: number) {
const maxShredInsertSlot = await connection.getMaxShredInsertSlot();
return slot <= maxShredInsertSlot;
}
// Get insert range
async function getInsertRange() {
const maxShredInsertSlot = await connection.getMaxShredInsertSlot();
const firstAvailableBlock = await connection.getFirstAvailableBlock();
return {
startSlot: firstAvailableBlock,
endSlot: maxShredInsertSlot,
totalSlots: maxShredInsertSlot - firstAvailableBlock + 1
};
}
Notes
- Returns the highest slot that can be inserted into the shred database
- Used to determine the range of slots available for shred insertion
- The response is immediate as it reads from the current state
- Slots beyond this value cannot be inserted
- This value can change as the node processes new slots
Best Practices
- Use this method to determine shred insertion availability
- Cache results when appropriate to reduce RPC load
- Consider the impact of slot processing
- Monitor for changes in max shred insert slot
- Use in conjunction with other slot-related methods
Common Errors
| Code | Message | Solution |
|---|
| -32601 | Method not found | Verify you’re connected to a Solana RPC node |
| -32007 | Slot information unavailable | Node may be bootstrapping or syncing |
Use Cases
-
Shred Insertion Planning
interface InsertPlan {
startSlot: number;
endSlot: number;
totalSlots: number;
availableSlots: number[];
unavailableSlots: number[];
}
async function planShredInsertion(
targetSlots: number[]
): Promise<InsertPlan> {
const maxShredInsertSlot = await connection.getMaxShredInsertSlot();
const firstAvailableBlock = await connection.getFirstAvailableBlock();
const availableSlots = targetSlots.filter(
slot => slot >= firstAvailableBlock && slot <= maxShredInsertSlot
);
const unavailableSlots = targetSlots.filter(
slot => slot < firstAvailableBlock || slot > maxShredInsertSlot
);
return {
startSlot: firstAvailableBlock,
endSlot: maxShredInsertSlot,
totalSlots: maxShredInsertSlot - firstAvailableBlock + 1,
availableSlots,
unavailableSlots
};
}
-
Slot Processing Monitoring
interface ProcessingAlert {
type: 'lag' | 'gap' | 'unavailable';
message: string;
slot: number;
maxShredInsertSlot: number;
}
class ProcessingMonitor {
private previousMaxSlot: number | null = null;
async monitorProcessing(
targetSlots: number[]
): Promise<ProcessingAlert[]> {
const maxShredInsertSlot = await connection.getMaxShredInsertSlot();
const alerts: ProcessingAlert[] = [];
// Check for processing lag
if (this.previousMaxSlot !== null) {
const expectedProgress = this.previousMaxSlot + 1;
if (maxShredInsertSlot < expectedProgress) {
alerts.push({
type: 'lag',
message: `Processing lag detected: expected ${expectedProgress}, got ${maxShredInsertSlot}`,
slot: maxShredInsertSlot,
maxShredInsertSlot
});
}
}
// Check target slots availability
for (const slot of targetSlots) {
if (slot > maxShredInsertSlot) {
alerts.push({
type: 'unavailable',
message: `Slot ${slot} is beyond max shred insert slot`,
slot,
maxShredInsertSlot
});
}
}
this.previousMaxSlot = maxShredInsertSlot;
return alerts;
}
}
-
Shred Database Management
interface ShredDatabaseMetrics {
availableRange: {
start: number;
end: number;
total: number;
};
processingRate: number;
lag: number;
metadata: {
timestamp: number;
maxShredInsertSlot: number;
};
}
class ShredDatabaseManager {
private previousMetrics: {
timestamp: number;
maxSlot: number;
} | null = null;
async getMetrics(): Promise<ShredDatabaseMetrics> {
const maxShredInsertSlot = await connection.getMaxShredInsertSlot();
const firstAvailableBlock = await connection.getFirstAvailableBlock();
const currentTime = Date.now();
let processingRate = 0;
let lag = 0;
if (this.previousMetrics !== null) {
const timeDiff = (currentTime - this.previousMetrics.timestamp) / 1000; // seconds
const slotDiff = maxShredInsertSlot - this.previousMetrics.maxSlot;
processingRate = slotDiff / timeDiff;
const currentSlot = await connection.getSlot();
lag = currentSlot - maxShredInsertSlot;
}
this.previousMetrics = {
timestamp: currentTime,
maxSlot: maxShredInsertSlot
};
return {
availableRange: {
start: firstAvailableBlock,
end: maxShredInsertSlot,
total: maxShredInsertSlot - firstAvailableBlock + 1
},
processingRate,
lag,
metadata: {
timestamp: currentTime,
maxShredInsertSlot
}
};
}
}