Each blob requests has three parts
- A request to see what blobs are available
- A request to download and pay for one of those blobs
- A request to negotiate data costs
Before the refactoring all of the code to accomplish this was mixed into
one class. They are now three seperate classes.
There is still a lot of room for improvement, but it is at least better than
it was.
If an invalid stream descriptor hash is entered, abort and
give a useful error.
If a name doesn't resolve, abort and give a useful error.
If a name resolves to something invalid, abort and give a useful error.