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.

Featured Partners

Related Articles

View all articles
BR
Benjamin Ruschin
Boring Tech Is What Matters
Every year, the Stack Overflow Developer Survey gives us an insight into the state of the industry, the tools and tech that developers love or loathe, and what’s changed from the year before. Some of the headlines that came out of the 2025 results w...
Boring Tech Is What Matters

From learning to earning

Jobs that call for the skills explored in this talk.

DevOps Engineer

Blockstream
Zürich, Switzerland

Intermediate
Go
Bash
Azure
DevOps
Python
+13
Product Owner

Blockstream
Geneva, Switzerland

Intermediate
Go
API
Java
Rust
Azure
+8
Product Owner

Blockstream
Zürich, Switzerland

Intermediate
Go
API
Java
Rust
Azure
+8
Software Engineer

Code Healers LLC
Hinesville, United States of America

Remote
40-50K
Intermediate
Senior
PHP
.NET
React
+2
Software Developer

Code Healers LLC
Hinesville, United States of America

Remote
25-35K
Intermediate
React
Python
JavaScript
+2