Component Architecture

Yeah – this all makes sense to me, though I’m not sure I understand the public blockstack-api instance. This shouldn’t hold (or ever even see) private keys – which means that it would have to be different from the local version of that instance, if that’s managing and providing access to the user state (which is the private keychain + storage?)

What do you think of using a schema like blockstack-api-search for these extentions? Makes it easier to understand where these come in and avoids name conflicts (all repositories are blockstack-<something> currently).

The main thing that has confused me as a developer and as a user trying to get started with the Blockstack stack is how the “blockstack api”/“blockstackd” part is not well-defined in my mind, and in your diagrams @jackzampolin it floats between “client” side and “server” side. Which is it? It cannot be both!

The website documentation showing the different “layers” of the architecture by what they have access to (the Bitcoin blockchain, the user’s wallet in Bitcoin, the user’s data, and then the user’s apps) makes sense. But once I install it and try and find those layers, the current infrastructure is unclear and I’m lost trying to parse out what has access to what.

This to me makes sense as an architecture. The one missing piece is the reflective parts of the brackets on the bottom. A “Local mobile setup” only has the first two tiers, so has to have something provide the other three. Is that a “Local light setup” owned by the same user? Or a public, trusted infrastructure node?

The “External servers” section I believe covers the core.blockstack.com-like servers that serve as public infrastructure for the network, right? Are end users encouraged to run nodes like that (which only have the “Core” and “bitcoind” layers? If so, it makes sense to me to not have the “Local full setup” as a single unit. Instead, the “Core/bitcoind” combo has a name, and users could run both a “Local light setup” and a “Core/bitcoind” instance on one box (or within one network).

One question I have is how much of this needs to be private versus public infrastructure? The only thing I as a user need to host is the “blockstack api”/Gaia vertical slice, right? That’s my data as a user, and I could navigate to some external web application that’s Blockstack-enabled and point it at my local Gaia endpoint?

Or does this architecture force web developers to not host their end product, but rather need to give out the HTML/CSS/Javascript for users to download and run locally (and then hope they upgrade when you release a new version)?