Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
54818c1
docs(wallet): document the cross-chain order form
jdogresorg Sep 12, 2026
958644b
Merge remote-tracking branch 'origin/master' into level-develop
jdogresorg Sep 12, 2026
f7a7b02
docs(bridge): document XBRIDGE and the cross-chain bridge protocol
jdogresorg Sep 12, 2026
4dae857
docs(indexer): document the bridge settle pass's origin-indexer reads
jdogresorg Sep 12, 2026
785a75b
docs(e2e-test): count the four bridge helper modules
jdogresorg Sep 12, 2026
0499ba0
ci: check out xchain-indexer so the flag-day literals suite runs on G…
jdogresorg Sep 12, 2026
01da331
docs(protocol): the bridge activation is keyed per chain
jdogresorg Sep 12, 2026
61b692d
docs(policy): state that testnet activations arm at the tip read at t…
jdogresorg Sep 12, 2026
30de7f7
Publish the mirror admission-height constants and the anchor-attest a…
jdogresorg Sep 12, 2026
93ff253
docs: correct the bridge-denial claims across the overview pages
jdogresorg Sep 13, 2026
3272e17
docs: correct protocol and component claims that contradicted the code
jdogresorg Sep 13, 2026
7a97cdd
docs(e2e-test): count the bridge rail venue helper in the helper layer
jdogresorg Sep 13, 2026
a422e6f
test(env): lower the utxo-tracker computed-read baseline to the seven…
jdogresorg Sep 13, 2026
27dc8a8
docs(contracts): state that getTokenInfo keys are uppercase
jdogresorg Sep 13, 2026
4767e19
docs(hub): document the admission watermark and cross-chain round lif…
jdogresorg Sep 13, 2026
eb5299d
docs(sync): document the meta-retention interval and status-cache age…
jdogresorg Sep 13, 2026
2d72f6c
test(docs): follow getTokenSupply into the indexer credits mixin
jdogresorg Sep 13, 2026
d697c71
test: repoint indexer readSrc paths to the M3 layout
jdogresorg Sep 13, 2026
19e388e
test: repoint the tip-age escape-hatch guard at the explorer health r…
jdogresorg Sep 13, 2026
6a614d8
test: lower the explorer computed env-read baseline to 7
jdogresorg Sep 14, 2026
69e19d3
docs: name the indexer's renamed responsible-set methods
jdogresorg Sep 13, 2026
9237adc
chore: repoint references to xchain-decoder's renamed files
jdogresorg Sep 14, 2026
6b7e33c
chore: repoint references to xchain-utxo-tracker's renamed files
jdogresorg Sep 14, 2026
87fb4d8
docs: document the decoder's sibling indexer directory variable
jdogresorg Sep 14, 2026
3214e6f
chore: repoint references to xchain-regtest-miner's renamed files
jdogresorg Sep 14, 2026
bc7821f
test: pin the explorer source gates to moved files and fail when one …
jdogresorg Sep 14, 2026
fea31e3
test: count explorer env reads made through its config view
jdogresorg Sep 14, 2026
37103a8
test: tell logger event names from REST error codes in the registry gate
jdogresorg Sep 14, 2026
9d46edb
test: count explorer env reads made through a config accessor
jdogresorg Sep 14, 2026
5d0ac8d
docs: name the explorer coin config modules under src/coin-config
jdogresorg Sep 14, 2026
1b60d5c
chore: repoint references to xchain-node's renamed files
jdogresorg Sep 14, 2026
d6cfbe4
chore: repoint references to xchain-encoder's renamed files
jdogresorg Sep 14, 2026
6702205
docs: document the encoder's replica count and instance lock variables
jdogresorg Sep 14, 2026
873ce3d
chore: repoint references to xchain-sync's renamed files
jdogresorg Sep 14, 2026
3793372
ci: declare the sibling repos the documentation suite reads
jdogresorg Sep 14, 2026
5a61021
test(claims): fail, not skip, when a declared sibling checkout is absent
jdogresorg Sep 14, 2026
2a61913
docs: follow the indexer's moved file paths
jdogresorg Sep 14, 2026
a8c6ceb
test: fail when a settlement claim names a missing action file
jdogresorg Sep 14, 2026
b6b37de
docs: follow the indexer's renamed method names
jdogresorg Sep 14, 2026
1cfa7ff
docs(sdk): document XCHAIN_REQUIRE_SIBLINGS in the configuration refe…
jdogresorg Sep 14, 2026
8196a81
docs: follow the hub's feature-directory layout
jdogresorg Sep 14, 2026
c38d7f7
chore: repoint references to xchain-sdk's renamed files
jdogresorg Sep 14, 2026
09ce086
chore: repoint references to xchain-vm's renamed files
jdogresorg Sep 14, 2026
d02c871
test(claims): resolve the SDK batch-limit module instead of pinning o…
jdogresorg Sep 14, 2026
b2d7316
test(claims): resolve the vm wall-clock and sdk session sources inste…
jdogresorg Sep 14, 2026
4ff8c5c
docs(hub): name the hub database module and renamed methods at their …
jdogresorg Sep 14, 2026
950c714
docs(indexer): name the indexer db, coin, recovery and actions module…
jdogresorg Sep 14, 2026
5783876
docs(vm): name the indexer module that instantiates the VM at its cur…
jdogresorg Sep 14, 2026
242ea2a
chore(env-audit): re-derive the node, sync and indexer computed-read …
jdogresorg Sep 14, 2026
e443c2b
test(claims): read each indexer source fact from its entry and every …
jdogresorg Sep 14, 2026
0e0697e
test(claims): read an indexer handler at whichever spelling the sibli…
jdogresorg Sep 14, 2026
9877561
docs: confirm a container memory cap landed, and a halted decoder now…
jdogresorg Sep 14, 2026
accc9f9
docs(indexer): repoint the migration CLI to src/migration/migrate.js
jdogresorg Sep 14, 2026
8720efe
docs(sdk): document XCHAIN_ALLOW_NO_INDEXER and lower the indexer com…
jdogresorg Sep 14, 2026
10a5b4d
test: read the explorer's database entry and health reader at their m…
jdogresorg Sep 14, 2026
73d86e3
docs(explorer): lower the explorer computed-read baseline to seven
jdogresorg Sep 15, 2026
592e087
test(explorer): read the explorer's split families where the code now…
jdogresorg Sep 15, 2026
e71122b
docs(hub): lower the hub computed-read baseline to 33
jdogresorg Sep 15, 2026
c2f474a
test(explorer): count hand-registered api routes across the class ent…
jdogresorg Sep 15, 2026
685ee9e
test(claims): name both handler spellings when an indexer module is m…
jdogresorg Sep 15, 2026
f598639
docs(explorer): follow the merkle twin to src/consensus
jdogresorg Sep 15, 2026
f974446
docs(hub): lower the hub computed-read baseline to 11
jdogresorg Sep 15, 2026
a729402
docs: follow the hub unit suites into their feature directories
jdogresorg Sep 15, 2026
df5342a
test(siblings): one resolution helper, and XCHAIN_REQUIRE_SIBLINGS=1 …
jdogresorg Sep 15, 2026
acfa298
test(paths): every sibling source path the documentation cites must e…
jdogresorg Sep 15, 2026
bc74408
test(sdk): read the wallet session entry with its parts, so the split…
jdogresorg Sep 15, 2026
d171f8d
chore(ratchet): lower the hub computed-read ceiling to the measured 5
jdogresorg Sep 15, 2026
6a51c7e
docs(hub): follow the hub's underscore drop in three prose mentions
jdogresorg Sep 15, 2026
54619d9
docs(utxo-tracker): describe the split blockchain connector facade an…
jdogresorg Sep 15, 2026
fa76816
test(gate): refuse a test run that exits before every subtest registers
jdogresorg Sep 15, 2026
9efac72
docs(explorer): follow the openapi coverage suite into test/unit/http
jdogresorg Sep 15, 2026
cdac38d
docs(decoder): dry run needs no reason, and one halt marker means che…
jdogresorg Sep 15, 2026
8479e35
docs(utxo-tracker): state the undo window per network and the halted …
jdogresorg Sep 15, 2026
3df76b8
docs(validator): wire the Dogecoin read every BTC indexer and hub needs
jdogresorg Sep 15, 2026
c9d26c2
docs(operations): Pi 5 cgroup firmware clause, page-cache disk model,…
jdogresorg Sep 15, 2026
ae48c8c
docs(config): document XCHAIN_NODE_ALLOW_NO_DOGE_READ and EXPLORER_FE…
jdogresorg Sep 15, 2026
cc6ed48
docs(node): mark clear-reorg-halt --reason optional under --dry-run
jdogresorg Sep 15, 2026
d4ec4fd
test: read the encoder multisig size constant from either the entry o…
jdogresorg Sep 15, 2026
aae1106
fix(env-var-doc-coverage): lower explorer and indexer COMPUTED_READ_B…
jdogresorg Sep 15, 2026
272ada4
docs(indexer): follow the state-commitment module to src/state_commit…
jdogresorg Sep 15, 2026
880e54e
chore(indexer): repoint the Rollback file-map entry at src/rollback/i…
jdogresorg Sep 15, 2026
e5bd1ba
docs(indexer): repoint the migrate CLI path to src/db/migration/migra…
jdogresorg Sep 15, 2026
341b73d
chore(env-docs): raise the sync computed-read baseline for the call-t…
jdogresorg Sep 15, 2026
bd91d74
chore(env-docs): re-measure hub, indexer and sync computed-read basel…
jdogresorg Sep 16, 2026
6988f26
docs(env): document the carrier logic pin's sibling-dir overrides and…
jdogresorg Sep 16, 2026
671a8c6
test(sdk-surface): read the action surface from the split XChainSDK p…
jdogresorg Sep 16, 2026
a4ea72f
docs(vm): name the gateway_emit split parts in the architecture table
jdogresorg Sep 16, 2026
a10178b
feat(registry): W3 twin shim copies over a local gate registry (D72, …
jdogresorg Sep 16, 2026
f23fd87
docs(registry): read the indexer's part-file registry in the flag-day…
jdogresorg Sep 16, 2026
5c6f02f
docs(explorer): document the three regtest arming variables and take …
jdogresorg Sep 16, 2026
38b486a
test(paths): floor the sibling-path corpus by what the venue can clas…
jdogresorg Sep 16, 2026
b5893c5
docs(protocol): cite registry rows and the moved gate modules for the…
jdogresorg Sep 16, 2026
41c0f6b
chore(env-doc): lower the hub, indexer and sync computed-read baselin…
jdogresorg Sep 16, 2026
11014a2
release: v0.19.0
jdogresorg Sep 16, 2026
e656460
release: v0.19.0 ladder re-cut
jdogresorg Sep 16, 2026
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
41 changes: 41 additions & 0 deletions .ci-siblings
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Repos the documentation suite needs checked out BESIDE it on the CI venue.
#
# Declaring a sibling here is what makes its cross-repo guards actually run. An
# UNdeclared sibling is not a neutral omission: every guard written against it
# resolves with existsSync, calls this.skip(), and the gate still prints PASS,
# so the run reports green having exercised none of them. Measured 2026-09-13,
# with no roster the venue ran 397 passing / 60 skipped; with every repo below
# beside it the same tree runs 485 tests, and the only skips left are the three
# placeholder vector gaps in test/vectors.test.js and the LikeC4 topology model,
# which lives in the platform workspace rather than in any sibling repo.
#
# ci-dispatch.sh ships each of these at the pushed branch (falling back to its
# origin/master, then local HEAD) and REFUSES the push if one is not a checkout
# beside this repo, so a declared sibling can never be silently absent.

# The activation registry behind the generated flag-day page, the action
# activation model, XBRIDGE registration, supply/settlement/dividend source
# facts, fee and batch limits, and the schema-table coverage of database.md.
xchain-indexer
# The consensus wall-clock budget the VM pages quote.
xchain-vm
# Endpoint counts, the ExplorerStatus schema, the REST error-code registry,
# contract-state proof availability and the regtest tip-age escape hatch.
xchain-explorer
# The multisign capacity figure the corpus pages publish.
xchain-encoder
# The SDK action surface and the canonical batch limits.
xchain-sdk
# The signer surface and release-key fingerprint channel one (SECURITY.md).
xchain-wallet
# The docs-site slug rule and release-key fingerprint channel two.
xchain-websites
# Schema-table coverage of the decoder and hub database pages.
xchain-decoder
xchain-hub
# The environment-variable coverage fleet floor, which applies only when every
# service component it scans is present (lib/env-var-doc-coverage.js COMPONENTS).
xchain-node
xchain-regtest-miner
xchain-sync
xchain-utxo-tracker
38 changes: 36 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ name: CI
# A drift in any of those is a wrong answer given to an implementer, and until
# now nothing ran on a push to catch it.
#
# Hermetic: no sibling checkouts, no services, no secrets.
# No services, no secrets, and exactly one sibling checkout (xchain-indexer,
# read as text by the flag-day literals suite; see that step).
#
# The hermeticity has a cost worth naming rather than rediscovering:
# The near-hermeticity has a cost worth naming rather than rediscovering:
# a test that needs a SIBLING repo cannot run here, and node:test prints a skip
# as a pass. test/schema-table-coverage.test.js is the one that bit: its
# cross-repo half resolves xchain-decoder/-indexer/-hub beside this checkout,
Expand Down Expand Up @@ -62,6 +63,33 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
path: xchain-documentation

# test/flag-day-literals.test.js reads xchain-indexer/src/protocol_changes.js
# as a SIBLING checkout (../xchain-indexer relative to this repo's root,
# per bin/generate-flag-days.js) and quietly SKIPS its drift and
# completeness checks when that sibling is absent, which is exactly what
# every push here had been doing: the generated protocol/flag-days.md page
# could rot against the indexer's registry with this workflow green the
# whole way. Checked out beside xchain-documentation, not nested, so the
# generator's '../xchain-indexer' resolution finds it.
#
# Ref: the release branch on a release head (a PR from release/*), the
# pushed/targeted branch otherwise. Matches the ref logic xchain-e2e-test's
# CI already uses for the same sibling. The indexer repo is public, so the
# default token reads it and this repo keeps holding no secrets.
#
# Only ONE sibling is checked out. The suites that read a sibling skip the
# ones that are absent, and the env-var coverage suite applies its fleet
# floor only when every sibling is present, so a partial set is judged on
# what is here rather than accused of a broken scanner.
- name: Check out xchain-indexer (flag-day registry read by the literals suite)
uses: actions/checkout@v4
with:
repository: XChain-Platform/xchain-indexer
ref: ${{ startsWith(github.head_ref, 'release/') && github.head_ref || (github.ref == 'refs/heads/master' && 'master' || 'develop') }}
path: xchain-indexer

# Node 22 exactly: the platform's suites require it, and on some repos an
# off-version run degrades into silent skips rather than failing.
Expand All @@ -73,8 +101,14 @@ jobs:
# mathjs is a devDependency here, pinned to the same exact 15.2.0 the
# indexer, explorer, sdk and hub carry, because the reference
# implementation must compute quorum weights the way the fleet does.
# Only this tree needs installing: the flag-day generator READS the
# indexer's registry as text (see the file-header note in
# bin/generate-flag-days.js) rather than requiring it, so the sibling
# checkout above needs no install of its own.
- name: Install dependencies
working-directory: xchain-documentation
run: if [ -f package-lock.json ]; then npm ci; else npm install; fi

- name: Documentation conformance suite
working-directory: xchain-documentation
run: npm test
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.19.0] - 2026-09-16

### Added
- Published `ADMIT_MARGIN_BLOCKS`, `ADMIT_MIN_FUTURE_BLOCKS` and `ADMIT_MAX_FUTURE_BLOCKS`, the canonical admission-height margins that let a mirror barrier bind rows by block height instead of by the block's timestamp.
- Published `MIRROR_ADMISSION_ACTIVATION` and `MIRROR_ADMISSION_CONSUMER_ACTIVATION`, the paired producer and consumer flag-day maps keyed by coin and network, inert everywhere pending their sizing at the cut.
- Published `ANCHOR_ATTEST_ARRIVAL_MARGIN_S` (64800 s) and `ANCHOR_ATTEST_BARRIER_ACTIVATION`, the maturity-horizon bound that keeps the anchor-attest barrier opening no later than it does today.
- The XBRIDGE action and the cross-chain bridge protocol are documented.
- The bridge settle pass's origin-indexer reads are documented and the computed-read baseline is raised for the coin-keyed lookups.
- The four bridge helper modules are counted in the e2e architecture and README pages.
- Published the `TRAIN_ACTIVATION` 0.19.0 row and the per-chain testnet bridge heights this train arms.

### Changed
- The bridge activation is documented as keyed per chain.
- Testnet activations are documented as arming at the tip read at the cut.
- The wallet's cross-chain order form is documented.
- Restructured under the platform code-structure standard (feature directories, snake_case files, split test suites, restored comments).

### Fixed
- CI checks out xchain-indexer beside this repo so the flag-day literals suite runs on GitHub instead of skipping, and the env-var coverage fleet floor applies only when every sibling is present.
- The node and explorer configuration pages document `XCHAIN_NODE_ALLOW_NO_DOGE_READ` and `EXPLORER_FEDERATION_READ_KEY`.
- The undo-window and halted-state pages state the per-network table (every testnet 120 blocks) and the halt's `/status` fields and reset path, replacing the stale LTC value.
- The Pi 5 firmware's `cgroup_disable=memory` clause, the page-cache disk model and the node operations exit-status section are documented.

## [0.18.0] - 2026-09-11

### Added
Expand All @@ -23,6 +46,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- The SDK websocket page matches the producer roster, adding the mempool, expiry, bet, attestation and xcall event types.
- The explorer API page describes the merged `hub_status` on the validators endpoint.

### Fixed
- Corrected the bare-multisig capacity figure: 60 bytes per output (two 32-byte key slots), not ~61 bytes per key.
- The indexer determinism and replay claims now name the local Hub DB mirror they read during block processing.
- The explorer pages state the hub-mirror schema the explorer creates and writes under `self_sync`, instead of claiming it never writes to any database.
- The hub configuration, architecture and database pages distinguish hub-local suspension from equivocation slashing: missed rounds and price deviation leave on-chain stake untouched.
- Published Token Information Standard v1.1.1, which relaxes the media requirement to `type` plus at least one of `data` or `data_ref` so the fully on-chain form the standard recommends validates; v1.1.0 and v1.0.0 stay frozen as published.
- The TIS media `type` row states the per-array vocabulary the schema enums pin (`images` display role, `audio` and `video` containers, `files` category) instead of calling it a MIME type.
- The gated-pack publishing steps require one `FILE` per transaction: a `BATCH` hands one `rawData` payload to every sub-command, so a second `FILE` is recorded valid carrying the first file's ciphertext.

## [0.17.0] - 2026-09-10

### Added
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ xchain-documentation/
├── developer-guide/ tutorials: build tokens, dispensers, query data, integrate, testing
├── ai-agents/ building AI agents with MCP and bounded wallets
├── user-guide/ capabilities, use cases, FAQ (no code required)
├── protocol/ 37 ACTION definitions, Token Information Standard, schemas
├── protocol/ 38 ACTION definitions, Token Information Standard, schemas
├── operations/ deployment, Docker, monitoring, upgrades, troubleshooting
├── legal/ licensing, commercial license, trademark, contributor agreement
├── blockchains.md supported chains, adding new blockchains
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

# XChain Platform

A blockchain-agnostic token protocol currently running on Bitcoin, Litecoin, and Dogecoin. Create, transfer, trade, and manage tokens, run smart contracts that can call out to AI models and the web, and stake for validation using 37 ACTION commands, 36 of them embedded directly in standard blockchain transactions. No sidechains, no bridges, no separate consensus mechanism. The platform includes a built-in DEX, a sandboxed JavaScript virtual machine for on-chain smart contracts, cross-chain swap support, and **cryptographically secure token-gated file publishing**: encrypt single files or multi-file packs on-chain so only holders of a specific token can decrypt them (see [Token-Gated Content](./protocol/token-gated-content.md)). The platform can be extended to run on any Bitcoin-compatible blockchain, including private blockchains for enterprise deployments.
A blockchain-agnostic token protocol currently running on Bitcoin, Litecoin, and Dogecoin. Create, transfer, trade, and manage tokens, run smart contracts that can call out to AI models and the web, and stake for validation using 38 ACTION commands, 37 of them embedded directly in standard blockchain transactions. The `XBRIDGE` action moves supply between XChain's own ledgers under lock-and-mint / burn-and-release custody of the hub federation, with no separate consensus mechanism and no external bridge. The platform includes a built-in DEX, a sandboxed JavaScript virtual machine for on-chain smart contracts, cross-chain swap support, and **cryptographically secure token-gated file publishing**: encrypt single files or multi-file packs on-chain so only holders of a specific token can decrypt them (see [Token-Gated Content](./protocol/token-gated-content.md)). The platform can be extended to run on any Bitcoin-compatible blockchain, including private blockchains for enterprise deployments.

**New here?** Start with [What is XChain?](./getting-started/what-is-xchain.md) or jump straight to the [Developer Quickstart](./getting-started/quickstart-developer.md).

Expand Down
14 changes: 7 additions & 7 deletions architecture/component-map.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ See [`../components/decoder/`](../components/decoder/) for full documentation.
| | |
|---|---|
| **Purpose** | Reads decoded ACTIONs from the Decoder DB, validates them, executes business logic, writes final state |
| **Inputs** | Decoder MariaDB (SQL polling every 5 seconds); local Hub DB (cross-chain price data); inbound JSON-RPC `pushvalidatorrewards` from xchain-hub |
| **Inputs** | Decoder MariaDB (SQL polling every 5 seconds); local Hub DB (cross-chain price data); inbound JSON-RPC `pushvalidatorrewards` from xchain-hub (retired for new anchor rewards, which each indexer now derives from the on-chain ANCHOR bytes) |
| **Outputs** | Indexer MariaDB (`XChain_{CHAIN}_{NETWORK}_Indexer`); outbound JSON-RPC pushes to xchain-hub (`pushchaintip`, `pushpriceround`, `pushoracleprice`) |
| **Storage** | Three database connections: Decoder DB (read), Indexer DB (read/write, 100+ tables), local Hub DB (read, synced from xchain-hub) |
| **Communication** | Outbound SQL reads from Decoder DB and local Hub DB; outbound HTTP/WebSocket to xchain-hub; inbound JSON-RPC API for hub pushes |
Expand All @@ -78,10 +78,10 @@ See [`../components/indexer/`](../components/indexer/) for full documentation.
| | |
|---|---|
| **Purpose** | Serves REST endpoints, JSON-RPC 2.0, and a web UI over the Indexer DB |
| **Inputs** | Indexer MariaDB (direct SQL reads); xchain-hub (config sync every 60s) |
| **Inputs** | Indexer MariaDB (direct SQL reads); Decoder MariaDB (raw transaction lookups); xchain-hub (config sync every 60s, plus the hub-mirror snapshot and live feed under `self_sync`) |
| **Outputs** | HTTP responses (REST, JSON-RPC, HTML) |
| **Storage** | None (stateless read layer) |
| **Communication** | Inbound HTTP from clients; outbound SQL to Indexer DB; outbound JSON-RPC to xchain-hub |
| **Storage** | A hub-mirror schema it owns (created and written under `"self_sync": true`); otherwise a read layer over indexed state |
| **Communication** | Inbound HTTP from clients; outbound SQL to Indexer and Decoder DBs; DDL and row writes to its own hub-mirror DB; outbound JSON-RPC to xchain-hub |

Key technical details:

Expand Down Expand Up @@ -143,7 +143,7 @@ These services support the construction and submission of XChain transactions.

Key technical details:

- With `encoding` omitted, selects between `OP_RETURN` (≤80 bytes/output, 76 bytes user data, 1 tx) and `P2SH` (476 bytes/chunk, 2 tx) by payload size. `MULTISIGN` (~61 bytes/key, 1 tx), `P2WSH` (476 bytes/chunk up to the 8,192-byte compiled-payload ceiling, 2 tx) and `TAPROOT` (the envelope, up to 390,000 bytes in one tapscript witness, 2 tx, segwit chains only) are never reached by that size fallback; they are used only when explicitly requested, or when `encoding: AUTO` opts into smallest-footprint selection.
- With `encoding` omitted, selects between `OP_RETURN` (≤80 bytes/output, 76 bytes user data, 1 tx) and `P2SH` (476 bytes/chunk, 2 tx) by payload size. `MULTISIGN` (60 bytes/output, 1 tx), `P2WSH` (476 bytes/chunk up to the 8,192-byte compiled-payload ceiling, 2 tx) and `TAPROOT` (the envelope, up to 390,000 bytes in one tapscript witness, 2 tx, segwit chains only) are never reached by that size fallback; they are used only when explicitly requested, or when `encoding: AUTO` opts into smallest-footprint selection.
- P2SH and P2WSH use a two-transaction pattern: fund tx commits funds to a script; reveal tx spends it, embedding the data in the unlocking script. TAPROOT uses a commit/reveal pair returned together from one call.
- Obfuscates payloads with AES-128-CTR. Key and IV are derived from the first input's txid, deterministic and reversible by any party with the txid.
- Available as a Node.js JSON-RPC service and as a browser bundle via webpack.
Expand All @@ -167,7 +167,7 @@ Key technical details:

- LevelDB key schema uses single-character prefixes: `B`=block, `T`=transaction, `I`=input, `O`=output, `H`/`J`=address hints.
- Processes blocks in batches of up to 200 (flush may trigger earlier under heap pressure), writing each batch atomically to LevelDB.
- Maintains a per-chain undo window (BTC: 12 / LTC: 48 / DOGE: 120 blocks, overridable via XCHAIN_UNDO_BLOCKS_<COIN>) to support chain reorganization rollback.
- Maintains a per-chain, per-network undo window (mainnet and regtest: BTC 12 / LTC 120 / DOGE 120 blocks; testnet: 120 blocks for every coin; overridable via XCHAIN_UNDO_BLOCKS_<COIN>) to support chain reorganization rollback.
- Tracks the mempool for real-time unconfirmed UTXO state.
- Supports bootstrap from tar archives to avoid re-indexing from genesis.
- Outputs are indexed by scriptPubKey hash, enabling efficient address lookups.
Expand All @@ -189,7 +189,7 @@ See [`../components/utxo-tracker/`](../components/utxo-tracker/) for full docume

Key technical details:

- Exposes 31 action construction methods (one per developer-invocable ACTION type) and 118 explorer query wrappers.
- Exposes 32 action construction methods (one per developer-invocable ACTION type) and 118 explorer query wrappers.
- Batch builder allows multiple actions to be combined into a single `BATCH` action string.
- Discovers service endpoints via xchain-hub.
- Implements retry with exponential backoff and connection pooling for all outbound calls.
Expand Down
Loading
Loading