Vapor – Decentralized Web over Bitcoinized HTTP
vapor.network
vapor.network
Instead of using central web servers, it is replaced with a network of Vapor nodes. I don't see this solving any problem. Just because HTTP requests have a Bitcoin signature, that does not solve any web-of-trust issues.
> record authenticated HTTP requests and replay them anywhere.
This is confusing, either identities cost real Bitcoin or you have a Sybil attack problem (numerous fake identities). If you need real Bitcoins, it requires lots of effort to use Vapor. As it is written, this is not going to work.
I’m going to go out on a limb here and say we’re being trolled. The emperor is naked.
Instead of decentralizing the networking stack, Vapor focuses on on decentralizing the data packet itself, which means Vapor can live on top of any other networking stack, most notably HTTP. Because it's just vanilla HTTP, users don't need do things like connecting to P2P networks and the app looks just like a regular web app, except that every API is signed by the user Bitcoin wallet.
Note that the HTTP requests are serialized and stored as OFFCHAIN Bitcoin transactions by default and never bloats up the blockchain. Optionally, the offchain transactions can be compressed into a transaction id bundle and timestamped on the blockchain as well as taking advantage of the programmability and payment ability of the Bitcoin script itself, but by default it's all offchain, yet still achieves decentralization and trustless replication of HTTP requests.
The reference client is almost ready and just wanted to get it out there to see who's interested. Thank you for taking a look.
GPG/PGP had 20 and 25 years, respectively, to proliferate but without a financial incentive it just petered along. The version for the OSX mail client is pretty bad in 2020 and just as niche as ever.
A lot of people undervalue this aspect of crypto-assets: Standardized signing protocols and tools, standardized large namespace with no collisions for account creation and state, the lower amount of programming needed because you aren't making your own account creation and state framework and database since you can just differentiate users by address or signature.
For anyone passing by: “But the low transactions per second are my final goto argument and I get to express my hate because of it”, again these aforementioned use cases don't send a transaction to the p2p network and are therefore not constrained by the bandwidth of the p2p network / blockchain. There is no way to tell how many projects use cryptocurrency infrastructure this way and how many users or how much activity they have.
I feel like i have so many tools for amazing feats of engineering with minimal understanding required (which may not be a good thing lol), but Crypto tools and/or advice always seems to suggest you shouldn't use crypto at all if you don't know what you're doing.
Eg if i write some storage application that fits my needs, and i want to add encryption for the data at rest - i often find the environment (crypto tooling and communities) hostile. Hostile to encrypting something without knowing enough to be competent.
I get why crypto communities/tooling are afraid of informed-idiots (as i self describe), but i view it as a failing of the environment not the informed-idiot.
Do you see your angle on this as something that could lower the barrier to entry for informed idiots just wanting to _use_ crypto? Ie the fact that Crypto Wallets/Coins have standardized and simplified a lot Crypto-related UXs, do you see that impacting common software usecases for encryption / signing?
reason being that its not clear if you are confusing the contexts or if the reader is. to the delight of cryptography aficionados who may not like the newer asset-based context, it looks like you did it correctly, but people in the crypto-asset space have abstracted the cryptography aspect so well that they would be confused.
the downside is that you will likely be relegating yourself to just the crypto-asset market, which has its own nuances as well as being a general anathema to some of your potential supporters who just want to ramble incoherently against crypto-assets.
fortunately, in crypto-assets your small project with just a few hundred users will probably make orders of magnitude more money than your big project with hundreds of thousands of users.
could you have just used a database? maaaaybe
could you have just made a lot of money while lowering your overhead costs by offloading your entire backend to the wallet and blockchain? definitely
In particular, you probably do NOT want to be serving GET requests over this slow, inefficient transport at all, it would be much more appropriate for the state to be published to the chain (that's what blockchains are for...) and have clients read from there rather than issue duplicate idempotent requests.
GET requests can be dealt with using regular web request methods.
I think I understand the concept as something like "login with your bitcoin identity" but I'm struggling to understand practically how what you're envisioning is meant to work.
I actually think this could be made far more generic as "login with public key identity" for any crypto scheme, Ethereum or just about anything that is not mimblewimble and/or hyper privacy focused should work similarly.
> The protocol serializes an HTTP request and wraps it inside a Bitcoin OP_RETURN output script. This is then signed with a Bitcoin wallet's identity private key and included as another output script in the transaction. The resulting Bitcoin transaction is sent to a destination Vapor API endpoint over HTTP.
> A Vapor endpoint only accepts HTTP POST requests with a raw bitcoin transaction as payload. The endpoint parses the transaction to extract out authentication information, validates the signature, and then forwards the extracted HTTP request to relevant API endpoints.
I actually think this is probably better suited as a library, then there is no need for any intermediary calls that will inevitably increase latency. Also, would the vapor server somehow send the information about the public key on to the destination server?
My brain can’t seem to make the connection from those two things to “decentralized internet”. I suspect this might be because I don’t have a lot of experience with web app development. Can you ELI5 this?
It's irrational because, by the way we see it, there is no instance of this software running that we can inspect. It's just you talking about it, which isn't anything at all if you've used tricky language (or GPT-3) to fool people into thinking you've done something when all you've done is write about it. On the other hand you could be almost done with it and see it working as magic, but we wouldn't because we can't see it or use it.
To support my argument, one only needs to look at the responses about "not understanding" what you are talking about.
> users don't need do things like connecting to P2P networks and the app looks just like a regular web app, except that every API is signed by the user Bitcoin wallet.
Word salad. Users would still need to sign their data packets with crypto and a regular web app is JavaScript, so what does that have to do with where the API endpoints are run and how?
I'll point out you are conflating the ideas of APIs and "apps" together. An app can use API endpoints, but an app can also just run in a browser and not talk to anything. How does vapor contribute anything to that scenario?
Most data packets are already copies of data stored somewhere. In fact, most data packets are decentralized copies of packets that are served from multiple locations already. Your story itself has multiple data packets representing it. They are all copies and they are all signed by a certificate. If I run a web app on AppEngine, the data comes from multiple servers running instances of my app somewhere. This is a thing, already, is what I'm saying. It works because of the standardized way the routers, servers and clients all talk to each other.
In this "vapor" software story you tell, it appears we can have "centralized" HTTP requests (like the POST that will happen when I click reply) which are packed up in a Bitcoin transaction, and then we have a place to store it where other things can pick it up later and make it "decentralized". That would be the place these "logs" go. Ok. Where is this storage router thing run? Who owns it? Does it use 402s when people need to pay or authenticate for content? Does it route things quickly, or does it take a little time to process each transaction? How does the router route packets that need to be secure end to end? Who is running the APIs that pick these packets up? How do they know they are ready for pickup? Does the router call them? If it does, how does it know how to call them?
More questions than answers means this is probably vaporware.
What I do not like about all "decentralization" claims in the crypto space is that they are actually centralized due to their (money costing) gateway infrastructures that bloat the originating state mutation up with metadata it doesn't really need.
We've seen p2p before. It was based on seeders and leechers and worked fine. Granted, trackers were bad, but mostly due to underlying missing encryption for transport.
We just need to fix p2p transport encryption with keys that are not made for identification but rather just for the sake of transport of states - in order to guarantee privacy.
If keys - or wallets - can be uniquely identified, people could've just used google chrome instead, because they actually gained nothing.
"PUT /posts/1/update <body>"
Vapor stores the entire serialized HTTP request instead of just the "<body>" part and double signs both on the user side and the service provider side. And this transaction can be trustlessly relayed to 3rd party nodes as well as returned back to the user as a receipt for evidence, because the raw transaction is self-validatable complete with the enclosed public key against which to check the signature, as well as the Bitcoin transaction ID acting as the checksum for raw transactions being synchronized.
You ask who owns the data, but it can be structured so that every user stores every single transaction on their wallet or local storage, not to mention 3rd party nodes that can act as insurance.
While I understand that applications that receive user data could now "verify" the user data they have has not been changed, how would you do that for something other than raw transactions? Arguable just storing raw transactions will not be that useful - I'd expect these applications to do things with the user data - and that whole processing itself be verifiable (this could be possible if the logic to manipulate data is known). However, how can you do that while preserving user data privacy?
Vapor has nothing to do with data hosting costs and DDoS. It solves the problem of data ownership, incentive, monetization, etc.
This difference in the interpretation of what benefit decentralization provides is why many past "decentralized internet" projects have focused on the networking aspect (censorship resistance, DDoS avoidance, etc.) whereas Vapor is taking a different approach where it tries to solve a different problem. Its main focus is to decentralize the power structure, and to do that it needs to solve the data ownership (both philosophically and technologically), as well as frictionless monetization.
The goal is to change the power structure that drives the web, and I believe it has more to do with how the data itself is structured (so that it can be distributed trustlessly regardless of the network) than the network stack.
How does this help data ownership? How does this decentralize the 'power structure'? The ownership and power is still in the hands of the server. The benefits you highlight here are addressed by SSL. Is this trying to address the downsides of SSL? I can't see how it is/would.
It seems like 'frictionless monetization' is the only thing this really addresses, and even that I'm skeptical of.
I don't mean to be such a detractor, but you really need to reconsider what the purpose of this technology is and sell that purpose better. Because your current explanation makes no sense.
Because the goal is not to lower hosting costs and avoid DDoS, but to create a data structure that can be routed around in a trustless manner (by double signing the HTTP requests and encapsulating in an offchain Bitcoin transaction format with unique SHA256 hash ids for secure synchronization), it's solving a completely different problem. The features were derived from this goal.
> This difference in the interpretation of (what benefit) decentralization provides
It's not obvious what problem you mean. In particular, what is the problem of data ownership?
> Its main focus is to decentralize the power structure
Can you explain that in concrete terms?
Don’t confuse the Bitcoin protocol with the public Bitcoin ledger!
They didn't, but the story sure did.
> No Bitcoin needed: Vapor only uses Bitcoin transactions as data packets. You do not even need to own Bitcoins.
That's incredible, and my support for this technology has increased greatly after reading that.
Basically you can encode not just vanilla HTTP requests but also payment in a single Vapor request.
By default you can already build web apps with Vapor by simply using the base protocol. But by structuring everything as Bitcoin transaction, you can for example implement monetized APIs and money programmed routing (Implement routing and authorization based on Bitcoin script payments and/or resolution)
More on this here: https://vapor.network/#62solution
Addressing the points in your link:
> 1. Decentralized Authentication
First: Bitcoin wallet addresses are temporary keys, not identities. "Authenticating" against one isn't really appropriate, no more than it'd make sense to authenticate a user as the owner of a specific dollar bill.
Second: even if you wanted that, there's no reason you should need to encapsulate HTTP in a weird wrapper to accommodate it. A variety of schemes already exist for signing HTTP requests within the bounds of HTTP. Most of them even support ECDSA signatures.
> 2. Monetize through Bitcoin payment
Signing a message which isn't a valid Bitcoin transaction with a wallet private key doesn't turn that message into a transaction. Conversely, there's no way to make a Bitcoin transaction conditional on the completion of an off-chain operation.
> 3. Programmable HTTP requests
Do you have any examples of what a realistic use case for this would be? Keep in mind that the signed nature of a request doesn't guarantee that the request is processed in the requested manner.
> 4. Data portability
First: as noted previously, there are already plenty of non-proprietary schemes for signing HTTP requests.
Second: this entire point presumes that making HTTP requests publicly logged and visible is a benefit, which doesn't make any sense.
Best of luck with the project - looking forward to seeing the implementation.
I'm struggling to understand the relation between owning your auth and owning your data here. So far as i can tell, the only way i "own my data" is that i could.. i guess, record every single HTTP request i ever make, and replay it against some other version of an identical app?
Eg, lets say Facebook added Vapor; How would i move my data away from Facebook in the future? How has Vapor helped me own my data?
(honest question, Vapor has some really cool properties!)
This seems like a fantastic platform for microtransactions, transactional streams, and value flowing between devices and browsers using existing networking infrastructure. The ability to do this all ON TOP of decentralized networks like IPFS makes it even better?
https://andersen.sdu.dk/vaerk/hersholt/TheEmperorsNewClothes...
HTTP, like Amazon S3 buckets seams to be appropriate enough being stateless, ubiquitous and anything can be encapsulated.
User data storage capacity relates to bitcoin via some magic? So Vapor is to be used as a CSP offering that links bitcoin directly to storage enabling pay per use type content? Content that is signed and sealed.
Speed of bitcoin transactions seems like an interesting challenge.
What centrally controlled components (by Vapor) are there, if any?
Business case seams legit.
"Vapor is an OFFCHAIN Bitcoin protocol for building a decentralized web by "Bitcoinizing" HTTP requests"
<= Now this sounds WAY cool.
It is about control.
(Love the name, btw).
E.g., could I timestamp something on Bitcoin, or will timestamping/monetizing only work for Bitcoin SV?
You list the pro's but what about the cons? Surely having an immutable ledger has some negatives, as well as a signing server.
Let's say I have an existing Python webapp with a database backend.
Can I take that and make it speak Vapor? Is it better to design an app from scratch to speak vapor?
Basically you can build a CRUD app without authentication at all (only accessible by your own API clients). And then allow only Vapor to write to the API internally.
This would be the most basic approach. I think it will become more clear once I release the implementation, just wanted to get the protocol out there first.
this is a strange wrapper over http using ecdsa as auth. why not use ECIES along with it to totally achieve privacy from requester to server?
as i understand, the vapor nodes save requests and replies, so these can be replayed.
this means heavy data bloat, when i look at nowadays apis we all run, saving all requests and answers fully... come on
The more compelling use case is for clients to cache the receipts of particular transactions so they can replay them on other services. For example, if the user decides to migrate their data to a competing service.
Also, the receipts act as proof of tampering (or lack thereof), since they are signed by the Vapor node.
Keep building!
https://www.eff.org/deeplinks/2011/04/unqualified-names-ssl-...
https://security.googleblog.com/2013/12/further-improving-di...
Vapor also addresses decentralization in distribution of content as well.
I'm extremely skeptical of Vapor for other reasons, but we ought to at least keep the value proposition clear here.
> Vapor also addresses decentralization in distribution of content as well.
How? All I see some way of performing a replay or amplification attack using an unspecified gateway.
The article bills Vapor as helping to decentralize the "data layer" of an api. This naturally has some immediate caveats... like... this sort of framework would not be suitable for real time or streaming Apis.
Also, the article doesn't really touch on the cost of maintaining all of this. It's true that vapor api hosts can charge a small transaction fee to maintain/run their processing nodes. I have to wonder what that looks like, and if people are willing to pay a per-request fee for an http transaction.
I don't believe this is intended to replace standard authentication, and calling out how it's impractical for common scenarios is fair game. However, I think it's more interesting to think about scenarios where this might be useful.
Such as?
Something like IPFS pubsub could work, or you could use any of the on-chain social networks that have sprung up, or you could use E2E group chats like everyone from the Taliban to activists in the US use.
https://datatracker.ietf.org/doc/draft-ietf-httpbis-message-...