  Almost two centuries ago Pierre-Joseph Proudhon proposed social contracts --
voluntary agreements among free people -- as a foundation from which an
egalitarian and just society can emerge. A \emph{digital social contract} is
the novel incarnation of this concept for the digital age: a voluntary
agreement between people that is specified, undertaken, and fulfilled in the
digital realm. It embodies the notion of "code-is-law" in its purest form, in
that a digital social contract is in fact a program -- code in a social
contracts programming language, which specifies the digital actions parties to
the social contract may take; and the parties to the contract are entrusted,
equally, with the task of ensuring that each party abides by the contract.
Parties to a social contract are identified via their public keys, and the one
and only type of action a party to a digital social contract may take is a
"digital speech act" -- signing an utterance with her private key and sending
it to the other parties to the contract. Here, we present a formal definition
of a digital social contract as agents that communicate asynchronously via
crypto-speech acts, where the output of each agent is the input of all the
other agents. We outline an abstract design for a social contracts programming
language and show, via programming examples, that key application areas,
including social community; simple sharing-economy applications; egalitarian
currency networks; and democratic community governance, can all be expressed
elegantly and efficiently as digital social contracts.
