Due Dates
All assignments are due at 11:59:59 PM New York local time on the corresponding due dates. The solutions should be submitted to CourseWorks.
# | Assignment | Due Date | Graded? |
---|---|---|---|
1 | Sign course policies | 9/12 | Not graded but required |
2 | Problem set #1 | 9/19 | Not graded but required |
3 | Programming assignment on Bitcoin | 9/26 | Not graded but required |
4 | Finalize project teams | 9/26 | Not graded but required |
5 | Problem set #2 | 10/3 | Not graded but required |
6 | Project proposal | 10/10 | Yes |
7 | Programming assignment on Ethereum | 10/17 | Not graded but required |
8 | Problem set #3 | 10/31 | Not graded but required |
9 | Programming assignment on decentralized exchange | 11/14 | Not graded but required |
10 | Programming assignment on SNARK | 11/28 | Not graded but required |
11 | Demo your final project | 12/5 | Yes |
12 | Submit your final project | 12/19 | Yes |
Assignments
1. Sign course policies (required but not graded)
The goal of this assignment is to agree to the course collaboration
/ copying policy. Please sign by adding your name, UNI, and date to the
following text and submit it as signed_collaboration_policy.txt
to the corresponding assignment in CourseWorks.
I have read and understood the following documents:
1. CS department's Policies and Procedures regarding Academic Honesty;
2. Columbia College and Columbia Engineering’s Academic Integrity website; and
3. The policies of this course.
I pledge that I will abide by the rules set forth by the documents, and
that I will accept the corresponding penalties if I fail to do so.
I also pledge that I will never post any Course Materials to public code
repositories or web sites like GitHub, CourseHero, etc., nor will I
share Course Materials privately with any person who may take the same
class in the future. I understand Course Materials include, but are not
limited to, my own code, skeleton and solution code I received, lecture
notes, and exams and solutions.
Name:
UNI:
Date:
2. Problem set #1
Complete Problem set #1.
3. Programming assignment: Perform Bitcoin transactions using python-bitcoinlib
Instructions and starter code.
4. Finalize project teams (required but not graded)
Finalize your project team. Your team should have three members.
Fill the following form and submit it as a team.txt
file to the
corresponding assignment in CourseWorks.
Member 1 Name:
Member 1 UNI:
Member 2 Name:
Member 2 UNI:
Member 3 Name:
Member 3 UNI:
5. Problem set #2
Complete Problem set #2.
6. Project proposal.
Submit a your project proposal as a proposal.txt
file to
the corresponding assignment in CourseWorks. It should have the following
contents:
Title: tagline of your project, such as "CertiK: Securing The Web3 World"
Details:
- Team members (name and UNI for each teammate)
- Pain points you're addressing
- How your project addresses the pain points and why Web3 is the best
solution for the problem
- Why your project is unique/different from existing solutions
A few paragraphs are enough. No need to write a detailed business plan. Submit any additional materials such as a presentation deck you may have.
Only one member of the team needs to submit. Be sure to include in the README the names and UNIs of all team members.
After the submission, post your proposal to the course discussion board and prefix the post title with "[Project Proposal]..." for the entire class to learn what you plan to do and provide feedback.
Grading rubric:
- Pain points are clearly explained (40%).
- Proposed solution including the reason to use Web3 is clearly explained (30%).
- Proposed solution is clearly differentiated from the solutions in the market (30%).
7. Programming assignment: An Ethereum payment app
Instructions and starter code.
8. Problem set #3
Complete Problem set #3.
9. Programming assignment: Building a decentralized exchange (DEX)
Instructions and starter code.
10. Programming assignment: Using SNARKs
Instructions and starter code.
11. Demo your final project
Prepare a short demo video of your project. Submit a link to the video, a deployment link (deployment to a test network suffices), and the presentation deck to the corresponding assignment in CourseWorks. The demo video will be played in class during our Demo Day. The length of the video will be determined based on the total number of projects. Everyone in the group has to speak approximately equally. If time allows, we will conduct a quick Q/A session for each team. Submit any additional materials such as usage curves you may have.
Only one member of the team needs to submit. Be sure to include in README the names and UNIs of all team members.
After the submission, but before Demo Day, post your demo video to the course discussion board and prefix the post title with "[Project Demo]..." for the entire class to appreciate what you have built and provide feedback.
Grading rubric:
- Argues clearly why the project needs to exist and specifically why it needs Web3 (25%).
- Concisely demonstrates the functionality of the project deliverables (25%).
- Well-made pitch deck / presentation materials (25%).
- Well-made pitch video (25%).
12. Submit your final project
Submit the final version of your project to the corresponding assignment in CourseWorks. Only one member of the team needs to submit. Be sure to include in README the names and UNIs of all team members. Your submission should include
- README with (1) the names and UNIs of all team members and (2) instructions to run and test your project deliverables.
- A deployment link (deployment to a test network suffices).
- Code (Github repository link).
- Any additional materials such as usage curves you would like to submit.
Grading rubric:
- Minimal Viable Prototype (30%): demonstrates that effort has been spent on making a working prototype with sufficient features.
- Testing (30%): good test coverage; well-thought-out tests; and tests pass.
- Security (30%): well-thought-out security design; use safe libraries; sufficient security tests
- Deployment (10%): deployment (most likely to a test network) is complete; no visible errors.