BNB Smart Chain
Pronto para usar isso em produção?
O plano gratuito cobre projetos pessoais. O pay-as-you-go escala sem cartão de crédito.
BNB Smart Chain
O plano gratuito cobre projetos pessoais. O pay-as-you-go escala sem cartão de crédito.
For Rust developers, the rust-web3 crate is the established way to interact with BNB Smart Chain, exposing JSON-RPC calls as ordinary async functions over a typed client. Its whole API is asynchronous, so it leans on the Tokio runtime to drive futures to completion. To get started, declare two dependencies in Cargo.toml: tokio = { version = "1", features = ["full"] } for the async runtime and web3 = "0.19" for the client itself. That pairing is enough to read balances and send transactions on chain 56.
The Tokio dependency is not optional: rust-web3's futures need an executor, and tokio with the full feature set provides the timers, I/O, and multi-threaded scheduler they expect. Pin both crates explicitly in Cargo.toml, tokio at version "1" with features = ["full"] plus web3 at "0.19", so your BSC client builds reproducibly.
Client setup is a two-stage move. First build the HTTP transport, web3::transports::Http::new("https://bsc.therpc.io/YOUR_API_KEY"), then wrap it with web3::Web3::new(transport) to get the high-level client bound to BNB Smart Chain. Every network method returns a Result, which suits Rust idioms nicely: inside an async function you propagate failures upward with the ? operator, so a balance read on chain 56 either yields a value or short-circuits with a typed error.
To work with a deployed contract, load its ABI through Contract::from_json, supplying the client, the on-chain address, and the ABI bytes. That binds a typed handle to, say, a BEP-20 token on chain 56. The crate then separates the two access patterns by method: contract.query() runs a read-only eth_call and decodes the return value, while contract.call() submits a state-changing transaction to BNB Smart Chain that costs gas and must be mined.
Idiomatic Rust error handling for BSC starts with thiserror: derive a custom error enum whose variants wrap web3::Error alongside your own cases, so callers match on meaningful kinds instead of stringly-typed failures. On top of that, expose convenience wrappers like safe_get_balance and safe_send that handle the unit conversion for you, turning a raw U256 wei amount into an f64 BNB figure at the boundary. Application code then deals in human-scale numbers while the precise integer math stays internal to chain-56 calls.
Live block tracking via subscribe_new_heads returns a Stream of headers, and streaming pushes data the HTTP transport cannot deliver, so this path requires a WebSocket transport pointed at the wss:// form of your BSC endpoint. Pull futures::StreamExt into scope to get the combinators you need, then drain the stream in a while let Some(header) = stream.next().await loop, reacting to each new chain-56 head as it arrives.
Because the client is async, your tests must run on the runtime too — annotate them with #[tokio::test] so each async test function gets its own executor. Just as important, aim tests at a local node such as http://localhost:8545 or a forked instance of BNB Smart Chain rather than the production endpoint; a test suite that pounds the live chain-56 URL wastes your request budget and can produce flaky results when network conditions shift.