Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
37746ad
feat(wallet): accelerate storage synchronization
BraydenLangley Aug 17, 2026
12f6c54
fix(wallet): disambiguate storage sync checkpoints
BraydenLangley Aug 18, 2026
15c83c2
refactor(wallet): simplify sync state selection
BraydenLangley Aug 18, 2026
42af811
fix(wallet): keep sync state selection bundle-neutral
BraydenLangley Aug 18, 2026
1ba2102
fix(wallet): retry oversized sync responses
BraydenLangley Aug 19, 2026
66ffc9d
chore(wallet): account for hosted compression
BraydenLangley Aug 19, 2026
5c7cfc2
test(wallet): complete sync rollout validation
BraydenLangley Sep 1, 2026
429bb54
perf(wallet): reuse compact sync checkpoints and reduce transport par…
BraydenLangley Sep 8, 2026
ae7601e
perf(wallet): compact negotiated sync byte payloads
BraydenLangley Sep 8, 2026
eeeacf8
Simplify iterative sync decoding and verify portable budgets
BraydenLangley Sep 8, 2026
6c157ab
Avoid wallet-wide scans during large IndexedDB restores
BraydenLangley Sep 8, 2026
0a567c6
Use collection assertions in IndexedDB lookup regressions
BraydenLangley Sep 8, 2026
b097dc7
Index proof batch and ownership lookups during local sync
BraydenLangley Sep 8, 2026
cdc7c35
Yield large wallet signature hashes to native SHA-256
BraydenLangley Sep 8, 2026
4b08328
Keep runtime sync capabilities separate from persisted settings
BraydenLangley Sep 8, 2026
d70fba2
Document native foreground responsiveness and restart recovery
BraydenLangley Sep 8, 2026
9ae19d1
docs: highlight verified wallet sync results
BraydenLangley Sep 9, 2026
aafe437
docs: clarify large-wallet E2E test scope
BraydenLangley Sep 9, 2026
00b04fb
Support bounded resumable transfers for oversized wallet sync records
BraydenLangley Sep 9, 2026
da54544
Separate sync authorization, bounds, framing and retry validation
BraydenLangley Sep 9, 2026
f9ffdb1
Document Linux artifact measurements for sync transfer review
BraydenLangley Sep 9, 2026
334e1a5
Record Linux esbuild compression cost for review
BraydenLangley Sep 9, 2026
fd59ac1
Test staged sync fallback and hostile transfer acknowledgements
BraydenLangley Sep 9, 2026
70048ba
Bound sync proof work and reconcile stale proofs through verified pro…
BraydenLangley Sep 10, 2026
06c5534
Record measured Linux artifact costs for sync recovery
BraydenLangley Sep 10, 2026
c04574e
Merge upstream security fixes into wallet sync recovery
BraydenLangley Sep 10, 2026
4e81e20
Account for measured Linux compression after upstream integration
BraydenLangley Sep 10, 2026
db28d74
Merge branch 'main' into agent/wallet-sync-throughput
ty-everett Sep 10, 2026
1cc9c61
chore: advance wallet sync release versions
ty-everett Sep 10, 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
6 changes: 3 additions & 3 deletions conformance/META.json
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,9 @@
]
},
"stats": {
"total_files": 76,
"total_vectors": 6690,
"last_updated": "2026-08-25"
"total_files": 77,
"total_vectors": 6694,
"last_updated": "2026-09-09"
},
"regression_index": {
"beef-v2-txid-panic": "go-sdk#306",
Expand Down
24 changes: 18 additions & 6 deletions conformance/PARITY_MATRIX.json
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
{
"schema_version": "1.0",
"generated_at": "2026-08-25",
"generated_at": "2026-09-09",
"source": "ts-stack conformance corpus",
"description": "Machine-readable parity status for cross-language SDK implementations (Go, Rust, Python). Use this to track and drive conformance.",
"summary": {
"total_files": 76,
"total_vectors": 6690,
"fully_required_files": 57,
"total_files": 77,
"total_vectors": 6694,
"fully_required_files": 58,
"files_with_intended": 17,
"files_with_mixed_status": 15,
"vectors_by_status": {
"required": 6486,
"required": 6490,
"intended": 204,
"skipped": 7
},
"by_reason_category": {
"fully_supported": 1274,
"fully_supported": 1278,
"governed_vector_skip": 50,
"historical_regression": 36,
"partial_ts_behavioral_difference": 5116,
Expand Down Expand Up @@ -965,6 +965,18 @@
"categories": [
"wallet_stateful_harness"
]
},
{
"path": "wallet/storage/sync-transfer.json",
"id": "wallet.storage.sync-transfer",
"total_vectors": 4,
"file_level_parity": "required",
"effective_status": "required",
"required_count": 4,
"intended_count": 0,
"skipped_count": 0,
"reason_category": "fully_supported",
"categories": []
}
]
}
22 changes: 21 additions & 1 deletion conformance/runner/ts/dispatchers/wallet-storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,14 @@
*/

import { expect } from '@jest/globals'
import {
encodeSyncTransfer,
decodeSyncTransfer,
syncTransferDigest
} from '@wallet-toolbox/storage/remoting/SyncTransfer'
import { parseJsonRpc } from '@wallet-toolbox/storage/remoting/BinaryJson'

export const categories: ReadonlyArray<string> = ['adapter-conformance']
export const categories: ReadonlyArray<string> = ['adapter-conformance', 'sync-transfer']

// ── Helpers ────────────────────────────────────────────────────────────────────

Expand Down Expand Up @@ -546,6 +552,20 @@ export function dispatch(
input: Record<string, unknown>,
expected: Record<string, unknown>
): void | Promise<void> {
if (category === 'sync-transfer') {
if (typeof input.hex === 'string') {
expect(() => decodeSyncTransfer(Buffer.from(input.hex as string, 'hex'))).toThrow(
String(expected.error)
)
} else {
const value = parseJsonRpc(JSON.stringify(input.value), true)
const bytes = encodeSyncTransfer(value)
expect(Buffer.from(bytes).toString('hex')).toBe(expected.hex)
expect(syncTransferDigest(bytes)).toBe(expected.digest)
expect(decodeSyncTransfer(bytes)).toEqual(value)
}
return
}
if (category !== 'adapter-conformance') {
throw new Error(`wallet-storage dispatcher: unknown category '${category}'`)
}
Expand Down
6 changes: 6 additions & 0 deletions conformance/runner/ts/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@
],
"@wallet-toolbox/storage/schema/tables": [
"../../../packages/wallet/wallet-toolbox/out/src/storage/schema/tables/index.d.ts"
],
"@wallet-toolbox/storage/remoting/SyncTransfer": [
"../../../packages/wallet/wallet-toolbox/out/src/storage/remoting/SyncTransfer.d.ts"
],
"@wallet-toolbox/storage/remoting/BinaryJson": [
"../../../packages/wallet/wallet-toolbox/out/src/storage/remoting/BinaryJson.d.ts"
]
}
},
Expand Down
62 changes: 62 additions & 0 deletions conformance/vectors/wallet/storage/sync-transfer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
{
"$schema": "../../../schema/vector.schema.json",
"id": "wallet.storage.sync-transfer",
"name": "Negotiated wallet sync transfer v1 binary framing",
"brc": ["BRC-40"],
"version": "1.0.0",
"reference_impl": "packages/wallet/wallet-toolbox/src/storage/remoting/SyncTransfer.ts@2.13.0",
"parity_class": "required",
"vectors": [
{
"id": "wallet.storage.sync-transfer.frame",
"description": "Raw binary fields follow a length-prefixed UTF-8 header; SHA-256 covers every byte.",
"input": {
"value": {
"bytes": {
"$bsvBinary": "base64",
"data": "AH//"
},
"label": "record"
}
},
"expected": {
"hex": "0000005e7b2276657273696f6e223a312c2276616c7565223a7b226279746573223a6e756c6c2c226c6162656c223a227265636f7264227d2c226669656c6473223a5b7b2270617468223a5b226279746573225d2c226c656e677468223a337d5d7d007fff",
"digest": "3170835aee82aeaa5bf9c2fe9b9a035de516c11e133dcbf0396b1d34040767c9"
},
"tags": ["binary", "integrity", "happy-path"]
},
{
"id": "wallet.storage.sync-transfer.truncated",
"description": "Reject truncated framing before a wallet record can be merged.",
"input": {
"hex": "0000005e7b2276657273696f6e223a312c2276616c7565223a7b226279746573223a6e756c6c2c226c6162656c223a227265636f7264227d2c226669656c6473223a5b7b2270617468223a5b226279746573225d2c226c656e677468223a337d5d7d007f"
},
"expected": {
"error": "Invalid wallet sync transfer frame"
},
"tags": ["error-case", "integrity"]
},
{
"id": "wallet.storage.sync-transfer.trailing",
"description": "Reject trailing framing before a wallet record can be merged.",
"input": {
"hex": "0000005e7b2276657273696f6e223a312c2276616c7565223a7b226279746573223a6e756c6c2c226c6162656c223a227265636f7264227d2c226669656c6473223a5b7b2270617468223a5b226279746573225d2c226c656e677468223a337d5d7d007fff00"
},
"expected": {
"error": "Invalid wallet sync transfer frame"
},
"tags": ["error-case", "integrity"]
},
{
"id": "wallet.storage.sync-transfer.short-header",
"description": "Reject short-header framing before a wallet record can be merged.",
"input": {
"hex": "000000"
},
"expected": {
"error": "Invalid wallet sync transfer frame"
},
"tags": ["error-case", "integrity"]
}
]
}
6 changes: 3 additions & 3 deletions docs/packages/sdk/bsv-sdk.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ id: bsv-sdk
title: '@bsv/sdk'
kind: package
domain: sdk
version: '2.5.0'
version: '2.6.0'
npm: '@bsv/sdk'
last_updated: '2026-09-08'
last_verified: '2026-09-08'
last_updated: '2026-09-10'
last_verified: '2026-09-10'
review_cadence_days: 30
status: stable
tags: ['sdk', 'crypto', 'transactions']
Expand Down
6 changes: 3 additions & 3 deletions docs/packages/wallet/wallet-toolbox-client.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ id: pkg-wallet-toolbox-client
title: '@bsv/wallet-toolbox-client'
kind: package
domain: wallet
version: '2.12.0'
last_updated: '2026-09-08'
last_verified: '2026-09-08'
version: '2.13.0'
last_updated: '2026-09-10'
last_verified: '2026-09-10'
review_cadence_days: 30
npm: 'https://www.npmjs.com/package/@bsv/wallet-toolbox-client'
repo: 'https://github.com/bsv-blockchain/ts-stack/tree/main/packages/wallet/wallet-toolbox/client'
Expand Down
6 changes: 3 additions & 3 deletions docs/packages/wallet/wallet-toolbox-mobile.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ id: pkg-wallet-toolbox-mobile
title: '@bsv/wallet-toolbox-mobile'
kind: package
domain: wallet
version: '2.12.0'
last_updated: '2026-09-08'
last_verified: '2026-09-08'
version: '2.13.0'
last_updated: '2026-09-10'
last_verified: '2026-09-10'
review_cadence_days: 30
npm: 'https://www.npmjs.com/package/@bsv/wallet-toolbox-mobile'
repo: 'https://github.com/bsv-blockchain/ts-stack/tree/main/packages/wallet/wallet-toolbox/mobile'
Expand Down
6 changes: 3 additions & 3 deletions docs/packages/wallet/wallet-toolbox.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ title: '@bsv/wallet-toolbox'
kind: package
domain: wallet
npm: '@bsv/wallet-toolbox'
version: '2.12.0'
last_updated: '2026-09-08'
last_verified: '2026-09-08'
version: '2.13.0'
last_updated: '2026-09-10'
last_verified: '2026-09-10'
review_cadence_days: 30
status: stable
tags: ['wallet', 'brc100']
Expand Down
Loading