# Class BSV::Script::Stack <a id="class-BSV-Script-Stack"></a>

**Inherits:** `Object`

Script execution stack providing push/pop/peek operations for bytes, integers
({ScriptNumber}), and booleans.

Implements Forth-like stack manipulation operations (dup, drop, swap, rot,
over, pick, roll, tuck) parameterised by count for the multi-element opcodes
(OP_2DUP, OP_2SWAP, etc.).

A 32 MB aggregate memory cap is enforced on every push, matching the ts-sdk
behaviour. This provides a natural bound for O(n²) opcodes such as OP_MUL
operating on large script numbers.

## Constants
### `MAX_MEMORY_BYTES` <a id="constant-MAX_MEMORY_BYTES"></a> <a id="MAX_MEMORY_BYTES-constant"></a>
Maximum total bytes held across all stack items (32 MB).

## Public Class Methods
### `cast_bool(bytes)` <a id="method-c-cast_bool"></a> <a id="cast_bool-class_method"></a>
Bitcoin consensus boolean: false if empty, all-zero, or negative zero (0x80
last byte).

## Public Instance Methods
### `clear()` <a id="method-i-clear"></a> <a id="clear-instance_method"></a>
Not documented.

### `depth()` <a id="method-i-depth"></a> <a id="depth-instance_method"></a>
--- Info ---

### `drop_n(count)` <a id="method-i-drop_n"></a> <a id="drop_n-instance_method"></a>
Remove the top N items.

### `dup_n(count)` <a id="method-i-dup_n"></a> <a id="dup_n-instance_method"></a>
Duplicate the top N items.

### `empty?()` <a id="method-i-empty-3F"></a> <a id="empty?-instance_method"></a>
- **@return** [Boolean]

### `initialize()` <a id="method-i-initialize"></a> <a id="initialize-instance_method"></a>
- **@return** [Stack] a new instance of Stack

### `nip_n(idx)` <a id="method-i-nip_n"></a> <a id="nip_n-instance_method"></a>
Remove item at offset idx from top (0 = top).

### `over_n(count)` <a id="method-i-over_n"></a> <a id="over_n-instance_method"></a>
Copy N items from 2N depth to top. OP_OVER (n=1): [x1 x2] -> [x1 x2 x1]
OP_2OVER (n=2): [x1 x2 x3 x4] -> [x1 x2 x3 x4 x1 x2]

### `peek_bool(idx = 0)` <a id="method-i-peek_bool"></a> <a id="peek_bool-instance_method"></a>
Not documented.

### `peek_bytes(idx = 0)` <a id="method-i-peek_bytes"></a> <a id="peek_bytes-instance_method"></a>
--- Peek ---

### `peek_int(idx = 0, max_length: = ScriptNumber::MAX_BYTE_LENGTH, require_minimal: = true)` <a id="method-i-peek_int"></a> <a id="peek_int-instance_method"></a>
Decode a stack item as a {ScriptNumber} without removing it.
- **@param** `idx` [Integer] depth from the top (0 = top).
- **@param** `max_length` [Integer] maximum allowed byte length. Defaults to
{ScriptNumber::MAX_BYTE_LENGTH} (750,000 bytes), matching Bitcoin's
+nMaxNumSize+ constant.
- **@param** `require_minimal` [Boolean] whether to enforce minimal encoding.
Defaults to +true+ — post-Genesis BSV requires minimal encoding.

### `pick_n(idx)` <a id="method-i-pick_n"></a> <a id="pick_n-instance_method"></a>
Copy item at index n to top (0 = top).

### `pop_bool()` <a id="method-i-pop_bool"></a> <a id="pop_bool-instance_method"></a>
Not documented.

### `pop_bytes()` <a id="method-i-pop_bytes"></a> <a id="pop_bytes-instance_method"></a>
--- Pop ---

### `pop_int(max_length: = ScriptNumber::MAX_BYTE_LENGTH, require_minimal: = true)` <a id="method-i-pop_int"></a> <a id="pop_int-instance_method"></a>
Decode the top stack item as a {ScriptNumber}.
- **@param** `max_length` [Integer] maximum allowed byte length. Defaults to
{ScriptNumber::MAX_BYTE_LENGTH} (750,000 bytes), matching Bitcoin's
+nMaxNumSize+ constant. Post-Genesis BSV makes this configurable at
the node level; the SDK uses the standard default.
- **@param** `require_minimal` [Boolean] whether to enforce minimal encoding.
Defaults to +true+ — post-Genesis BSV requires minimal encoding for
script numbers.

### `push_bool(val)` <a id="method-i-push_bool"></a> <a id="push_bool-instance_method"></a>
Not documented.

### `push_bytes(data)` <a id="method-i-push_bytes"></a> <a id="push_bytes-instance_method"></a>
--- Push ---

### `push_int(script_number)` <a id="method-i-push_int"></a> <a id="push_int-instance_method"></a>
Not documented.

### `roll_n(idx)` <a id="method-i-roll_n"></a> <a id="roll_n-instance_method"></a>
Move item at index n to top (0 = top). Memory usage is unchanged.

### `rot_n(count)` <a id="method-i-rot_n"></a> <a id="rot_n-instance_method"></a>
Rotate: move the bottom N of the top 3N items to the top. OP_ROT (n=1): [x1 x2
x3] -> [x2 x3 x1] OP_2ROT (n=2): [x1 x2 x3 x4 x5 x6] -> [x3 x4 x5 x6 x1 x2]

### `swap_n(count)` <a id="method-i-swap_n"></a> <a id="swap_n-instance_method"></a>
Swap the top N items with the next N. OP_SWAP (n=1): [x1 x2] -> [x2 x1]
OP_2SWAP (n=2): [x1 x2 x3 x4] -> [x3 x4 x1 x2]

### `to_a()` <a id="method-i-to_a"></a> <a id="to_a-instance_method"></a>
Not documented.

### `tuck()` <a id="method-i-tuck"></a> <a id="tuck-instance_method"></a>
Copy top and insert before second: [x1 x2] -> [x2 x1 x2]
