GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - BlockstreamResearch/simplicity: Simplicity is a blockchain programming language designed as an alternative to Bitcoin script.

BranchesTags
Open more actions menu

Latest commit

 

History

763 Commits
763 Commits

Folders and files

NameName
Last commit message
Last commit date
.github/workflows
.github/workflows
 
 
C
C
 
 
Coq
Coq
 
 
Haskell-Examples
Haskell-Examples
 
 
Haskell-Generate
Haskell-Generate
 
 
Haskell
Haskell
 
 
alectryon
alectryon
 
 
.gitignore
.gitignore
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
SECURITY.md
SECURITY.md
 
 
Setup.hs
Setup.hs
 
 
Simplicity-Primitive.html
Simplicity-Primitive.html
 
 
Simplicity-TR.tm
Simplicity-TR.tm
 
 
Simplicity.C.cmake.nix
Simplicity.C.cmake.nix
 
 
Simplicity.C.nix
Simplicity.C.nix
 
 
Simplicity.Coq.nix
Simplicity.Coq.nix
 
 
Simplicity.Haskell.nix
Simplicity.Haskell.nix
 
 
Simplicity.bib
Simplicity.bib
 
 
Simplicity.cabal
Simplicity.cabal
 
 
compcert-opensource.nix
compcert-opensource.nix
 
 
compcert-opensource.patch
compcert-opensource.patch
 
 
default.nix
default.nix
 
 
inheritance.Coq.dot
inheritance.Coq.dot
 
 
manual-index.html
manual-index.html
 
 
safegcd-bounds.nix
safegcd-bounds.nix
 
 
shell.nix
shell.nix
 
 
spelling.ignore.txt
spelling.ignore.txt
 
 
unification.patch
unification.patch
 
 
vst.nix
vst.nix
 
 

Repository files navigation

Simplicity

Important

The Simplicity language and implementation are still under development.

Simplicity is a blockchain programming language designed as an alternative to Bitcoin script.

It is a low-level, typed functional language designed to be a drop-in alternative for Bitcoin's Tapscript. It offers static resource bounds and has a formal specification (in Rocq) which allows the creation of machine-checkable proofs of program behavior.

It is currently deployed on Blockstream's Liquid, which is a sidechain resembling Bitcoin in many ways; but which differs in many Script-relevant ways (e.g. supporting multiple assets and using Confidential Transactions).

This repo is the core Haskell and C implementation of Simplicity (AKA libSimplicity).

If you are simply looking to develop with the language, you may wish to use SimplicityHL, or rust-simplicity instead.

Contents

This project contains

  • A C implementation of a minimal, consensus-critical Simplicity runtime for full nodes.
  • A Haskell implementation of Simplicity's language semantics, type inference engine, serialization functions, and some example Simplicity code.
  • A Haskell code generator that exports Simplicity constants to C and Rust.
  • A Coq implementation of Simplicity's formal denotational and operational semantics.

Build

Use Nix for the easiest build. Alternatively, use GNU Autotools.

C project

Nix

Change into the root directory of this repository.

Build the nix package.

nix-build -A c

Enter a nix shell to develop the project manually (see below).

nix-shell --arg coq false --arg haskell false

Use arguments to enable / disable the other projects.

Manual

Change into the C directory of this repository.

Build the project using make.

make -j$(nproc)

To install the project, run make.

make install # use "out=/path/to/dir" for local install

To run the tests, run make.

make check

Haskell project

Nix

Change into the root directory of this repository.

Build the nix package.

nix-build -A haskell

Enter a nix shell to develop the project manually (see below).

nix-shell --arg c false --arg coq false

Use arguments to enable / disable the other projects.

Manual

Install the Glasgow Haskell Compiler and Cabal.

Change into the root directory of this repository.

Build the project using cabal.

cabal build

To run tests, run cabal.

cabal test # use --test-options="+RTS -N -RTS" for parallel jobs

To enter an interactive GHCi prompt with the project loaded, run cabal.

cabal repl Simplicity

Coq project

Nix

Change into the root directory of this repository.

Build the nix package.

nix-build -A coq

Enter a nix shell to develop the project manually (see below).

The shell provides Coq, CompCert and VST.

nix-shell --arg c false --arg haskell false

Use arguments to enable / disable the other projects.

Manual

Install the opam package manager.

Enter the opam environment in your shell.

opam init
eval $(opam env)

Install the Coq theorem prover.

opam pin -j$(nproc) add coq 8.17.1

Install the CompCert certified C compiler.

opam repo add coq-released https://coq.inria.fr/opam/released
opam install -j$(nproc) coq-compcert.3.13.1

Install a custom version of the Verified Software Toolchain.

You cannot use opam for this step!

wget -O - https://github.com/PrincetonUniversity/VST/archive/v2.13.tar.gz | tar -xvzf -
cd VST-2.13
make -j$(nproc) default_target sha
make install
install -d $(coqc -where)/user-contrib/sha
install -m 0644 -t $(coqc -where)/user-contrib/sha sha/*.v sha/*.vo

Enter the Coq directory of this repository.

Build the project using make.

coq_makefile -f _CoqProject -o CoqMakefile
make -f CoqMakefile -j$(nproc)

To install the project, run make.

make -f CoqMakefile install

Documentation

Detailed documentation can be found in the Simplicity-TR.tm TeXmacs file. A recent PDF version can be found in the pdf branch.

Further Resources

  • Our paper that originally introduced Simplicity. Some of the finer details are out of date, but it is still a good introduction.
  • BPASE 2018 presentation of the above paper.
  • Scale by the Bay 2018 presentation that illustrates formal verification of Simplicity in Agda (slides).
  • Our library rust-simplicity that implements Simplicity in Rust.

Contact

Interested parties are welcome to join the Simplicity mailing list. Issues and pull-requests can be made through GitHub's interface.

About

Simplicity is a blockchain programming language designed as an alternative to Bitcoin script.

Resources

Readme
MIT license

Security policy

Security policy
Activity
Custom properties

Stars

364 stars

Watchers

30 watching

Forks

52 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.