1. OpenTimeStamps OpenTimestamps is a scalable system and format for trustless timestamping based on a blockchain. Timestamping means proving that some data already existed at a certain time. Trustless timestamping means timestamping without a central authority (like a certificate authority). Try it out, understand what that really means, how it works, how it is useful, how it differs from other timestamping mechanisms and explain it to us. https://opentimestamps.org/ 2. Simplicity Bitcoin has a very simple script language which allows to specify under what conditions bitcoins may be spent. Most scripts just check that the spending transaction is signed by the owner of the bitcoins, but more complex conditions are possible, such as multiple people signing and time constraints. Simplicity is a new language that is proposed for this purpose. Simplicity has a very simple type system and very simple evaluation rules, it is formally specified and proven correct. Understand and explain this typing system, the evaluation, how they are specified, how the language can be used, and explain it to us. https://blockstream.com/simplicity.pdf http://wadler.blogspot.com/2017/12/simplicity-and-michelson.html https://en.bitcoin.it/wiki/Script 3. BlockSci BlockSci is an open source software platform to scientifically analyze blockchains (mostly the Bitcoin blockchain). It is based on an in-memory database and allows to write queries in Python. Understand the platform, try it out, and report your findings. https://arxiv.org/pdf/1709.02489.pdf 4. Scala vs. Java Take a small project (if you don't have one, we'll find one together), and implement it both in Java and in Scala. Report your findings. http://www.scala-lang.org/docu/files/ScalaTutorial.pdf http://www.scala-lang.org/docu/files/ScalaByExample.pdf 5. Macaroons Macaroons are authorization tokens (like cookies) developed by Google that have several nice properties. In particular, a user can modify a token by adding so-called caveats (restrictions) to it, and pass on this restricted version of the token with less priviliges. Understand what problems macaroons solve, how they solve them, and report to us. https://storage.googleapis.com/pub-tools-public-publication-data/pdf/41892.pdf 6. Concatenative Programming Concatenative programming is a programming paradigm where the main datatype is that of a function (as in functional programming) but functions can *not* be applied to arguments. They can only be composed (or "concatenated"). Understand this paradigm, look at a specific concatenative language (like Joy, Factor or Cat) write some small example programs in it, and find out for what kind of applications such a language might be useful. https://concatenative.org https://en.wikipedia.org/wiki/Concatenative_programming_language 7. Scala Verification with Stainless Stainless is a tool for verifying Scala programs developed by the EPFL. Stainless can verify that your program is correct for all inputs and it can also report inputs for which your program fails. Work through the Stainless tutorial, perhaps try to verify a program of your own and report on what you learned. https://stainless.epfl.ch/ https://epfl-lara.github.io/stainless/tutorial.html