Q/A from 20180119 Project Proposal 101 call


Thanks to all who attended! Here are some of the questions we got:

Q: When will the mentor details be updated for all the projects?

A: We are working to update those from past years which carried over very shortly. However, if you know someone who could help mentor you, please let us know so we can help get them involved.

Q: Is there a good example of a past project proposal?

A: Here is a great one from past intern Kevin Lee:

Background Information

Since the inception of Bitcoin in 2009, cryptocurrencies have become prominent in the world. Some promise to completely change the way of spending, whereas others offer privacy as their selling points. At the heart of every cryptocurrency is a blockchain, which is seen by all nodes as a way to corroborate a transaction. There has been fear that too much information can be garnered from the public eye, and privacy could be violated. For this reason, Monero exists.
Monero is a CryptoNote-based cryptocurrency that claims to be stronger than its competitors by means of untraceability and unlinkablity. By using one-time stealth addresses generated from a wallet’s public key, we are unable to link two different transactions to the same user. To achieve untraceability, Monero utilizes the idea of mixins. Previous outputs from separate transactions are referenced in a single transaction, effectively “mixing-in” your real output along with others and creating a ring signature. A user can select a desired number of mixins starting from the minimum number of two, and transaction fees scale proportionally to the number chosen.
Outputs in the blockchain can be referenced many times, and as of this writing, there is no limit to how many times it can be included as a mixin. This is where the vulnerability lies in. If an output from near the bottom of the blockchain is used, or if an output has been referenced many times, there is a possibility that it has already been spent.


The idea is to analyze a dataset of Monero outputs in the blockchain, and link the outputs together using the PageRank algorithm. An output in Monero is linked with its public key, and can be seen by anyone with a running Monero node. From there, we can use a Markov chain process to compute the transaction ranks of each output.
An output that has been referenced the greatest number of times will receive the highest rank, whereas an output that has been referenced few times will have a low transaction rank. From there, we can label outputs as “vulnerable”, and further develop method that can deanonymize transactions with few mixins. One such outcome from this project can be a proposal to fix the Monero protocol can be issued to label outputs as vulnerable and change the way mixins are selected in a transaction. The costs of mixing a transaction and the fees involved must also be taken into account for such a protocol change.
This blockchain project can be carried out by using a graphical database such as Neo4j, or MySQL. Analytics and visualization can be done in programming languages like R or Python.

Previous Work

I have designed and implemented a simulation for the mixin selection for Monero transactions based on empirical spending behavior and an output database which I collected directly from the blockchain, version 0.10.1. From this, I am able to select a real output and choose mixins according to the current Monero protocol, and implement guessing methods for the real output. I have been working on this project with Dr. Andrew Miller at the University of Illinois at Urbana-Champaign, Dr. Arvind Narayanan at Princeton University, and Malte Möser, a Ph.D. student at Princeton University.

Q: What if the project I select requires me to leverage NDA materials

A: We will work with the mentor and company requiring this to ensure this doesn’t prevent your work from being open source.

Thanks again!


JM, did you intend for the “Previous Work” example to render as a single [very long] line in scroll box? Not seeing how that helps, but it might be some AI-wannabe code “helping” you out.


Good catch @johnarwe! I’ve fixed it now.