← zeminus  /  docs

Documentation

Zeminus is a block builder for BNB Smart Chain. Searchers send bundles to a public RPC; validators receive our block bids through the standard BSC builder API.

These docs are a work in progress. Policy changes are listed in the Changelog.

#Quickstart

Validator onboarding is in progress. Until the first validator is registered, bundles are accepted and simulated but not yet included in blocks. Updates are posted in the Changelog.

Send a bundle with no account and no API key:

curl -s https://rpc.bsc.zeminus.com \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_sendBundle","params":[{"txs":["0x<signed raw tx>"]}]}'

Optionally sign the request to identify yourself and raise your rate limits (Flashbots-style header, any Ethereum key — it does not need funds):

import { Wallet, id } from "ethers"; // ethers v6

const signer = new Wallet(process.env.SIGNING_KEY);
const body = JSON.stringify({
  jsonrpc: "2.0", id: 1, method: "eth_sendBundle",
  params: [{ txs: [signedTx1, signedTx2] }],
});
const signature = await signer.signMessage(id(body)); // EIP-191 over keccak256(body) as hex

const res = await fetch("https://rpc.bsc.zeminus.com", {
  method: "POST",
  headers: {
    "content-type": "application/json",
    "X-Flashbots-Signature": `${signer.address}:${signature}`,
  },
  body,
});
console.log(await res.json()); // { result: "0x<bundle hash>" }

#Orderflow

Zeminus accepts searcher bundles and validator integration on BNB Smart Chain (BSC).

#Bundles

A bundle is an ordered list of signed transactions that either all execute, in the listed order, within one block — or are not included.

#RPC Endpoints

EndpointProtocol
https://rpc.bsc.zeminus.comJSON-RPC over HTTPS (HTTP/2)
wss://rpc.bsc.zeminus.com/wsJSON-RPC over WebSocket
Status: see /status.json. Region: US East. Additional regions will use the same hostname.

Authentication and rate limits

There is no account and no API key. Signing a request is optional; it identifies you and raises your limits.

TierBundles per 9 sTransactions per bundle
Unsigned (per IP)505
Signed (per signing address)10010

#API

eth_sendBundle

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_sendBundle",
  "params": [{
    "txs": ["0x…", "0x…"],
    "revertingTxHashes": ["0x…"],
    "noMerge": false
  }]
}
FieldRequiredDescription
txsyesSigned raw transactions, in execution order
maxBlockNumbernoLast block the bundle is valid for. Default: current block + 100
maxTimestampnoLast Unix timestamp (seconds) the bundle is valid for
revertingTxHashesnoTransaction hashes allowed to revert
noMergenoDo not merge with other bundles. Default false

Response: {"jsonrpc":"2.0","id":1,"result":"0x<bundle hash>"}

zeminus_getBundleStatus

{"jsonrpc":"2.0","id":1,"method":"zeminus_getBundleStatus","params":["0x<bundle hash>"]}

Takes exactly one bundle hash, as returned by eth_sendBundle. No signature is needed. Available on HTTPS and WebSocket; rate-limited to 10 calls per second per IP, separate from bundle limits (-38000 when exceeded, -32602 for an invalid hash).

{"hash":"0x…","receivedAt":"2026-10-29T01:00:00Z","targetBlock":…,"maxBlock":…,"state":"failed",
 "failure":{"reason":"reverted","txIndex":1,"txHash":"0x…","detail":"…"}}
FieldDescription
statepending · failed · expired · included · not_found (unknown, or older than the retention window)
receivedAt, targetBlock, maxBlock, maxTimestampFirst receipt time (UTC) and the latest accepted block range
failureLatest failed attempt: reason, zero-based txIndex and txHash (absent for bundle-wide errors), and detail (up to 512 bytes)
firstFailureThe first failure, kept after later attempts succeed
shadowThe bundle was placed in one of our assembled candidate blocks (block, pass, fees). This is not inclusion.
onchainAll bundle transactions were observed, in order, in a canonical block (block, blockHash, txIndex). Not finality, and not proof that our bid won; cleared if the block is reorged.

Errors

CodeMeaning
-38000Bundle rejected — the message gives the reason (below)
-32601Method not available on this endpoint
-32603invalid signature

-38000 reasons: empty bundle · bundle missing txs · too many txs in bundle · bundle exceeds 50 txs · gas price below minimum · rate limited · bundle pool full · duplicate transaction · invalid transaction · invalid transaction chain · blob transactions are not supported · backrunTarget is not supported on public ingress · revertingTxHashes contains unknown transaction · bundle target block already passed · bundle target block too far ahead · maxBlockNumber < target block · maxBlockNumber too far ahead · maxTimestamp already passed · invalid timestamp range · invalid bundle fields

#For validators

Zeminus submits block bids through the standard BSC builder API. To receive them, add Zeminus to your builder list with the values below.

#Block Building

Zeminus builds BSC blocks and submits its block bids to registered validators through the standard BSC builder API (BidBlock).

#Glossary

#Changelog

Date (UTC)Change
2026-10-29Homepage and docs refocused on the BSC builder; quickstart and validators section added. Homepage lists the bundle status query as a principle; sandwich filtering is noted as standard on BSC.
2026-10-28zeminus_getBundleStatus (bundle status query) available on HTTPS and WebSocket.
2026-10-28Sandwich filter published as open source (MIT): zeminus/bsc-sandwich-filter.
2026-10-25mev_reportIssue opened to any address (rate-limited, logged). IP registration is no longer needed.
2026-10-24BSC builder documentation published: orderflow, bundles, RPC endpoints, block building, API.

#Security

To report a vulnerability, email security@zeminus.com. Contact details and policy are in security.txt.

#Official channels

These are the only official Zeminus channels. Anything else claiming to be Zeminus is not us.

We never ask for a private key or seed phrase, and never ask you to sign a transaction or approval to "verify" anything. Partnership contact from Zeminus comes only from @zeminusxyz on Telegram or an @zeminus.com address. Any Zeminus endpoint lives under *.zeminus.com.

To report a security issue or an impersonation, see security.txt.

#License

The sandwich filter is open source under the MIT License: github.com/zeminus/bsc-sandwich-filter.

Other Zeminus source is planned for release under the Business Source License 1.1 (BUSL-1.1): source-available, with production use restricted until the change date, after which it converts to an open-source license.

#FAQ

Is Zeminus live? The endpoint is live and accepts bundles. Validator onboarding is in progress; until the first validator registers Zeminus, bundles are simulated but not included in blocks. Endpoint status is under RPC Endpoints.

What chains? BNB Smart Chain first. Ethereum is next.