BTCinC

Final Product

BTCinC

  • Once you implement SHA, RSA, and data structures, implementation of Bitcoin is trivial.
  • Do the following assignments:
  • Due Tuesday, December 8th at 5:00 PM.
  • Have a satisfying implementation in a BTCinC folder within your class GitHub repository.

With the completion of the Merkle, you essentially have a working blockchain already. The final project is to make the blockchain look good.

  • BS CS students interested in research, engineering, or computer science should choose an appropriate option and publish by 9 May at 3 PM.
  • Undergraduate students in other populations should simply aim to complete all the homeworks, namely through heap_t, but may wish to pursue an option as an enrichment opportunity in conversation with the course instructor.

Option: Program product

Release via CI/CD a reference blockchain implementation in the C programming language.

  • Utilize libraries from earlier assignments, including SHA, RSA, list_t and Merkle trees.
    • If you are “stuck” you may use any code you find online (subject to licensing) providing that the code does not, itself, implement blockchain.
  • Implement under version control on GitHub or GitLab.
  • Employ GitHub Actions and workflows or GitLab CI/CD to execute a daily workflow.
  • Extend the chain’s length by one within the workflow.
    • Use a very low proof-of-work to not trigger provisioning guards intended to prevent bitcoin mining within Actions. Read more.
  • Save the output as an artifact.
  • Perform necessary work to ensure artifacts can be checked into version control.
  • Use these artifacts as the basis for future blocks.

Option two: Theoretical contribution

Produce a theoretical work in computer science.

  • Create a document like the FLP impossibility proof, the Nakamoto’08 paper, and Cynthia Dwork’s proof-of-work contribution.
  • Describe your blockchain implementation in the context of these results.
  • Format the description in IEEE or ACM Conference format.
  • Write a product of five to six pages, including references.
  • Format using Quarto or LaTeX for ACM format, or LaTeX only for IEEE format.
  • Place source documentation in .qmd or .tex files under version control along with the reference codebase on Github.com.
  • Include a compiled PDF or HTML document.
    • You should likely do both, as done by leading publisher arXiv.

Option three: Systems research contribution

Apply the design patterns from the “stream” lecture to an earlier implemented library.

  • Perform a comparative analysis using the time command-line command.
    • You should do non-zero statistical analysis.
  • Evaluate the performance of your initial implementation.
  • Evaluate the performance of your improved implementation using design patterns.
  • Evaluate the performance of reference implementations like SHA256sum or the GMP library.
    • You have seen me model this in the discussion of my prime generator vs. the GMP prime generator.
  • Format the description in IEEE format.
    • Not ACM for this research direction.
  • Write a product of five to six pages.
  • Format using LaTeX.
  • Place source documentation in .tex files under version control along with the reference codebase on Github.com.
    • Ensure your codebase contains all source code necessary to reproduce your results.
    • This should include scripts of some sort, likely .sh or Makefile
  • Include a compiled PDF or HTML document.
    • You should likely do both, as done by leading publisher arXiv

Option four: Security research and threat modeling

Develop a script that attacks your blockchain implementation.

  • The script should alter either the ownership or the history of a transaction.
    • Recall that doing so requires constructing a new chain of greater length than the original, attacked chain.
  • The attack need not be feasible.
  • Describe the costs and benefits of the attack.
  • Comment on whether an attacker could justify the expense.
  • Discuss whether other attack vectors.
    • Think about factors such as plain-text private key storage, are more likely.
    • The discussion on Snowden (in the RSA lecture) are most informative here.
  • Comment on which technologies used in class are the least secure.
  • Format the assessment as a technical blog post.
    • You are encouraged to publish within your portfolio or to a social platform such as LinkedIn.
    • Here is a “recent” example from NetSPI
    • Here is an all-time legendary blogpost from Joel
  • Use a format similar to homework and lab specifications.
  • Use Quarto markdown rendered to HTML.
  • Include code snippets in C, Python, LaTeX, or equivalent languages like (respectively) Rust, Node.js, Typst.