Introduce sCrypt: A Layer-1 super contract framework for BTC

This submit became first printed on Medium.

We are extraordinarily overjoyed to introduce sCrypt: a novel Typescript framework to invent Layer-1 super contracts on BTC this day, no fork wanted. One can now write, test, debug, deploy, and make contact with super contracts in an straightforward-to-employ unified framework the usage of contemporary developer tools. Any Web2 developer can invent super contract-powered apps on BTC so long as she knows JavaScript/TypeScript. It serves as a stable foundation for reworking BTC into a principal contract platform.

Smart Contracts on BTC

Dapper contracts on BTC

Conventionally, BTC is regarded as handiest able to funds and storing fee. Ordinals has modified the misperception by demonstrating it moreover helps tokens. One other misconception is BTC’s lack of super contract capabilities. In reality, BTC has supported super contracts since Day 1 within the affect of Bitcoin Script. Hashlocks, timelocks, and multisig are some excellent examples.

One amongst the largest hurdles in BTC super contracts lies in Script. Being a low-stage meeting language, Script is awfully refined to code in and motive about. There is form of no instrument to test, debug, and deploy as in normal instrument pattern workflow. Writing super contract in native Script is cumbersome and error-vulnerable. It snappy becomes intractable when the contract measurement and complexity develop.


Enter sCrypt. With sCrypt, builders can straight code BTC super contracts in Typescript, one of the principal popular programming languages on this planet and outdated by hundreds of thousands of builders every day. sCrypt contracts are compiled into Bitcoin Script.

sCrypt provides a plethora of advantages:

  • No must be taught a brand novel programming language. We chose TypeScript because it provides an straightforward, acquainted language (JavaScript) but with kind security, making it straightforward to birth out writing stable super contracts. There’s no such thing as a must be taught a brand novel programming language or tools in case it’s seemingly you’ll presumably also be already mindful of TypeScript/JavaScript.
  • No must be taught novel tools. Web2 builders can reuse hundreds of thousands of novel TypeScript/JavaScript libraries and their popular tools: Visible Studio Code/WebStorm for IDE, NPM for equipment administration, Jest/Mocha/ Jasmine for checking out.

A working instance

Enable us to see a helpful super contract.

The code below represents a straightforward logical NAND (NOT-AND) gate commitment for BitVM, taken from Resolve 2 in its whitepaper. It tests if the 2 input bits (A, B) and one output bit (E), all dedicated in device the usage of hashes, of the gate match, i.e., E = NAND(A, B).

The real minute print of how this code works is now not principal. The central message here is that it’s removed from what a novel programming language looks to be like treasure and looks esoteric.

NAND gate commitment in Script

The functionally the same is expressed in sCrypt simply as:

NAND gate commitment in sCrypt

Evaluating the Script and sCrypt implementations, it’s obvious the latter is vastly more pleasant and approachable to popular builders. The ragged is handiest known by a handful of builders who can code in out of date meeting language, whereas the latter can even be mastered by hundreds of thousands of builders who know JavaScript/TypeScript, or any assorted Object Oriented programming languages such as Java, C++, or Golang. The more advanced a principal contract gets, the more advantageous it’s to invent it in sCrypt than in Script.

The beefy code is listed below, per the sCrypt library scrypt-ts-btc.

BitVM contract

Deploy and make contact with super contracts

We employ Pay-to-Survey-Script-Hash (P2WSH) for contract deployment. Deployment consists of compiling the super contracts code to affect script, hashing this script, and inserting the hash into a P2WSH transaction (Tx0), which is broadcast to the network.

When someone wants to call the deployed contract, she’s going to embed the beefy contract script along with the known as capacity’s inputs as see data within the following transaction (Tx1) spending Tx0.

Deploy & call transactions framework
Deploy & call transactions: left represents input, correct output

Here is the code snippet to deploy and make contact with the contract:

Deploy & call the contract

It is value noting that deploying (Line 8) and calling (Line 12) the contract handiest takes one single line.

These transaction IDs signify an instance of the BitVM contract deployed and known as on the BTC testnet.

The beefy code of the instance is available within the market on GitHub. Alive to builders can salvage admission to the total code and bolt it themselves. For more data on sCrypt, please consult with our intensive documentation.

Known barriers

sCrypt can work on any blockchain that helps Bitcoin Script. This entails Bitcoin forks and Bitcoin-derived chains such as Litecoin and Doge.

BTC has disabled many Script opcodes, such as OP_CAT and OP_MUL, vastly limiting the forms of super contracts that can even be expressed in sCrypt. The BTC community is actively discussing re-enabling such opcodes and introducing novel ones, which could perchance invent sCrypt on BTC more extremely effective than it’s this day if the proposed changes are licensed.

Within the duration in-between, there are chains which maintain the beefy suite of Script opcodes, treasure Bitcoin SV and MVC. sCrypt reaches its beefy potential on these chains this day.

Utilize in Taproot

We employ P2WSH kind script to embed sCrypt contracts for ease of exposition within the instance, which enables a maximum script measurement of 10KB. sCrypt contracts can moreover be outdated in Taproot script. They’ll also be made more expressive and refined since Taproot has a grand bigger script measurement restrict of ~4MB.

Associated Work

Review to assorted Layer-1s (L1)

There are assorted makes an attempt to make stronger Script’s programmability, which we list some below.

  • Miniscript: a standalone language for representing Bitcoin Script in a composable and readable device. It is entirely restricted in scope and never more expressive than Script: it’s going to handiest narrate signature necessities, timelocks, hash preimages, and arbitrary combos of these.
  • Simplicity: a piece-in-progress low-stage programming language with elevated flexibility and expressiveness than Bitcoin Script. It requires a fork to put in power on BTC.

In inequity to both, sCrypt does now not make a brand novel programming language and proper reuses TypeScript, which has a vastly shallower finding out curve. Moreover, it provides a more total framework moreover super contract language, including IDE, equipment administration, debugger, SDK, and APIs. That is, it provides the entirety builders must affect a beefy-stack app powered by super contracts.

Review to Layer-2s (L2)

sCrypt is a Typescript-primarily based entirely arena narrate language (DSL) compiled into Bitcoin Script, which runs on BTC this day with none fork. It inherits the beefy security of BTC, thus making it more stable and trustless than any BTC L2.

Having stated that, BTC L2 also can employ more sCrypt sides if they moreover employ Script and maintain more opcodes enabled than BTC L1. In reality, there are already L2s that leverage sCrypt this device, treasure Visual display unit Protocol.

sCrypt Hackathon at University of Exeter: Constructing super contracts with blockchain

YouTube video

Original to blockchain? Examine out CoinGeek’s Blockchain for Beginners portion, the absolute best helpful resource manual to be taught more about blockchain technology.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button