This release includes ABI v2 struct support, TLS support for gRPC connections, a chainable client builder, a security-hardening pass over the ABI decoder, crypto utilities and ApiWrapper, and a dependency overhaul (gRPC / Netty / BouncyCastle).
New Features
- ABI v2 structs and nested arrays: encode/decode
StaticStruct/DynamicStruct, including nested structs, arrays of structs and nested arrays; adds packed encoding (TypeEncoder.encodePacked) (#212). - TLS support for gRPC connections: enable via
withTLS(), optionally with a custom trust certificate (withTLS(certFile)) (#211). - Chainable
ApiWrapperBuilder: chainable configuration (withApiKey,withTimeout,addInterceptors,withPrivateKey, …); the SolidityNode endpoint is optional;ofMainnet/ofShasta/ofNilenow build through the builder (#211, #217). - CI: new PR workflow running checkstyle and unit tests on JDK 8 and 17 (#218).
Security Hardening & Bug Fixes
- ABI decoder hardening: malformed return data / event logs now fail fast with
IllegalArgumentExceptioninstead of crashing or over-allocating memory (#219, #221). - Crypto hardening: invalid SECP256K1 arguments and out-of-range private keys now throw; Trident no longer installs the JVM-global BouncyCastle provider — register it yourself if you relied on this (#219, #222).
ApiWrapperhardening: failed construction no longer leaks channels andclose()shuts down gracefully; invalid private keys, timeouts, addresses and empty transactions that were silently accepted before now throw (#211, #217, #222).- Contract deploy encoding: constructor arguments of a dynamic type are now encoded correctly (#223).
Deprecations (kept for compatibility)
- All
ApiWrapperconstructors — usenew ApiWrapperBuilder(...).build()(#211). Address(Uint)— does not normalize to 160 bits; useAddress(BigInteger)/Address(String)(#212).SECP256K1.PROVIDER— deprecated along with the removal of global BC provider registration (#222).
Dependency Updates
- Runtime dependencies upgraded for known CVEs, with the graph trimmed:
io.netty:netty-allis replaced byio.netty:netty-buffer(no longer transitive) andcom.fasterxml.jackson.core:jackson-coreis excluded — declare them yourself if you relied on them via Trident (#214).- Bump
io.grpc:grpc-netty-shaded/io.grpc:grpc-netty/io.grpc:grpc-okhttp/io.grpc:grpc-protobuf/io.grpc:grpc-stubfrom 1.75.0 to 1.81.0 - Bump
io.netty:netty-bufferfrom 4.1.125.Final to 4.1.135.Final - Bump
org.bouncycastle:bcprov-jdk18onfrom 1.78.1 to 1.84 - Bump
io.vertx:vertx-corefrom 4.5.21 to 4.5.27
- Bump
io.grpc:protoc-gen-grpc-javais resolved per platform: 1.81.0 on macOS and on Linux/aarch64, 1.60.0 on Linux/x86_64 and Windows for CentOS 7 compatibility (#220).