Smart Contracts — 3 limitations of a self-enforcing agreement

A major benefit of smart contracts is that they can be self-enforcing.

A self-enforcing agreement is an agreement or contract between two parties that is enforced only by those two parties; a third party cannot enforce or interfere with the agreement. This agreement stands so long the parties believe the agreement is mutually beneficial and the agreement is not breached by either party. — A Theory of Self-Enforcing Agreements

Since a smart contract is also self-executing, there is no possibility for any party to breach the the agreement. This means that there is no need for a trusted third party, no bankers, no lawyers, no judges. Right?

Well yes, you can accomplish this, but it does mean some serious limitations.

The smart contract may require a deposit

There is only one way a smart contract can really enforce anything; by making you lose your deposit.

It’s possible to give a smart contract control over some money or other assets. This money is in escrow, so neither party is able to touch it. The contract has rules about who will get what and under which conditions.

Without a deposit, anybody can simply ignore the smart contract.

Unfortunately, not all contracts are suited for this. An employment contract can have a number of rules that have a huge penalty if you break them. This is the case for a non-compete, a relationship clause or an NDA.

Signing such an agreement as smart contract means a new employee needs to deposit the penalty fees in advance. He’ll get his deposit back after the contract has ended. If the penalty is $10,000 per clause, he would have to deposit $ 30,000. That’s probably not a reasonable demand.

The smart contract should not rely on an oracle

A smart contract isn’t able to get any data from the outside world by itself, not even from the Internet. It can only use data that has been pushed onto the blockchain.

If I would ask you; “Can you please sign this contract? It’s automatically enforced based on the information I will supply.”. You might sign it, but you probably shouldn’t. Blindly trusting the other party is pretty dangerous.

To solve this, some developers propose the use of an oracle; an independent and unbiased third party, that is trusted upon providing correct data.

Unfortunately; An oracle is by definition a trusted third party. Relying on an oracle means the contract is no longer self-enforcing.

There is nothing inherently wrong with a trusted third party, but this does reintroduce the very problem that the blockchain tries to solve. We’re back on relying on trust.

Also, an oracle might be trustworthy today, but there is no guaranty about the future. This is regardless of who controls the the oracle. Organizations, NGOs or governments; leaders change and regimes change.

We can solve this without depending on an oracle. You might need to acknowledge any information I put on the blockchain, before the smart contract does anything with it. If you don’t acknowledge, we have a dispute.

The smart contract should not rely on arbitration

With any contract, there is always a risk for a dispute. Some contracts have vague and ambiguous statements like “sufficient cause”. But even when this is not the case, parties might just disagree on hard facts.

When signing the contract, we might have agreed upon using an arbiter who’s judgment is final. But this means that the smart contract is no longer self-enforcing. A third party should not enforce or interfere with the agreement.

It’s even more difficult when the smart contract itself is under discussion. One party might that there is a bug in the code that unfairly benefits the other party. To determine who is right we must document the intended behavior.

This would any party to start a legal procedure to proof the code is misbehaving. However by doing so, we’ve recreated the very problem smart contracts are set out to solve.

There is an alternative solution; Parties must settle a dispute themselves before either of them can access the deposit.

This fits perfectly in the concept of a self-enforcing contract, but it is very different from the way disputes are being settled today. Either find a solution together or both lose. Question is, is the world ready for that?

A final option is rely on voting. This might work if a contract has a large amount of parties, like a DAO. This does pull the contract into the realm of popularity contests and politics. Not all contracts are suited for that.


Using a smart contract doesn’t automatically make the contract self-enforcing. Creating a self-enforcing contract means placing serious constraints on how you can structure an agreement.

Most types of contracts are not suited for self-enforcing smart contracts.

We might ignore the ‘self-enforcing’ concept of smart contracts and try to work around it. Unfortunately this means reintroducing many of the problems smart contracts are set out to solve.

Want to know more? Visit
LTO pre-sale starts December 6th 2017.

Unsure what to use? This handy dandy flowchart might help.