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
BTCinCfolder 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.
- Stack Overflow recommends git-auto-commit-action
- 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
.qmdor.texfiles 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
timecommand-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
SHA256sumor 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
.texfiles 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
.shorMakefile
- 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.
- 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.