Skip to content

v0.10.0

Latest

Choose a tag to compare

@kespinola kespinola released this 11 Sep 10:14
· 1 commit to main since this release
ba2a438

18 of the 19 published crates are on crates.io at version 0.10.0:

shipstern, shipstern-core, shipstern-proto, shipstern-proc-macro, shipstern-parser, shipstern-mock, shipstern-stream, shipstern-bpf-loader-parser, shipstern-spl-token-parser, shipstern-spl-token-extensions-parser, shipstern-block-meta-parser, shipstern-slot-parser, shipstern-stake-pool-parser, shipstern-solana-rpc-source, shipstern-yellowstone-grpc-source, shipstern-yellowstone-fumarole-source, shipstern-solana-snapshot-source, shipstern-block-coordinator.

shipstern-jetstream-source stays at 0.9.0 on crates.io. Since #315 it depends on jetstreamer-firehose and jetstreamer-utils from the anza-xyz/jetstreamer main branch, because the crates.io 0.7.0 release of those is still on the Agave 3.x stack. crates.io does not accept git-only dependencies, so the 0.10.0 crate will be published once upstream cuts a release on Agave 4.x. Until then use it as a git dependency at the v0.10.0 tag.

See CHANGELOG.md for the full history.

Changed

  • shipstern.parse and shipstern.handle are now debug spans instead of info, so they no longer spam info-level trace output (#313 by @ultrasilicon).
  • Bumped the Solana/Agave dependency stack from 3.x to 4.2.2. This is the half of Transaction V1 (SIMD-0385) support that lives in the dependency graph: VersionedMessage::V1 first appears in solana-message 4.0.0, so a 3.x build cannot represent a v1 message at all. #304 already surfaced the inline budget as InstructionShared::transaction_config. Raises MSRV from 1.90 to 1.93, which Agave 4.2.2 requires (iter::chain in const contexts at 1.91, MaybeUninit::write_copy_of_slice at 1.93); see #209. enable_tx_v1 is activated on devnet and testnet. On mainnet-beta the feature account is funded but still owned by the System program with no data, so it is staged rather than queued. Devnet is already carrying v1 traffic.
  • Bumped spl-token-2022 from 10 to 11, forced by Agave 4.2.2's spl-token-group-interface ^0.7.2. Brings the PermissionedBurn extension and its authority type, added to the proto AuthorityType enum as value 17, and replaces OptionalNonZeroPubkey with MaybeNull<Address>. NativeExtensionData still rejects PermissionedBurn, because there is no proto message for PermissionedBurnConfig yet.
  • Wire-visible behaviour change: UpdateGroupAuthority.new_authority now reports None where it previously emitted the all-zero sentinel pubkey as a real key. It was built as an unconditional Some(..); MaybeNull::get() maps the sentinel to None (Address::NONE is [0u8; 32], so null and the zero key are the same value, exactly as in the deleted opt_nonzero_pubkey_to_bytes helper). InitializeGroup.update_authority is unchanged, because it already went through that helper. This is a fix, but consumers reading new_authority will see a changed value.
  • shipstern-solana-snapshot-source: bank_forks_utils::load_bank_forks was replaced upstream by try_load_bank_forks_from_snapshot, which takes no blockstore and returns Option. Two consequences beyond the signature. The source no longer opens the blockstore at AccessType::PrimaryForMaintenance, so it no longer takes an exclusive RocksDB lock on the ledger directory, and it now fails with a clear error when the snapshot archives directory holds nothing loadable. Account scanning moved from the now-private AccountsDb::scan_accounts to Bank::scan_all_accounts; accounts-db 4.x deleted ScanOrder entirely (ScanConfig is pub(crate) and carries only an abort flag), so startup account updates are no longer emitted in pubkey-sorted order. Nothing in shipstern relied on that order.
  • shipstern-solana-rpc-source: solana-client 4.x replaced get_program_accounts_with_config with get_program_ui_accounts_with_config, which returns RPC-encoded UiAccounts. The owner is now parsed from a base58 string and the data decoded, so a malformed owner or an undecodable payload fails the source where previously neither could happen.
  • shipstern-bpf-loader-parser: solana-loader-v3-interface 7 dropped the Migrate and ExtendProgramChecked variants, so the instruction match is exhaustive and an unknown discriminant now fails earlier, in UpgradeableLoaderInstruction::try_from_slice.
  • shipstern-jetstream-source: TransactionStatusMeta.err is serialized with wincode instead of bincode. Agave's own solana-storage-proto moved that same proto field to wincode in 4.2, and the field carries opaque bytes, so nothing but convention keeps the two ends agreeing. The encoders still produce identical bytes for TransactionError, so no consumer sees a change today. bincode moves to a dev-dependency there, where a test asserts it does not produce v1 transaction wire bytes.

Fixed

  • shipstern-jetstream-source: convert VersionedMessage::V1 instead of failing to build, and carry its inline budget through to the proto. The message conversion matched only Legacy and V0 and hardcoded config: None. Adding the match arm alone would have compiled and then silently dropped every V1 inline budget, and since versioned is true for both V0 and V1, erased the distinction between them on the wire. config presence is what marks a message as V1, so it is now wrapped unconditionally: a V1 message that sets no budget fields still serializes as Some(TransactionConfig::default()). V1 carries no address lookup tables, and its lifetime specifier maps onto the existing recent_blockhash field (#310).
  • shipstern-jetstream-source: map RewardType::DeactivatedStake, added in Agave 4.2 with a matching proto DeactivatedStake = 5. The transaction_status_meta reward mapping had a catch-all arm that turned it into Unspecified, losing the reward type for anyone reading it (#310).
  • shipstern-jetstream-source: Agave 4.2 removed RewardInfo::commission, so keyed_rewards forwards the exact commission_bps instead of deriving it from a percentage. The percent field is still filled in where the basis points divide evenly, since shipstern-block-meta-parser exposes commission and has no commission_bps to fall back on.

What's Changed

  • docs(readme): bump codegen macro dependency snippets to 0.9.0 by @kespinola in #314
  • chore(runtime): downgrade parse/handle spans to debug level by @ultrasilicon in #313
  • feat(deps): move to the Agave 4.2.2 stack and handle transaction v1 by @senzenn in #315
  • chore(release): 0.10.0 by @kespinola in #316

Full Changelog: v0.9.0...v0.10.0