Should the Ethereum community stop using the words ‘contract’ and ‘smart contract’ to refer to, well, everything?
When it comes to the law, ‘contract’ means something very specific: “a set of promises for the breach of which the law gives a remedy…”[Restatement (Second) of Contracts §1 (1981).]
Some are sprawling beasts, hell-bent on assimilating anything and everything in their path — like the creature in John Carpenter’s The Thing. Or the suburbs. But most are pretty circumscribed and, in fact, compatible with the legal definition above — just like Nick Szabo’s OG definition from 1994:
“A smart contract is a computerized transaction protocol that executes the terms of a contract.”
Then there’s Ethereum. Like I said, we use “contract” and “smart contract” for everything.
The example I gave at ÐΞVCON1 is the SimpleStorage “smart contract” in the Solidity docs. It just stores integers. Another is Greeter, the “‘Hello World’ contract” on Ethereum.org. It’s just…Hello World. These aren’t “contracts” or “smart contracts” under any of the definitions above (even the The Thing ones). So why call them that?
I think it all stems from an (arbitrary?) decision made waaaay back in the primordial days of Ethereum: January 2014. This was the decision to label the basic building block of Ethereum — that object that sits on the blockchain and has its own code, address, and balance — a “contract” instead of, well, anything else.
If you watch Vitalik reveal Ethereum at Bitcoin Miami 2014, you’ll see why I think the decision was a little arbitrary-ish.
Vitalik starts off by saying that, although virtual currency was its “first app”, there are many other useful apps that could be built atop blockchain. He lists some: colored coins, DAOs, smart property, and, of course, “smart contracts.” And the goal of Ethereum, he says, is to create a single “foundational layer” that supports them all.
Then comes the big leap. As Vitalik starts to outline Ethereum’s mechanics, we hear that “contract” will be the label for that foundational layer’s “lego block” — i.e., that core object on the blockchain. “Everything that you want to implement through Ethereum,” says Vitalik, “you would have to implement as a contract.”
I’m not sure why this leap was made or why “contract” — shorthand for just one of the many potential blockchain apps Vitalik mentioned — was chosen as the moniker for our universal “lego brick” (instead of, say, “app” or “program” or even something made-up).
Regardless, the name stuck. And I’m no etymologist, but I think what happens next is “back-formation”: when people create a new word by mistakenly presuming an affix for an existing one. In this case, Ethereum users clumsily add “smart” back to “contract.” So now “smart contract” has become another name for that “lego brick” and we have folks saying things like this, from the Greeter page:
“Smart contracts are account holding objects on the ethereum blockchain.”
Kind of silly, right? I think folks know this and that’s why there’s been a subtle effort lately to avoid “contract” and “smart contract” in favor of more use-specific labels like “Distributed Application” or “DAO.”
This is probably a good idea. Calling something that is really just an application a ‘contract’ or ‘smart contract’ sends signals you may not want to send. You don’t, for example, want users of your Hello World app to think they’re incurring legal obligations by using it. That’s nuts.
Conversely, if something behaves more like a contract at law, then there are important practical reasons to keep calling it a ‘contract’ or ‘smart contract.’ It puts folks on notice. It says, “Hark! I want this thing to behave like a contract — you know, the legal kind: an enforceable agreement. So heads up.”
Further — and try to follow me here — I think using ‘contract’ and ‘smart contract’ only for this latter category of Ethereum objects will also help us develop a set of best practices for them. Which will be really valuable.
As an example — something I also mentioned at ÐΞVCON1 — I suspect it’s possible to create Ethereum contracts that are also contracts at law (i.e., enforceable in court). You just have to make sure your Ethereum contract code reflects the elements of a contract at law.
What are those? See the diagram below.
How do we implement them in a contract? I’m not sure.
That’s something we’re going to have to sort out together, as a community, on Gitter and Slack and StackExchange.
And while I don’t know where that conversation will lead, I do know that it will be a hell of a lot easier if this topic and others like it — that are only pertinent to Ethereum contracts that wish to behave like contracts at law — are what come up when folks Google “Ethereum Contract” — instead of, say, a Hello World app.
In general, refining our terminology will help us refine and improve our objects.
On that note, I’m going to create an EIP officially proposing that we change the term for the “lego brick” of Ethereum, that core object on the blockchain, from “contract” to…
That’s right, like the things in the cartoon. You know, the one from the 80’s that was basically just Smurfs underwater. Think about it: it’s retro-cool. It sounds like SNARK, so it’s vaguely crypto-ish. And, above all, it’s not “contract.”
What do you think? Do you have a better suggestion for a name? Are you still fine with “contract”? Click through to the EIP and be heard.
**This is part two of an “Unpacking the Term Smart Contract” series. Here is part one. **