Provider-aware unified errors now preserve full error classification from the provider layer, including rate-limit, retry, validation, and network categories, rather than collapsing them into generic transport strings. JSON-RPC and provider errors expose helpers that indicate whether an error is retryable, whether it represents a rate limit, and whether a transaction was deterministically rejected.
The retry logic has been redesigned accordingly. Deterministic failures such as invalid transactions return immediately without retrying, while transient failures use capped exponential backoff. Rate-limit responses honor bounded Retry-After guidance from JSON-RPC error envelopes.
Transaction rebroadcasts are now outcome-aware: an already-known transaction is treated as accepted rather than an error, deterministic node rejections become transaction errors carrying the hash, and only transient provider failures trigger retries.
Neo X improvements
Callers can now build and submit Alloy TransactionRequest values directly for Neo X, removing a legacy u64 value limit imposed by the previous transaction wrapper. This enables full-width EVM transactions on Neo X. Existing NeoXTransaction serialization and send methods remain available for backward compatibility.
Security updates
Provider URLs now redact usernames, passwords, query strings, and fragments from both Display and Debug output, preventing accidental credential leakage in logs and error messages. JSON-RPC error data and HTTP response bodies are also excluded from general-purpose formatting.
The release updates openssl to 0.10.81 and cmov to 0.5.4, addressing high-severity OpenSSL advisories. The cargo deny policy now rejects yanked packages and narrows advisory exceptions, and example and CLI manifests are explicitly marked as non-publishable to restrict crates.io release scope to the neo3 package only.
Compatibility
The minimum supported Rust version has been raised from 1.83 to 1.91, enforced in CI. Developers pinned to earlier toolchain versions will need to upgrade before adopting v2.1.0.
The deprecated DecimalAmount::from_raw retains its zero-fallback behavior for 2.x source compatibility, and all Neo X entry points preserve their existing accessors alongside the new checked conversions. Integer conversions across contract, policy, bridge, and transaction paths now reject negative or oversized values instead of wrapping through unchecked casts.
Rapid iteration
The pace of development reflects the SDK’s push toward production readiness. Following the comprehensive code quality improvements in v1.0.3 earlier this year, R3E shipped three releases in under a month: v2.0.0, a same-day security patch in v2.0.1, and now v2.1.0. The release process itself was hardened during publication, with automation now validating package and changelog versions, requiring annotated tags reachable from master, and running formatting, linting, tests, and supply-chain policy checks before creating the GitHub release.
Liao announced the release on July 12, highlighting checked amounts, structured errors, smarter retries, outcome-aware rebroadcasts, full-width Neo X transactions, and safer error redaction as the key additions.
The full release notes can be found at the link below:
https://github.com/r3e-network/neo-rust-sdk/releases/tag/v2.1.0