⚠️Blast API (blastapi.io) ends Oct 31. Migrate to Dwellir and skip Alchemy's expensive compute units.
Switch Today →
Skip to main content

wallet/listwitnesses

Get list of all Super Representatives (witnesses) on the TRON network.

Endpoint

POST /wallet/listwitnesses

Parameters

No parameters required.

Response

Returns array of witness objects, each containing:

  • address - Witness address
  • voteCount - Total votes received
  • url - Witness website/information URL
  • totalProduced - Total blocks produced
  • totalMissed - Total blocks missed
  • latestBlockNum - Latest block produced
  • latestSlotNum - Latest slot number
  • isJobs - Whether witness is active

Implementation Examples

// Get all witnesses
const response = await fetch('https://api-tron-mainnet.n.dwellir.com/YOUR_API_KEY/wallet/listwitnesses', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});

const data = await response.json();
const witnesses = data.witnesses || [];

// Sort by vote count
witnesses.sort((a, b) => b.voteCount - a.voteCount);

// Display top 27 Super Representatives
console.log('Top 27 Super Representatives:');
witnesses.slice(0, 27).forEach((witness, index) => {
const votes = (witness.voteCount / 1000000).toFixed(2); // Convert to millions
const reliability = witness.totalProduced > 0
? ((witness.totalProduced / (witness.totalProduced + witness.totalMissed)) * 100).toFixed(2)
: '0.00';

console.log(`${index + 1}. ${witness.url}`);
console.log(` Votes: ${votes}M | Reliability: ${reliability}%`);
console.log(` Blocks: ${witness.totalProduced} produced, ${witness.totalMissed} missed`);
});

// Find specific witness
const myWitness = witnesses.find(w => w.address === 'TYourWitnessAddress...');
if (myWitness) {
console.log(`\nYour witness ranking: #${witnesses.indexOf(myWitness) + 1}`);
}

Example Response

{
"witnesses": [
{
"address": "TSomeWitnessAddress...",
"voteCount": 2847395820,
"url": "https://tronsr.example.com",
"totalProduced": 1847293,
"totalMissed": 523,
"latestBlockNum": 58234569,
"latestSlotNum": 634829384,
"isJobs": true
},
{
"address": "TAnotherWitnessAddress...",
"voteCount": 2539482910,
"url": "https://anothersr.example.com",
"totalProduced": 1693847,
"totalMissed": 412,
"latestBlockNum": 58234547,
"latestSlotNum": 634829362,
"isJobs": true
}
]
}

Super Representative System

SR Roles

  • Top 27: Active block producers (Super Representatives)
  • 28-127: Super Representative Partners (receive rewards, no block production)
  • 128+: Candidates (no rewards)

Voting Power

  • 1 TRX = 1 Vote (when frozen for voting)
  • Votes can be distributed among multiple SRs
  • Votes remain until changed or TRX is unfrozen

Block Production

  • SRs take turns producing blocks
  • 3-second block time
  • Missed blocks affect reliability score

Witness Analysis

// Analyze witness performance
function analyzeWitnesses(witnesses) {
const topSRs = witnesses.slice(0, 27);

// Calculate network statistics
const totalVotes = witnesses.reduce((sum, w) => sum + w.voteCount, 0);
const totalBlocks = topSRs.reduce((sum, w) => sum + w.totalProduced, 0);
const totalMissed = topSRs.reduce((sum, w) => sum + w.totalMissed, 0);

// Find most reliable SRs
const reliability = topSRs.map(w => ({
url: w.url,
address: w.address,
reliability: w.totalProduced / (w.totalProduced + w.totalMissed) * 100
})).sort((a, b) => b.reliability - a.reliability);

// Calculate voting concentration
const top5Votes = witnesses.slice(0, 5).reduce((sum, w) => sum + w.voteCount, 0);
const votingConcentration = (top5Votes / totalVotes) * 100;

return {
totalVotes: totalVotes / 1000000, // In millions
totalBlocks,
totalMissed,
networkReliability: (totalBlocks / (totalBlocks + totalMissed) * 100).toFixed(2),
votingConcentration: votingConcentration.toFixed(2),
mostReliable: reliability.slice(0, 5),
leastReliable: reliability.slice(-5).reverse()
};
}

// Monitor SR changes
async function monitorSRChanges(interval = 60000) {
let previousSRs = [];

setInterval(async () => {
const response = await fetch(`${API_URL}/wallet/listwitnesses`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({})
});

const data = await response.json();
const currentSRs = data.witnesses
.sort((a, b) => b.voteCount - a.voteCount)
.slice(0, 27)
.map(w => w.address);

// Check for changes
if (previousSRs.length > 0) {
const newSRs = currentSRs.filter(sr => !previousSRs.includes(sr));
const removedSRs = previousSRs.filter(sr => !currentSRs.includes(sr));

if (newSRs.length > 0 || removedSRs.length > 0) {
console.log('SR List Changed!');
if (newSRs.length > 0) console.log('New SRs:', newSRs);
if (removedSRs.length > 0) console.log('Removed SRs:', removedSRs);
}
}

previousSRs = currentSRs;
}, interval);
}

Best Practices

1. Vote Distribution

  • Research SR reliability and contributions
  • Consider distributing votes among multiple SRs
  • Monitor SR performance regularly

2. SR Selection Criteria

  • Block production reliability (>99.5%)
  • Community contributions
  • Technical infrastructure
  • Reward sharing programs

3. Monitoring

  • Track SR ranking changes
  • Monitor block production stats
  • Alert on significant vote shifts

Use Cases

  • Voting Decisions: Research SRs before voting
  • Network Monitoring: Track SR performance and reliability
  • Reward Calculation: Estimate voting rewards
  • Governance Participation: Engage in network governance
  • SR Analytics: Analyze voting patterns and network health