Release v4.0.0: SWQoS transport improvements and Binary-Tx response handling

Major changes:
- Switch BlockRazor default transport from gRPC to HTTP to avoid FRAME_SIZE_ERROR
  - gRPC mode still available via explicit SwqosTransport configuration
- Fix ZeroSlot Binary-Tx JSON-RPC 2.0 response parsing
  - Properly handle success responses with "result" field
  - Properly handle error responses with "error" field containing code and message
- Update version to 4.0.0
- Update README files to reflect new version

Technical details:
- BlockRazor: HTTP mode is now the default (SwqosTransport::Http or None)
- ZeroSlot: Parse JSON-RPC 2.0 format responses instead of plain text
- Proto code: Pre-generated gRPC code for BlockRazor (no protoc required)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Wood
2026-03-18 21:32:23 +08:00
co-authored by Claude Sonnet 4.6
parent 20d053bab3
commit 07e45d136f
10 changed files with 530 additions and 112 deletions
+4 -2
View File
@@ -352,14 +352,16 @@ impl SwqosConfig {
Ok(Arc::new(flashblock_client))
}
SwqosConfig::BlockRazor(auth_token, region, url, transport) => {
let use_http = transport.map_or(false, |t| t == SwqosTransport::Http);
// BlockRazor: transport=None 或 transport=Http 时使用 HTTP,否则使用 gRPC
// 默认使用 HTTP,避免 gRPC FRAME_SIZE_ERROR
let use_http = transport.map_or(true, |t| t == SwqosTransport::Http);
if use_http {
let endpoint = SwqosConfig::get_endpoint(SwqosType::BlockRazor, region, url);
let blockrazor_client =
BlockRazorClient::new_http(rpc_url.clone(), endpoint.to_string(), auth_token);
Ok(Arc::new(blockrazor_client))
} else {
// Default to gRPC
// 使用 gRPC 模式(用户明确指定了非 Http 的 transport
let endpoint = SwqosConfig::get_endpoint(SwqosType::BlockRazor, region, url);
let blockrazor_client =
BlockRazorClient::new_grpc(rpc_url.clone(), endpoint.to_string(), auth_token).await?;