<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Cryptocurrency Cabal</title>
    <link>https://bitcoin-class.org/index.xml</link>
    <description>Recent content on Cryptocurrency Cabal</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 15 Nov 2015 00:00:00 +0000</lastBuildDate>
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Project Reports</title>
      <link>https://bitcoin-class.org/project-reports/</link>
      <pubDate>Sun, 15 Nov 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/project-reports/</guid>
      <description>

&lt;h1 id=&#34;projects&#34;&gt;Projects&lt;/h1&gt;

&lt;p&gt;This page collects the final project presentations and reports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://sites.google.com/a/virginia.edu/the-evolution-of-bitcoin-scripting-interpreter/&#34;&gt;The Evolution of Bitcoin Script Interpreter&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/script.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Acacia Dai&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://alecgrieser.github.io/ddcpcp&#34;&gt;Developing a Distributed Distributed Consensus Protocol Consensus Protocol&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/consensus.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Alec Grieser&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/AlishanHassan/Cryptocurrency-Project&#34;&gt;A Bandwidth Based &amp;ldquo;Proof of Work&amp;rdquo;&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/bandwidth.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Alishan Hassan&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://ccc-voting.github.io&#34;&gt;Blockchain Voting&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/voting.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Sugat Poudel, Austin J. Varshneya, Xhama Vyas&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/cahruhr/BitMingle&#34;&gt;BitMingle&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://github.com/cahruhr/BitMingle/blob/master/BitMingle.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Carter Hall, Reid Bixler&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://cberman.github.io/Cryptocurrency-Final-Project/&#34;&gt;Vending on Dark Net Markets&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/darkmarkets.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Collin Berman&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/cmalekpour/btcd-prune&#34;&gt;Pruning Nodes&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/pruning.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Cyrus Malekpour&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/DeanMakovsky/evalbc&#34;&gt;Evaluating BlockCypher’s Confidence Level&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/confidence.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Dean Makovsky and Joseph Tobin and Kevin Zhao and Vignesh&amp;nbsp;Kuppusamy&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://eashankaw.com/?p=10&#34;&gt;Chinese Geopolitical Strategy and Bitcoin&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/china.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Eashan Kaw&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://kukla1234.github.io/&#34;&gt;Bitcoin at Point of Sale&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/pos.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Elizabeth Kukla&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/fc5fz/CC-Project/wiki&#34;&gt;Detecting Selfish Mining in Bitcoin and Litecoin&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/selfish.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Fangyang Cui&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/jg5ash4/silkroadproject&#34;&gt;Silkroad Takedown&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/silkroad.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Gardner Fiveash&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/Dellvan7/measurespv&#34;&gt;Measure SPV&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/spv.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Jacob Freck&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://www.kienanadams.com/btc-donation-transparency/&#34;&gt;Bitcoin Donation Transparency&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/donation-transparency.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Kienan Adams&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://people.virginia.edu/~mjp9zn/CS4501/project.html&#34;&gt;Bitcoin Block-Size Options&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/scaling.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Michael Parisi Presicce&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://btccabal.weebly.com/&#34;&gt;Proved Anonymous Mixing&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/verifiable-mixing.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Morgan Locks&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/2014mchidamb/Beyond-Lightning&#34;&gt;Beyond the Lightning Network - Exploring How to Scale Bitcoin&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Muthu Chidambaram&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://pleng28.github.io/BIT/&#34;&gt;Analysis of the Viability of Bitcoin replacing as a National Currency&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Peter Leng&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/UVAqmoore/cccfinal&#34;&gt;How Much is Bitcoin Worth: Pricing Differences Across Exchanges and Time&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/exchanges.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Quentin Moore&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/mrranderson/Mixer-Verifier&#34;&gt;Mixer Verifier&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/bitsniffer.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Ryan Anderson, Sam Prestwood, Luke Gessler&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://ziqi.herokuapp.com/bitcoin_project&#34;&gt;Understanding Mobile Bitcoin Wallets&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://bitcoin-class.org/projects/wallet.pdf&#34;&gt;Report (PDF)&lt;/a&gt;&lt;br /&gt;
Ziqi Liu&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Projects</title>
      <link>https://bitcoin-class.org/projects/</link>
      <pubDate>Sun, 15 Nov 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/projects/</guid>
      <description>

&lt;h1 id=&#34;projects&#34;&gt;Projects&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://sites.google.com/a/virginia.edu/the-evolution-of-bitcoin-scripting-interpreter/&#34;&gt;The Evolution of Bitcoin Script Interpreter&lt;/a&gt;&lt;/strong&gt;
Acacia Dai&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://alecgrieser.github.io/ddcpcp&#34;&gt;Developing a Distributed Distributed Consensus Protocol Consensus Protocol&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Alec Grieser&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/AlishanHassan/Cryptocurrency-Project&#34;&gt;A Bandwidth Based &amp;ldquo;Proof of Work&amp;rdquo;&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Alishan Hassan&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://ccc-voting.github.io&#34;&gt;Blockchain Voting&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Sugat Poudel, Austin J. Varshneya, Xhama Vyas&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/cahruhr/BitMingle&#34;&gt;BitMingle&lt;/a&gt;&lt;/strong&gt; &lt;a href=&#34;https://github.com/cahruhr/BitMingle/blob/master/BitMingle.pdf&#34;&gt;Report&lt;/a&gt;&lt;br /&gt;
Carter Hall, Reid Bixler&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;missingURL&#34;&gt;Divergence of Alt Coins and their Concurrent Developments&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Cody Robertson&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://cberman.github.io/Cryptocurrency-Final-Project/&#34;&gt;Vending on Dark Net Markets&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Collin Berman&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/cmalekpour/btcd-prune&#34;&gt;Pruning Nodes&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Cyrus Malekpour&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/DeanMakovsky/evalbc&#34;&gt;Evaluating BlockCypher’s Confidence Level&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Dean Makovsky and Joseph Tobin and Kevin Zhao and Vignesh Kuppusamy&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://eashankaw.com/&#34;&gt;Geopolitical Strategy and Bitcoin&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Eashan Kaw&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://kukla1234.github.io/&#34;&gt;Bitcoin at Point of Sale&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Elizabeth Kukla&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/fc5fz/CC-Project/wiki&#34;&gt;Detecting Selfish Mining in Bitcoin and Litecoin&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Fangyang Cui&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/jg5ash4/silkroadproject&#34;&gt;Silkroad Takedown&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Gardner Fiveash&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/Dellvan7/measurespv&#34;&gt;Measure SPV&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Jacob Freck&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://www.kienanadams.com/btc-donation-transparency/&#34;&gt;Analyzing the Feasibility of a Donation Accountability System in Bitcoin&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Kienan Adams&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://people.virginia.edu/~mjp9zn/CS4501/project.html&#34;&gt;Bitcoin Block-Size Options&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Michael Parisi Presicce&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://btccabal.weebly.com/&#34;&gt;Proved Anonymous Mixing&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Morgan Locks&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/2014mchidamb/Beyond-Lightning&#34;&gt;Beyond the Lightning Network - Exploring How to Scale Bitcoin&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Muthu Chidambaram&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://pleng28.github.io/BIT/&#34;&gt;Analysis of the viability of Bitcoin replacing as a National Currency&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Peter Leng&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/UVAqmoore/cccfinal&#34;&gt;How Much is Bitcoin Worth: Pricing Differences Across Exchanges and Time&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Quentin Moore&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/mrranderson/Mixer-Verifier&#34;&gt;Mixer Verifier&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Ryan Anderson, Sam Prestwood, Luke Gessler&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://ziqi.herokuapp.com/bitcoin_project&#34;&gt;Understanding Mobile Bitcoin Wallet&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
Ziqi Liu&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PS3: CSI: Blockchain</title>
      <link>https://bitcoin-class.org/ps/ps3/</link>
      <pubDate>Sun, 25 Oct 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/ps/ps3/</guid>
      <description>&lt;h1 id=&#34;problem-set-3-br-csi-blockchain&#34;&gt;Problem Set 3:&lt;br&gt; CSI: Blockchain&lt;/h1&gt;

&lt;p&gt;&lt;div class=&#34;due&#34;&gt;
Due: Sunday, 8 November at 8:29pm
   &lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&#34;purpose&#34;&gt;Purpose&lt;/h2&gt;

&lt;p&gt;The goal of this assignment is for everyone to gain experience analyzing
the blockchain and understanding of the anonymity of bitcoin (and
mechanisms that are used to increase or decrease it), and to hopefully
help the FBI catch some heinous criminals.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h3 id=&#34;collaboration-policy&#34;&gt;Collaboration Policy&lt;/h3&gt;

&lt;p&gt;For this assignment, you may either work alone or with one other person
of your choice.  If you work with a partner, you should together submit
one assignment with both of your names on it that reflects your combined
efforts.  You may, and are encouraged to, discuss all of the problems
with anyone else you want (both on-line using the course web site or any
other means you choose, and in person).&lt;/p&gt;

&lt;h3 id=&#34;submission&#34;&gt;Submission&lt;/h3&gt;

&lt;p&gt;Submit your answers as a single ZIP file using &lt;a href=&#34;https://www.dropbox.com/request/YC25YAa5DV7ejcc49ONC&#34;&gt;this
link&lt;/a&gt;.  The name
of your file should be &lt;code&gt;&amp;lt;your email ID&amp;gt;-ps3.zip&lt;/code&gt; (if you worked alone)
or &lt;code&gt;&amp;lt;partner1 email ID&amp;gt;-&amp;lt;partner2 email ID&amp;gt;-ps3.zip&lt;/code&gt;.  Your submission
should include a PDF document containing all your written (non-code)
answers, all of the source code for your programs, and any additional
data you think it useful to provide.&lt;/p&gt;

&lt;h2 id=&#34;warm-up-manual-exploration&#34;&gt;Warm-Up: Manual Exploration&lt;/h2&gt;

&lt;p&gt;You should have received by email a list of bitcoin addresses that were
given to us by the FBI.  These are addresses that were used to collect
ransom payments from victims of bitcoin ransomware attacks.  In the
scheme perpetrators encrypt a victim’s files and then demand that ransom
payment be made to a specific bitcoin address in return for the key to
decrypt the files.&lt;/p&gt;

&lt;p&gt;One of the addresses are marked with your email ID.  The intent of this
is to ensure that the examination efforts are well distributed over the
provided addresses.  For the manual exploration question, you should
start with that address (but feel free to look at any of the addresses
in the file, and for the programmatic analysis questions, you&amp;rsquo;ll want to
use all the addresses).&lt;/p&gt;

&lt;p&gt;You can use any tool you want to answer these questions, but we suggest
using &lt;a href=&#34;http://blockchain.info&#34;&gt;blockchain.info&lt;/a&gt;.  One useful thing you
can do there is look at the taint analysis to see which other addresses
a given addresses is interacting with (e.g., examine the &lt;a href=&#34;https://blockchain.info/taint/14TCv5MKcyYCM3qij36x8xrKvKHHY1NXmq?reversed=true&#34;&gt;reverse taint
analysis&lt;/a&gt;
to see the addresses that are receiving bitcoin from the given address).&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 1.&lt;/strong&gt;&lt;br /&gt;
(a) What address are you investigating?&lt;br /&gt;
(b) When was that address in use?&lt;br /&gt;
&amp;#40;c) How many victims appear to have paid into the address?&lt;br /&gt;
(d) How much was collected from each victim (the most relevant value would be the value in US dollars at the time of the payment)?  Did all the victims pay the same amount, or did the requested amount vary by victim?&lt;br /&gt;
(e) How did the ransomist (owner of this address) distribute the proceeds?  Is there a percentage split, or some other fee being paid by the ransomist to other addresses?&lt;br /&gt;
(f) What else can you learn about the operation starting from your transaction?&lt;br /&gt;
(g) &lt;strong&gt;Added 4 Nov: If you are answering Problem 1 after class Wednesday, also answer&lt;/strong&gt;: How is your address similar to and different from what has been observed by other students for other addresses?
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Since our goal is to learn as much as we can about the overall
operation, you should post your answers to Problem 1 (for your address)
as a &lt;a href=&#34;#comments&#34;&gt;comment on this page&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&#34;privacy-in-the-blockchain&#34;&gt;Privacy in the Blockchain&lt;/h2&gt;

&lt;p&gt;The questions in the section focus on this paper:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://conferences2.sigcomm.org/imc/2013/papers/imc182-meiklejohnA.pdf&#34;&gt;&lt;em&gt;A Fistful of Bitcoins: Characterizing Payments among Men (sic) with No Names&lt;/em&gt;&lt;/a&gt; by Sarah Meiklejohn, Marjori Pomarole, Grant Jordan, Kirill Levchenko, Damon McCoy, Geoffrey M. Voelker, and Stefan Savage.  &lt;em&gt;Internet Measurement Conference&lt;/em&gt;, 2013.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should also read:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Chapter 6: Bitcoin and Anonymity&lt;/em&gt;,
from Arvind Narayanan, Joseph Bonneau, Edward Felten, Andrew Miller,
Steven Goldfeder. &lt;a href=&#34;https://d28rh4a8wq0iu5.cloudfront.net/bitcointech/readings/princeton_bitcoin_book.pdf?a=1&#34;&gt;&lt;em&gt;Bitcoin and Cryptocurrency
Technologies&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 2.&lt;/strong&gt; Part of the strategy used in the
Sarah Meiklejohn et al. paper was for the authors to open accounts with services and conduct transactions with questionable merchants.&lt;br /&gt;
(a) Why was it useful to actually conduct transactions with merchants operating in dark markets to conduct this research?&lt;br /&gt;
(b) What ethical and legal issues does contudcting a transaction with a questionable merchant raise?&lt;br /&gt;
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 3.&lt;/strong&gt; The Heuristic 1 (Section 4.3) used to detemine sets of
public addresses owned by the same entity is based on the assumption
that all inputs to a bitcoin transaction are controlled by the same
entity.  According to the paper, &amp;ldquo;the sender in the transaction must
know the private signing key belonging to each public key used as an
input, so it is unlikely that the collection of public keys are
controlled by multiple entities (as these entities would need to reveal
their private keys to each other).&amp;rdquo;  Explain why this is not actually
true. (A good answer will consider in more detail what is needed in the
unlocking script to spend each input.)
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 4.&lt;/strong&gt; The analysis in this paper was done before hierarchical
deterministic wallets became standard.  How does the widespread use of
HD wallets today impact the effectiveness of their Heuristic 2?
   &lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&#34;blockchain-apis&#34;&gt;Blockchain APIs&lt;/h2&gt;

&lt;p&gt;One way to analyze the blockchain is to run a full bitcoin node, and
operate on your own local copy of the blockchain.  This requires
downloading and processing a large amount of data (approximately &lt;a href=&#34;https://blockchain.info/charts/blocks-size&#34;&gt;45
GB&lt;/a&gt; today).  Instead, you
can use an external service that provides an API for interacting with
the blockchain.  Several such APIs exist including
&lt;a href=&#34;https://blockchain.info/api&#34;&gt;blockchain.info&lt;/a&gt;, Bitpay&amp;rsquo;s &lt;a href=&#34;https://insight.is/&#34;&gt;Insight
API&lt;/a&gt;, and BlockCypher&amp;rsquo;s &lt;a href=&#34;http://dev.blockcypher.com/&#34;&gt;Blockchain
API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For this assignment, you are welcome to use any services and open source
bitcoin libraries and openly-licensed code you want, but must follow the
license requirements of any code you use and credit this code in your
submission.&lt;/p&gt;

&lt;p&gt;The starting examples we provide will use Python and the BlockCypher
&lt;a href=&#34;http://dev.blockcypher.com/&#34;&gt;Blockchain API&lt;/a&gt;, and we provide some
directions to get started using this next (but feel free to use other
tools if you prefer).&lt;/p&gt;

&lt;h3 id=&#34;setting-up-blockcypher-api&#34;&gt;Setting up BlockCypher API&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Install Python.&lt;/strong&gt; Start by downloading and installing Python
  (&lt;a href=&#34;https://www.python.org/downloads/release/python-350/&#34;&gt;https://www.python.org/downloads/release/python-350/&lt;/a&gt;.
  Note that Python V3 is incompatible with Python V2 (on MacOSX, the
  default &lt;code&gt;python&lt;/code&gt; is Python 2.7.2; to use Python 3, use &lt;code&gt;python3&lt;/code&gt;).
  Even if you are not familiar with Python, if you feel comfortable
  learning a new language on the fly you should be fine jumping right
  into this assignment. If you prefer a more structured intro to Python
  there are many tutorials available, including
  &lt;a href=&#34;http://www.learnpython.org/&#34;&gt;http://www.learnpython.org/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install the Blockcypher Python library.&lt;/strong&gt; The &lt;a href=&#34;https://github.com/blockcypher/blockcypher-python&#34;&gt;BlockCypher Python
  library&lt;/a&gt; provides a
  convenient way to use the APIs.  To install it, execute &lt;code&gt;pip install
  blockcypher&lt;/code&gt; (in the command shell).&lt;/p&gt;

&lt;p&gt;Here is some example code that uses the BlockCypher API to find all the
addresses which received bitcoin directly from a sending address:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-Python&#34;&gt;import blockcypher

def get_receivers(sending_address):
    receiving_addresses = set()
    r = blockcypher.get_address_details(sending_address)
    for tx in r[&#39;txrefs&#39;]: # loop through all transactions
        hash = tx[&#39;tx_hash&#39;]
        transaction = blockcypher.get_transaction_details(hash)
        # was this address an input
        sender = False
        for input in transaction[&#39;inputs&#39;]:
            if sending_address in input[&#39;addresses&#39;]:
                sender = True
                break
        if sender:
            for output in transaction[&#39;outputs&#39;]:
                for adr in output[&#39;addresses&#39;]:
                    receiving_addresses.add((adr, output[&#39;value&#39;]))

    return receiving_addresses

def satoshi_to_BTC(sval):
    return sval / 100000000

sender = &#39;1Ez69SnzzmePmZX3WpEzMKTrcBF2gpNQ55&#39;
print (&amp;quot;Received from &amp;quot; + sender + &amp;quot;: &amp;quot;)
for receiver in get_receivers(sender):
    print(&amp;quot;   &amp;quot; + receiver[0] + &amp;quot; (&amp;quot; + str(satoshi_to_BTC(receiver[1])) + &amp;quot; BTC)&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To avoid API limits, you will want to &lt;a href=&#34;https://accounts.blockcypher.com/&#34;&gt;obtain an API
key&lt;/a&gt;, and add an &lt;code&gt;api_key=APIKEY&lt;/code&gt;
parameter to your requests:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-Python&#34;&gt;   txdetails = blockcypher.get_transaction_details(tx, api_key=API_KEY)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can also use direct web API requests:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-Python&#34;&gt;     r = requests.get(&#39;https://api.blockcypher.com/v1/btc/main/addrs/&#39; + adr 
       	 	       + &#39;/full&#39;, params={&#39;token&#39;: API_KEY}).json() 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To learn if an address is connected with a known wallet, you can use the
&lt;a href=&#34;http://WalletExplorer.com&#34;&gt;WalletExplorer.com&lt;/a&gt; API (note the
WalletExporer API is not publicly documented, but Aleš Janda, the
WalletExplorer developer, kindly made it available to us):&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-Python&#34;&gt;def address_display(adr):
    try:
        r = requests.get(&#39;https://www.walletexplorer.com/api/1/address-lookup?address=&#39; 
		         + adr + &#39;&amp;amp;caller=virginia.edu&#39;).json()
        return adr + &amp;quot; (&amp;quot; + r[&#39;label&#39;] + &amp;quot;)&amp;quot;
    except:
        return adr
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&#34;mixing-services&#34;&gt;Mixing Services&lt;/h2&gt;

&lt;p&gt;Before looking at the ransomware addresses, get some practice using a
blockchain API by examining a simple mixer (as far as we can tell, the
ransomwarists are not actually using any mixing service, though).&lt;/p&gt;

&lt;p&gt;In transaction
&lt;a href=&#34;https://blockchain.info/tx/0197dabc3c31c8221b5d7883a9d03240bcf7a3042e1bf6dcc26c8d3aa60c58ab&#34;&gt;0197dabc3c31c8221b5d7883a9d03240bcf7a3042e1bf6dcc26c8d3aa60c58ab&lt;/a&gt;,
Dave sent 0.01523 BTC to the mixing service
&lt;a href=&#34;https://bitmixer.io&#34;&gt;BitMixer.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;BitMixer is a mixing service for the impatient - it will send the input
amount, less the collected fees, to the requested output address
immediately after the input transaction is confirmed (a single
confirmation is enough for small amounts, so the mixer output
transaction is very likely to be in the next block in the blockchain).
(In this case, Block 379818).&lt;/p&gt;

&lt;p&gt;Note BitMixer&amp;rsquo;s &lt;a href=&#34;https://bitmixer.io/fees.html&#34;&gt;fee structure&lt;/a&gt;: &amp;ldquo;Our
minimum fee is 0.5% plus 0.0005 BTC for every forward address.  We
recommend to set higher custom fee to prevent advanced amount-based
blockchain analysis.&amp;rdquo;  (They don&amp;rsquo;t, to many customers dismay, actually
make any promises about their maximum fee.)&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 5.&lt;/strong&gt; Assuming you know the output
transaction is in the block immediately following the input transaction
and that BitMixer&amp;rsquo;s actual fee on this transaction is between 0.5% +
0.0005 BTC and 0.6% + 0.0005 BTC (but don&amp;rsquo;t know anything else), how big
is the anonymity set for the output transaction?  (Hint: use the
blockcypher API to look at all the output values for transactions in the
target block.)&lt;/p&gt;

&lt;p&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Challenge Bonus.&lt;/strong&gt; Which address is the output address?  Your answer
  should include (a) a wager amount indicating your confidence (up to 10
  points), which you win or lose depending on the correctness of your
  answer, and (b) an explanation of why you think that is the actual
  output address.
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 6.&lt;/strong&gt; The &lt;a href=&#34;https://bitmixer.io/why.html&#34;&gt;BitMixer.io&lt;/a&gt; site
  suggests, &amp;ldquo;In order to further enhance the security of your
  transactions we provide the opportunity to use two or more forward
  addresses as well as convenient time delays.&amp;rdquo;  How much does it enhance anonymity to split your output across two forward addresses?  (A good answer will get into how using two forward addresses impacts both the size of the anonymity set and the computational cost of performining the de-anonymizing analysis.  A great answer would actually test this by examining the blockchain to get a concrete result.)
   &lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&#34;follow-the-ransomware-money&#34;&gt;Follow the Ransomware Money&lt;/h2&gt;

&lt;p&gt;Now it’s time to follow the money!  We&amp;rsquo;ll provide a few hints for things
to do, but you should use these as starting points and form your own
ideas about ways to explore the blockchain.&lt;/p&gt;

&lt;p&gt;First, we examine the direct transactions involving the ransomware
addresses (in the &lt;code&gt;suspects.txt&lt;/code&gt; file provided to you).  Since we know
these addresses were used to collect money from ransomware victims, we
are more interested in looking at transactions where bitcoin is sent
from the ransomware collection addresses to other addresses.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 7.&lt;/strong&gt; Write a program that reads in a file containing suspect
addresses (e.g., the &lt;code&gt;suspects.txt&lt;/code&gt; file containing the ransomware
payment addresses that was sent to you), and examines the blockchain to
find addresses that receive bitcoin from the suspect addresses.  By
using the WalletExplorer API, you should be able to find some
interesting transactions, including one where the ransomware address
sent bitcoin to an address WalletExplorer identifies as being
&amp;ldquo;BitPay.com-old&amp;rdquo;.  Report on any interesting transactions found by your
program.&lt;br /&gt;
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;If the criminals are more careful, they should avoid making any
revealing transactions directly from the collection addresses, and
instead try to hide their money flows by making lots of transfers
between other addresses (or, if they trust a mixnet operator
sufficiently, use a mixer to disconnect their money trail).&lt;/p&gt;

&lt;p&gt;So, we want to figure out if there are any common addresses that
eventually receive coin from more than one of the starting
addresses. This could detect if the suspect addresses are running
received coins through a mixnet, but outputting to the same address
eventually, which could mean payments to the same vendor.&lt;/p&gt;

&lt;p&gt;A good approach to this problem could be writing a program that
iteratively follows successive outputs from a series of seed addresses
down to a reasonable depth and then checks for overlap between sets.  We
want to find addresses that eventually receive bitcoin sent from more
than one of the ransom collection addresses, since these are likely to
be addresses involved in meaningful transactions.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 8.&lt;/strong&gt; Write a program that reads in a file containing suspect
addresses (e.g., the &lt;code&gt;suspects.txt&lt;/code&gt; file containing the ransomware
payment addresses that was sent to you), and outputs a list of all the
addresses that eventually receive bitcoin from more than one of the
suspect addresses.  The receiving addresses are not limited to direct
transactions, but could receive funds through a sequence of transactions
starting from suspect addresses.  From the ransonware payment addresses
you should be able to find at least 34 such addresses (including the
&lt;code&gt;18dwCxqqmya2ckWjCgTYReYyRL6dZF6pzL&lt;/code&gt; address which was already known to
the FBI to have been used by the ransomware operation.)&lt;br /&gt;
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;We are also interested in finding out the relative importance of the
addresses found. You can determine this based on factors such as amount
of bitcoins they receive, number of seed addresses they are associated
with, or how many hops away the addresses are on average from associated
seed addresses.  You can also use the
&lt;a href=&#34;http://WalletExplorer.com&#34;&gt;WalletExplorer.com&lt;/a&gt; API to see if the
addresses found are associated with known wallets.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 9.&lt;/strong&gt; Improve your program to provide additional information
  about the addresses found, and order the addresses according to the
  total value they received connected to the starting addresses.
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;The final problem is open-ended.  Your goal is to hopefully find some
information that would be useful to the FBI, or short of that, to at
least impress your classmates.&lt;/p&gt;

&lt;p&gt;We have a few suggested options below (from which you can select one to
do). If you have a better idea for what to do, though, feel free to do
that instead.  If you want to do anything that involves interacting with
criminals, though, please discuss your idea with the course staff and
get permission before doing anything potentially risky!&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 10 (option 1).&lt;/strong&gt; Develop and implement a new strategy for exploring the
  ransomware transactions, and report on what you find.
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 10 (option 2).&lt;/strong&gt; Try applying your programs to other interesting sets of
  addresses.  There are lots of potential sources of such addresses,
  including, of course, searching the blockchain itself for addresses
  involved in interesting transactions.  (You can also look at posts such as &lt;a href=&#34;http://www.theopenledger.com/9-most-famous-bitcoin-addresses/&#34;&gt;9 Infamous Bitcoin Addresses&lt;/a&gt; or Blockchain.info&amp;rsquo;s &lt;a href=&#34;https://blockchain.info/popular-addresses?show_adv=true&#34;&gt;list of popular addresses&lt;/a&gt;.)
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 10 (option 3).&lt;/strong&gt; Figure out how a mixing service like
  BitMixer.io (or select another one) works, and how much anonymity it
  really provides.
   &lt;/div&gt;&lt;/p&gt;

&lt;h3 id=&#34;submission-1&#34;&gt;Submission&lt;/h3&gt;

&lt;p&gt;Follow the submission instructions at the beginning of this page by
8:29pm on Sunday, 8 November.  If you do find anything of particular
interest, please let us know right away, though!&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;credits&#34;&gt;
Credits: This assignment was developed by Ori Shimony and David Evans for
Cryptocurrency Cabal Fall 2015.  We thank Jeremy D&amp;rsquo;Errico, Benjamin
Blome, David Cochran, and Stuart VonCanon from the FBI (Richmond Office)
for providing the impetus and data for this assignment.  We thank Aleš
Janda for making the WalletExplorer API available to us.
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;a name=&#34;comments&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>PS2: The Blockchain</title>
      <link>https://bitcoin-class.org/ps/ps2/</link>
      <pubDate>Sun, 20 Sep 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/ps/ps2/</guid>
      <description>&lt;h1 id=&#34;problem-set-2-br-the-blockchain&#34;&gt;Problem Set 2:&lt;br&gt; The Blockchain&lt;/h1&gt;

&lt;p&gt;&lt;div class=&#34;due&#34;&gt;
Due: Friday, 9 October at 8:29pm
   &lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&#34;purpose&#34;&gt;Purpose&lt;/h2&gt;

&lt;p&gt;The goal of this assignment is for everyone in the class to understand
how bitcoin mining and the blockchain work, and evaluate risks to the blockchain.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h3 id=&#34;collaboration-policy&#34;&gt;Collaboration Policy&lt;/h3&gt;

&lt;p&gt;For this assignment, everyone should submit their own assignment and
should writeup their own answers to the questions.  You may, and are
encouraged to, discuss all of the problems with anyone else you want
(both on-line using the course web site or any other means you choose,
and in person).&lt;/p&gt;

&lt;h3 id=&#34;submission&#34;&gt;Submission&lt;/h3&gt;

&lt;p&gt;Submit your answers as a single PDF file using &lt;a href=&#34;https://www.dropbox.com/request/oar0AQeg4SJRNtdHbcSS&#34;&gt;this
link&lt;/a&gt;.  The name
of your file should be &lt;code&gt;&amp;lt;your email ID&amp;gt;-ps2.pdf&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Your submission should include clearly marked answers for all the
problems (highlighted in yellow).  None of the questions require
submitting a program, although you may find it helpful to write programs
to develop your answers.  If the code you write is less than a page, it
is best to just include it in the PDF writeup.  If it is longer, you may
submit separate code files (and mention them in the PDF submission).&lt;/p&gt;

&lt;h1 id=&#34;blockchain-consensus&#34;&gt;Blockchain Consensus&lt;/h1&gt;

&lt;p&gt;These questions concern the original bitcoin paper:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Satoshi Nakamoto, &lt;a href=&#34;https://bitcoin.org/bitcoin.pdf&#34;&gt;&lt;em&gt;Bitcoin: A Peer-to-Peer Electronic Cash
System&lt;/em&gt;&lt;/a&gt;, 2008.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;
&lt;strong&gt;Problem 1.&lt;/strong&gt; In Section 6, Satoshi writes:
&lt;em&gt;&amp;ldquo;The incentive may help encourage nodes to stay honest. If a greedy
attacker is able to assemble more CPU power than all the honest nodes,
he would have to choose between using it to defraud people by stealing
back his payments, or using it to generate new coins. He ought to find
it more profitable to play by the rules, such rules that favour him with
more new coins than everyone else combined, than to undermine the system
and the validity of his own wealth.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What are the assumptions necessary to support Satoshi&amp;rsquo;s claim that it is
more profitable for a greedy attacker with a majority of the mining
power &amp;ldquo;to play by the rules&amp;rdquo;? (other than the assumption that the greedy
attacker is a &amp;ldquo;he&amp;rdquo;)&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt; &lt;strong&gt;Problem 2.&lt;/strong&gt;
    At the end of Section 11, Satoshi presents a table for &lt;span class=&#34;math&#34;&gt;&lt;em&gt;p&lt;/em&gt;&lt;/span&gt; &amp;lt; 0.001,
    where it is listed &amp;ldquo;q=0.45 z=340&amp;rdquo;. What does this mean in plain
    English, expressed in a short sentence?
    &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;&lt;strong&gt;Problem 3.&lt;/strong&gt; For that same table, what would
the &lt;span class=&#34;math&#34;&gt;&lt;em&gt;z&lt;/em&gt;&lt;/span&gt; values be for &lt;span class=&#34;math&#34;&gt;&lt;em&gt;p&lt;/em&gt;&lt;/span&gt; &amp;lt; 0.05 (instead of &lt;em&gt;p&lt;/em&gt; &amp;lt; 0.001)?
   &lt;/div&gt;&lt;/p&gt;

&lt;h1 id=&#34;merkle-trees-and-storage&#34;&gt;Merkle Trees and Storage&lt;/h1&gt;

&lt;p&gt;Bitcoin uses Merkle Trees to record transactions in a way that enables a
single hash to be used to record a set of transactions, and a small
(logarithmic in the number of transactions) number of hashes to be
sufficient to verify a transaction.  In this question, you&amp;rsquo;ll explore
another use of Merkle Trees to provide verifiable cloud storage.&lt;/p&gt;

&lt;p&gt;Imagine you are storing a database using a cloud storage provider, since
you do not have local storage. Assume that you have just enough local
storage to store a small number of cryptographic hashes or keys. You
fear, however, that your storage provider may be skimping, and may not
actually be storing all of your data.&lt;/p&gt;

&lt;p&gt;So, you want to verify each record as you receive it, to make sure the
data is the same as what you wrote.  In order to do so, you are willing
to write extra cryptographic information with each write, but need to
limit the amount of local storage.&lt;/p&gt;

&lt;p&gt;Assume we are storing &lt;span class=&#34;math&#34;&gt;&lt;em&gt;n&lt;/em&gt;&lt;/span&gt; records, and we can
query the server for the &lt;span class=&#34;math&#34;&gt;&lt;em&gt;i&lt;/em&gt;&lt;/span&gt;-th record for any &lt;span class=&#34;math&#34;&gt;&lt;em&gt;i&lt;/em&gt;&lt;/span&gt; from 0 to &lt;span class=&#34;math&#34;&gt;&lt;em&gt;n&lt;/em&gt; - 1&lt;/span&gt;. The
data content of the &lt;span class=&#34;math&#34;&gt;&lt;em&gt;i&lt;/em&gt;&lt;/span&gt;-th record will be denoted as &lt;span
class=&#34;math&#34;&gt;data[&lt;em&gt;i&lt;/em&gt;]&lt;/span&gt;.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt; &lt;strong&gt;Problem 4.&lt;/strong&gt; One naive approach would be to
just sign each record data with a private key, and verify the signature
on reading it.&lt;/p&gt;

&lt;p&gt;(a) There is a problem with this scheme unless the bytes of &lt;span class=&#34;math&#34;&gt;data[&lt;em&gt;i&lt;/em&gt;]&lt;/span&gt; indicate that it is in fact from &lt;span class=&#34;math&#34;&gt;&lt;em&gt;i&lt;/em&gt;&lt;/span&gt;-th index. What is this problem?&lt;/p&gt;

&lt;p&gt;(b) Suppose we perform a write at position &lt;span class=&#34;math&#34;&gt;&lt;em&gt;i&lt;/em&gt;&lt;/span&gt;, both data and signature. Later on, when we read it back, if the signature matches the data, can we be sure that it is indeed the data item we wrote?
  Explain.
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;&lt;strong&gt;Problem 5.&lt;/strong&gt; Another approach would be hashing
  the concatenation of all records in the database. This hash is a small
  item that can be stored locally.&lt;/p&gt;

&lt;p&gt;(a) What is the write/read/verify procedure for this system?&lt;/p&gt;

&lt;p&gt;(b) How does the cost of reading and writing to the database scale with &lt;span class=&#34;math&#34;&gt;&lt;em&gt;n&lt;/em&gt;&lt;/span&gt; (the number of records)?
  &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;&lt;strong&gt;Problem 6.&lt;/strong&gt; Instead of using the concatenating all the records linear, they were organized into a Merkle tree.&lt;/p&gt;

&lt;p&gt;(a) What is the write/read/verify procedure for this system?&lt;/p&gt;

&lt;p&gt;(b) How does the cost of reading and writing to the database scale with &lt;span class=&#34;math&#34;&gt;&lt;em&gt;n&lt;/em&gt;&lt;/span&gt; (the number of records)?
    &lt;/div&gt;&lt;/p&gt;

&lt;h1 id=&#34;blockchain&#34;&gt;Blockchain&lt;/h1&gt;

&lt;p&gt;These questions are related to this paper (and what was covered in &lt;a href=&#34;https://bitcoin-class.org/classes/class10&#34;&gt;Class 10&lt;/a&gt; and &lt;a href=&#34;https://bitcoin-class.org/classes/class11&#34;&gt;Class 11&lt;/a&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ittay Eyal and Emin G&amp;uuml;n Sirer, &lt;a href=&#34;http://arxiv.org/pdf/1311.0243v5.pdf&#34;&gt;&lt;em&gt;Majority is not Enough: Bitcoin
Mining is Vulnerable&lt;/em&gt;&lt;/a&gt;, November
2013.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&#34;https://blockchain.info/orphaned-blocks&#34;&gt;Orphaned Blocks&lt;/a&gt; are blocks
that are submitted to the bitcoin network, and that are valid, but do
not become part of the longest (consensus) blockchain.&lt;/p&gt;

&lt;p&gt;One way to detect selfish mining is to be on the lookout for &amp;ldquo;orphaned&amp;rdquo;
blocks, or blocks that were mined but never became part of the final
blockchain.&lt;/p&gt;

&lt;p&gt;Let&amp;rsquo;s say you set up a node to monitor orphaned blocks, and you are in a
favorable position in the network that allows you to observe all
orphaned blocks.  Assume that the hashing difficulty stays constant and
the expected block rate is constant at 10 minutes per block.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt; &lt;strong&gt;Problem 7.&lt;/strong&gt;&lt;br /&gt;
  (a) If a mining pool has 15% (&lt;span class=&#34;math&#34;&gt;&amp;alpha;&lt;/span&gt; = 0.15) of the
  total network hashing power, how many blocks is it expected to find in
  a day?&lt;/p&gt;

&lt;p&gt;(b) Obtain a general formula for expected number of blocks a mining pool with &lt;span class=&#34;math&#34;&gt;&amp;alpha;&lt;/span&gt; fraction of the total hashing power should find in &lt;span class=&#34;math&#34;&gt;&lt;em&gt;t&lt;/em&gt;&lt;/span&gt; minutes.
  &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;For the next questions, you may assume a very simplified network model
where you can view the network having two &amp;ldquo;supernodes&amp;rdquo;: one represents a
particular mining pool, and the other represents all other nodes in the
network.  The latency between the two supernodes is &lt;span class=&#34;math&#34;&gt;&lt;em&gt;L&lt;/em&gt;&lt;/span&gt; seconds.&lt;/p&gt;

&lt;p&gt;With this simple (but very unrealistic) model, we assume that when one
supernode announces a block, all of the rest of the network learns of
the new block &lt;span class=&#34;math&#34;&gt;&lt;em&gt;L&lt;/em&gt;&lt;/span&gt; seconds later (but no one
learns of it before that).&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt; &lt;strong&gt;Problem 8.&lt;/strong&gt; Assuming all of the miners are
  honest, what is the expected number of orphaned blocks per day for an honest
  mining pool with hashing power &lt;span class=&#34;math&#34;&gt;&amp;alpha;&lt;/span&gt; and latency &lt;span class=&#34;math&#34;&gt;&lt;em&gt;L&lt;/em&gt;&lt;/span&gt; (as simplified
  above).
  &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt; &lt;strong&gt;Problem 9.&lt;/strong&gt; How does this change if the
  mining pool is mining selfishly?  (For this question, assume that the
  selfish mining pool learns of a block announced by the rest of the
  network as soon as it is announced, so will immediately announce any
  withheld blocks at that time.  That is, you may still assume the
  simplified latency &lt;span class=&#34;math&#34;&gt;&lt;em&gt;L&lt;/em&gt;&lt;/span&gt; model, but that the selfish mining pool has a
  spy in the other supernode with a low-latency direct connection to the
  mining pool.)
  &lt;/div&gt;&lt;/p&gt;

&lt;h1 id=&#34;pool-hopping&#34;&gt;Pool Hopping&lt;/h1&gt;

&lt;p&gt;Answer &lt;em&gt;either&lt;/em&gt; question 10A or 10B (your choice).&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt; &lt;strong&gt;Problem 10A.&lt;/strong&gt; In class, we saw how pool-hopping
can be used to game a &amp;ldquo;proportional&amp;rdquo; reward scheme. Design a simple
reward scheme that eliminates pool-hopping incentive. In particular,
derive the expected reward for your scheme and show that it does not
depend on time since last block (or any variable controlled by the
miner).  &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt; &lt;strong&gt;Problem 10B.&lt;/strong&gt; In upcoming classes, we will
   have visits from a law professor (who also works for the State
   Department on international cyberlaw and promulgating the open
   Internet) and an FBI agent who works on criminals using bitcoin for
   ransom.  Come up with at least one good question that you would like
   one of them to answer.
   &lt;/div&gt;&lt;/p&gt;

&lt;h1 id=&#34;bonus-opportunities&#34;&gt;Bonus Opportunities&lt;/h1&gt;

&lt;p&gt;The following questions are suggestions for further work, but it is not
expected that everyone will solve them.  (Note that some of these could
be starting ideas for larger projects, although a good answer to any of
them would be most impressive.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge 1.&lt;/strong&gt; The network model in questions 8 and 9 is very
  unrealistic.  Answer these questions for a more realistic model of the
  bitcoin network, and compare your results with the actual rates of
  orphaned blocks.  To better detect misbehaving miners, you would want
  to also look into the contents of the dual blocks (note that the one
  that was orphaned is not necessarily the one from the selfish miner).
  There is an API for obtaining orphaned blocks provided by
  &lt;a href=&#34;https://api.biteasy.com/blockchain/v1/blocks?type=ORPHANED&#34;&gt;https://api.biteasy.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge 2.&lt;/strong&gt; The analysis in the paper and in class assumed that if
   the selfish miner is ahead by 2 blocks, it will always win by
   releasing the blocks when it observes a new block on the blockchain.
   It could still lose if the rest of the network finds a second block
   before the selfish miner&amp;rsquo;s blocks have propagated over the network.
   How does this possibility impact the analysis?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge 3.&lt;/strong&gt; The site that was demonstrated in Class 11 uses a very
  simple model to estimate the profitability of a particular bitcoin
  miner.  Produce a better model, and use it to evaluated the expected
  profit (or loss) for mining hardware such as &lt;a href=&#34;https://bitmaintech.com/product.htm&#34;&gt;Antminer
  S7&lt;/a&gt;.  A better model would need
  to capture expected increases in the difficulty, cost of capital, and
  other costs of mining besides electricity.&lt;/p&gt;

&lt;h3 id=&#34;submission-1&#34;&gt;Submission&lt;/h3&gt;

&lt;p&gt;Follow the submission instructions at the beginning of this page by
8:29pm on Friday, 9 October.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>PS1: Bitcoin Transactions</title>
      <link>https://bitcoin-class.org/ps/ps1/</link>
      <pubDate>Tue, 01 Sep 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/ps/ps1/</guid>
      <description>&lt;h1 id=&#34;problem-set-1-bitcoin-transactions&#34;&gt;Problem Set 1: Bitcoin Transactions&lt;/h1&gt;

&lt;p&gt;&lt;div class=&#34;due&#34;&gt;
Due: Tuesday, 15 September at 8:29pm
   &lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&#34;purpose&#34;&gt;Purpose&lt;/h2&gt;

&lt;p&gt;The goal of this assignment is for everyone in the class to understand
how keys, addresses, and transactions work in bitcoin.  In addition,
this assignment should help everyone get up-to-speed with the software
tools (including the Go programming language) we will use in later
assignments.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h3 id=&#34;collaboration-policy&#34;&gt;Collaboration Policy&lt;/h3&gt;

&lt;p&gt;For this assignment, everyone should submit their own assignment and
should writeup their own answers to the questions as well as execute all
the required transactions with your own keys.&lt;/p&gt;

&lt;p&gt;You may, and are encouraged to, discuss all of the problems with anyone
else you want (both on-line using the course web site or any other means
you choose, and in person), and it is okay to share code with others so
long as you understand everything in all of the code you use.&lt;/p&gt;

&lt;h3 id=&#34;submission&#34;&gt;Submission&lt;/h3&gt;

&lt;p&gt;Submit your answers as a single PDF file using &lt;a href=&#34;https://www.dropbox.com/request/KV26Qd6UrcB9j6nBLVw8&#34;&gt;this
link&lt;/a&gt;.  The name
of your file should be &lt;code&gt;&amp;lt;your email ID&amp;gt;-ps1.pdf&lt;/code&gt;.  (In addition to the
PDF file you submit, you may submit a separate &lt;code&gt;spend.go&lt;/code&gt; file with your
code for question 11, or incorporate that code into the PDF submission.)&lt;/p&gt;

&lt;p&gt;Your submission should include clearly marked answers for all the
problems (highlighted in yellow).&lt;/p&gt;

&lt;h1 id=&#34;blockchain-sleuthing&#34;&gt;Blockchain Sleuthing&lt;/h1&gt;

&lt;p&gt;You should have received some bitcoin at the address you submitted in
the registration form.  (If you did not receive any bitcoin, contact the
course staff right away!)&lt;/p&gt;

&lt;p&gt;From that transaction, you have an address that was used to send you the
bitcoin.  For these questions, your goal is to figure out what you can
about the way bitcoin was distributed to the class.  For these
questions, manual sleuthing should be sufficient (although ambitious
students may find ways to automate this).&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt; &lt;strong&gt;Problem 1.&lt;/strong&gt; Answer the following questions about the transaction
  where you received the bitcoin.  If you received more than one
  transfer, include all the transaction IDs).&lt;/p&gt;

&lt;p&gt;a. What is the transaction ID?&lt;/p&gt;

&lt;p&gt;b. What was the transaction fee for the transaction?  (Give your answer
in BTC, as well as current approximate US dollar value.)&lt;/p&gt;

&lt;p&gt;c. What was the total value of all the transactions in the block
containing your transfer?  (Note:
&lt;a href=&#34;https://blockchain.info&#34;&gt;https://blockchain.info&lt;/a&gt; provides this info
conveniently, although you could compute it yourself)&lt;/p&gt;

&lt;p&gt;d. How long did it take from when the transaction was received until it
had 3 confirmations?  (Include an explanation of how you estimated this
in your answer.)
    &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Bitcoin advocates often taut its &amp;ldquo;anonymity&amp;rdquo;, but bitcoin transactions
are actually publicly visible.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt; &lt;strong&gt;Problem 2.&lt;/strong&gt; See how much can you figure out about the way bitcoin was
transferred to students in the class, starting from your transactions.&lt;/p&gt;

&lt;p&gt;a. Identify the bitcoin addresses of what are likely to be other
students in the class (you could potentially find all of them, but it is
enough to find 3).&lt;/p&gt;

&lt;p&gt;b. Trace back the source of the bitcoin as far as you can.  Bonus points
if you can figure out from which exchange the bitcoin was purchased and
when.&lt;/p&gt;

&lt;p&gt;c. (Bonus) Can you learn anything about where the send of the bitcoin is
located geographically?  (In this case, you have external information to
know I&amp;rsquo;m in Charlottesville, but what could you learn about the sender&amp;rsquo;s
probable location just from the information in the blockchain?)&lt;/p&gt;

&lt;p&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Hints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Start by looking at the transaction that sent bitcoin to your
receiving address.  You can search for this by searching for your
recieving address at
&lt;a href=&#34;https://blockexplorer.com&#34;&gt;https://blockexplorer.com&lt;/a&gt;,
&lt;a href=&#34;https://insight.bitpay.com/&#34;&gt;https://insight.bitpay.com/&lt;/a&gt;,
&lt;a href=&#34;https://blockchain.info&#34;&gt;https://blockchain.info&lt;/a&gt;, or many other
sites that provide information about the bitcoin blockchain.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;You can go forward, by following what happened with the &amp;ldquo;change&amp;rdquo; from
that transaction.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;You can go backward, by following transactions to the sending address.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;&lt;strong&gt;Problem 3.&lt;/strong&gt; Suppose a malicious developer wanted to distribute a
  bitcoin wallet implementation that would steal as much bitcoin as
  possible from its users with a little chance as possible of getting
  caught.  (a) Explain things a malicious developed might do to create
  an evil wallet.  (b) How confident are you your money is safe in the
  wallet you are using, and what would you do to increase your
  confidence if you were going to store all of your income in it?
   &lt;/div&gt;&lt;/p&gt;

&lt;h1 id=&#34;getting-going&#34;&gt;Getting GOing&lt;/h1&gt;

&lt;p&gt;You are free to use any programming language and open source bitcoin
libraries and openly-licensed code you want for this assignment, but
must follow the license requirements of any code you use and credit this
code in your submission.&lt;/p&gt;

&lt;p&gt;The directions we provide use the &lt;a href=&#34;https://github.com/btcsuite&#34;&gt;BTC
Suite&lt;/a&gt; library for bitcoin, implemented in
the &lt;a href=&#34;https://golang.org/&#34;&gt;Go&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Most of you do not have any experience using Go, but it is not a
difficult language to learn coming from experience with Java (which all
of you have), and although its not &lt;a href=&#34;http://rust-class.org&#34;&gt;my favorite programming
language&lt;/a&gt; it is a language that nearly everyone
finds enjoyable to use and it is becoming widely used in industry
(especially at Google, where it was developed).  The main reason we are
using it for this, though, is because the &lt;a href=&#34;https://github.com/btcsuite&#34;&gt;BTC
library&lt;/a&gt; is the best bitcoin library we are
aware of, and it is written in Go.&lt;/p&gt;

&lt;p&gt;If you are comfortable learning a new programming language by diving
right into moderately complex programs and figuring out things as you
go, you should be able to jump right into this assignment.  If you
prefer a more structured introduction to Go, there are many tutorials
available, including the &lt;a href=&#34;https://tour.golang.org/welcome/1&#34;&gt;Tour of
Go&lt;/a&gt;.  The &lt;a href=&#34;https://gobyexample.com/&#34;&gt;Go by
Example&lt;/a&gt; site is very helpful.  For more
documentation, visit &lt;a href=&#34;https://golang.org/doc/&#34;&gt;https://golang.org/doc/&lt;/a&gt;.&lt;/p&gt;

&lt;!--
# Going Gets Good

After you have installed go, you can set up the BTC library by doing:

```shell
&gt; go get github.com/btcsuite/btcec
```
--&gt;

&lt;h1 id=&#34;obtain-the-starting-code&#34;&gt;Obtain the Starting Code&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Install Go.&lt;/strong&gt;
Start by &lt;a href=&#34;https://golang.org/doc/install&#34;&gt;downloading and installing
Go&lt;/a&gt;.  The latest version is go1.5, which
is the version you should use.&lt;/p&gt;

&lt;p&gt;Make sure to create a directory to contain your workspace and set the
GOPATH environment variable to point to that location (these commands
are for the Mac OS X shell and the bash shell on Linux):&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;$ mkdir go_workspace
$ export GOPATH=$Home/go_workspace
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Install BTCD.&lt;/strong&gt; &lt;a href=&#34;https://github.com/btcsuite/btcd&#34;&gt;Follow the directions to install
  btcd&lt;/a&gt; from btcsuite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setting up git.&lt;/strong&gt; Before continuing with this assignment, you should
&lt;a href=&#34;https://bitcoin-class.org/tools/github/&#34;&gt;set up git and your github account&lt;/a&gt;
and follow the directions there to set up your private repository
containing the starting code for ps1.  (It may seem like overkill to use
git for this assignment since you will not need to write much code or
work with teammates on this one.  But, it is good to get experience
using git and will become necessary to work effectively with teammates
for later projects.)&lt;/p&gt;

&lt;p&gt;Once you have finished setting up your &lt;code&gt;ps1&lt;/code&gt; repository, it should
contain the files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/CryptocurrencyCabal/ps1/blob/master/keypair.go&#34;&gt;keypair.go&lt;/a&gt;:
code for generating a bitcoin key pair (including its public address).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/CryptocurrencyCabal/ps1/blob/master/spend.go&#34;&gt;spend.go&lt;/a&gt;: code for generating a bitcoin transaction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&#34;elliptic-curve-cryptography&#34;&gt;Elliptic Curve Cryptography&lt;/h1&gt;

&lt;p&gt;The btcsuite library includes,
&lt;a href=&#34;https://github.com/btcsuite/btcd/tree/master/btcec&#34;&gt;btcec&lt;/a&gt;, an
implementation of the ECDSA digital signatures algorithm using the
&lt;a href=&#34;https://en.bitcoin.it/wiki/Secp256k1&#34;&gt;secp256k1&lt;/a&gt; elliptic curve used by
bitcoin.&lt;/p&gt;

&lt;p&gt;Examine the
&lt;a href=&#34;https://github.com/btcsuite/btcd/blob/master/btcec/btcec.go&#34;&gt;btcec.go&lt;/a&gt;
code.  For example, you should be able to find the &lt;span
class=&#34;math&#34;&gt;&lt;em&gt;y&lt;/em&gt;&lt;sup&gt;2&lt;/sup&gt; = &lt;em&gt;x&lt;/em&gt;&lt;sup&gt;3&lt;/sup&gt; + 7&lt;/span&gt; curve in this
code.&lt;/p&gt;

&lt;p&gt;Elliptic curves for cryptography needs really big numbers.  The modulus for the &lt;code&gt;secp256k1&lt;/code&gt; curve is found on &lt;a href=&#34;https://github.com/btcsuite/btcd/blob/BTCD_0_11_1_BETA/btcec/btcec.go#L909&#34;&gt;line 929&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; secp256k1.P = fromHex(&amp;quot;FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This should be the value &lt;span class=&#34;math&#34;&gt;2&lt;sup&gt;256&lt;/sup&gt; - 2&lt;sup&gt;32&lt;/sup&gt; - 2&lt;sup&gt;9&lt;/sup&gt; - 2&lt;sup&gt;8&lt;/sup&gt; - 2&lt;sup&gt;7&lt;/sup&gt; - 2&lt;sup&gt;6&lt;/sup&gt; - 2&lt;sup&gt;4&lt;/sup&gt; - 1.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;&lt;strong&gt;Problem 4.&lt;/strong&gt; Verify that the modulus used as &lt;code&gt;secp256k1.P&lt;/code&gt; in
  &lt;code&gt;btcec.go&lt;/code&gt; is correct.  You can do this either using
  &lt;a href=&#34;https://golang.org/pkg/math/big/&#34;&gt;math/big&lt;/a&gt;, Go&amp;rsquo;s bit integer library
  to do computations on such large numbers, or by computing it by hand.
  (For your answer, just show how you verified the modulus.  Including a
  snippet of code is fine.)&lt;/p&gt;

&lt;p&gt;&lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&#34;generating-a-key-pair&#34;&gt;Generating a Key Pair&lt;/h2&gt;

&lt;p&gt;We have provided code in &lt;code&gt;keypair.go&lt;/code&gt; that generates a bitcoin key pair.
You can try running this by running &lt;code&gt;go run keypair.go&lt;/code&gt; (or you can
compile it with &lt;code&gt;go build keypair.go&lt;/code&gt; and then run the resulting
executable &lt;code&gt;keypair&lt;/code&gt;).  It will print out the generated private key and
corresponding public bitcoin address.  (Try running it a few times to
see that it produces a different key pair each time.)&lt;/p&gt;

&lt;p&gt;Keys for ECDSC are generated by choosing a random private key, &lt;span
class=&#34;math&#34;&gt;&lt;em&gt;k&lt;/em&gt;&lt;/span&gt;, and finding the corresponding public key by
&amp;ldquo;multiplying&amp;rdquo; it by &lt;span class=&#34;math&#34;&gt;&lt;em&gt;G&lt;/em&gt;&lt;/span&gt;, the generator point.
(Multiplication here is not standard multiplication, but multiplication
on the elliptic curve, as discussed in &lt;a href=&#34;https://bitcoin-class.org/classes/class3/&#34;&gt;Class 3&lt;/a&gt;.)  The point &lt;span
class=&#34;math&#34;&gt;&lt;em&gt;G&lt;/em&gt;&lt;/span&gt; is defined by &lt;a href=&#34;https://github.com/btcsuite/btcd/blob/BTCD_0_11_1_BETA/btcec/btcec.go#L912&#34;&gt;lines
912-3&lt;/a&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;secp256k1.Gx = fromHex(&amp;quot;79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798&amp;quot;)
secp256k1.Gy = fromHex(&amp;quot;483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The resulting point is the public key.  It is easy to derive the public
key from the private key, but believed to be hard to learn anything
useful about the private key from the public key.  The belief that it
is hard to reverse the elliptic curve multiplication is based on the
assumption that it is hard to compute discrete logarithms, which is not
proven, but underlies much of modern cryptography.&lt;/p&gt;

&lt;p&gt;The code for generating a new keypair is in &lt;a href=&#34;https://github.com/CryptocurrencyCabal/ps1/blob/master/keypair.go#L20&#34;&gt;keypair.go&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;func generateKeyPair() (*btcec.PublicKey, *btcec.PrivateKey) {
   priv, err := btcec.NewPrivateKey(btcec.S256())
   if err != nil {
       // There was an error. Log it and bail out
       log.Fatal(err)
   }
   return priv.PubKey(), priv
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The important work is done by the
&lt;a href=&#34;https://github.com/btcsuite/btcd/blob/BTCD_0_11_1_BETA/btcec/privkey.go#L38&#34;&gt;NewPrivateKey&lt;/a&gt;
function.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;&lt;strong&gt;Problem 5.&lt;/strong&gt; What are &lt;em&gt;all&lt;/em&gt; the things you need to trust if you are
going to send money to the key generated by running &lt;code&gt;keypair.go&lt;/code&gt;?  You
should assume that you are an ultra-paranoid multi-billionaire who
intends to transfer her entire fortune to the generated address.&lt;br /&gt;
    &lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&#34;generating-a-vanity-address&#34;&gt;Generating a Vanity Address&lt;/h2&gt;

&lt;p&gt;Anyone can have a bitcoin address like
&lt;code&gt;1H7tu2qUAyyr5aX1WA17eyvbetAGyqxfKZ&lt;/code&gt; or
&lt;code&gt;1L3iGYBD5wbiki2SYUT5wmupy4TTgmEBg3&lt;/code&gt;, but suppose you want a bitcoin
address that includes the name of your cat or your birthday.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;&lt;strong&gt;Problem 6.&lt;/strong&gt; Define a function, &lt;code&gt;func
generateVanityAddress(pattern string) (*btcec.PublicKey,
*btcec.PrivateKey)&lt;/code&gt; where &lt;code&gt;pattern&lt;/code&gt; is a regular expression.  It should
return a valid key pair where the corresponding public address &lt;a href=&#34;http://golang.org/pkg/regexp/#MatchString&#34;&gt;matches
the pattern&lt;/a&gt;.&lt;br /&gt;
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;You should be able to use your function to generate an address that
includes the digits of pi in sequence:
&lt;code&gt;generateVanityAddress(&amp;quot;3.*1.*4.*1.*5.*9.*&amp;quot;)&lt;/code&gt; or contains &lt;code&gt;dave&lt;/code&gt; without
any adjacent letters (&lt;code&gt;generateVanityAddress(&amp;quot;[0-9]dave[0-9]&amp;quot;)&lt;/code&gt;) in its
public bitcoin address.  In deciding how vain you want to be for the
next exercise, think about how the running time scales with the number
of strings that match the target pattern.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt; &lt;strong&gt;Problem 7.&lt;/strong&gt; Use your &lt;code&gt;generateVanityAddress&lt;/code&gt;
function to create your own vanity address.  Its up to you to decide
what to put in your vanity address, but it should be clear that your
address is not a typical random one.  If you are extra vain, create a
address where your name appears at the beginning (after the initial
&lt;code&gt;1&lt;/code&gt;).  (Note that uppercase &amp;lsquo;O&amp;rsquo; and &amp;lsquo;I&amp;rsquo; and lowercase &amp;lsquo;l&amp;rsquo; are not used
in any address, so if your name includes these letters you will have to
be creative.)&lt;br /&gt;
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;&lt;strong&gt;Problem 8.&lt;/strong&gt;   Is your vanity address more or less secure than the first address you generated?
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;There are on-line services that produce vanity addresses, like
   &lt;a href=&#34;http://bitcoinvanitygen.com/&#34;&gt;http://bitcoinvanitygen.com/&lt;/a&gt;.  You
   should contemplate briefly whether using such a site is &lt;a href=&#34;http://www.reddit.com/r/Bitcoin/comments/21foj9/funds_currently_being_stolen_from_vanity/&#34;&gt;more vain or
   stupid&lt;/a&gt;.&lt;/p&gt;

&lt;h1 id=&#34;bitcoin-transactions&#34;&gt;Bitcoin Transactions&lt;/h1&gt;

&lt;p&gt;Having an address is not much fun without any funds!&lt;/p&gt;

&lt;p&gt;You should have received some money to the address you submitted in
&lt;a href=&#34;../../ps/ps0/ps0.md&#34;&gt;PS0&lt;/a&gt;.  For these questions, you will need to have
actual money to transfer, so be careful to make small transfers for
these questions in case something goes wrong.  (In the event that you do
lose all of your bitcoin, you can get a new transfer to an adress of
your choosing by explaining to me what you have learned about software
development and or best practices.  It is not necessary to buy your own
bitcoin, even if you lose all of the original transfer.)&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;&lt;b&gt;Problem 9.&lt;/b&gt; Make a &lt;strong&gt;small&lt;/strong&gt; (e.g., 1 mBTC) transfer from
your wallet address to your vanity address.  You can do this using
your MultiBit wallet.  Find the transaction in the blockchain (you can do this by
searching for your vanity address at
&lt;a href=&#34;https://insight.bitpay.com/&#34;&gt;insight.bitpay.com&lt;/a&gt; or
&lt;a href=&#34;https://blockchain.info/&#34;&gt;blockchain.info&lt;/a&gt;). You will need the
transaction ID for the next exercise.  (For your answer, just provide the transaction ID.)
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Once you have located the transaction that sends bitcoin to your vanity
address you should notice several things.&lt;/p&gt;

&lt;p&gt;Your wallet most likely send bitcoins to your address &lt;em&gt;and&lt;/em&gt; back to a
new address.  We call this second address the &amp;lsquo;change&amp;rsquo; address. Notice
that each output has an ordered position. This index (known as the &lt;code&gt;vout&lt;/code&gt;)
along with the transaction ID lets us uniquely identify transaction
outputs. This is important if you want to use those outputs in a new
transaction.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;&lt;strong&gt;Problem 10.&lt;/strong&gt; Transfer some bitcoin from your vanity address to someone
else in the class (you can use one of the addresses you identified in
Problem 2). To do this you can run &lt;code&gt;spend.go&lt;/code&gt; in ps1. You can provide
the parameters needed for the transaction at the command line (it is not
necessary to modify the code).
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;If done correctly the script should look this when executed:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;&amp;gt; go run spend.go \
      -privkey &amp;quot;f3942c1e1...87&amp;quot; \
      -toaddress &amp;quot;19WmbY4nDcjAEv6wb5rcd5E6MutVMXBZzy&amp;quot; \
      -txid &amp;quot;9070329c2850d9b1dadeaa8683039b273beb58a27812172e31e397cf19fd5ca0&amp;quot; \
      -vout 0
Here is your raw bitcoin transaction:
0100000001a05cfd19cf97e3312e171278a258eb3b279b038386aadedab1d950289c327090000000006a47304402201d2fd4818cf4f4faa8\
4bbd407e5477c2a3722b137339460ff99c7255ad63bcc802201d991cad02e62d24fb4db2527a456159e069567116a325ee09186061395839\
e901210324594ad7124d0812e060200b66cc5199142e9adc42b0cd0c40f457eac4005d5dffffffff01f78a0100000000001976a9145d624b\
a9f2c55817af8b819ed4aaae55a36e256288ac00000000
The sending api responded with:
{&amp;quot;txid&amp;quot;:&amp;quot;e5f4cb8e3736cab91ff4eb889bc8af659f1d8d398b3f934c8d63871b495d9065&amp;quot;}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I&amp;rsquo;ve left out most of my private key, since posting your private key on
the web is not a very smart thing to do!&lt;/p&gt;

&lt;p&gt;Notice that when the command above is run with these parameters it only
works
&lt;a href=&#34;https://blockchain.info/tx/e5f4cb8e3736cab91ff4eb889bc8af659f1d8d398b3f934c8d63871b495d9065&#34;&gt;once&lt;/a&gt;.
If you try to run it again you should get an API error since the input
transaction has already been spent.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt;&lt;strong&gt;Problem 11.&lt;/strong&gt; The provided &lt;code&gt;spend.go&lt;/code&gt; code
   sends the full amount of the input transaction (less the network fee)
   to the destination address.  Modify the program to add an &lt;code&gt;-amount
   &amp;lt;value&amp;gt;&lt;/code&gt; flag that takes the amount to transfer in satoshi.  If the amount
   available in the specified transaction output (less the network fee) exceeds the
   amount to send, your program should print an error message.
   Otherwise, it should send the requested amount to the toaddress, and
   send the change back to your address.
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Try using your modified spending code to send a small amount to another
address, and do another transaction to check that the change you receive
back is still spendable.&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;problem&#34;&gt; &lt;b&gt;Problem 12.&lt;/b&gt; (Bonus) Try to double spend the same
bitcoin.  Figure out as much as you can about what happens when the
double spend transactions are attempted.  See if you can get a
transaction to appear on the &lt;a href=&#34;https://blockchain.info/double-spends&#34;&gt;list of double
spends&lt;/a&gt;.  See how close you can get to obtaining two verified
transactions spending the same coin (e.g., can you achieve two
transactions with at least one confirmation each?)&lt;/p&gt;

&lt;p&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Please don&amp;rsquo;t try to actually rip anyone off; only attempt double
spending with your own addresses (or those of willing classmates).  You
are not expected to actually be able to double-spend successfully (if
this were easy, bitcoin would not work well as a currency!), but should
be able to learn something by attemting to do this.&lt;/p&gt;

&lt;h3 id=&#34;submission-1&#34;&gt;Submission&lt;/h3&gt;

&lt;p&gt;Follow the submission instructions at the beginning of this page by
8:29pm on Tuesday, 15 September.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Getting Started with Github</title>
      <link>https://bitcoin-class.org/tools/github/</link>
      <pubDate>Tue, 20 Jan 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/tools/github/</guid>
      <description>

&lt;h1 id=&#34;getting-started-with-github&#34;&gt;Getting Started with Github&lt;/h1&gt;

&lt;p&gt;For this course you will need to use &lt;a href=&#34;http://github.com&#34;&gt;github&lt;/a&gt; to
manage your code and submit your assignments.  &lt;a href=&#34;http://gitscm.com/&#34;&gt;Git&lt;/a&gt;
is a widely used version control system originally developed by Linus
Torvalds for use in managing development of the Linux operating system
kernel.  Github is company that provides free web-hosting for git
repositories.&lt;/p&gt;

&lt;p&gt;Follow the instructions below to get started using git and set up the
repository you will use for this class (we&amp;rsquo;ll talk more about git in
class, but this should be enough to get started):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Register for a student github account: &lt;a href=&#34;https://github.com/edu&#34;&gt;https://github.com/edu&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: you need to do this even if you already have a public github
  account, unless you have a paid account to support non-public
  repositories.  With the student account, you will be able to have
  non-public repositories for free.&lt;/p&gt;

&lt;p&gt;You will need to verify your email address (which must be a .edu
  address), and then go back to the
  &lt;a href=&#34;https://github.com/edu&#34;&gt;https://github.com/edu&lt;/a&gt; page to fill in a
  form to request a student account.  You should then receive a
  &amp;ldquo;Powerup get!&amp;rdquo; message from github, and be able to create private
  repositories with your account.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Set up git on the machine you will use for course assignments. Follow the instructions here:
  &lt;a href=&#34;https://help.github.com/articles/set-up-git&#34;&gt;https://help.github.com/articles/set-up-git&lt;/a&gt;.
  Follow the instructions to download and install a git client for your OS
  (&lt;a href=&#34;http://mac.github.com/&#34;&gt;Mac&lt;/a&gt;,
  &lt;a href=&#34;http://windows.github.com/&#34;&gt;Windows&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&#34;using-git-for-ccc&#34;&gt;Using git for CCC&lt;/h1&gt;

&lt;p&gt;For some of the assignments in this course, we will provide starting
code in a git repository and you will need to use separate private
repository for each assignment.  (After the assignment is due, you can
make this repository public, both to share it as you wish, and to free
up another private repository since the number of private repositories
you get with your free education account is limited.)&lt;/p&gt;

&lt;p&gt;Typically, you need to fetch the code skeleton from the respective
public repository of the course every time before you start working.&lt;/p&gt;

&lt;p&gt;The general process of working on projects is to (we&amp;rsquo;ll go through each
step in detail below):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create a private repository on github.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clone&lt;/strong&gt; the repository, so you have a local working copy.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Get the code skeleton from the course repo, merge it into your
working copy, and push to the main repository.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Edit code and text files in your local copy.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;push&lt;/strong&gt; the local changes to the main repository.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As you do the assignment, you should commit and push your changes regularly.&lt;/p&gt;

&lt;h2 id=&#34;setting-up-the-repository&#34;&gt;Setting up the Repository&lt;/h2&gt;

&lt;p&gt;Let&amp;rsquo;s take &lt;a href=&#34;https://bitcoin-class.org/ps/ps1/&#34;&gt;PS1&lt;/a&gt; as an example. Here&amp;rsquo;s what you should do.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;1. Create a new repository named &lt;code&gt;ps1&lt;/code&gt;.&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;a href=&#34;https://github.com/repositories/new&#34;&gt;https://github.com/repositories/new&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Select &amp;ldquo;Private&amp;rdquo; for the type of repository.  (If you got a student discount correctly, this should be available for free.  If it asks you for
      a credit card, go back to step 1 of &lt;a href=&#34;|filename|github.md&#34;&gt;setting up github&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;Keep the &amp;ldquo;Initialize this repository with a README&amp;rdquo; unchecked, since you will fetch it later from a public repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;2. Clone the empty private repository to your working
environment.&lt;/b&gt; Instead of &lt;em&gt;mygithubname&lt;/em&gt; below, use your github
username.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;:::text
git clone https://github.com/mygithubname/ps1.git
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you haven&amp;rsquo;t set up SSH keys for github, you&amp;rsquo;ll need to enter your
github username and password.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;3. Fetch the code skeleton from the course repository to your private
repository.&lt;/b&gt; Enter the working directory of your empty repository and
add a remote repository named &lt;code&gt;starting&lt;/code&gt;, merge the code, and push it to
your private repository by executing:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;:::text
git remote add starting git@github.com:CryptoCurrencyCabal/ps1.git
git pull starting master
git push --tags origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&#34;working-with-files&#34;&gt;Working with Files&lt;/h2&gt;

&lt;p&gt;Now you can write your own code in editor and save it to files. You can see what files have changed by running:
&lt;code&gt;git status&lt;/code&gt;.  You should see something like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;:::text
# On branch master
# Untracked files:
#   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)
#
#   break_daves_key.go
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In this example, nothing has been added to commit but untracked files
are present.&lt;/p&gt;

&lt;p&gt;To add the files to the main repository:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;:::text
git add break_daves_key.go
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You should try running &lt;code&gt;git status&lt;/code&gt; again to see the files that will be
committed.  Note that add stages the file in its current state!  If you
modify the file after the add, the version of the file when you did the
add is the version that will be committed.&lt;/p&gt;

&lt;p&gt;Then,&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;:::text
git commit
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;commits the staged files to the main repository.  This will launch and
editor for you to enter a commit message.  You can use &lt;code&gt;-m&lt;/code&gt; to provide a
message at the command line instead:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;:::text
git commit -m &#39;I am no longer afraid of commitment!&#39;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Your actual commit messages you use should be &lt;strong&gt;clear&lt;/strong&gt; and &lt;strong&gt;useful&lt;/strong&gt;.
It is tempting to use &lt;a href=&#34;http://whatthecommit.com/&#34;&gt;lazy commit message&lt;/a&gt;,
but you will regret this as your projects get more complex and code
breaks in mysterious ways.&lt;/p&gt;

&lt;p&gt;If you want to skip the two-stage commit, you can do:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;:::text
git commit -a
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;to automatically add all new and changed files to the commit.&lt;/p&gt;

&lt;p&gt;At this point, the changes are stored in your local repository, but not
yet in the main repository.  Once you have changes you want to push to
the main repository:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;:::text
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;After this, all the changes are now pushed to the main repository at
github.  Visit your repository in github to see the result.&lt;/p&gt;

&lt;p&gt;This seems like a lot of steps, but by providing a full local repository
and making the steps of staging and pushing to the remote repository
explicit, git provides developers with a lot of control over
repositories that becomes very useful when several (or many) developers
are working on the same project and trying to combine each others
changes (or recover from mistakes).&lt;/p&gt;

&lt;p&gt;There are many resources for learning more about git.  The free book,
&lt;a href=&#34;http://git-scm.com/book/en/&#34;&gt;Pro Git&lt;/a&gt; by Scott Chacon is recommended.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Classes</title>
      <link>https://bitcoin-class.org/allclasses/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/allclasses/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://bitcoin-class.org/classes/class1/&#34;&gt;1: What is Money?&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class2/&#34;&gt;2: Cryptography&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class3/&#34;&gt;3: Signatures&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class4/&#34;&gt;4: Checkup 1&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class5/&#34;&gt;5: Becoming Paranoid&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class6/&#34;&gt;6: Hash Functions&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class7/&#34;&gt;7: The Blockchain&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class8&#34;&gt;8: Mining&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class9&#34;&gt;9: Mining Economics&lt;/a&gt; (and Checkup 2)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class10&#34;&gt;10: Subverting Bitcoin&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class11&#34;&gt;11: More Mining&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class12&#34;&gt;12: Script&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class13&#34;&gt;13: Law and Policy&lt;/a&gt; (Tom Dukes visit)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class14&#34;&gt;14: Crime&lt;/a&gt; (FBI visit)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class15&#34;&gt;15: Scripting Transactions&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class16&#34;&gt;16: Midterm&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class17&#34;&gt;17: Business&lt;/a&gt; (Josh Cincinatti visit)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class18&#34;&gt;18: Confirmations&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class19&#34;&gt;19: Anonymity&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class20&#34;&gt;20: Hidden Services&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class21&#34;&gt;21: Scaling Bitcoin&lt;/a&gt; (Alex Kuck and Nick Skelsey visit)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class22&#34;&gt;22: Zero Knowledge Proofs&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class23&#34;&gt;23: Before Bitcoin (Digicash)&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class24&#34;&gt;24: Altcoins&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class25&#34;&gt;25: Project Proposal Presentations&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class26&#34;&gt;26: Jeopardy!&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class27&#34;&gt;27: Project Presentations 1&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class28&#34;&gt;28: Project Presentations 2&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Classes</title>
      <link>https://bitcoin-class.org/classes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/classes/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://bitcoin-class.org/classes/class1/&#34;&gt;1: What is Money?&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class2/&#34;&gt;2: Cryptography&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class3/&#34;&gt;3: Signatures&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class4/&#34;&gt;4: Checkup 1&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class5/&#34;&gt;5: Becoming Paranoid&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class6/&#34;&gt;6: Hash Functions&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class7/&#34;&gt;7: The Blockchain&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class8&#34;&gt;8: Mining&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class9&#34;&gt;9: Mining Economics&lt;/a&gt; (and Checkup 2)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class10&#34;&gt;10: Subverting Bitcoin&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class11&#34;&gt;11: More Mining&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class12&#34;&gt;12: Script&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class13&#34;&gt;13: Law and Policy&lt;/a&gt; (Tom Dukes visit)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class14&#34;&gt;14: Crime&lt;/a&gt; (FBI visit)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class15&#34;&gt;15: Scripting Transactions&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class16&#34;&gt;16: Midterm&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class17&#34;&gt;17: Business&lt;/a&gt; (Josh Cincinatti visit)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class18&#34;&gt;18: Confirmations&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class19&#34;&gt;19: Anonymity&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class20&#34;&gt;20: Hidden Services&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class21&#34;&gt;21: Scaling Bitcoin&lt;/a&gt; (Alex Kuck and Nick Skelsey visit)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class22&#34;&gt;22: Zero Knowledge Proofs&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class23&#34;&gt;23: Before Bitcoin (Digicash)&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class24&#34;&gt;24: Altcoins&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class25&#34;&gt;25: Project Proposal Presentations&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class26&#34;&gt;26: Jeopardy!&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class27&#34;&gt;27: Project Presentations 1&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class28&#34;&gt;28: Project Presentations 2&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Registration</title>
      <link>https://bitcoin-class.org/registration/</link>
      <pubDate>Wed, 26 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/registration/</guid>
      <description>

&lt;h1 id=&#34;course-registration&#34;&gt;Course Registration&lt;/h1&gt;

&lt;p&gt;&lt;div class=&#34;due&#34;&gt;
Due: 8:29pm on Saturday, 29 August
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;To register for the course, you need to &lt;strong&gt;setup a bitcoin wallet&lt;/strong&gt; (so
don&amp;rsquo;t wait until the last minute to do this).&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://multibit.org/&#34;&gt;MultiBit HD&lt;/a&gt; is a good choice for this.  See
&lt;a href=&#34;https://bitcoin.org/en/choose-your-wallet&#34;&gt;https://bitcoin.org/en/choose-your-wallet&lt;/a&gt;
for information on bitcoin wallets.  Be aware that you probably do not
have time to download the full blockchain before this assignment is due,
so need to use a &lt;em&gt;lightweight wallet&lt;/em&gt; (we will learn what this means
later in the class).&lt;/p&gt;

&lt;p&gt;After creating a wallet, you should find the &lt;em&gt;Recieving Address&lt;/em&gt; which
you will need for one of the questions.  If you used MultiBit HD, you
will see this by clicking &amp;ldquo;Request&amp;rdquo; (to request payment), and copy the
&amp;ldquo;Recipient Address&amp;rdquo;.  It should be a string like,
&lt;code&gt;19WmbY4nDcjAEv6wb5rcd5E6MutVMXBZzy&lt;/code&gt;.  Note that your wallet may create
several recipient addresses, so you won&amp;rsquo;t see the same address each time
you do this.&lt;/p&gt;

&lt;p&gt;It is not necessary now, or at any time during this class, for you to
actually buy bitcoins with your own money.  If you are inclined to do
this, be careful, and don&amp;rsquo;t use any funds you cannot afford to lose!&lt;/p&gt;

&lt;p&gt;Submit the form below (also avaible as &lt;a href=&#34;https://docs.google.com/forms/d/1taP-16YrkyfNMjZxDkz5dF3BTaFd5wrDdIcZPq7OYmE/viewform?usp=send_form&#34;&gt;direct link&lt;/a&gt;):&lt;/p&gt;

&lt;iframe src=&#34;https://docs.google.com/forms/d/1taP-16YrkyfNMjZxDkz5dF3BTaFd5wrDdIcZPq7OYmE/viewform?embedded=true&#34; width=&#34;760&#34; height=&#34;800&#34; frameborder=&#34;0&#34; marginheight=&#34;0&#34; marginwidth=&#34;0&#34;&gt;Loading...&lt;/iframe&gt;
</description>
    </item>
    
    <item>
      <title>Syllabus</title>
      <link>https://bitcoin-class.org/syllabus/</link>
      <pubDate>Sat, 22 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/syllabus/</guid>
      <description>

&lt;h1 id=&#34;syllabus&#34;&gt;Syllabus&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Meetings:&lt;/strong&gt; Mondays and Wednesdays, 2:00-3:15pm in Olsson 120.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teachers:&lt;/strong&gt; &lt;a href=&#34;http://www.cs.virginia.edu/evans&#34;&gt;David Evans&lt;/a&gt; and &lt;a href=&#34;http://www.cs.virginia.edu/~sza4uq/&#34;&gt;Samee
  Zahur&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;Assistant:&lt;/strong&gt; &lt;a href=&#34;https://www.linkedin.com/pub/ori-shimony/b7/913/665&#34;&gt;Ori Shimony&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Office Hours:&lt;/strong&gt; Mondays 5-6:30pm (Ori, Rice 442); Wednesdays 3:15-4:30pm (Samee, Rice 442); Thursdays 2:30-3:30pm (Dave, Rice 507).  Office hours will be updated on the &lt;a href=&#34;https://www.google.com/calendar/embed?src=rmjagdrnmu3a9h2q5199lg4t28%40group.calendar.google.com&amp;amp;ctz=America/New_York&#34;&gt;course calendar&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Course Site:&lt;/strong&gt; &lt;a href=&#34;http://bitcoin-class.org&#34;&gt;http://bitcoin-class.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;hanging&#34;&gt; &lt;strong&gt;Readings:&lt;/strong&gt; We will not follow a textbook
closely, but will have several readings from two books (both of which
are freely available):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Andreas M. Antonopoulos,
&lt;a href=&#34;https://github.com/aantonop/bitcoinbook&#34;&gt;&lt;em&gt;Mastering Bitcoin: Unlocking Digital
Cryptocurrencies&lt;/em&gt;&lt;/a&gt;.  (You can
use the free version of the book available at
&lt;a href=&#34;https://github.com/aantonop/bitcoinbook&#34;&gt;https://github.com/aantonop/bitcoinbook&lt;/a&gt;,
but would probably benefit from buying the &lt;a href=&#34;http://www.amazon.com/Mastering-Bitcoin-Unlocking-Digital-Crypto-Currencies/dp/1449374042&#34;&gt;printed
version&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Arvind Narayanan, Joseph Bonneau, Edward Felten, Andrew Miller, Steven
Goldfeder. &lt;a href=&#34;https://d28rh4a8wq0iu5.cloudfront.net/bitcointech/readings/princeton_bitcoin_book.pdf?a=1&#34;&gt;&lt;em&gt;Bitcoin and Cryptocurrency
Technologies&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition to those books, we will have several readings from both
general audience publications, technical documents, and research papers.&lt;/p&gt;

&lt;p&gt;&lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;

&lt;p&gt;For the past 10,000 years, humans have been seeking better ways to store
and transfer value.  &lt;em&gt;Cryptocurrencies&lt;/em&gt; (most notably bitcoin), provide
a way to do this using bits alone without any centralized authority.  In
this course, we will learn about the cryptographic foundations for
cryptocurrencies; networking, software, hardware, and security issues
relevant to designing and implementing a cryptocurrency, and consider
the economic, legal, and political issues raised by cryptocurrencies.&lt;/p&gt;

&lt;h2 id=&#34;expected-background&#34;&gt;Expected Background&lt;/h2&gt;

&lt;p&gt;Students entering this course are expected to be comfortable reading,
designing, and writing complex programs that involve thousands of lines
of code distributed over many modules.  You should be fairly comfortable
with math, at least enough to analyze probabilities.&lt;/p&gt;

&lt;p&gt;You should be comfortable learning how to use a new programming language
features and APIs by reading their documentation (or source code when no
documentation is available), and not be surprised when you are expected
to learn a new language on your own or to seek documentation beyond what
was provided in class.&lt;/p&gt;

&lt;p&gt;Students are &lt;strong&gt;not expected&lt;/strong&gt; to have significant previous experience with
cryptography (although such background will certainly be helpful).&lt;/p&gt;

&lt;p&gt;Some specific things we expect of students entering this course:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You should have some experience programming in at least one
programming language, and not be afraid of needing to learn new
languages.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;You have written at least one program with over 1000 lines of code.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;You should understand basic probability and be able to figure out
things like the probability that 100 tosses of a fair coin do not
result in any tails.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;You should understand at least as much about complexity and
computability as is covered in &lt;a href=&#34;http://dori-mic.org&#34;&gt;&lt;em&gt;Dori-Mic and the Universal
Machine&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;You should find computing exciting and delighting, and believe you can
use computing to make the world a better place.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you do not satisfy any of these expectations, that doesn&amp;rsquo;t mean you
cannot take the class, but you need to let one of the course teachers
know about it at the beginning of the semester.&lt;/p&gt;

&lt;h2 id=&#34;honor-pledge&#34;&gt;Honor Pledge&lt;/h2&gt;

&lt;p&gt;This course focuses on how to establish trust among distrusting people
using mathematics, computing, and networking.  As a student at
Mr. Jefferson&amp;rsquo;s University, you are intrinsically trusted.&lt;/p&gt;

&lt;p&gt;We take advantage of this trust to provide a better learning environment
for everyone.  In particular, students in this class are expected to
follow these rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;I will not lie, cheat or steal.&lt;/b&gt; If I am unsure whether something
would be considered lying, cheating or stealing, I will ask before doing
it.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;I will carefully read and follow the collaboration policy on each
assignment.&lt;/b&gt; I will not abuse resources, including any submissions or
solutions for assignments from last semester&amp;rsquo;s version of this course,
that would be clearly detrimental to my own learning.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition to the honor rules, students in this class are also expected
to follow these behaviors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;I will do what I can to help my fellow classmates learn.&lt;/b&gt; &lt;em&gt;Except
when specifically instructed not to&lt;/em&gt;, this means when other students ask
me for help, I will attempt to provide it. I will look at their answers
and discuss what I think is good or bad about their answers. I will help
others improve their work, but will not give them my answers directly. I
will try to teach them what they need to know to discover solutions
themselves.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;I will ask for help.&lt;/b&gt; I will make a reasonable effort to do things
on my own first (or with my partners for group assignment), but will ask
my classmates or the course staff for help before getting overly
frustrated.  There are many ways to ask for help including the course
website and office hours.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;I grant the course staff permission to reproduce and distribute
excerpts from my submissions for teaching purposes.&lt;/b&gt; If may opt-out
of this by adding a comment to your code, but without an explicit
opt-out comment we assume you agree to it.  Excerpts will be used
anonymously when illustrating a misunderstanding or common problem, and
with credit when showing an interesting or exemplary answer.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;I will not invest money I cannot afford to lose in
cryptocurrencies.&lt;/b&gt; The main topic of this course is cryptocurrencies,
and students will be encouraged to gain experience using bitcoin to
conduct real transactions (but will not be expected to spend any
personal money on bitcoin).  Please be aware that bitcoin is very
volatile, and that you could lose all the money in your bitcoin wallet
if you make a programming error or lose your key. It would be foolish
and reckless to convert any money you would be upset about losing into a
cryptocurrency.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;I will provide useful feedback.&lt;/b&gt; I realize that this is a new and
experimental course, and it is important that I let the course staff
know what they need to improve the course. I will not wait until the
end of the course to make the course staff aware of any problems. I
will provide feedback either anonymously or by contacting the course
staff directly. &lt;b&gt;I will fill out all requested surveys honestly and
thoroughly&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;assignments&#34;&gt;Assignments&lt;/h2&gt;

&lt;p&gt;The course will have one midterm, three problem sets, one final project,
and a (discretionary) final exam.  In addition, there will be several
check-ups (short tests in class, with opportunities to revise and
improve answers after discussion) and short assignments that may involve
reading assignments and posting answers and questions on the course
website.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exams.&lt;/strong&gt; The midterm is Wednesday, 21 October.  The final exam is
scheduled for Friday, 11 December (2-5pm).  This time will be used to
schedule short oral exams for students who have not already demonstrated
strong understanding of the course topics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem Sets.&lt;/strong&gt; The problem sets will involve writing programs and
solving problems to understand transactions in bitcoin (Problem Set 1),
bitcoin nodes and mining (Problem Set 2), blockchain analysis (Problem
Set 3).  For some assignments, you will be encouraged to work with one
or two other people in a small team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Project.&lt;/strong&gt; For the final project, you are free to work on
anything relevant to cryptocurrencies.  Some suggestions for project
ideas will be posted on the course website.  Students who have ambitious
ideas for a project may be able to arrange with the course staff to
expand the project to substitute for other assignments (such as Problem
Set 3).&lt;/p&gt;

&lt;h2 id=&#34;schedule&#34;&gt;Schedule&lt;/h2&gt;

&lt;p&gt;A tenative and (continually) updated schedule is available as a &lt;a href=&#34;https://www.google.com/calendar/embed?src=rmjagdrnmu3a9h2q5199lg4t28%40group.calendar.google.com&amp;amp;ctz=America/New_York&#34;&gt;Google
calendar&lt;/a&gt;.
(You can view this calendar on the course site, or incorporate in as
iCal calendar into your own calendar using &lt;a href=&#34;https://www.google.com/calendar/ical/rmjagdrnmu3a9h2q5199lg4t28%40group.calendar.google.com/public/basic.ics&#34;&gt;this
link&lt;/a&gt;.
Except when noted otherwise, assignments are due at &lt;b&gt;8:29pm&lt;/b&gt; on the
due date.&lt;/p&gt;

&lt;p&gt;The main expected due dates: &lt;font color=&#34;red&#34;&gt;(updated 28 October 2015, see &lt;a href=&#34;https://web.archive.org/web/20150921010439/http://bitcoin-class.org/syllabus/&#34;&gt;archived version&lt;/a&gt; for original)&lt;/font&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saturday, 29 August: &lt;strong&gt;Registration&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Monday, 7 September: &lt;strong&gt;Checkup 1&lt;/strong&gt; (in class)&lt;/li&gt;
&lt;li&gt;Tuesday, 15 September: &lt;strong&gt;Problem Set 1: Bitcoin Transactions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Wednesday, 23 September: &lt;strong&gt;Checkup 2&lt;/strong&gt; (in class)&lt;/li&gt;
&lt;li&gt;Friday, 9 October: &lt;strong&gt;Problem Set 2: Blockchain&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Wednesday, 21 October: &lt;strong&gt;Midterm Exam&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Sunday, 8 November: &lt;strong&gt;Problem Set 3: Blockchain Analysis&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Friday, 13 November: &lt;strong&gt;Project Pre-Proposal&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Monday, 23 November: &lt;strong&gt;Project Update&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Monday, 7 December: Last class&lt;/li&gt;
&lt;li&gt;Friday, 11 December: &lt;strong&gt;Final Exam&lt;/strong&gt; (discretionary)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dates shown here are subject to change based on how the semester
progresses, but with ample warning.&lt;/p&gt;

&lt;h2 id=&#34;grading&#34;&gt;Grading&lt;/h2&gt;

&lt;p&gt;We prefer to spend our time focused as much as possible on &lt;em&gt;teaching&lt;/em&gt;,
and as little as possible on &lt;em&gt;grading&lt;/em&gt;.  The assignments in this class
are designed to maximize &lt;em&gt;learning&lt;/em&gt;, rather than primarily for
&lt;em&gt;assessment&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That said, we understand that students do need to be assigned grades at
the end of the semester, and sometimes grades can be a powerful and
effective motivator as well as a useful way to measure progress and
understanding.&lt;/p&gt;

&lt;p&gt;Grades will be determined based on your performance on all the class
assignments and class contributions (including postings on the course
site).  Some assignments may be graded by randomly looking at selected
answers, rather than reading everything submitted.&lt;/p&gt;

&lt;p&gt;There is no set weighting among these things, and in general, if there
is some combination of the above that demonstrates that you have gotten
what we hope out of the class then you will receive an A grade.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Final Project Reports</title>
      <link>https://bitcoin-class.org/announcements/final/</link>
      <pubDate>Wed, 16 Dec 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/announcements/final/</guid>
      <description>&lt;p&gt;The final project reports and sites are now posted: &lt;a href=&#34;https://bitcoin-class.org/project-reports/&#34;&gt;Project Reports&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://bitcoin-class.org/images/lawn.jpg&#34; width=640 height=347&gt;
&lt;center&gt;
Thanks to everyone for your contributions to the class!&lt;br /&gt;
&lt;strong&gt;Enjoy winter break.&lt;/strong&gt;
&lt;/center&gt;
&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Class 28: Project Presentations 2</title>
      <link>https://bitcoin-class.org/classes/class28/</link>
      <pubDate>Mon, 07 Dec 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/classes/class28/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1amox_dRwiwuK9lUCXeP8rILcHyylHwgcicwZr9GNdX4/edit?usp=sharing&#34;&gt;The Evolution of Bitcoin Script Interpreter&lt;/a&gt; (Acacia Dai)&lt;br /&gt;
&lt;a href=&#34;https://github.com/AlishanHassan/Cryptocurrency-Project/blob/master/Presentation.pptx&#34;&gt;A Bandwidth Based &amp;ldquo;Proof of Work&amp;rdquo;&lt;/a&gt; (Alishan Hassan)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/presentations/kukla.pptx&#34;&gt;Bitcoin at Point of Sale&lt;/a&gt; (Elizabeth Kukla)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/presentations/berman.pdf&#34;&gt;Vending on Dark Net Markets&lt;/a&gt; (Collin Berman)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/presentations/adams.pdf&#34;&gt;Donation Accountability&lt;/a&gt; (Kienan Adams)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/presentations/liu.pptx&#34;&gt;Understanding Mobile Bitcoin Wallet&lt;/a&gt; (Ziqi Liu)&lt;br /&gt;
&lt;a href=&#34;https://docs.google.com/a/virginia.edu/presentation/d/1pxnHcMD27RAsbttOCVOgnlWQX2anMakddKkswe5hois/edit?usp=sharing&#34;&gt;BitSniffer: a Tool for Linkability Analysis&lt;/a&gt; (Ryan Anderson, Sam Prestwood, Luke Gessler)&lt;br /&gt;
&lt;a href=&#34;https://docs.google.com/presentation/d/16uosMp3ylLJCFFBfTNyQz7YPR9KnpONSY58jiwakdIE/edit#slide=id.p&#34;&gt;Taking Down Silk Road&lt;/a&gt; (Gardner Fiveash)&lt;br /&gt;
&lt;a href=&#34;https://github.com/UVAqmoore/cccfinal/blob/master/Presentation%20Slides.pptx&#34;&gt;How Much is Bitcoin Worth: Pricing Differences Across Exchanges and Time&lt;/a&gt; (Quentin Moore)&lt;br /&gt;
Analysis of the viability of Bitcoin replacing as a National Currency (Peter Leng)&lt;br /&gt;
&lt;a href=&#34;https://docs.google.com/presentation/d/15FminKlQFXQ1FUOvn4qOXEUhmuRNZyPrOoKEQpn5TRk/edit?usp=sharing&#34;&gt;Evaluating BlockCypher’s Confidence Level&lt;/a&gt; (Dean Makovsky and Joseph Tobin and Kevin Zhao and Vignesh Kuppusamy)&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Class 27: Project Presentations 1</title>
      <link>https://bitcoin-class.org/classes/class27/</link>
      <pubDate>Wed, 02 Dec 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/classes/class27/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;alecgrieser.github.io/ddcpcp/presentation/presentation.pdf&#34;&gt;Developing a Distributed Distributed Consensus Protocol Consensus Protocol&lt;/a&gt; (Alec Grieser)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/presentations/Blockchain_Voting.pdf&#34;&gt;Blockchain Voting&lt;/a&gt; (Sugat Poudel, Austin J. Varshneya, Xhama Vyas)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/presentations/BitMingle.pptx&#34;&gt;BitMingle&lt;/a&gt; (Carter Hall, Reid Bixler)&lt;br /&gt;
Beyond the Lightning Network - Exploring How to Scale Bitcoin (Muthu Chidambaram)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/presentations/morgan.ppt&#34;&gt;Mixing with Miners&lt;/a&gt; (Morgan Locks)&lt;br /&gt;
&lt;a href=&#34;https://docs.google.com/presentation/d/11r4DgGYdz-XdtVMbFF8MdCMfCydIh5n5IQCCc4_j-fA/edit?usp=sharing&#34;&gt;Pruning Nodes&lt;/a&gt; (Cyrus Malekpour)&lt;br /&gt;
&lt;a href=&#34;https://docs.google.com/presentation/d/1nnV4WHCCb2KPpk2pfNJTI2GlxRNVwCANTY95t_A88hg/edit?usp=sharing&#34;&gt;Bitcoin Block-size Options&lt;/a&gt; (Michael Parisi Presicce)&lt;br /&gt;
&lt;a href=&#34;https://onedrive.live.com/view.aspx?resid=3492CC9C71E5A42D!2002&amp;amp;ithint=file%2cpptx&amp;amp;app=PowerPoint&amp;amp;authkey=!AHb95fsl2SUYzl4&#34;&gt;Bitcoin Controversy and Conflicts of Interest&lt;/a&gt; (Jacob Freck)&lt;br /&gt;
&lt;a href=&#34;https://docs.google.com/a/virginia.edu/presentation/d/1G1iQKaRQEZPsEQ-CtleiSF9QbVLwYc-KTrzkTTbmN4I/edit?usp=sharing&#34;&gt;Detecting Selfish Mining in Bitcoin and Litecoin&lt;/a&gt; (Fangyang Cui)&lt;br /&gt;
&lt;a href=&#34;https://bitcoin-class.org/presentations/eashan.pptx&#34;&gt;Geopolitical Strategy and Bitcoin&lt;/a&gt; (Eashan Kaw)&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Class 26: Cryptocurrency Jeopardy</title>
      <link>https://bitcoin-class.org/classes/class26/</link>
      <pubDate>Mon, 30 Nov 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/classes/class26/</guid>
      <description>&lt;h2 id=&#34;schedule&#34;&gt;Schedule&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, 2 Dec&lt;/strong&gt; and &lt;strong&gt;Monday 7 Dec&lt;/strong&gt;: &lt;strong&gt;Final Project
Presentations&lt;/strong&gt;.  See &lt;a href=&#34;https://bitcoin-class.org/classes/class25/&#34;&gt;Class 25&lt;/a&gt; for schedule.&lt;/p&gt;

&lt;p&gt;These people are scheduled to present Wednesday: &lt;strong&gt;Alec Grieser, (Sugat
Poudel, Austin J. Varshneya, Xhama Vyas), (Carter Hall, Reid Bixler),
Muthu Chidambaram, Morgan Locks, Cyrus Malekpour, Michael Parisi
Presicce, Jacob Freck, Fangyang Cui, Eashan Kaw, Cody Robertson.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don&amp;rsquo;t forget to send the link to your presentation before &lt;strong&gt;11:59am&lt;/strong&gt; on
the day you are presenting!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Office hours:&lt;/strong&gt; normal office hours will continue until December 11:
  Mondays 5-6:30pm (Ori in Rice 442), Wednesdays after class (Samee in
  Rice 442), Thursdays 2:30-3:30 (Dave in Rice 507).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, 4 December&lt;/strong&gt;, &lt;strong&gt;3:30pm&lt;/strong&gt; in &lt;strong&gt;Rice 130&lt;/strong&gt;: Department of
  Computer Science, Distinguished Alumni Seminar Series&lt;/p&gt;

&lt;p&gt;&lt;div class=&#34;indented&#34;&gt;
   &lt;center&gt;
&lt;strong&gt;Adrienne Felt&lt;/strong&gt;, Staff Software Engineer, Google&lt;br /&gt;
Friday, 4 December 2015, 3:30pm in Rice Auditorium&lt;br /&gt;
(Reception after talk in Rice 4th Floor Atrium)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;MAKING SECURITY USABLE (FOR A BILLION USERS)&lt;/em&gt;
   &lt;/center&gt;&lt;/p&gt;

&lt;p&gt;How do you know if a website is &amp;ldquo;safe&amp;rdquo;? The security community puts
enormous effort into detecting malware, stopping the next Heartbleed,
and sandboxing bad content. Google Chrome&amp;rsquo;s usable security team sits at
the front end of this work: we build the UI that tells end users what&amp;rsquo;s
going on with their privacy and security. What you see as a single icon
might be the end product of months of work by engineers, designers,
security experts, and user researchers. I&amp;rsquo;ll explain some of the
engineering and design challenges that we face, and give insight into
the day-by-day work done by a security team that serves more than a
billion browser users.&lt;/p&gt;

&lt;p&gt;Bio: &lt;a href=&#34;http://www.adrienneporterfelt.com/&#34;&gt;Adrienne Porter Felt&lt;/a&gt; leads
Google Chrome&amp;rsquo;s usable security team, whose goal is to help people make
safe decisions while using Chrome. Along with her team, Dr. Felt is
responsible for building and improving the security warnings,
indicators, and settings that you see in Chrome today. Previously, Dr.
Felt was a research scientist on Google&amp;rsquo;s security research team, where
she examined how browser users react to security warnings. She received
a PhD in computer science from UC Berkeley, and a BS from the University
of Virginia in 2008.
   &lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday, 7 December&lt;/strong&gt; (11:59pm): &lt;strong&gt;Project Final Reports&lt;/strong&gt;.  See &lt;a href=&#34;https://bitcoin-class.org/classes/class25&#34;&gt;Class 25&lt;/a&gt; for details.&lt;/p&gt;

&lt;h1 id=&#34;slides&#34;&gt;Slides&lt;/h1&gt;

&lt;p&gt;The slides below include all the Jeopardy questions, even ones we didn&amp;rsquo;t
get to in class.  You shouldn&amp;rsquo;t expect to get asked trivia questions in
the oral final exam (and will not be asked to phrase your answers in the
form of a question!), but some of the substantive questions here would
make good questions to ask during the exam (in particular, I&amp;rsquo;d recommend
looking at the unused questions in Unlocking Script and Crypto Curves as
good potential exam questions).&lt;/p&gt;

&lt;p&gt;&lt;center&gt;
&lt;iframe src=&#34;//www.slideshare.net/slideshow/embed_code/key/r1C43Bq1YeWqH1&#34; width=&#34;625&#34; height=&#34;400&#34; frameborder=&#34;2&#34; marginwidth=&#34;0&#34; marginheight=&#34;0&#34; scrolling=&#34;no&#34;&gt; &lt;/iframe&gt;
   &lt;div class=&#34;caption&#34;&gt;
&lt;a href=&#34;https://bitcoin-class.org/classes/class26-post.pptx&#34;&gt;Download slides (with annotations)&lt;/a&gt;
   &lt;/div&gt;
&lt;/center&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Class 25: Project Pitches</title>
      <link>https://bitcoin-class.org/classes/class25/</link>
      <pubDate>Mon, 23 Nov 2015 00:00:00 +0000</pubDate>
      
      <guid>https://bitcoin-class.org/classes/class25/</guid>
      <description>&lt;h2 id=&#34;schedule&#34;&gt;Schedule&lt;/h2&gt;

&lt;p&gt;&lt;div class=&#34;todo&#34;&gt;
&lt;strong&gt;Today!&lt;/strong&gt; (8:29 pm): Project Progress Reports due (see &lt;a href=&#34;https://bitcoin-class.org/classes/class23/&#34;&gt;Class 23&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, 2 Dec and Monday 7 Dec&lt;/strong&gt;: &lt;strong&gt;Final Project Presentations&lt;/strong&gt; (see below).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday, 7 December&lt;/strong&gt; (11:59pm): &lt;strong&gt;Project Final Reports&lt;/strong&gt; (see below)
   &lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&#34;today-s-presentations&#34;&gt;Today&amp;rsquo;s Presentations&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Understanding Mobile Bitcoin Wallet&lt;/strong&gt;&lt;br /&gt;
Ziqi Liu&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual Explorer for Addresses and their Relations&lt;/strong&gt;&lt;br /&gt;
Ryan Anderson, Sam Prestwood, Luke Gessler&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Much is Bitcoin Worth: Pricing Differences Across Exchanges and Time&lt;/strong&gt;&lt;br /&gt;
Quentin Moore&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analysis of the viability of Bitcoin replacing as a National Currency&lt;/strong&gt;&lt;br /&gt;
Peter Leng&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beyond the Lightning Network - Exploring How to Scale Bitcoin&lt;/strong&gt;&lt;br /&gt;
Muthu Chidambaram&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mixing with Miners&lt;/strong&gt;&lt;br /&gt;
Morgan Locks&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bitcoin Block-size Options&lt;/strong&gt;&lt;br /&gt;
Michael Parisi Presicce&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bitcoin Controversy and Conflicts of Interest&lt;/strong&gt;&lt;br /&gt;
Jacob Freck&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding Takedowns&lt;/strong&gt;&lt;br /&gt;
Gardner Fiveash&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detecting Selfish Mining in Bitcoin and Litecoin&lt;/strong&gt;&lt;br /&gt;
Fangyang Cui&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Geopolitical Strategy and Bitcoin&lt;/strong&gt;&lt;br /&gt;
Eashan Kaw&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evaluating BlockCypher’s Confidence Level&lt;/strong&gt;&lt;br /&gt;
Dean Makovsky and Joseph Tobin and Kevin Zhao and Vignesh Kuppusamy&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pruning Nodes&lt;/strong&gt;&lt;br /&gt;
Cyrus Malekpour&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Divergence of Alt Coins and their Concurrent Developments&lt;/strong&gt;&lt;br /&gt;
Cody Robertson&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Bandwidth Based &amp;ldquo;Proof of Work&amp;rdquo;&lt;/strong&gt;&lt;br /&gt;
Alishan Hassan&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developing a Distributed Distributed Consensus Protocol Consensus Protocol&lt;/strong&gt;&lt;br /&gt;
Alec Grieser&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Evolution of Bitcoin Script Interpreter&lt;/strong&gt;&lt;br /&gt;
Acacia Dai&lt;/p&gt;

&lt;h2 id=&#34;project-final-presentations&#34;&gt;Project Final Presentations&lt;/h2&gt;

&lt;p&gt;The final project presentations will be in class on Wednesday, 2
December and Monday, 7 December.  The presentation will count for
approximately 50% of the grade for your final project.&lt;/p&gt;

&lt;p&gt;The schedule of the presentations is below.  Each team will have &lt;strong&gt;5 +
(&lt;em&gt;N&lt;/em&gt; - 1) minutes&lt;/strong&gt; to present your project (where &lt;em&gt;N&lt;/em&gt; is the number of
team members; so a 4-person team will have 8 minutes).  Your
presentation should be well prepared and enthusiastically delivered!&lt;/p&gt;

&lt;p&gt;You should send a link to your presentation (PDF, PowerPoint, or
anything that works in Firefox browser) to ccc-staff before &lt;strong&gt;11:59am&lt;/strong&gt;
on the day you are scheduled to present.  If your presentation includes
a demo that&amp;rsquo;s great, but it needs to be designed in a way that can be
set up quickly and used effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, 2 December:&lt;/strong&gt;&lt;br /&gt;
Developing a Distributed Distributed Consensus Protocol Consensus Protocol (Alec Grieser)&lt;br /&gt;
Blockchain Voting (Sugat Poudel, Austin J. Varshneya, Xhama Vyas)&lt;br /&gt;
Distributed Bitcoin Mixing with Interest (Carter Hall, Reid Bixler)&lt;br /&gt;
Beyond the Lightning Network - Exploring How to Scale Bitcoin (Muthu Chidambaram)&lt;br /&gt;
Mixing with Miners (Morgan Locks)&lt;br /&gt;
Pruning Nodes (Cyrus Malekpour)&lt;br /&gt;
Bitcoin Block-size Options (Michael Parisi Presicce)&lt;br /&gt;
Bitcoin Controversy and Conflicts of Interest (Jacob Freck)&lt;br /&gt;
Detecting Selfish Mining in Bitcoin and Litecoin (Fangyang Cui)&lt;br /&gt;
Geopolitical Strategy and Bitcoin (Eashan Kaw)&lt;br /&gt;
Divergence of Alt Coins and their Concurrent Developments (Cody Robertson)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday, 7 December:&lt;/strong&gt;&lt;br /&gt;
The Evolution of Bitcoin Script Interpreter (Acacia Dai)&lt;br /&gt;
A Bandwidth Based &amp;ldquo;Proof of Work&amp;rdquo; (Alishan Hassan)&lt;br /&gt;
Bitcoin at Point of Sale (Elizabeth Kukla)&lt;br /&gt;
Vending on Dark Net Markets (Collin Berman)&lt;br /&gt;
Analyzing the Feasibility of a Donation Accountability System in Bitcoin (Kienan Adams)&lt;br /&gt;
Understanding Mobile Bitcoin Wallet (Ziqi Liu)&lt;br /&gt;
Visual Explorer for Addresses and their Relations (Ryan Anderson, Sam Prestwood, Luke Gessler)&lt;br /&gt;
Understanding Takedowns (Gardner Fiveash)&lt;br /&gt;
How Much is Bitcoin Worth: Pricing Differences Across Exchanges and Time (Quentin Moore)&lt;br /&gt;
Analysis of the viability of Bitcoin replacing as a National Currency (Peter Leng)&lt;br /&gt;
Evaluating BlockCypher’s Confidence Level (Dean Makovsky and Joseph Tobin and Kevin Zhao and Vignesh Kuppusamy)&lt;/p&gt;

&lt;h2 id=&#34;project-final-reports&#34;&gt;Project Final Reports&lt;/h2&gt;

&lt;p&gt;To submit your final report, send an email to
&lt;em&gt;ccc-staff@cs.virginia.edu&lt;/em&gt; with subject line &lt;strong&gt;Project Report:
&lt;em&gt;Title&lt;/em&gt;&lt;/strong&gt; and cc-ing all of your team members.  The official deadline
for the final reports is &lt;strong&gt;Monday, 7 December&lt;/strong&gt; (11:59pm), but
extensions will be granted upon request so long as extending the
deadline for this does not interfere problematically with your other
courses and responsibilities.&lt;/p&gt;

&lt;p&gt;The email should be plaintext containing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;A title for your project (this is the title I will use on the public
page listing all the projects; add a &lt;b&gt;*&lt;/b&gt; if it is different from
the title currently listed on &lt;a href=&#34;https://bitcoin-class.org/projects/&#34;&gt;Project&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;A one-sentence description of your project. This should be a clear,
well-written sentence that will be enough for someone to understand what
you did and why.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;A URL that points to a publicly-viewable web page that describes your
project. The linked page can (and probably should) contain links to
other pages (e.g., a website that is your actual project or a github
repo with your project code). For example, the link you send could be a
link to &lt;a href=&#34;http://my-project-site.org/about.html&#34;&gt;http://my-project-site.org/about.html&lt;/a&gt; or
&lt;a href=&#34;https://github.com/your-repo/README.md&#34;&gt;https://github.com/your-repo/README.md&lt;/a&gt;, which is a page describing your
project, as well as containing links to the main project site. Please
try to put your project site somewhere that will not expire when you
graduate from UVa, but that can survive forever.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Your project report, either as a PDF attachment, or a URL.  Your
project report should be a well-written and readable paper about your
project.  For most projects, this should include at least: (1) the
motivation for your project, (2) background, including a description of
related work (with references), (3) explanation of what you did, and (4)
your results.  For projects that do not involve building something, it
may make more sense for it to be a more integrated report.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&#34;discretionary-final-exams&#34;&gt;Discretionary Final Exams&lt;/h2&gt;

&lt;p&gt;By the end of this week, everyone should receive an email with your
status in the class (including feedback on PS3).&lt;/p&gt;

&lt;p&gt;The main message of this email will be guidance as to whether or not you
should schedule a final exam.  The main options are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;You&amp;rsquo;re well positioned to get an &lt;strong&gt;A&lt;/strong&gt; in the class.  So long as you
do a decent job on the project, you&amp;rsquo;ll get an &lt;strong&gt;A&lt;/strong&gt; and don&amp;rsquo;t need to
do the final exam.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;You are approaching what you need to do to convince us you deserve an
&lt;strong&gt;A&lt;/strong&gt; in the class, but need do more.  If your project is outstanding,
that may be enough to make the case.  If not, you&amp;rsquo;ll have a last chance
to do so by doing a final exam.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;From what you&amp;rsquo;ve done so far, we&amp;rsquo;re not convinced you understand
cryptocurrencies well enough to earn an &lt;strong&gt;A&lt;/strong&gt; in the class.  You should
plan on doing a final exam to convince us otherwise!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For students receving options 1 or 2, we&amp;rsquo;ll try to give feedback on your
final projects are quickly as possible so you know whether or not a
final exam will be recommended.&lt;/p&gt;

&lt;p&gt;The final exam will be an oral exam where you will explain how bitcoin
works, and then answer a few follow-up questions.  These will be
scheduled during the scheduled final exam time (Friday, 11 December
2-5pm) and other times.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
