They say necessity is the mother of all invention. By the end of day last Saturday, the developers at Jelurida were facing the grim reality. A single user had bought every exchange offer they published before anyone else even had a chance to participate. Hundreds or perhaps even thousands of participants sitting in front of their computer and waiting for their chance to buy, did not even see it enabled on the user interface before it was all over.



While the Nxt blockchain itself has performed remarkably well under the immense load, the social impact of having a crowd sale which turned into two over the counter transfers was turning into a PR disaster. Not because this hasn’t been a concern as the developers went to great lengths to try to prevent this situation by splitting the 60M IGNIS round into 12 batches of 5M tokens each and by randomizing the exact block in which the sale would start to prevent power users from using phased transactions to front run others.

Still, someone has found a loophole. In the beginning, the thought was that this user (nicknamed MAAC by everyone, due to his account address being NXT-MAAC-AZFN-MK6A-CE4N7) was using a bot, which became a common perception. However soon after, MAAC himself has confessed that he was not using a bot, does not even program, and that his day job is at the movie theater. Instead, MAAC, being an NXT holder and supporter since 2013, spent weeks learning the blockchain and attempted various techniques. He figured that by listening to new transactions, he can intercept the Jelurida exchange offer just after it was published while it was still unconfirmed and immediately submit his transactions. All other users were waiting for the user interface to refresh but this would only occur when a new block was forged. By then, MAAC’s transactions had already matched the Jelurida exchange offer and the sale was over.



To make matters worse, Jelurida had submitted a phased exchange offer then approved it using another approval transaction. MAAC was using the exact same technique, thus gaining priority even on other users who tried to match the exchange while being unconfirmed using regular transactions. For the developers, the choice on what to do was not immediately apparent. On one hand, the crowd sale progressed as expected and 2M NXT were bought every 12 hours. In addition, nothing that MAAC did had violated the terms and conditions, so no legal exposure existed. Still, the feeling was that something must be done and must be done quickly. Attempts to explain the situation were faced with angry comments ranging from “The worst ICO ever” to dirty words.



After studying the technique used by MAAC, the Jelurida devs realized that using a phased exchange, while more secure, is contributing to the unfair advantage gained by MAAC. So, one quick fix (which wasn’t implemented initially) was to start using a regular exchange transaction and allow anyone who is monitoring the unconfirmed pool to compete. But still, this wasn’t very helpful to most users who do not understand the exact inner workings of the blockchain.



While users like MAAC, who study the advanced features of the platform, provide immense contribution to Nxt, the realization was that the only way to prevent MAAC, and now also several others, from getting a head start, was to beat them in their own game by allowing anyone to front run the unconfirmed exchange transaction and thus equalize the playing field and make the process more similar to a random lottery.

Nothing like this has been attempted before, not in Nxt and perhaps not in any other blockchain protocol. The idea was to let users schedule transactions in advance, which their node will submit to the network immediately after seeing the Jelurida exchange offer. This had to be implemented in a way that will still reuse the existing user interface and not require users to re-learn the buying process or having to revert to command line tools or as such.



While most of the building blocks for this feature had already existed, the actual implementation, under tight schedule and extreme pressure from potential buyers, would prove daunting. Nevertheless, slightly more than 48 hours after the problem has surfaced, and less than 24 hours after coding began, a solution was implemented and released as official version of Nxt 1.11.7

Users had to frantically upgrade their software and those who did not rely on full blockchain nodes had to set up ones. Some documentation and FAQ pages were hastily prepared and some minor bugs had to be reproduced and documented. However, for the 6th batch by Monday evening, the scheduled transaction mechanism was successfully deployed. Still, only 15 users would actually buy the IGNIS marker token (named JLRDA). The demand outpaced supply by at least 20x. Still, the process itself became random enough in order not to obviously favor any given account.

Six more batches were sold over the next few days. Some heuristics were developed in order to improve the buying chances like trying to target the buy transactions at the next block forger, but overall, the process has become fairer.



Moreover, the immense knowledge gained during this exercise has made Nxt a robust solution for crowd funding platform. The built-in features of Nxt provides tight control over the ability to spend the funds raised and the new transaction scheduler makes a stampede on the blockchain a much more egalitarian process which no longer favors geeks and whales.

Would Nxt now become a popular choice for future crowd funding campaigns? Time will tell. What is sure, is that the Nxt legacy will proceed with a vengeance with 4 more crowd funding cycles on the way and while looking forward for the launch of Ardor, the ultimate solution to the blockchain bloat problem.