TxLINE integration feedback
This feedback comes from the live devnet activation, proof reconstruction, tamper testing, and keeper integration used to build Slip.What worked well
Free World Cup activation
The free service-level-1 subscription worked without TxL payment. The documented account list and thetxSig::jwt activation preimage matched the live service. TxLINE’s runnable devnet examples were
the fastest route to a correct authentication implementation.
Normalized football schema
The stable fixture and stat-key model made the same market expression usable for goals, cards, corners, and period variants. One- and two-stat validation payloads support a broad product without separate settlement adapters.Enforced proof semantics
Live tamper tests confirmed that valid predicates return a boolean while corrupted proof nodes or stat values revert. This is a strong foundation for permissionless settlement.Friction encountered
Merkle byte layout was not documented
Independent verification required recovering that stat leaves are bare 12-byte Borsh structs, while fixture leaves include a leading0x01 enum tag. Positional node hashing has no domain byte. Publishing
the exact preimages and combine rule would save integrators substantial reverse-engineering time.
Current replay roots move
Devnet fixture replay rewrites the current virtual five-minute slot. A proof may match only briefly, which initially looked like a construction error. Documentation should distinguish moving replay roots from stablegame_finalised roots and recommend a proof-fetch/submission strategy.
Hash encoding differs from examples
The stat-validation endpoint returned hashes as JSONnumber[], while the documented helper expected
hex or base64 strings. The API and helper should use the same accepted formats.
ScoreStat.period is easy to misread
The proof leaf’s period is match phase or StatusId, not the period prefix embedded in statKey.
Both concepts appear in the football schema, so the field needs an explicit warning.
Zero-valued leaves may be absent
An absent zero stat cannot be proved. This materially affects false-side markets such as both-teams- to-score. The score schema should document presence rules and expose a canonical way to prove zero or non-membership if such markets are intended.Historical response shape and root account layout
/api/scores/historical/{fixtureId} returned a very large blob during testing rather than an obvious
paginated JSON collection. The daily_scores_roots byte layout was also not documented. Pagination,
schema examples, and a published account type would improve integration reliability.
Most valuable improvements
- Publish canonical Merkle test vectors and byte layouts.
- Document replay anchoring and final-root stability.
- Normalize proof hash encoding.
- Distinguish stat-key period prefixes from proof phase fields.
- Document or solve absent-zero proof behavior.