delvingbitcoin

BTC Lisp as an alternative to Script

BTC Lisp as an alternative to Script

Original Postby ZmnSCPxj

Posted on: March 21, 2024 00:19 UTC

In the realm of programming language theory, particularly with Scheme (a variant of Lisp), a significant concept is the implementation of Scheme interpreters as compilers targeting stack virtual machines.

This approach allows for functions to capture external variables, not explicitly defined within them or through let forms, compiling these into arrays of values known as "closures" or "environments." This mechanism is crucial for optimizing virtual machine operations, such as in chialisp, where binary trees can be converted into arrays for efficient environment lookups. Stack-based implementations facilitate the creation of closures by manipulating items on the stack and introducing operations that interact with the "current environment," enhancing code simplicity and reducing the need for extensive stack modifications.

Moreover, the discussion extends into Bitcoin SCRIPT's limitations regarding variable access, highlighting how accessing both captured variables (like public keys within the scriptPubKey) and argument variables (within the witness) necessitates complex stack operations. The proposal suggests introducing operations for loading items into and accessing items from a "current environment." This would alleviate the need for intricate stack manipulations while retaining SCRIPT's functionality. By adopting such an approach, scripts could become more straightforward, mirroring the simplicity found in stack-based languages like Lisp, where expressions are compiled into reverse polish notation for efficient execution.

The concept of softfork semantics introduces an innovative method for adding new opcodes to Bitcoin without the constraints previously imposed by the use of OP_NOP. The introduction of an OP_EVALINSOFTFORK operation enables the replacement of OP_NOP, allowing for the addition of opcodes that can manipulate the stack. This operation works by taking a softfork identifier, a script to run under the specified softfork, and a number dictating additional stack items to initialize with. Such a mechanism permits the evaluation of scripts under new rules without affecting the outer script's stack, thereby facilitating backward compatibility and enabling the potential for arbitrary looping within scripts. This approach not only circumvents the limitations of OP_NOP but also aligns with economic majority signaling strategies, offering a flexible pathway for activating new opcodes that influence stack behavior.