Parameters
Account address (base-58 encoded)
Maximum number of signatures to return (default: 1000)
Start searching backwards from this signature
Search until this signature
Commitment level (processed, confirmed, finalized)
Response
Array of signature information objectsTransaction signature (base-58 encoded)
Slot in which the transaction was processed
Error if transaction failed, null if transaction succeeded
Memo associated with the transaction
Unix timestamp of when the transaction was processed
Transaction confirmation status
Code Examples
Basic Request
curl https://rpc.orbitflare.com -X POST -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getSignaturesForAddress",
"params": [
"ADDRESS"
]
}'
Request with Config
curl https://rpc.orbitflare.com -X POST -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getSignaturesForAddress",
"params": [
"ADDRESS",
{
"limit": 100,
"before": "SIGNATURE",
"commitment": "confirmed"
}
]
}'
Using web3.js
import { Connection, PublicKey } from '@solana/web3.js';
const connection = new Connection('https://rpc.orbitflare.com');
// Get signatures for address
const signatures = await connection.getSignaturesForAddress(
new PublicKey('ADDRESS')
);
console.log('Signatures:', signatures);
// Get paginated signatures
async function getPaginatedSignatures(
address: PublicKey,
limit: number = 100,
before?: string
) {
const signatures = await connection.getSignaturesForAddress(address, {
limit,
before
});
return signatures.map(signature => ({
signature: signature.signature,
slot: signature.slot,
success: !signature.err,
timestamp: signature.blockTime,
status: signature.confirmationStatus
}));
}
Notes
- Returns confirmed transaction signatures for an address
- Results are returned in reverse chronological order
- Pagination can be achieved using the
before parameter
- The response is immediate as it reads from the current state
- Different commitment levels can be specified
Best Practices
- Use appropriate limit based on your needs
- Implement pagination for large result sets
- Cache results when appropriate to reduce RPC load
- Consider using websocket subscription for real-time updates
- Handle network errors and retry when appropriate
Common Errors
| Code | Message | Solution |
| -32601 | Method not found | Verify you’re connected to a Solana RPC node |
| -32602 | Invalid params | Check address and config parameters |
| -32007 | Signature information unavailable | Node may be bootstrapping or syncing |
Use Cases
-
Transaction History
interface TransactionHistory {
transactions: Array<{
signature: string;
slot: number;
success: boolean;
timestamp: number;
status: string;
}>;
metadata: {
total: number;
startTime: number;
endTime: number;
};
}
async function getTransactionHistory(
address: PublicKey,
limit: number = 100
): Promise<TransactionHistory> {
const signatures = await connection.getSignaturesForAddress(address, {
limit
});
return {
transactions: signatures.map(signature => ({
signature: signature.signature,
slot: signature.slot,
success: !signature.err,
timestamp: signature.blockTime || 0,
status: signature.confirmationStatus || 'unknown'
})),
metadata: {
total: signatures.length,
startTime: signatures[0]?.blockTime || 0,
endTime: signatures[signatures.length - 1]?.blockTime || 0
}
};
}
-
Transaction Monitoring
interface TransactionAlert {
type: 'new' | 'failed' | 'status_change';
signature: string;
previousStatus: string | null;
currentStatus: string;
metadata: {
timestamp: number;
slot: number;
};
}
class TransactionMonitor {
private previousSignatures: Map<string, any> = new Map();
async monitorTransactions(
address: PublicKey,
interval: number = 5000
): Promise<TransactionAlert[]> {
const signatures = await connection.getSignaturesForAddress(address, {
limit: 10
});
const alerts: TransactionAlert[] = [];
signatures.forEach(signature => {
const previous = this.previousSignatures.get(signature.signature);
if (!previous) {
alerts.push({
type: 'new',
signature: signature.signature,
previousStatus: null,
currentStatus: signature.confirmationStatus || 'unknown',
metadata: {
timestamp: Date.now(),
slot: signature.slot
}
});
} else if (previous.confirmationStatus !== signature.confirmationStatus) {
alerts.push({
type: 'status_change',
signature: signature.signature,
previousStatus: previous.confirmationStatus,
currentStatus: signature.confirmationStatus || 'unknown',
metadata: {
timestamp: Date.now(),
slot: signature.slot
}
});
}
this.previousSignatures.set(signature.signature, signature);
});
return alerts;
}
}
-
Transaction Analysis
interface TransactionAnalysis {
total: number;
successful: number;
failed: number;
statusDistribution: Record<string, number>;
timeDistribution: {
hourly: Record<number, number>;
daily: Record<number, number>;
};
metadata: {
startTime: number;
endTime: number;
duration: number;
};
}
async function analyzeTransactions(
address: PublicKey,
limit: number = 1000
): Promise<TransactionAnalysis> {
const signatures = await connection.getSignaturesForAddress(address, {
limit
});
const statusDistribution: Record<string, number> = {};
const hourlyDistribution: Record<number, number> = {};
const dailyDistribution: Record<number, number> = {};
let successful = 0;
let failed = 0;
signatures.forEach(signature => {
const status = signature.confirmationStatus || 'unknown';
statusDistribution[status] = (statusDistribution[status] || 0) + 1;
if (signature.err) {
failed++;
} else {
successful++;
}
if (signature.blockTime) {
const date = new Date(signature.blockTime * 1000);
const hour = date.getHours();
const day = date.getDay();
hourlyDistribution[hour] = (hourlyDistribution[hour] || 0) + 1;
dailyDistribution[day] = (dailyDistribution[day] || 0) + 1;
}
});
return {
total: signatures.length,
successful,
failed,
statusDistribution,
timeDistribution: {
hourly: hourlyDistribution,
daily: dailyDistribution
},
metadata: {
startTime: signatures[0]?.blockTime || 0,
endTime: signatures[signatures.length - 1]?.blockTime || 0,
duration: signatures.length > 1
? (signatures[0]?.blockTime || 0) - (signatures[signatures.length - 1]?.blockTime || 0)
: 0
}
};
}