Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 27 additions & 18 deletions _topics/en/simplicity.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,30 +9,39 @@ categories:

## Required. Use Markdown formatting. Only one paragraph. No links allowed.
excerpt: >
**Simplicity** is a work in progress low level programming language with
**Simplicity** is a work-in-progress low-level programming language with
greater flexibility and expressiveness than Bitcoin Script. It allows
you to verify the safety, security and costs of a program. It also offers
native merklized scripting, formal semantics and type checking. To use
Simplicity on Bitcoin requires a soft fork and a proposal is unlikely to be
formalized until at least 2022. Currently there is Simplicity support for
test branches of Bitcoin and Elements.
Simplicity on Bitcoin will require a soft fork and such a proposal has
not yet been made. Currently there is Simplicity support for test
branches of the ElementsProject.org and Bitcoin Core codebases.

## Optional. Use Markdown formatting. Multiple paragraphs. Links allowed.
extended_summary: |
Simplicity includes supports for Jets, pre-made building blocks that can be
combined to construct Simplicity programs. They have efficient machine-code
implementations for raw performance. At its core Simplicity consists of
nine primitive operators called combinators where semantics are formally
specified. However, implementing Bitcoin functionality at such a low level
typically results in large, slow and expensive programs. So instead
functionality like hash functions and signature verification are implemented
in higher level languages like C which are then proved to be equivalent to
the pure Simplicity programs. Assuming Simplicity is soft forked into Bitcoin
with sufficient jets at some stage, proposed soft forks like
[SIGHASH_ANYPREVOUT][topic sighash_noinput] could be utilized on Bitcoin
without needing a separate soft fork. Although Simplicity provides certain
proofs of correctness, care still needs to be applied in the design of any
contract protocol.
At its core, Simplicity consists of nine primitive operators called
combinators whose semantics are formally specified. However,
implementing Bitcoin functionality at such a low level results in
large, slow and expensive programs. Pre-written Simplicity programs
that implement basic functions can be added to Bitcoin consensus so
that other Simplicity programs can inline those functions using a
short identifier, eliminating their size penalty. The functionality
of the inlined Simplicity code can then be reimplemented in more
efficient languages, such as C, which can be proved to be equivalent
to the pure Simplicity program---eliminating speed or memory
penalties. These substitutions (called *jets*) allow an entire
program to be specified in the Simplicity language, including
operations like hash functions and signature verification, and yet
be executed using code from other languages to achieve performance
similar to today's Bitcoin Script.

Assuming Simplicity is soft forked into Bitcoin with sufficient jets
at some stage, new features such as [SIGHASH_ANYPREVOUT][topic
sighash_noinput]---which currently requires a soft fork to
implement---could be used on Bitcoin without needing separate
consensus rule changes. Although Simplicity provides certain proofs of
correctness, care will still need to be applied in the design of any
contract protocol that relies on more than just bitcoin encumbrances.

## Optional. Produces a Markdown link with either "[title][]" or
## "[title](link)"
Expand Down