mirror of https://github.com/lukechilds/docs.git
Mary Anthony
6 years ago
1 changed files with 122 additions and 0 deletions
@ -0,0 +1,122 @@ |
|||||
|
--- |
||||
|
layout: learn |
||||
|
permalink: /:collection/:path.html |
||||
|
--- |
||||
|
# Principles of Blockstack applications |
||||
|
{:.no_toc} |
||||
|
|
||||
|
This section explains what There are as many definitions for a decentralized app |
||||
|
(DApp) as there are DApp developers. I don't expect this one will be the |
||||
|
canonical definition, but I'm writing it down anyway since it serves as my |
||||
|
"north star" as I work on the Blockstack platform. |
||||
|
|
||||
|
* TOC |
||||
|
{:toc} |
||||
|
|
||||
|
|
||||
|
## Blockstack DApp principles |
||||
|
|
||||
|
An application is considered a Blockstack DApp if it adheres to the three |
||||
|
principles. |
||||
|
|
||||
|
### Users own their data |
||||
|
|
||||
|
Users own their application data independent of and *outside of* the |
||||
|
application. Moreover, these applications do not store or replicate user data. A |
||||
|
Blockstack application is only considered decentralized if its users control |
||||
|
where their data get hosted and can prove that they created it. |
||||
|
|
||||
|
Blockstack applications meet this principle if they use the Gaia storage system. |
||||
|
Users can choose on an app-by-app basis which Gaia hub serves their application |
||||
|
data. Users may sign and/or encrypt their data in Gaia end-to-end. All files in |
||||
|
Gaia are addressed by a user identifier, an application's hostname, and a |
||||
|
filename. Through Gaia, users can prove data ownership and restrict access. |
||||
|
|
||||
|
### Users own their identities |
||||
|
|
||||
|
Users are the sole administer of their own independent and unique identifiers. |
||||
|
Within an applications, users must be distinguishable by unique identifiers. The |
||||
|
DApp cannot mask or take away a user's identifier, and a user must be able |
||||
|
to bind their identifier to the data they create. |
||||
|
|
||||
|
Blockstack applications have this property because each user can own one or more |
||||
|
IDs which are owned by a private key under the user's control. The IDs are |
||||
|
acquired through the Blockstack naming system. First time users that log into |
||||
|
the Blockstack application get a free `.id` in the Blockstack namespace. |
||||
|
|
||||
|
Blockstack IDs are replicated to all peers via a blockchain, this means |
||||
|
Blockstack cannot hide IDs. Blockstack IDs each have a public key assigned to |
||||
|
them via the blockchain records that encode their operational history. This |
||||
|
public key allows users to bind data to their Blockstack IDs through |
||||
|
cryptographic signatures. |
||||
|
|
||||
|
### Users have free choice of clients |
||||
|
|
||||
|
Applications must allow users to interact with their identities and data |
||||
|
independent of the application. For example, a user that creates data in |
||||
|
application 'X' must be able access that data from a different app, 'Y'. |
||||
|
|
||||
|
It's not enough that the user owns their identity and data -- the user needs to |
||||
|
also be able to choose which programs they use to interact with them and |
||||
|
administer them. In the limit, the user needs to have the freedom to write |
||||
|
their own client. An application cannot be considered a DApp unless it |
||||
|
allows users to interact with their identities and data such that the user can |
||||
|
later do so via a different DApp. |
||||
|
|
||||
|
Blockstack's APIs and SDKs make it easy to build applications that adhere to |
||||
|
this principle. Existing Blockstack applications have this property today simply |
||||
|
because they don't have any irreplaceable server-side logic. |
||||
|
|
||||
|
In the future, Blockstack applications must continue to meet the first two |
||||
|
principles but need not meet this one. For example, an application could |
||||
|
encrypt data in-transit between the application's client and the user's chosen |
||||
|
storage provider. Unless the app divulges the encryption key to the user, then |
||||
|
the user does not have free choice of clients; they can only use clients that |
||||
|
the app's servers choose to interact with. |
||||
|
|
||||
|
|
||||
|
## Non-Principles |
||||
|
|
||||
|
You'll notice, the Blockstack principles avoid adherence to a particular network topology or |
||||
|
architecture. Many DApps have defining characteristics that are implementation-specific rather |
||||
|
than expressions of overall DApp design goals. These aspects are mentioned here |
||||
|
as specific non-goals of Blockstack applications. |
||||
|
|
||||
|
### DApps have smart contracts |
||||
|
|
||||
|
Decentralized apps pre-date blockchains and smart contracts, and even today |
||||
|
there are popular DApps that do not need them. Examples include pre-Microsoft |
||||
|
Skype (which was peer-topeer), Mastadon, IRC, and email. All Blockstack DApps |
||||
|
do not use smart contracts at all. |
||||
|
|
||||
|
Another word for "smart contract" is "replicated state machine." Some DApps |
||||
|
need each peer to execute the same sequence of operations in order to fulfill |
||||
|
their business needs (in which case a smart contract would be appropriate), |
||||
|
but many do not. |
||||
|
|
||||
|
### DApps have tokens and/or non-fungible assets |
||||
|
|
||||
|
Similar to smart contracts, DApps pre-date tokens and non-fungible assets. |
||||
|
While having a crypto token or asset can help incentivize DApp deployment and |
||||
|
usage, they are not strictly necessary for their operation. |
||||
|
|
||||
|
### DApps use a blockchain |
||||
|
|
||||
|
Blockchains are a new tool for DApp developers to help coordinate peers, but |
||||
|
they are just that -- a tool. Sometimes they're the right tool for the job, and |
||||
|
sometimes they are not. |
||||
|
|
||||
|
|
||||
|
## Dapps serve users |
||||
|
|
||||
|
Fundamentally, DApps should serve users by preserving user autonomy. To do so |
||||
|
the Blockstack principles prevent developers from profiting from either (a) |
||||
|
building abusive features into DApps like ad networks, or (b) neglecting users |
||||
|
by failing to build vital safety features like <a href="https://en.wikipedia.org/wiki/Shadow_banning" target="\_blank">shadowbans</a>. Developers cannot profit from abusive features or neglectful designs. |
||||
|
|
||||
|
Because Blockstack applications allow users to own their identity and data and |
||||
|
has free choice of clients, the user can simply stop or avoid using bad DApps |
||||
|
with near-zero switching cost. This isn't to say that DApps can't be profitable. |
||||
|
DApps can still make money for their developers, such as by offering content |
||||
|
subscriptions or paid-for add-ons. They can broker with third parties on behalf |
||||
|
of their users to watch ads or share data in exchange for tokens. |
Loading…
Reference in new issue