Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions .markdownlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Markdownlint configuration for XRPL Standards repository
# Rule reference: https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md

default: true

# MD001: Heading levels should only increment by one level at a time
# Disabled: Specs often skip heading levels for document structure
MD001: false

# MD003: Heading style - enforce ATX style (# Heading)
MD003:
style: atx

# MD004: Unordered list style - enforce dashes
MD004:
style: dash

# MD007: Unordered list indentation - 2 spaces
MD007:
indent: 2

# MD013: Line length limit
# Disabled: Technical specs often have long lines (tables, URLs, code, paragraphs)
MD013: false

# MD024: Multiple headings with the same content
# Configured: Only check siblings (allows same heading in different sections)
MD024:
siblings_only: true

# MD025: Multiple top-level headings in the same document
# Disabled: Some specs have multiple H1s for structure
MD025: false

# MD028: Blank line inside blockquote
# Enabled: Multi-paragraph blockquotes are valid
MD028: true

# MD029: Ordered list item prefix (1. 2. 3. vs 1. 1. 1.)
# Disabled: Existing specs use both styles and occasionally split ordered lists
MD029: false

# MD030: Spaces after list markers
# Enabled: Autofixable spacing rule
MD030:
ul_single: 1
ol_single: 1
ul_multi: 1
ol_multi: 1

# MD033: Inline HTML
# Disabled: Specs use HTML plus angle-bracket placeholders and metadata
MD033: false

# MD034: Bare URL used
# Disabled: Bare URLs are common in technical references
MD034: false

# MD036: Emphasis used instead of a heading
# Disabled: Specs use bold text for sub-section labels
MD036: false

# MD038: Spaces inside code span elements
# Enabled: Autofixable spacing rule
MD038: true

# MD039: Spaces inside link text
# Enabled: Autofixable spacing rule
MD039: true

# MD040: Fenced code blocks should have a language specified
# Disabled: Many existing examples intentionally omit syntax highlighting
MD040: false

# MD041: First line in file should be a top-level heading
# Disabled: XLS specs start with HTML metadata block
MD041: false

# MD045: Images should have alternate text (alt text)
# Disabled: Existing diagrams do not all have alt text
MD045: false

# MD051: Link fragments should be valid
# Disabled: Existing specs use complex generated heading anchors
MD051: false

# MD055: Table pipe style
# Enabled: Autofixable table formatting rule
MD055:
style: leading_and_trailing

# MD058: Tables should be surrounded by blank lines
# Enabled: Autofixable table formatting rule
MD058: true

# MD059: Link text should be descriptive
# Disabled: "here" links are common in existing specs
MD059: false

# MD060: Table column style (alignment)
# Configured: Keep tables compact with readable delimiter alignment
MD060:
style: compact
aligned_delimiter: true
2 changes: 2 additions & 0 deletions .markdownlintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
_site/
node_modules/
20 changes: 20 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
repos:
- repo: local
hooks:
- id: normalize-markdown-tables
name: normalize Markdown tables
entry: python3 scripts/normalize_markdown_tables.py
language: system
files: \.md$

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # frozen: v6.0.0
hooks:
Expand All @@ -14,3 +22,15 @@ repos:
rev: c2bc67fe8f8f549cc489e00ba8b45aa18ee713b1 # frozen: v3.8.1
hooks:
- id: prettier
exclude: \.md$

- repo: https://github.com/igorshubovych/markdownlint-cli
rev: 76b3d32d3f4b965e1d6425253c59407420ae2c43 # frozen: v0.47.0
hooks:
- id: markdownlint
args:
- --fix
- --config
- .markdownlint.yaml
- --ignore-path
- .markdownlintignore
2 changes: 2 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Markdown files are linted by markdownlint instead
*.md
17 changes: 17 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,20 @@ The roles and responsibilities around XLS authorship and editing are defined in
- Do **not** decide which technical direction is “correct” when there are competing proposals; their role is editorial and administrative.

If you are unsure how to proceed at any step, open a Discussion or PR and explicitly ask for help from the XLS Editors; they will guide you according to XLS-1.

## 8. Local linting

This repository uses [pre-commit](https://pre-commit.com/) to run formatting and Markdown checks before changes are committed. To set it up locally:

```bash
pip install pre-commit
pre-commit install
```

To run the same checks that CI runs:

```bash
pre-commit run --all-files
```

Markdown files are checked with `markdownlint-cli` using [.markdownlint.yaml](./.markdownlint.yaml). The CI workflow pins the same markdownlint version as [.pre-commit-config.yaml](./.pre-commit-config.yaml).
2 changes: 1 addition & 1 deletion XLS-0001-xls-process/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ This will be codified in a template later.

##### 4.4.3.1. Serialized Types

`Serialized Types` documents one or more new "serialized types" (or STypes) introduced or modified by the specification. Most specifications will not need such sections, as the[ existing types](https://xrpl.org/docs/references/protocol/binary-format#type-list) are generally enough. Each SType must be in its own numbered section, with the following subsections:
`Serialized Types` documents one or more new "serialized types" (or STypes) introduced or modified by the specification. Most specifications will not need such sections, as the [existing types](https://xrpl.org/docs/references/protocol/binary-format#type-list) are generally enough. Each SType must be in its own numbered section, with the following subsections:

###### 4.4.3.1.1. `SType` value

Expand Down
56 changes: 28 additions & 28 deletions XLS-0005-tagged-addresses/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,21 +93,21 @@ The tag shall always be encoded as a little endian two's complement 64 bit integ

The standard proposes using different prefixes, making addresses encoded for use on the mainnet have a different initial character than addresses encoded for use on the testnet, making it possible for users and tools to differentiate addresses.

| Network | Prefix | Initial Character |
| --------- | ----------- | ----------------- |
| _mainnet_ | `0x05 0x44` | `X` |
| _testnet_ | `0x04 0x93` | `T` |
| Network | Prefix | Initial Character |
| ------- | ------ | ----------------- |
| _mainnet_ | `0x05 0x44` | `X` |
| _testnet_ | `0x04 0x93` | `T` |

It is important to note: an address encoded for mainnet use could still be used on the testnet and vice versa; tools that understand the new format are encouraged to implement protections.

### Flags

Adding a _flags_ field allow us to make this format slightly more flexible than it would otherwise be. At this time, only 3 flags are specified, one of which is reserved and may not be used in practice.

| Name | Value | Description |
| -------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `NO_TAG` | `0x00` | The address is untagged and treated as if no tag had been specified. The remaining 8 bytes **MUST** be zero. |
| `TAG_32` | `0x01` | The address contains a 32-bit tag. The tag is encoded in little-endian form in the next 4 bytes. The remaining 4 bytes **MUST** be zero. |
| Name | Value | Description |
| ---- | ----- | ----------- |
| `NO_TAG` | `0x00` | The address is untagged and treated as if no tag had been specified. The remaining 8 bytes **MUST** be zero. |
| `TAG_32` | `0x01` | The address contains a 32-bit tag. The tag is encoded in little-endian form in the next 4 bytes. The remaining 4 bytes **MUST** be zero. |
| `TAG_64` | `0x02` | The address contains a 64-bit tag. The tag is encoded in little-endian form in the next 8 bytes. This flag is reserved in case 64-bit tags ever become supported. |

#### Caution
Expand All @@ -122,31 +122,31 @@ Below we present how the classic address `rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf` wo

#### Encoding for Main Net

| Tag | Address | Raw Bytes |
| ---------- | --------------------------------------------------- | -------------------------------------------------------------- |
| <none> | **XVLhHMPHU98es4dbozjVtdWzVrDjtV5fdx1mHp98tDMoQXb** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A000000000000000000` |
| 0 | **XVLhHMPHU98es4dbozjVtdWzVrDjtV8AqEL4xcZj5whKbmc** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A010000000000000000` |
| 1 | **XVLhHMPHU98es4dbozjVtdWzVrDjtV8xvjGQTYPiAx6gwDC** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A010100000000000000` |
| 2 | **XVLhHMPHU98es4dbozjVtdWzVrDjtV8zpDURx7DzBCkrQE7** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A010200000000000000` |
| 32 | **XVLhHMPHU98es4dbozjVtdWzVrDjtVoYiC9UvKfjKar4LJe** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A012000000000000000` |
| 276 | **XVLhHMPHU98es4dbozjVtdWzVrDjtVoKj3MnFGMXEFMnvJV** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A011401000000000000` |
| 65591 | **XVLhHMPHU98es4dbozjVtdWzVrDjtVozpjdhPQVdt3ghaWw** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A013700010000000000` |
| 16781933 | **XVLhHMPHU98es4dbozjVtdWzVrDjtVqrDUk2vDpkTjPsY73** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A016D12000100000000` |
| Tag | Address | Raw Bytes |
| --- | ------- | --------- |
| <none> | **XVLhHMPHU98es4dbozjVtdWzVrDjtV5fdx1mHp98tDMoQXb** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A000000000000000000` |
| 0 | **XVLhHMPHU98es4dbozjVtdWzVrDjtV8AqEL4xcZj5whKbmc** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A010000000000000000` |
| 1 | **XVLhHMPHU98es4dbozjVtdWzVrDjtV8xvjGQTYPiAx6gwDC** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A010100000000000000` |
| 2 | **XVLhHMPHU98es4dbozjVtdWzVrDjtV8zpDURx7DzBCkrQE7** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A010200000000000000` |
| 32 | **XVLhHMPHU98es4dbozjVtdWzVrDjtVoYiC9UvKfjKar4LJe** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A012000000000000000` |
| 276 | **XVLhHMPHU98es4dbozjVtdWzVrDjtVoKj3MnFGMXEFMnvJV** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A011401000000000000` |
| 65591 | **XVLhHMPHU98es4dbozjVtdWzVrDjtVozpjdhPQVdt3ghaWw** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A013700010000000000` |
| 16781933 | **XVLhHMPHU98es4dbozjVtdWzVrDjtVqrDUk2vDpkTjPsY73** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A016D12000100000000` |
| 4294967294 | **XVLhHMPHU98es4dbozjVtdWzVrDjtV1kAsixQTdMjbWi39u** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A01FEFFFFFF00000000` |
| 4294967295 | **XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi** | `44AA066C988C712815CC37AF71472B7CBBBD4E2A0A01FFFFFFFF00000000` |

#### Encoding for Testnet

| Tag | Address | Raw Bytes |
| ---------- | --------------------------------------------------- | -------------------------------------------------------------- |
| _none_ | **TVE26TYGhfLC7tQDno7G8dGtxSkYQn49b3qD26PK7FcGSKE** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A000000000000000000` |
| 0 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnSy8RHqGHoGJ59spi2** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A010000000000000000` |
| 1 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnSz1uDimDdPYXzSpyw** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A010100000000000000` |
| 2 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnTryP9tG9TW8GeMBmd** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A010200000000000000` |
| 32 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnT2oqaCDzMEuCDAj1j** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A012000000000000000` |
| 276 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnTMgJJYfAbsiPsc6Zg** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A011401000000000000` |
| 65591 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQn7ryu2W6njw7mT1jmS** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A013700010000000000` |
| 16781933 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnVsw45sDtGHhLi27Qa** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A016D12000100000000` |
| Tag | Address | Raw Bytes |
| --- | ------- | --------- |
| _none_ | **TVE26TYGhfLC7tQDno7G8dGtxSkYQn49b3qD26PK7FcGSKE** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A000000000000000000` |
| 0 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnSy8RHqGHoGJ59spi2** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A010000000000000000` |
| 1 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnSz1uDimDdPYXzSpyw** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A010100000000000000` |
| 2 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnTryP9tG9TW8GeMBmd** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A010200000000000000` |
| 32 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnT2oqaCDzMEuCDAj1j** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A012000000000000000` |
| 276 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnTMgJJYfAbsiPsc6Zg** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A011401000000000000` |
| 65591 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQn7ryu2W6njw7mT1jmS** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A013700010000000000` |
| 16781933 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnVsw45sDtGHhLi27Qa** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A016D12000100000000` |
| 4294967294 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnX8tDFQ53itLNqs6vU** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A01FEFFFFFF00000000` |
| 4294967295 | **TVE26TYGhfLC7tQDno7G8dGtxSkYQnXoy6kSDh6rZzApc69** | `93AA066C988C712815CC37AF71472B7CBBBD4E2A0A01FFFFFFFF00000000` |

Expand Down
18 changes: 9 additions & 9 deletions XLS-0007-deletable-accounts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -333,10 +333,10 @@ Additionally, once the amendment passes, the starting value of the `Sequence` nu

**Parameters**

| Field | Style | Description |
| ---------------- | -------- | ---------------------------------------------------------------- |
| `Account` | Required | Account that is being deleted |
| `Destination` | Required | Account that receives remaining XRP from deleted Account |
| Field | Style | Description |
| ----- | ----- | ----------- |
| `Account` | Required | Account that is being deleted |
| `Destination` | Required | Account that receives remaining XRP from deleted Account |
| `DestinationTag` | Optional | Destination tag that receives remaining XRP from deleted Account |

The following example is an `AccountDelete` transaction that deletes account "a" and sends the remaining XRP to another account, [`rrrrrrrrrrrrrrrrrrrrrhoLvTp`](https://xrpl.org/accounts.html#special-addresses).
Expand Down Expand Up @@ -461,8 +461,8 @@ The "buffer" works by providing transactions that no one cares if they fail. If

The Ripple Data team examined a recent ledger and found a total of three accounts on the Main Net where the `AccountRoot` `Sequence` field got ahead of the `LedgerSequence`. Here are the transactions where the differences were largest for those three accounts. Note that the table is wide and you need to scroll left and right to see all the contents.

| Account | Transaction Hash | Tx Sequence | Ledger Index | Ahead By |
| :--------------------------------- | ---------------------------------------------------------------: | ----------: | -----------: | ---------: |
| rBxy23n7ZFbUpS699rFVj1V9ZVhAq6EGwC | D739D41D5C899E1FC9EC59B92B29F2B6FBD4C4259EA3395CBBA31511121EFE4A | 52,235,732 | 47,915,816 | 4,319,916 |
| rEr3hxu5aim5tDWwH7H8BK47K91tR8c7FM | F077665E0BE74A22F8E098561B83DDAD7AD9B83E95257CCEFF69741F14DFBCA1 | 80,387,155 | 43,829,273 | 36,557,882 |
| rH3uSRUJYoJhK4kL9x1mzUhDimKE2n3oT6 | 2607AEE01EFE10CAF698E1576FD3430A6FD35B86BF78EA49D2BFB03E8D918D75 | 47,797,501 | 43,830,353 | 3,967,148 |
| Account | Transaction Hash | Tx Sequence | Ledger Index | Ahead By |
| :------ | ---------------: | ----------: | -----------: | -------: |
| rBxy23n7ZFbUpS699rFVj1V9ZVhAq6EGwC | D739D41D5C899E1FC9EC59B92B29F2B6FBD4C4259EA3395CBBA31511121EFE4A | 52,235,732 | 47,915,816 | 4,319,916 |
| rEr3hxu5aim5tDWwH7H8BK47K91tR8c7FM | F077665E0BE74A22F8E098561B83DDAD7AD9B83E95257CCEFF69741F14DFBCA1 | 80,387,155 | 43,829,273 | 36,557,882 |
| rH3uSRUJYoJhK4kL9x1mzUhDimKE2n3oT6 | 2607AEE01EFE10CAF698E1576FD3430A6FD35B86BF78EA49D2BFB03E8D918D75 | 47,797,501 | 43,830,353 | 3,967,148 |
Loading
Loading