bnb-chain/bsc: The Go Client Behind BNB Smart Chain
A BNB Smart Chain client based on the go-ethereum fork
At a glance
- What is it?
- A go-ethereum fork that swaps Proof of Work for a 21-validator PoSA engine called Parlia. Here is what it builds, how to run it, and where it stops being the right tool.
- Who is it for?
- Run bnb-chain/bsc if you need an EVM-compatible node on BSC, whether as a full node, archive node, or validator. Skip it if you want an Ethereum mainnet client, since the consensus engine and system contracts differ from upstream go-ethereum.
- Can I use it commercially?
- Yes, with conditions. LGPL-3.0 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What bnb-chain/bsc Actually Is, and Who Needs It
BNB Smart Chain is a separate chain that reuses Ethereum's execution layer. The repository is a fork of go-ethereum, and the README is direct about why: staying compatible with existing smart contracts and Ethereum tooling was easier than writing an execution client from scratch. That decision shapes everything else. Binaries are still named geth, the command layout mirrors upstream, and much of the documentation the README points to is Ethereum documentation.
So the audience is narrow and specific. You need this client if you are running a node that talks to BSC and not to Ethereum mainnet. That covers RPC providers, exchanges that need to verify chain state themselves, bridge operators, and validators. If you only write Solidity and deploy through a hosted endpoint, you never touch this repository. The README's own framing is that BSC exists to bring programmability and interoperability to BNB Beacon Chain, with BNB serving as both gas and staking token.
The fork relationship is also the main source of confusion. Because the module path in go.mod is still github.com/ethereum/go-ethereum, the build output and many internal identifiers look like Ethereum's. A reader who greps for the BSC name will not find it in most of the tree.
Parlia: How 21 Validators Replace Mining
The consensus engine is the real difference from upstream go-ethereum. BSC uses Proof of Staked Authority, which the README describes as a combination of delegated proof of stake and proof of authority. The mechanism has four moving parts. Blocks are produced by a limited validator set. Validators take turns producing blocks in a round-robin, similar to Ethereum's Clique engine. The validator set is elected in and out through staking-based governance. And the engine interacts with a set of system contracts to handle liveness slashing, revenue distribution, and validator set renewal.
The README states the validator count as 21. That number is the trade-off in one line: short block times and low fees, at the cost of decentralization relative to a large mining network. The README itself acknowledges the standard criticism of proof-of-authority systems, that validators hold all the authority and are exposed to corruption and security attacks, and presents the staking-based election as the mitigation. Double-sign detection and slashing logic are what the README cites for security, stability, and chain finality.
For an operator, the practical consequence is that validator duties are not symmetric with Ethereum. Producing blocks depends on being in the elected set, and the slashing rules are enforced by contracts rather than by the consensus engine alone. Running a BSC validator is a staking operation as much as it is an infrastructure operation.
Building geth from Source
The README's build instructions are close to go-ethereum's and assume a Go toolchain and a C compiler. It states Go 1.24 or later and GCC 5 or higher. The go.mod file in the repository declares go 1.25.0, and the Dockerfile builds against golang:1.26-alpine, so the README's minimum is a floor rather than the version the project itself compiles with.
Once the toolchain is in place, the documented build command is a single make target:
make gethThe Makefile runs go run build/ci.go install ./cmd/geth and prints the path of the resulting binary, ./build/bin/geth, along with the command to launch it. A second target builds everything:
make allThe README also documents a build failure worth knowing about in advance. If a self-built binary exits with a SIGILL error mentioning blst_cgo_init, the fix it gives is to export two environment variables and rebuild:
export CGO_CFLAGS="-O -D__BLST_PORTABLE__"
export CGO_CFLAGS_ALLOW="-O -D__BLST_PORTABLE__"The Dockerfile sets both of these during its own build, which is a reasonable sign that the portable flag is the intended configuration rather than a workaround for one machine.
Running a Node with Docker Compose
The repository ships a docker-compose.yaml, and it is a more complete starting point than the README's build section. It defines two services. An init service based on alpine runs chown -R 1000:1000 /data to fix ownership on the data volume. The bsc service builds from the repository Dockerfile and sets NETWORK=mainnet.
services:
bsc:
build:
context: .
dockerfile: Dockerfile
environment:
- NETWORK=mainnet
ports:
- 30303:30303
- 30311:30311
- 8545:8545
- 8546:8546
- 8575:8575
- 8576:8576The port list tells you what the container exposes. 30303 is the peer-to-peer port. 8545 and 8546 are the HTTP and WebSocket RPC endpoints, and the healthcheck in the same file confirms the convention by probing 8545 for mainnet and 8575 for testnet. The Dockerfile declares its own exposed set as 8545, 8546, 8547, and 30303, so the compose file and the image are not in perfect agreement about the full list.
The data and config volumes are bind mounts to /tmp/bsc/data/mainnet and /tmp/bsc/config/mainnet. That is a hardcoded path, not a variable. On a machine where /tmp is cleared on reboot, or where you want chain data on a separate disk, you will edit the compose file before the first start. Nothing in the README documents migrating that data afterward.
Release Tracks and What They Commit You To
BSC publishes three kinds of release, and the naming scheme is the only signal about stability. Stable releases use v<Major>.<Minor>.<Patch>, for example v1.5.19. Feature releases append -feature-<FeatureName> and the README describes them as early access to a single feature without affecting the core product. Preview releases append a maturity marker: alpha, beta, or rc, with alpha described as experimental.
Recent tags follow that scheme. v1.7.8 is a stable release from 2026-08-11, and v1.8.0-alpha is a preview from 2026-08-13. The gap between them is two days, which is worth noticing: the alpha line and the stable line move close together, so a version number alone does not tell you how far ahead the preview is. The README does not document a rollback procedure for a node that has already synced on a preview build, and it does not describe database compatibility between minor versions. If you run a validator, that silence matters more than the feature list.
Where This Client Is the Wrong Choice
The clearest limitation is the one the README states plainly: this is a fork, and it is a fork of a specific upstream. It is not an Ethereum mainnet client. Pointing it at Ethereum peers will not produce a working node, because the consensus engine, the validator set, and the system contracts it depends on do not exist there. If your requirement is Ethereum, use go-ethereum.
The second limitation is the consensus model itself. A 21-validator set is a small set. The README frames this as a deliberate trade for block time and fees, and it is honest about the criticism, but the consequence for a user is that finality and censorship resistance rest on a much smaller group than a proof-of-work or large proof-of-stake network. If your application's threat model assumes a large, permissionless validator population, BSC is the wrong chain regardless of which client you run.
The third is operational. The repository carries a SECURITY.md but the README does not document a rollback path, a database migration guide, or version compatibility guarantees between releases. A node operator has to decide independently how to handle a bad upgrade.
Alternatives and How They Differ
The obvious alternative is go-ethereum itself. The difference is not cosmetic. Upstream go-ethereum runs Ethereum's consensus, which after the merge is proof of stake with a beacon chain, and the repository's beacon/ directory exists here because the fork inherits that code. BSC replaces the block production path with Parlia and a 21-validator elected set. If you are building EVM tooling that must work on both chains, that divergence is the thing to design around: the JSON-RPC surface is largely shared, the block production rules are not.
A second comparison is with other EVM-compatible chains that also fork an existing client. The pattern is common, and the trade-off is usually the same: you inherit a mature execution layer and a large tooling ecosystem, and you take on the maintenance burden of tracking upstream changes while carrying your own consensus modifications. The go.mod here still depends on bnb-chain packages such as fastssz and ics23 alongside the Ethereum-derived ones, which is a visible sign of that dual lineage.
If your actual need is a hosted RPC endpoint rather than a node, none of these clients are the answer. The related searches around BSC RPC and BSC Chain explorer point at services, not at this repository.
Licence and Maintenance Cost
The repository is licensed under LGPL-3.0, and the tree confirms it with both COPYING and COPYING.LESSER at the top level. LGPL is a copyleft licence with a linking exception relative to the GPL, and it carries obligations around distributing modified versions of the library. If you build a modified geth and ship it, those obligations apply. This is a description of the licence file, not legal advice; talk to someone qualified before shipping a modified binary.
On maintenance, the last push to the default branch was on 2026-09-23, one day before the date used for this review, so the repository is under current development. The release cadence supports that: v1.7.7 on 2026-07-22, v1.7.8 on 2026-08-11, and v1.8.0-alpha on 2026-08-13. The upgrade cost for an operator is the fork-tracking cost. Every upstream go-ethereum change that BSC wants has to be merged into a tree that also carries Parlia, the system contracts, and the BNB-specific packages, and each release is a decision about which line to follow.
Editorial conclusion
Run bnb-chain/bsc if you need an EVM-compatible node on BSC, whether as a full node, archive node, or validator. Skip it if you want an Ethereum mainnet client, since the consensus engine and system contracts differ from upstream go-ethereum. Before you commit, confirm which release track you are on, check whether the binary you built hits the blst SIGILL error, and review the LGPL-3.0 terms against how you plan to distribute your build.
Frequently asked questions
Is BNB Chain the same as BSC?
The repository describes BNB Smart Chain as a chain that brings programmability and interoperability to BNB Beacon Chain, and the client itself is the BSC node software. BNB is the native token on BSC, used for gas and for staking.
Is BSC now BNB?
The repository uses the name BNB Smart Chain and the abbreviation BSC interchangeably, and BNB is the native token that pays gas and is used for staking on that chain. The README does not describe a rename of the chain.
Is BNB Chain and BSC the same thing?
In this repository the two names refer to the same subject: the README titles the project BNB Smart Chain and describes it as the chain this client runs. BNB is the token, BSC is the chain the client connects to.
Is bnb chain bsc?
The README presents BNB Smart Chain as the chain this client implements, and the repository is named bnb-chain/bsc, so the two names point at the same project here. The native token is BNB, which the README says pays gas to deploy or invoke a smart contract.
Is BSC better than Solana?
The repository does not compare BSC with Solana, so there is nothing in it to support that judgement. What the README does state is that BSC uses Proof of Staked Authority with a limited validator set, elected through staking-based governance.
What is BNB bsc wallet?
The README does not describe a wallet. It describes the geth binary as the entry point into the BSC network, capable of running as a full node, an archive node, or a light node, with RPC interfaces that wallet software would connect to.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/bnb-chain-bsc)