Smart Mouth is a smart contract that allows two parties to make a binding agreement to have a financial matter settled by a third-party trustee. The contract is immutable and can be inspected here. It offers the following guarantees:
To initiate a binding agreement, one of the two parties first creates an offer. On the blockchain, the offer is identified by a hash of the document describing the financial matter. Put simply, a hash is a small piece of text that is linked to a document. Anyone can derive the hash from the document, but the contents of the document can’t be deduced from the hash. Using the hash of the document describing the financial matter gives all parties the option to keep the contents of the document private, although external parties can see that some offer has been created/accepted/resolved by a particular address.
Because the blockchain only hosts the hash, the creator should send an unmodified copy of the document to the other parties. This way, the other parties can verify that the contents of the document match the offer on the blockchain (identified by the hash). In practice, services like mouth.is simplify this process.
An offer on the blockchain consists of the following things:
makerAmount
)takerAmount
)deadline
)trustee1
[can’t be 0x0] and trustee2
[can be
0x0])fee
)hash
)fixedAddress
)Theoretically, if the last option is not set, anyone can enter the agreement. However, without access to the document describing the financial matter, they’d have to do so blindly.
Parties entering an agreement should ensure the trustees are indeed trustworthy. Bad-faith trustees can:
Trustees have the option to annul offers before and after they’re accepted. This option will usually be exercised when a trustee refuses to handle a particular matter.
Trustees can resolve the matter in any manner, as long as the total amount distributed to the parties equals the total amount locked into the contract, minus the resolution fee.
This UI allows anyone to interact with Smart Mouth directly. Unlike the form on Mouth.is, this Web3 app does not interact with our servers. It’s useful for trustees/arbiters and for people who wish to create or accept a generic binding agreement. Since we don’t log offers created here, we cannot generate an invitation link, and we cannot help you retrieve the agreement document if you lose it (but the other parties might be able to help you if you already sent them a copy).
To resolve an agreement, use resolve
to award the stakes
to one party, or skewedResolve
to divide the stakes between
both parties. annul
sends back the stakes to both parties,
minus an optional fee.