1. The Stainless Verifier 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 https://stainless.epfl.ch/ https://www.youtube.com/watch?v=d4VeFa0z_Lo http://lara.epfl.ch/~kuncak/papers/SuterETAL11SatisfiabilityModuloRecursivePrograms.pdf http://lara.epfl.ch/~kuncak/papers/VoirolETAL15CounterExampleCompleteVerificationHigherOrderFunctions.pdf 2. 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 to other people. 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 https://blog.bren2010.io/post/628207734408527872/googles-macaroons-in-five-minutes-or-less 3. The Lightning network The lightning network is a second layer above the bitcoin blockchain that enables fast and cheap payments. Use it, understand it and explain it to us. https://lightning.network/lightning-network-paper.pdf https://github.com/lnbook/lnbook/blob/develop/03_how_ln_works.asciidoc https://medium.com/@peter_r/visualizing-htlcs-and-the-lightning-networks-dirty-little-secret-cb9b5773a0 4. Schnorr Signatures for Bitcoin Bitcoin currently uses ECDSA signatures to sign transactions. There is a proposal to update it to use Schnorr signatures, which have several benefits. Understand what Schnorr signatures are and the benefits they provide and explain it to us. https://en.wikipedia.org/wiki/Schnorr_signature https://bitcoinops.org/en/topics/schnorr-signatures/ https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki http://diyhpl.us/wiki/transcripts/blockchain-protocol-analysis-security-engineering/2018/schnorr-signatures-for-bitcoin-challenges-opportunities/ 5. Bitcoin Privacy What kind on anonymity do bitcoin users have and what does that even mean? Chapter 6 "Bitcoin and Anonymity" in the book Bitcoin and Cryptocurrency Technologies https://d28rh4a8wq0iu5.cloudfront.net/bitcointech/readings/princeton_bitcoin_book.pdf 6. Merkle Trees and Certificate Transparency Merkle trees are a data structure that is based on cryptographic hash functions and that allows us to efficiently prove that certain data has not been manipulated. Google's Certificate Transparency project forces CA's to makes the issuance of SSL certificates public. In particular the owner of a domain can thus see if a certificate has (fraudulently) been issued for his domain. CT uses Merkle trees to achieve that. Explain Merkle trees, explain the problems that led to the need for a system like Certificate Transparency and explain how it uses Merkle trees. https://en.wikipedia.org/wiki/Merkle_tree https://www.certificate-transparency.org https://www.certificate-transparency.org/log-proofs-work 7. JWT Handling with Flask Python Web APIs are often implemented in Flask. Authentication is typically handled using a JWT (JSON Web Token) and JWTs are often handled using the Flask-JWT-Extended library. Use and understand this library, implement a little prototype API with it, and report back to us. Especially interesting are the architectural changes from 3.25 to 4.0. https://flask-jwt-extended.readthedocs.io/en/stable/# https://github.com/vimalloc/flask-jwt-extended 8. FastAPI FastAPI is a Python library for implementing REST APIs. Use and understand this library, implement a little prototype API with it, and report back to us. Especially interesting is the question whether FastAPI would be as good or better a basis for an API than Flask. https://github.com/tiangolo/fastapi 9. Vue.js 2 vs. 3 Vue.js is a JavaScript framework for implementing Browser-based apps. Use and understand this library in both version 2 and 3, implement a little prototype API with them, and report back to us. Especially interesting is the question how difficult it is to migrate a Vue.js 2 application to Vue.js 3. https://vuejs.org/