That's a nice link, thank you.
In the section on NXT decentralization Daniel makes some assumptions, quoting:
2.5.3 Nxt
Nxt uses transparent forging where the next node is deterministically selected. It can be compared to using Delegated Proof of Stake where the only person you can delegate to is yourself and the frequency in which you have the opportunity to forge a block is directly related to your balance. In this sense Nxt is more decentralized than Peercoin and Bitcoin, but still suffers poor user participation due to security risks and the fact that most regular users do not leave their computers on all day to take advantage of the opportunity.
From this perspective we can conclude that the Nxt network is being secured by a small minority of the shareholders. In effect, if you don’t show up to vote you lose your vote. To resolve this issue some Nxt users pool their funds and trust a 3rd party to mine for them. This increases shareholder participation by being a form of Delegated Proof of Stake, but also risks their balance while they are participating in the pool.
In fact, there is no poor user participation in NXT. Analysis of the blockchain reveals that the total number of accounts generating new blocks in NXT is between 300 and 350. Which is better than 100 delegates in BitShares.
Here is the java code that can be used to calculate active (who have forged blocks) forgers in the NXT blockchain:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
public class inspectDB {
public static void runQuery(int startHeight, int endHeight) {
Connection conn = null;
String dbUrl = "jdbc:h2:nxt_db/nxt;DB_CLOSE_ON_EXIT=FALSE";
dbUrl += ";DB_CLOSE_ON_EXIT=FALSE";
try {
Class.forName("org.h2.Driver");
conn = DriverManager.getConnection(dbUrl, "sa", "sa");
Statement stmt = conn.createStatement();
// generator_public_key
ArrayList pubgenkeys = new ArrayList();
String stmtStr = "SELECT generator_public_key, height, timestamp, total_amount FROM block where total_amount >= 0 and height > "
+ startHeight + " and height < " + endHeight;
ResultSet selectRS = stmt.executeQuery(stmtStr);// total_amount
while (selectRS.next()) {
String a = selectRS.getString(1);
pubgenkeys.add(a);
}
Iterator it = pubgenkeys.iterator();
HashMap occ = new HashMap();
while (it.hasNext()) {
String cur = it.next();
// System.out.println(cur);
if (occ.containsKey(cur)) {
int last = occ.get(cur).intValue();
occ.remove(cur);
occ.put(cur, new Integer(last + 1));
} else
occ.put(cur, 1);
}
int numBlocks = endHeight - startHeight;
int numAddr = occ.values().size();
System.out.println("startBlock " + startHeight
+ " generated by # addresses : " + numAddr
+ " (numBlocks: " + numBlocks + ")");
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
int maxh = 200000;
int step = 10000;
for (int bh = 0; bh < maxh; bh += step) {
runQuery(bh, bh + step);
}
}
}
Also, in the last paragraph last sentence he says users risk their balance with a pool. No, they don't. The feature called Leased Forging doesn't require sending your coins to a pool. It only helps to lease your effective balance for forging. But your coins are all in your possession, nobody but you has access to them.
Other sections of that link may be checked also for doubtful information. I outlined two most outstanding... eh, inconsistencies