Fault-Tolerant Distributed Implementation of Digital Social Contracts
A companion paper has defined the notion of digital social contracts, illustrated how a social-contracts programming language might look like, and demonstrated its potential utility via example social contracts. The abstract model retains the distributed and asynchronous reality of social contracts, in which people have genuine identifiers, which are unique and singular cryptographic key pairs, and operate software agents thus identified on their mobile device. It consists of a transition system specifying concurrent, non-deterministic asynchronous agents engaged in digital speech acts, which are cryptographically-signed sequentially-indexed digital actions. Here, we address the distributed implementation of digital social contracts in the presence of faulty agents: we present a design of a fault-tolerant distributed transition system for digital social contracts, show that it indeed implements the abstract notion of digital social contracts, and discuss its resilience to faulty agents. The design is presented incrementally: First, a distributed implementation; then a strict fault-tolerant implementation, in which agents wait for actions to be finalized before basing actions on them; then, a relaxed implementation, in which, similarly to blockchain protocols, agents may act based on non-final acts, but might have to abandon these acts if they are discovered later to be based on a double-act; finally hash pointers are added. The final result is a novel blockchain architecture that is distributed with a blockchain-per-person (as opposed to centralized with one blockchain for all), partially-ordered (as opposed to totally-ordered), locally-replicated (as opposed to globally-replicated), asynchronous (as opposed to globally-synchronized), peer-to-peer with each agent being both an actor and a validator, and egalitarian (as opposed to the plutocratic).
View on arXiv