## CSE 552 Spring 2019 Problem Set 2

### Due Friday, May 10 at 5pm

Problem 1
On page 1, the Corfu paper highlights "enabling new designs that are impractical on disk or RAM infrastructure." Is Corfu sensible if its backing store is disk storage instead of flash? Why or why not? Is Corfu sensible if its backing store is RAM storage instead of flash? (ignore durability; assume the RAM is battery-backed)? Why or why not?
Problem 2
When implementing a trusted log with TrInc, you have the choice of assigning semantic meaning to counters or not assigning semantic meaning. An example of assigning semantic meaning is (as A2M does) to say that, in a log representing COMMIT messages sent by a node, the first $x$ bits of the log entry number represent the view number and the remaining $y$ bits represent the command sequence number. An example of not assigning semantic meaning is just having the $n$th message in the log assigned counter value $n$.

Give one advantage and one disadvantage to assigning semantic meaning to counter values.
Problem 3
In Bitcoin, a transaction can be invalid for various reasons, including representing an attempt to spend a unit of currency a second time. Miners check validity of transactions before putting them on the chain, and clients refuse to accept blocks that contain invalid transactions. Why do they do this, instead of just treating such transactions as no-ops during execution?
Problem 4
On page 9, the Chord paper says: "Since the number of queries handled by a node is roughly proportional to the total identifier space covered by that node, the worst-case number of queries handled by a node does not change."

What important assumption is embedded in this assertion that's often false in real workloads? What's a more reasonable assumption, and how do you predict it would affect a Chord deployment?