Implementing proposal 147: Eliminate the need for v2 directories in generating v3 directories

Karsten Loesing karsten.loesing at
Tue May 18 09:18:19 UTC 2010

Hi everyone,

Sebastian and I plan to implement proposal 147:;f=doc/spec/proposals/147-prevoting-opinions.txt;h=3d9659c98435d22b43efa5c67b95090b9ff908e0;hb=HEAD

For those who are unable to look at documents behind three-line URLS,
the overview of this proposal says: "We propose a new v3 vote document
type to replace the role of v2 networkstatus information in generating
v3 consensuses."

Sebastian and I think that we really need this proposal to be
implemented in Tor soon, because we're running out of v2 authorities.
Only 2 of them are still running: tor26 and dizum. Time to get rid of v2.

Here are some thoughts on the implementation: We could implement this
proposal in phases with running and tested prototypes at the end of each

Phase 0: Set up PuppeTor test case to show that it's broken

- Set up 3 v3 directory authorities and 1 relay. Configure the relay
with only 1 of the directory authorities. Watch how the relay is not
contained in the first consensus, but in the second.

Phase 1: Authorities generate opinions (and ensure they can parse them)
when we ask them to do so

- Write code to generate and parse v3 opinions, including unit tests.

- Add a new URL for everyone to request the current v3 opinion of an
authority. Requesting this URL triggers the opinion-generating code.

- Ponder caching our own v3 opinion for up to X minutes or until we
learn about a change in descriptors.

- Make PuppeTor download and parse v3 opinions of all three directory
authorities and compare their contents to what we would expect the
authorities to know.

- Update dir-spec.txt to reflect what a v3 opinion is.

Phase 2: Process opinions when uploaded from another authority

- Add a new URL for authorities to post their v3 opinions.

- Write code to process v3 opinions. This includes verifying signatures
and downloading missing descriptors from the authority that sent the

- Make PuppeTor feed the v3 opinion from the directory authority the
relay knows about into the other two directory authorities. Watch how
the relay is included in the first consensus.

Phase 3: Include opinion-exchanging phase in voting process

- Add an opinion-exchanging phase preceding the vote-exchanging phase.
With default values, the voting phase is from :50 to :55, so that the
opinion phase would be :45 to :50. Add config options to adjust the
length of this new phase.

- Update TestingTorNetwork to reduce this phase to 20 seconds.

- Update dir-spec.txt to reflect the new opinion-exchanging phase.

- At the beginning of the opinion-exchanging phase, upload our opinion
to all other authorities.

- After 50% of the opinion-exchanging phase have passed, request missing
opinions from the respective authorities.

- Run the PuppeTor test case and watch how the relay is contained in the
first consensus.

- Run the same PuppeTor test case with the directory authority that the
relay knows about, running the tor binary from the previous phase. That
directory won't upload its opinion to the other directories at :45, but
the other directories will request the opinion at :47:30. Watch how the
relay is still contained in the first consensus.

There could be a phase 4 that includes caching other authorities'
opinions to overcome the situation when both uploading and requesting
between two authorities fails. It's marked as MAY in the proposal, and
I'm not sure if we really need it. We could decide this at a later point.

Sebastian, Nick, others: Please feel free to comment on this plan.


More information about the tor-dev mailing list