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

**Inherits:** `Object`
**Includes:** `Comparable`

Bitcoin script number: arbitrary-precision integer with sign-magnitude
little-endian byte encoding.

Script numbers use a specialised encoding where the sign bit occupies the MSB
of the last byte, and the magnitude is stored little-endian. This class
handles encoding/decoding, minimal encoding validation, and arithmetic
operations as required by the script interpreter.

## Constants
### `INT32_MAX` <a id="constant-INT32_MAX"></a> <a id="INT32_MAX-constant"></a>
Maximum 32-bit signed integer value.

### `INT32_MIN` <a id="constant-INT32_MIN"></a> <a id="INT32_MIN-constant"></a>
Minimum 32-bit signed integer value.

### `MAX_BYTE_LENGTH` <a id="constant-MAX_BYTE_LENGTH"></a> <a id="MAX_BYTE_LENGTH-constant"></a>
Maximum byte length for script numbers (post-Genesis: 750 KB).

## Attributes
### `value` [R] <a id="attribute-i-value"></a> <a id="value-instance_method"></a>
- **@return** [Integer] the numeric value

## Public Class Methods
### `from_bytes(bytes, max_length: = MAX_BYTE_LENGTH, require_minimal: = false)` <a id="method-c-from_bytes"></a> <a id="from_bytes-class_method"></a>
Decode little-endian sign-magnitude bytes into a ScriptNumber.

Encoding: little-endian magnitude with sign bit in the MSB of the last byte.
     127 -> [0x7f]
    -127 -> [0xff]
     128 -> [0x80 0x00]
    -128 -> [0x80 0x80]
     256 -> [0x00 0x01]
    -256 -> [0x00 0x81]

### `minimally_encode(data)` <a id="method-c-minimally_encode"></a> <a id="minimally_encode-class_method"></a>
Strip trailing zero-padding while preserving sign.

## Public Instance Methods
### `%(other)` <a id="method-i--25"></a> <a id="%-instance_method"></a>
Remainder with sign of dividend (matching Bitcoin consensus).
- **@raise** [ScriptError]

### `*(other)` <a id="method-i--2A"></a> <a id="*-instance_method"></a>
Not documented.

### `+(other)` <a id="method-i--2B"></a> <a id="+-instance_method"></a>
--- Arithmetic (returns new ScriptNumber) ---

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

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

### `/(other)` <a id="method-i--2F"></a> <a id="/-instance_method"></a>
Truncated-toward-zero division (matching Bitcoin consensus).
- **@raise** [ScriptError]

### `<=>(other)` <a id="method-i--3C-3D-3E"></a> <a id="<=>-instance_method"></a>
Not documented.

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

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

### `to_bytes()` <a id="method-i-to_bytes"></a> <a id="to_bytes-instance_method"></a>
Encode as little-endian sign-magnitude bytes.

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

### `to_i32()` <a id="method-i-to_i32"></a> <a id="to_i32-instance_method"></a>
Clamp to int32 range (for opcodes that need bounded indices).

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