This library handles keys, addresses, and on-chain serialization, so dependencies are managed conservatively to avoid silent behavioral drift:
-
Pin full versions, including the patch, in every
Cargo.toml— e.g.bech32 = "0.11.1", not"0.11"or"2". A silent patch-level update could subtly change behavior, which is unacceptable here. The full version records and floors the intended patch, and — because a library'sCargo.lockdoes not constrain crates that depend on it — the version inCargo.tomlis the only lever that reaches downstream consumers. Do not "tidy" these back to baremajor.minor. -
The workspace root
Cargo.lockis committed (per-crate locks, from standalone non-workspace builds, are not). This freezes the resolved versions for our CI and local builds, so a fresh checkout doesn't re-resolve to newer patches. Caret semantics mean the full version inCargo.tomlalone still permits newer patches at resolve time — the committed lock is what actually freezes them.