In the Free Haven design, servers periodically trade shares with each other. There are a number of reasons why servers trade:
When a server A wants to make a trade (frequency of trade should be a parameter set by the server operator), it chooses another server Bfrom its list of known servers (based on trust and history), and offers a share and a request for size or duration of a return share. If B is interested, it responds with a share of its own. (The notation Xy indicates share y of document X.)
Trades are considered ``fair'' based on the two-dimensional currency of , plus a function of the preferences of the servers involved in the trade.
The negotiation is finalized by each server sending an acknowledgement of the trade (including receipt, as described in section 4.8) to the other. In addition, each server sends a receipt to both the buddy of the share it is sending and the buddy of the share it is receiving; buddies and the accountability they provide are described in section 4.9. Thus, the entire trading handshake takes four rounds: the first two to exchange the shares themselves, and the next two to exchange receipts and at the same time send receipts to the buddies.
By providing the receipt on the third round of the trading handshake, A makes a commitment to store the share . Similarly, the receipt that B generates on the fourth round represents a commitment to store the share . B could attack A by failing to continue the protocol after the third line: in this case, A has committed to keeping the share from B, but B has not committed to anything. At this point, A's only recourse is to broadcast a complaint against Band hope that the Trust system causes others to recognize that B has misbehaved.
We suggest that when a server A trades a share to a server B, server A should keep a copy of the share around for a while, just in case Bproves untrustworthy. This will increase the amount of overhead in the system by a factor of two or so (depending on duration), but provide greatly increased robustness. In this case, when a query is done for a share, the system responding should include a flag for whether it believes itself to be the ``primary provider'' of the data, or just happens to have a copy still lying around. The amount of time is a parameter which requires further study.