Emerald City Logo

Emerald City is an experimental framework for deploying autonomous cloud services.

Autonomous Icon

Autonomous means that the application can run without any central owner.

Anyone with an AWS account can launch nodes that fully participate in an application network. The original developer can stop participating and the application will still continue to operate.

Cloud Icon

Cloud means that these applications are hosted on large public clouds such as AWS, rather than on arbitrary hardware.

This restriction is the key to the “remote attestation” scheme that makes Emerald City possible, ensuring that node operators can not read or tamper with private information stored inside their nodes.

Services Icon

Services could include databases, social networks, proxies, games, and more.

Services can be written in any language and are deployed as Docker containers. Distributed databases can be used to resiliently share state across nodes.

1087163725853020337734724429771782038312885797941036111437138041440514872154761554316496190391993620399211912363124262243322514226264

FAQs

2736731464323453240633273334833359335004350443509235168374253921641094411564210542581438364434645368454494705247950490984958649703498005032754648548275514455558559555721557662577235823758352590346002860648618056193662954632726385464041

How does this differ from a blockchain?

Off Premises: Blockchains can run on arbitrary servers operated by anybody—whereas Emerald City only runs on servers maintained by large public clouds like AWS.

Scalable: Blockchain networks aggressively replicate data across nodes to protect against Byzantine faults. This means computing and storing data on blockchains is extremely expensive. Since the remote attestation scheme ensures the nodes are not malicious, applications can scale more easily.

Private: Blockchain networks can not generally compute on private information—as any information that is to be computed on needs to be shared with the entire network. When they do try to compute with private information, it is in very narrow contexts using very complicated cryptography (e.g., shielding transactions with zk-SNARKs). In general, no public chain applications can store and operate on private data like one would with an ordinary backend.

Web Native: Blockchain applications typically communicate over custom protocols and require trusted third parties to operate gateways to web apps. Emerald City applications can directly host web accessible endpoints.

Portable: Blockchain applications typically require writing applications in special smart contract languages with specific limitations on the amount of compute and data which can be used. With Emerald City, applications can compute, store, and transfer data with almost no overhead using any language that can be embedded in a Docker container.


Insider Vulnerability: If a rogue system administrator within the AWS organization could compromise the internal network security, they could potentially compromise the foundation of Emerald City.

How does this differ from traditional hosting?

Auditable: With Emerald City, an end user can verify the code which is being run on a server to ensure that the application that they're using respects their privacy. With traditional application hosting, the user simply has to blindly trust that the application developer won't ever try to monetize user data.

Permissionless: With Emerald City, anyone with an AWS account can launch a node and fully participate in the operation of an application. With traditional application deployment systems, only the application developer can launch new instances of an application.

Resilient: The original developer can stop participating and the network will still continue to operate, so long as any member of the community maintains a running node.

Distributed: While nearly any application written in any language can run on Emerald City, ideally applications should be adapted to a distributed environment to synchronize data between nodes.


Opaque: Whereas traditional hosting offers a lot of ways in which application developers can remotely administer servers or debug applications, Emerald City exposes a locked-down environment which is hard to debug.

Immutable: Certain aspects of an Emerald City deployment can't be changed, which can make it difficult to guard against certain security vulnerabilities, especially those against the core runtime.

What kinds of applications can you build with Emerald City?

Genetic Screening Service A service for people to upload generic sequences for screening against particular diseases without the fear that the data is copied and sold to the highest bidder
Product Launch Mailing List An email waitlist that allows users to sign up for a notification when a product is launched, without allowing the developer to abuse those emails
Semi-Decentralized Bridge A system for bridging different layer 1 blockchain networks together without requiring a lot of chain specific complexity
TLS Notary An server that allows users to generate notary proofs of HTTPS requests (see TLS Notary)
Decentralized Social Network A social network where users can not be censored and where private user data can not be mined
Proxy Service A proxy service which keeps no user logs and can be individually audited by any technical user
& more Anything

How does Emerald City work?

“Pay no attention to that man behind the curtain.”
— The Wizard of AWS

TODO

10871637258530203377347244297717820383128857979410361114371380414405148721547615543164961903919936203992119123631242622433225142

Getting Started

27367314643234532406332733348333593350043504435092351683742539216410944115642105425814383645368454494705247950490984958649703498005032754648548275514455558559555721557662577235823758352590346002860648618056193662954632726385464041

TODO