Steve Shadders

Intermediate Bitcoin Script

Bitcoin Script has a horrible debugging experience. This talk introduces a high-level language with a powerful debugger to make it finally readable and testable.

Intermediate Bitcoin Script
#1about 3 minutes

Understanding Bitcoin Script as a Forth-like language

Bitcoin Script is a compact and efficient stack-based language similar to Forth, making it ideal for the resource-constrained environment of blockchain transactions.

#2about 8 minutes

Improving Bitcoin Script readability with aliases and formatting

A custom Script Definition Language (SDL) improves the developer experience by removing OP_ prefixes, using aliases for operators, and enabling standard code formatting.

#3about 4 minutes

A better way to debug Bitcoin Script

Overcome the poor native debugging experience by using a tool that provides precise error locations and a stack dumping operator to inspect state during execution.

#4about 13 minutes

The stack and reverse polish notation explained

Stack-based languages operate using reverse polish notation (subject-object-verb), which is a more natural structure for machine execution than standard infix notation.

#5about 4 minutes

Compile-time versus runtime script execution

Understand the distinction between compile-time, where code is generated with known inputs, and runtime, where it executes with new inputs provided later.

#6about 12 minutes

Using variables and words in a script definition language

The Script Definition Language introduces features like comments, variables, and reusable code blocks called 'words' to structure and simplify complex scripts.

#7about 3 minutes

How to implement loops through compile-time unrolling

Since Bitcoin Script lacks native loop opcodes, loops can be implemented at compile time by unrolling the code, which repeats the script body a specified number of times.

#8about 2 minutes

Dynamic script generation with compile-time functions

The 'funk' keyword executes a function at compile time, enabling dynamic script generation based on the values of known inputs before runtime.

#9about 6 minutes

Building a dynamic byte reversal function

A practical example demonstrates creating a byte reversal script that dynamically adapts its loop count based on the input's length, calculated at compile time.

#10about 10 minutes

Q&A on script optimization, tooling, and advanced concepts

The session concludes with answers to audience questions on hardware acceleration, data limits, OP_CODESEPARATOR, and the future of the demonstrated scripting tool.

Related jobs
Jobs that call for the skills explored in this talk.

Software Engineer

tree-IT GmbH
Bad Neustadt an der Saale, Germany

Remote
Intermediate
Senior

Featured Partners

From learning to earning

Jobs that call for the skills explored in this talk.

Rust and GoLang

Rust and GoLang

NHe4a GmbH
Karlsruhe, Germany

Remote
55-65K
Intermediate
Senior
Go
Rust