Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
* [BREAKING][behavior][store] `SqliteStore::new` rejects a database path that is not valid UTF-8 ([#2363](https://github.com/0xMiden/rust-sdk/pull/2363)).
* [BREAKING][behavior][rpc] The `SyncNotes` response now carries a reduced note metadata message: instead of the note's attachments commitment it carries one entry per attachment, with single-word attachments sent verbatim and larger ones sent as commitments. The client reconstructs the protocol-level `NoteMetadata` from those entries, so it requires a node that speaks this format.
* [BREAKING][behavior][store] The SQLite base schema now declares an index on `input_notes(script_root)`. This changes the schema fingerprint, so opening a database created before this change fails with `SchemaDrift` and existing stores must be recreated ([#2335](https://github.com/0xMiden/rust-sdk/pull/2335)).
* [BREAKING][removal][store] `miden-client-sqlite-store` no longer exposes the internal helpers `column_value_as_u64` and `u64_to_value`, nor the connection-taking `SqliteStore` write methods (`apply_transaction`, `apply_transaction_batch`, `upsert_foreign_account_code`, `prune_account_history`, `prune_irrelevant_blocks`); they are now crate-private. Use the `Store` trait methods instead ([#2351](https://github.com/0xMiden/rust-sdk/issues/2351)).
* [BREAKING][removal][rust] Removed the `TransactionFilter::ExpiredBefore` variant. Transaction expiry is decided during state sync from each transaction's `expiration_block_num`, so nothing queried the store for it; exhaustive matches on `TransactionFilter` must drop the arm ([#2364](https://github.com/0xMiden/rust-sdk/pull/2364)).
* [BREAKING][param][rust] `Store::get_input_note_by_offset` is replaced by `Store::get_input_note_after`, which takes an `Option<InputNoteCursor>` identifying the last note read instead of an ordinal offset. Build the cursor for the next call with `InputNoteCursor::from_record`. `Store` implementations must be updated; `InputNoteReader` is unaffected ([#2364](https://github.com/0xMiden/rust-sdk/pull/2364)).
* [BREAKING][removal][rust] `miden_client::agglayer::create_bridge_account` and `miden_client::agglayer::create_agglayer_faucet` are removed. Build the accounts with `AggLayerBridge::account_builder` and `AggLayerFaucet::account_builder`, which return an `AccountBuilder` and take the account's `FeePolicyManager` explicitly; its active policy must be a `BasicConstantFeePolicy` scheduling every root in the account's `allowed_notes()`. The faucet builder additionally takes the initial token supply and the account seeding its `ADMIN` role.
Expand Down Expand Up @@ -109,6 +110,8 @@

### Fixes

* [FIX][store] Corrupted database contents now surface as `StoreError`s instead of panicking: undecodable account IDs, nonces, and note-script blobs, a missing blockchain-checkpoint row, and a zero MMR node id all return errors, and rusqlite errors on parameterized note/account queries are no longer converted through panicking `expect`s ([#2351](https://github.com/0xMiden/rust-sdk/issues/2351)).
* [FIX][store] `u64` columns written with the top bit set (stored as negative SQL INTEGERs) are now read back through the shared bit-cast helper everywhere; two read sites previously errored on such values ([#2351](https://github.com/0xMiden/rust-sdk/issues/2351)).
* [FIX][test] The integration tests now run against a fee-charging chain. The testing node's genesis charges a fee by default (`MIDEN_VERIFICATION_BASE_FEE`, default `500`), generates the native fee faucet itself so the accounts it deploys can be seeded with that asset, and pre-funds a pool of basic wallets the suite draws from via a new `--funders` argument (`MIDEN_FUNDER_ACCOUNTS_DIR`). Accounts created by the `miden_client::testing::common` helpers are funded and deployed automatically, and `miden_client::testing::fee::deploy_account` does the same for accounts a test builds itself. The AggLayer accounts are consequently always part of genesis (the `AGGLAYER_GENESIS` env var and the `start-node-agglayer` target are gone) and the AggLayer tests load them from `AGGLAYER_ACCOUNTS_DIR` ([#2446](https://github.com/0xMiden/rust-sdk/issues/2446)).
* [FIX][test] The AggLayer genesis accounts now declare their zero-fee policy in the faucet the generated genesis charges fees in, rather than the mock chain's. A network account settles its fee against the faucet its own policy names, so the bridge's and faucet's network transactions could not be executed and their notes sat unconsumed, failing `agglayer_update_ger` and `agglayer_note_reader_reads_consumed_notes` ([#2446](https://github.com/0xMiden/rust-sdk/issues/2446)).
* [FIX][rust] An empty auth argument no longer suppresses the fee conversion info the client attaches, and an account whose auth component reads that argument as a caller-chosen salt (`AuthMultisig`, `AuthGuardedMultisig`) is now rejected with `TransactionRequestError::FeeConversionInfoRequired` instead of failing inside the VM, unless the request declares a salt with `TransactionRequestBuilder::fee_conversion_salt`. Accounts carrying an auth component the client cannot classify are left alone rather than panicking ([#2446](https://github.com/0xMiden/rust-sdk/issues/2446)).
Expand Down
3 changes: 2 additions & 1 deletion crates/rust-client/src/store/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -887,7 +887,8 @@ pub enum TransactionFilter {
impl TransactionFilter {
/// Returns a [String] containing the query for this Filter.
pub fn to_query(&self) -> String {
const QUERY: &str = "SELECT tx.id, script.script, tx.details, tx.status \
const QUERY: &str = "SELECT tx.id AS id, script.script AS script, tx.details AS details, \
tx.status AS status \
FROM transactions AS tx LEFT JOIN transaction_scripts AS script ON tx.script_root = script.script_root";
match self {
TransactionFilter::All => QUERY.to_string(),
Expand Down
Loading
Loading