# CompactSize

Utility functions for [Bitcoin's CompactSize](https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer) variable-length integer encoding.

## Examples

Below are some examples demonstrating common usages of the `CompactSize` module:

* [Encoding](#encoding)

* [Decoding](#decoding)

### Encoding

```ts twoslash
import { CompactSize } from 'ox'

const bytes = CompactSize.toBytes(65535)
```

### Decoding

```ts twoslash
import { CompactSize } from 'ox'

const { value, size } = CompactSize.fromBytes(
  new Uint8Array([0xfd, 0xff, 0xff])
)
```

## Functions

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`CompactSize.fromBytes`](/api/CompactSize/fromBytes) | Decodes a CompactSize-encoded value from [`Bytes.Bytes`](/api/Bytes/types#bytes). |
| [`CompactSize.fromHex`](/api/CompactSize/fromHex) | Decodes a CompactSize-encoded value from [`Hex.Hex`](/api/Hex/types#hex). |
| [`CompactSize.toBytes`](/api/CompactSize/toBytes) | Encodes an integer using Bitcoin's CompactSize variable-length encoding. |
| [`CompactSize.toHex`](/api/CompactSize/toHex) | Encodes an integer using Bitcoin's CompactSize variable-length encoding and returns it as [`Hex.Hex`](/api/Hex/types#hex). |

## Errors

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`CompactSize.InsufficientBytesError`](/api/CompactSize/errors#compactsizeinsufficientbyteserror) | Thrown when there are insufficient bytes to decode a CompactSize value. |
| [`CompactSize.InvalidValueError`](/api/CompactSize/errors#compactsizeinvalidvalueerror) | Thrown when a CompactSize input is not a safe integer. |
| [`CompactSize.NegativeValueError`](/api/CompactSize/errors#compactsizenegativevalueerror) | Thrown when a CompactSize value is negative. |
| [`CompactSize.NonMinimalEncodingError`](/api/CompactSize/errors#compactsizenonminimalencodingerror) | Thrown when a CompactSize value is encoded non-minimally. |
