Bsc Api list
Finality API¶
Finality is a crucial aspect of blockchain security, ensuring that once a block is confirmed, it cannot be reversed or altered. This provides users with the confidence to act on the information in the block without delay.
Probabilistic Finality and Economic Finality¶
BNB Smart Chain (BSC) implements a dual-layer finality mechanism combining Economic Finality and Probabilistic Finality to ensure transaction security and network efficiency.
Economic Finality (Fast Finality)¶
The Fast Finality feature, introduced through BEP-126, enables Economic Finality using a slashing mechanism similar to Casper FFG and Tendermint. Key characteristics:
- Block n achieves economic finality by block n+2
- Transaction finality time: ~3.75 seconds (with 1.5 seconds block time)
- Economic penalties make block reversal extremely expensive
- Validators violating voting rules forfeit part of their staked assets
This significantly improves user experience through faster and more reliable transaction confirmations.
Probabilistic Finality (Fallback Mechanism)¶
When Fast Finality is unavailable, BSC falls back to Probabilistic Finality. Security increases as more blocks are added - the deeper a block is buried, the lower the probability of reversal.
Network Parameters: - TurnLength: 8 (consecutive blocks per validator) - ValidatorSize: 21 (total active validators) - Block Time: ~1.5 seconds
Finality Requirements: - Majority (>½) validator confirmations: 88 blocks (11 × 8) ≈ 132 seconds - Supermajority (>⅔) validator confirmations: 120 blocks (15 × 8) ≈ 180 seconds
Formula: Required Blocks = n × TurnLength
- Where n = 11 (majority) or 15 (supermajority consensus)
This dual-layer approach ensures network security and finality guarantees even when Fast Finality encounters issues.
Economic Finality API¶
eth_getHeaderByNumber as in the Ethereum client.¶
Parameters
BlockNumber QUANTITY|TAG
- HEX String - an integer block number
- String “earliest” for the earliest/genesis block
- String “latest” - for the latest mined block
- String “safe” - for the latest justified head block
- String “finalized” - for the latest finalized block
eth_getBlockByNumber as in the Ethereum client.¶
Parameters
BlockNumber QUANTITY|TAG
- HEX String - an integer block number
- String “earliest” for the earliest/genesis block
- String “latest” - for the latest mined block
- String “safe” - for the latest justified head block
- String “finalized” - for the latest finalized block
Full_transaction_flag Boolean
- If true it returns the full transaction objects, if false only the hashes of the transactions.
eth_newFinalizedHeaderFilter¶
Here are two APIs that can help you trace the latest finalized blocks: 1. Create a finalized header filter:
curl -X POST "http://localhost:8545" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_newFinalizedHeaderFilter","params":[],"id":1}'
{"jsonrpc":"2.0","id":1,"result":"0xcbdc7c21459e2cfbf72e2028f15a98c"}
curl -X POST "http://localhost:8545" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0xcbdc7c21459e2cfbf72e2028f15a98c"],"id":1}'
{"jsonrpc":"2.0","id":1,"result":["0x4b52061726b9f15905217699fd5dab8ff9bb704b3b16d27c34541cb15752a91f","0x2b984b80b25f0dddc92ba11290a3d250fc8a3ec6a09bd485c21dbbb8155d2f90"]}
Combined Probabilistic Finality and Economic Finality API¶
These methods allow you to handle block finality using a straightforward API.
eth_getFinalizedHeader¶
verifiedValidatorNum
must be within the range[1, len(currentValidators)]
,with the exception that:-1
represents at leastlen(currentValidators) * 1/2
-2
represents at leastlen(currentValidators) * 2/3
-3
represents at leastlen(currentValidators)
- This function calculates
probabilisticFinalizedHeight
as the highest height of the block verified byverifiedValidatorNum
validators and then returns the block header with a height equal tomax(fastFinalizedHeight, probabilisticFinalizedHeight)
. - The height of the returned block header is guaranteed to increase monotonically.
For example:
curl -X POST "http://localhost:8545/" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getFinalizedHeader","params":[15],"id":1}'
eth_getFinalizedBlock¶
verifiedValidatorNum
must be within the range[1, len(currentValidators)]
,with the exception that:-1
represents at leastlen(currentValidators) * 1/2
-2
represents at leastlen(currentValidators) * 2/3
-3
represents at leastlen(currentValidators)
- This function calculates
probabilisticFinalizedHeight
as the highest height of the block verified byverifiedValidatorNum
validators and then returns the block header with a height equal tomax(fastFinalizedHeight, probabilisticFinalizedHeight)
. - If
fullTx
is true, the block includes all transactions; otherwise, only transaction hashes are included. - The height of the returned block is guaranteed to be monotonically increasing.
For example:
curl -X POST "http://localhost:8545/" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getFinalizedBlock","params":[11, false],"id":1}' curl -X POST "http://localhost:8545/" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getFinalizedBlock","params":[15, true],"id":1}'
Blob API¶
eth_getBlobSidecarByTxHash¶
Parameters
Hash String (REQUIRED)
- HEX String - the hash of the transaction
full_blob_flag Boolean (OPTIONAL)
- Default is true. If ture it returns the full blob info, if false only return first 32 bytes of blobs.
curl -X POST "http://localhost:8545/" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBlobSidecarByTxHash","params":["0x377d3615d2e76f4dcc0c9a1674d2f5487cba7644192e7a4a5af9fe5f08b60a63"],"id":1}'
curl -X POST "http://localhost:8545/" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBlobSidecarByTxHash","params":["0x377d3615d2e76f4dcc0c9a1674d2f5487cba7644192e7a4a5af9fe5f08b60a63", false],"id":1}'
eth_getBlobSidecars¶
Parameters
BlockNumber QUANTITY|TAG
- HEX String - an integer block number
- HEX String - the hash of the block
- String “earliest” for the earliest/genesis block
- String “latest” - for the latest mined block
- String “safe” - for the latest justified head block
- String “finalized” - for the latest finalized block
full_blob_flag Boolean (OPTIONAL)
- Default is true. If ture it returns the full blob info, if false only return first 32 bytes of blobs.
curl -X POST "http://localhost:8545/" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBlobSidecars","params":["latest"],"id":1}'
curl -X POST "http://localhost:8545/" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBlobSidecarByTxHash","params":["0xc5043f", false],"id":1}'
Others¶
eth_health¶
- a health check endpoint to detect whether the RPC func of a node is ok. Return true is ok, false is no health.
curl -X POST "http://localhost:8545/" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_health","params":[],"id":1}'
eth_getTransactionsByBlockNumber¶
- get all the transactions for the given block number.
Parameters
BlockNumber QUANTITY|TAG
- HEX String - an integer block number
- String “earliest” for the earliest/genesis block
- String “latest” - for the latest mined block
- String “safe” - for the latest justified head block
- String “finalized” - for the latest finalized block
curl -X POST "http://localhost:8545/" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getTransactionsByBlockNumber","params":["0x539492"],"id":1}'
eth_getTransactionDataAndReceipt¶
- get the original transaction data and transaction receipt for the given transaction hash.
Parameters
Hash String (REQUIRED)
- HEX String - the hash of the transaction
curl -X POST "http://localhost:8545/" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getTransactionDataAndReceipt","params":["0x516a2ab1506b020e7f49d0d0ddbc471065624d1a603087262cebf4ca114ff588"],"id":1}'