Skip to content

Accept and decode SIMD-0385 version 1 transactions - #86

Closed
ysaxyz wants to merge 2 commits into
mainfrom
alpenglow-compat
Closed

ysaxyz wants to merge 2 commits into
mainfrom
alpenglow-compat

Conversation

@ysaxyz

@ysaxyz ysaxyz commented Oct 12, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Hivezilla getBlock requests now advertise maxSupportedTransactionVersion: 1, so a slot that contains a version 1 transaction is returned instead of JSON-RPC -32015.
  • The shared transaction decoder reads a SIMD-0385 transaction with the version byte 0x81 first and the signatures last. Legacy and v0 transactions still use the signature prefix.
  • Helius getBlock uses the same config as the Hivezilla RPC backfill.

Tests

JSON files were produced with getBlock on the testnet validator (agave-ui, user sol). The first run, while the client still advertised version 0, failed for slots 449671366–449671368 with JSON-RPC -32015. After the fix, the same command wrote slots 449673070–449673072 under /home/sol/blockzilla/data/rpc-canary/repair/rpc-get-block/.

cd /home/sol/blockzilla
SLOT=$(python3 -c 'import json,urllib.request
body=json.dumps({"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment":"finalized"}]}).encode()
req=urllib.request.Request("http://127.0.0.1:8899", data=body, headers={"Content-Type":"application/json"})
print(json.load(urllib.request.urlopen(req, timeout=20))["result"])')
START=$((SLOT-2))
./target/debug/hivezilla backfill-rpc \
  --rpc-url http://127.0.0.1:8899 \
  --archive-dir /home/sol/blockzilla/data/rpc-canary \
  --start-slot "$START" \
  --end-slot "$SLOT" \
  --commitment finalized

Those JSON files were then decoded locally: 204 transactions, 105 legacy, 99 version 1.

cd /home/sol/decode-rpc-block
RUSTFLAGS="-C target-feature=+aes,+sse2" cargo run --quiet

Signatures on the same files: 225 verified.

cd /home/sol/decode-rpc-block
cargo run --bin verify

Decoder unit tests: 8 passed.

cd /home/sol/blockzilla
RUSTFLAGS="-C target-feature=+aes,+sse2" \
  cargo test --locked -p of-car-reader --lib versioned_transaction -- --test-threads=8

ysaxyz added 2 commits October 7, 2026 16:51
Alpenglow testnet rejects a slot when the client only advertises version 0.
Alpenglow testnet places the version byte first and the signatures last, so the old signature-prefix reader rejected every version 1 transaction.
@ysaxyz ysaxyz closed this Oct 14, 2026
@ysaxyz
ysaxyz deleted the alpenglow-compat branch October 14, 2026 20:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant