# Table of Contents - [Send Bundle | BlockRazor](#send-bundle-blockrazor) - [About BlockRazor | BlockRazor](#about-blockrazor-blockrazor) - [Searcher | BlockRazor](#searcher-blockrazor) - [Wallet / DEX | BlockRazor](#wallet-dex-blockrazor) - [Authentication | BlockRazor](#authentication-blockrazor) - [Trading Bot | BlockRazor](#trading-bot-blockrazor) - [Supported Chains | BlockRazor](#supported-chains-blockrazor) - [Algorithmic Trading | BlockRazor](#algorithmic-trading-blockrazor) - [Individual Trader | BlockRazor](#individual-trader-blockrazor) - [Fast | BlockRazor](#fast-blockrazor) - [Pricing | BlockRazor](#pricing-blockrazor) - [RPC | BlockRazor](#rpc-blockrazor) - [Gas Sponsor | BlockRazor](#gas-sponsor-blockrazor) - [Bundle | BlockRazor](#bundle-blockrazor) - [Mempool | BlockRazor](#mempool-blockrazor) - [Block Stream | BlockRazor](#block-stream-blockrazor) - [Node Stream | BlockRazor](#node-stream-blockrazor) - [Network Fee Stream | BlockRazor](#network-fee-stream-blockrazor) - [Send PrivateTransaction | BlockRazor](#send-privatetransaction-blockrazor) - [Overview | BlockRazor](#overview-blockrazor) - [Block Builder | BlockRazor](#block-builder-blockrazor) - [Privacy Statement | BlockRazor](#privacy-statement-blockrazor) - [Call Bundle | BlockRazor](#call-bundle-blockrazor) - [Trace Bundle | BlockRazor](#trace-bundle-blockrazor) - [Private Mempool | BlockRazor](#private-mempool-blockrazor) - [Public Mempool | BlockRazor](#public-mempool-blockrazor) - [BSC | BlockRazor](#bsc-blockrazor) - [BSC | BlockRazor](#bsc-blockrazor) - [NewBlocks | BlockRazor](#newblocks-blockrazor) - [Send Transaction | BlockRazor](#send-transaction-blockrazor) - [Solana | BlockRazor](#solana-blockrazor) - [Shred Stream | BlockRazor](#shred-stream-blockrazor) - [Base | BlockRazor](#base-blockrazor) - [Monad | BlockRazor](#monad-blockrazor) - [Solana | BlockRazor](#solana-blockrazor) - [BSC | BlockRazor](#bsc-blockrazor) - [Get FlashBlockStream | BlockRazor](#get-flashblockstream-blockrazor) - [Base | BlockRazor](#base-blockrazor) - [Base | BlockRazor](#base-blockrazor) - [BSC | BlockRazor](#bsc-blockrazor) - [Monad | BlockRazor](#monad-blockrazor) - [Geyser Stream | BlockRazor](#geyser-stream-blockrazor) - [Sui | BlockRazor](#sui-blockrazor) - [Overview | BlockRazor](#overview-blockrazor) - [Solana | BlockRazor](#solana-blockrazor) - [Ethereum | BlockRazor](#ethereum-blockrazor) - [Get TransactionFee | BlockRazor](#get-transactionfee-blockrazor) - [Ethereum | BlockRazor](#ethereum-blockrazor) - [Overview | BlockRazor](#overview-blockrazor) - [Ethereum | BlockRazor](#ethereum-blockrazor) - [BSC | BlockRazor](#bsc-blockrazor) - [Searcher | BlockRazor](#searcher-blockrazor) - [Full Node Synchronization | BlockRazor](#full-node-synchronization-blockrazor) - [BSC | BlockRazor](#bsc-blockrazor) - [gRPC | BlockRazor](#grpc-blockrazor) - [Integration | BlockRazor](#integration-blockrazor) - [JSON-RPC | BlockRazor](#json-rpc-blockrazor) - [Send Transaction v2 | BlockRazor](#send-transaction-v2-blockrazor) - [GetAllGasPriceStream | BlockRazor](#getallgaspricestream-blockrazor) - [GetGasPriceStream | BlockRazor](#getgaspricestream-blockrazor) - [Get BlockStream | BlockRazor](#get-blockstream-blockrazor) - [Send RawTx | BlockRazor](#send-rawtx-blockrazor) - [eth_sendRawTransaction | BlockRazor](#eth-sendrawtransaction-blockrazor) - [Send RawTxBatch | BlockRazor](#send-rawtxbatch-blockrazor) - [JSON-RPC | BlockRazor](#json-rpc-blockrazor) - [Integration | BlockRazor](#integration-blockrazor) - [sui_executeTransactionBlock | BlockRazor](#sui-executetransactionblock-blockrazor) - [Project Builder | BlockRazor](#project-builder-blockrazor) - [Searcher | BlockRazor](#searcher-blockrazor) - [Project Builder | BlockRazor](#project-builder-blockrazor) --- # Send Bundle | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-bundle#introduction) Introduction This API is used to receive bundles, with the method name `eth_sendBundle`. The block construction algorithm of BlockRazor Builder favors bundles that transfer more native tokens (BNB) to BlockRazor Builder EOA of which address is 0x1266C6bE60392A8Ff346E8d5ECCd3E69dD9c5F20 currently. The gas price for transactions within the bundle must be at least the minimum standard required by BSC Validators (Currently at 0.05 gwei). For Tier 1 / Tier 2 users, 0 gwei transactions can be included in the bundle, but the average gasPrice of transactions(excluding those from the public mempool) must still be no less than 0.05 gwei. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-bundle#rate-limit) Rate Limit Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 BPS Unlimited Unlimited Unlimited Unlimited Unlimited Maximum number of bundles accepted per block Unlimited Unlimited Unlimited Unlimited Unlimited 0 gwei transaction in bundle \- \- ✅ ✅ ✅ ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-bundle#request-parameter) Request Parameter Parameters Mandatory Format Example Description txs Mandatory array\[hex\] \["0x…4b", "0x…5c"\] List of signed raw transactions maxBlockNumber Optional uint64 39177941 The maximum block number for the bundle to be valid, with the default set to the current block number + 100 minTimestamp Optional uint64 1710229370 Expected minimum Unix timestamp (in seconds) for the bundle to be valid maxTimestamp Optional uint64 1710829390 Expected maximum Unix timestamp (in seconds) for the bundle to be valid revertingTxHashes Optional array\[hash\] \["0x…c7", "0x…b7"\] List of transaction hashes allowed for revert noMerge Optional bool false Bundle merge can increase block value and inclusion rate. If not set, the default value is false (allowing bundle merging) positionFirst Optional bool false Strictly order bundles by priorityFee. If set to false (default), late-arriving bundles may be appended to the block tail to guarantee inclusion in the current block. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-bundle#request-example) Request Example HTTPS Copy curl https://virginia.builder.blockrazor.io \ -H 'content-type: application/json' \ -H 'Authorization: ' \ --data '{ "jsonrpc": "2.0", "id": "1", "method": "eth_sendBundle", "params": [{\ "txs": [\ "0x...4b",\ "0x...5c"\ ],\ "maxBlockNumber": 39177941,\ "minTimestamp": 1710229370,\ "maxTimestamp": 1710829390,\ "revertingTxHashes": [\ "0x44b89abe860142d3c3bda789cf955b69ba00b71882cd968ec407a70f4719ff06",\ "0x7d7652c685e9fda4fe2e41bad017519cffeed8ba03d59aa6401284be2ec4244c"\ ],\ "noMerge": false\ }] }' ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-bundle#response-example) Response Example Copy { "jsonrpc":"2.0", "id":"1", "result":"0xa06b……f7e8ec" //bundle hash }‍ Copy { "jsonrpc":"2.0", "id":"1", "error":{ "code":-38000, "message":"the maxBlockNumber should not be smaller than currentBlockNum" } } [PreviousOverviewchevron-left](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/overview) [NextSend PrivateTransactionchevron-right](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-privatetransaction) Last updated 14 days ago --- # About BlockRazor | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor#introduction) Introduction BlockRazor is a leading Web3 transaction infrastructure provider. Leveraging top-tier distributed network communication technology and architecture, BlockRazor serves a diverse range of users, including wallets, DEXs, trading bots, searchers, and quantitative trading systems. BlockRazor has launched core services such as Transaction Submission, Streams, and Block Builder across mainstream public chains including Ethereum, BSC, Solana, and Base, helping clients achieve optimal trade execution. ### [hashtag](https://blockrazor.gitbook.io/blockrazor#transaction-submission) Transaction Submission BlockRazor offers multiple transaction submission modes—including RPC, Gas Sponsor, Fast, and Bundle—tailored to specific client requirements: * RPC: Provides standard JSON-RPC methods with integrated MEV protection and support for real-time rebates. * Gas Sponsor: Provides Gas sponsorship for users who lack sufficient native tokens to pay transaction fees, significantly enhancing the user onboarding and trading experience. * Fast: Utilizes a global acceleration network to boost on-chain transaction speeds, ideal for users with extreme latency requirements. * Bundle: Enables users to execute transactions within the same block with the "signal transaction" via Bundles, specifically designed for scenarios like backrunning, copy trading, and token sniping. ### [hashtag](https://blockrazor.gitbook.io/blockrazor#streams) Streams BlockRazor provides a variety of high-performance data streams, including Mempool, Block Stream, Network Fee Stream, and Node Stream: * Mempool: Delivers low-latency pushes of pending transactions, allowing users to monitor signal transactions for backrunning, copy trading, and sniping in real-time. * Block Stream: Provides low-latency block data for trading program to monitor confirmed signal transactions or other transactions as they happen. * Network Fee Stream: Real-time pushes of Gas Price, Priority Fee, or Tips based on recent historical block data. * Node Stream: Synchronize data with full nodes for low latency and keep the world state updated in real-time. ### [hashtag](https://blockrazor.gitbook.io/blockrazor#block-builder) Block Builder [Block Builder](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder) provides BSC block building services based on PBS architecture. Deployed in multiple regions around the world with low-latency communication to validators, Block Builder run multiple algorithms to maximize the block value, realizing the construction of competitive blocks. BlockRazor's Block Builder has a historical cumulative block production rate of 37%, ranking first in the entire BSC chain. To view the real-time block production rate, please visit [https://dune.com/bnbchain/bnb-smart-chain-mev-statsarrow-up-right](https://dune.com/bnbchain/bnb-smart-chain-mev-stats) . [NextSupported Chainschevron-right](https://blockrazor.gitbook.io/blockrazor/supported-chains) Last updated 1 month ago --- # Searcher | BlockRazor As competition becomes increasingly fierce, Searchers can no longer win solely with Alpha strategies; they must also possess Beta competitiveness to further improve their chances of success. What is Beta competitiveness? If we liken the competition among Searchers to a war, Alpha strategies are the strategies and tactics, while Beta competitiveness represents the infrastructure such as equipment and supplies, which are prerequisite for competition. Beta competitiveness consists of speed, inclusion certainty, and cost, which helps to increase Searcher’s chances of winning from different aspects. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher#speed) Speed The time interval of block production is fixed. To send the bundle to the Builder in time on the assembly line, the Searcher needs to minimize the time spent processing the bundle. The main steps for the Searcher to process a bundle are as follows: 1. Subscribe to target transactions and synchronize the latest block. 2. Based on the world state of the latest block, calculate the arbitrage opportunities for each transaction according to the Alpha strategy. 3. Filter the arbitrage opportunities and assemble the selected target transactions and strategy transactions into a bundle in a specified order. 4. Send the bundle to the Builder. From the steps mentioned above, the time the Searcher takes to process the bundle is composed of the lantency of transaction subscription, the arbitrage calculation time, and the lantency of bundle sending to builders. Furthermore, synchronizing the latest world state is a prerequisite for calculating arbitrage opportunities (calculating based on old state would distort the arbitrage action and lose the competitiveness of the Alpha strategy). If the state synchronization lantency is high, it will severely compress the time available for arbitrage calculation, especially during periods of network congestion, which can put immense pressure on computational performance. In the last step of the bundle processing, the Searcher need to submit the bundle consisting of the target transaction and the arbitrage transaction to the mainstream Builders, ensuring that the bundle is included in all blocks participating in the auction, to increase the speed of the bundle inclusion. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher#cost) Cost Cost directly affects the profit of a Searcher. Searchers that are evenly matched in terms of Alpha strategy, speed, and inclusion certainty may not differ much in capturing arbitrage opportunities and calculating arbitrage space. However, if the average cost per arbitrage opportunity varies significantly, over the long term, Searchers with higher costs will gradually become less competitive due to lower profits. The costs for a Searcher mainly include the execution cost of the Alpha strategy, the cost of improving speed, the cost of enhancing inclusion certainty, and transaction fees. Increasing costs can improve Beta competitiveness, but it also impacts profits. Therefore, it is essential to prioritize and make appropriate trade-offs. **Execution Cost of The Alpha Strategy** The execution of Alpha strategies incurs computational costs. Since the Alpha strategy is the core competitive advantage of a Searcher, and its execution speed also directly affects the processing time of bundles, this cost cannot be reduced. **Cost of Speed Improvement** Improving speed invloves cost of development and server. To reduce transaction subscription latency, bundle sending latency, and the latency in synchronizing the latest world state, it is necessary to develop algorithms and build a high-speed backbone network. This is too costly for a Searcher, so utilizing established third-party services is a cost-effective choice. Enhancing inclusion certainty primarily involves the cost of removing Builder rate limits. Searchers can attempt to freely integrate with RPCs that allow sending [bundles](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle) , which will forward the bundles to mainstream Builders. This approach not only saves costs but also ensures speed and inclusion certainty of transactions. **Transaction Fee** When calculating the arbitrage opportunity space, only when the arbitrage space minus the transaction fee is greater than 0 is it considered an arbitrage opportunity. If transaction fees can be reduced to 0, then even the arbitrage opportunities generated by smallest market fluctuations can be captured. Trading at 0 gwei not only saves transaction costs but also greatly expands the range of arbitrage opportunities that the Alpha strategy can capture. Currently, Builders on BSC support receiving transactions at 0 gwei. For Searchers whose Alpha strategy focuses on expanding the range of arbitrage opportunities, they should try to send transactions at 0 gwei as much as possible to eliminate this cost. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher#how-does-blockrazor-enhance-the-beta-competitiveness) How does BlockRazor enhance the Beta competitiveness? #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher#speed-1) Speed BlockRazor provides Searchers with [Private Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) and [Block Stream](https://blockrazor.gitbook.io/blockrazor/streams/block-stream) services, enabling them to subscribe to transactions and synchronize blocks with extremely low latency. Benchmark shows that compared to the industry-leading high-performance network provider bloXroute, BlockRazor can receive the latest transactions with lower latency. Detailed data comparisons are as follows: ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252F9XGrscx2XaO8YIbYSOTz%252Fimage.png%3Falt%3Dmedia%26token%3Da2290ce6-a142-4eb7-b250-d239caa51694&width=768&dpr=3&quality=100&sign=6f38b191&sv=2) Additionally, BlockRazor also demonstrates excellent performance in terms of latency of synchronization of the latest world state, better meeting the needs of speed-sensitive users. For the complete comparison results, please refer to the [benchmarkarrow-up-right](https://medium.com/@blockrazor/to-build-the-competitive-high-performance-network-d7c0705b5171) . Searchers can directly integrate with [Bundle](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle) , constructing a bundle consisting of mempool transactions and strategy transactions and submitting it to BlockRazor RPC, which will forward it to mainstream Builders at the earliest opportunity. Additionally, based on a globally distributed network, BlockRazor RPC achieves end-to-end low-latency forwarding at the network level. ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252Fk384Kehz2eLcCPP7wYb5%252Fimage.png%3Falt%3Dmedia%26token%3D2dd43255-1e09-4a50-ad8d-49a587ff9028&width=768&dpr=3&quality=100&sign=53e0484a&sv=2) The benchmark client sends transactions to BlockRazor RPC, A RPC, and B RPC, recording the difference between the latest block number at the time of sending the transaction and the block number in which the transaction is included. A smaller difference indicates a faster on-chain speed. The chart data shows that transactions submitted to Scutum have a probability of being included in the next block as high as 95%, and 100% probability being included in the next 2 blocks, which significantly surpasses that of competitors. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher#cost-1) Cost BlockRazor's subscription plans are highly competitive in terms of pricing, and Searchers are allowed to send 0 gwei transactions to the Builder with the highest block production rate on BSC. Additionally, Searchers can subscribe to the [Private Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) , and by executing backrun strategies, they can further expand the range of arbitrage opportunities. The profits generated from this can be used to subsidize the costs associated with the subscription plan. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher#how-to-use-blockrazor-service) How to use BlockRazor Service #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher#arbitrage-of-private-mempool) **Arbitrage of Private Mempool** 1. [Registerarrow-up-right](https://www.blockrazor.io/#/register) for BlockRazor 2. [Log inarrow-up-right](https://www.blockrazor.io/#/login) to BlockRazor, subscribe to the plan of Tier 2 and above, and go to the account module to obtain the auth token 3. [Subscribe](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) to the Private Mempool 4. Execute the arbitrage strategy, and submit bundle to BlockRazor RPC using [Bundle](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle) #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher#arbitrage-of-mempool-transacions) **Arbitrage of Mempool Transacions** 1. [Registerarrow-up-right](https://www.blockrazor.io/#/register) for BlockRazor 2. [Log inarrow-up-right](https://www.blockrazor.io/#/login) to BlockRazor, subscribe to the plan of Tier 3 and above, and go to the account module to obtain the auth token 3. Integrate the [Public Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool) to subscribe to the latest transactions with low latency; synchronize blocks with low latency through [Node Stream](https://blockrazor.gitbook.io/blockrazor/streams/node-stream) if you have local node. 4. Execute the arbitrage strategy, and submit bundle to BlockRazor RPC using [Bundle](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle) . #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher#id-0-gwei-transaction-at-end-of-block) **0 Gwei Transaction at End of Block** 1. [Registerarrow-up-right](https://www.blockrazor.io/#/register) for BlockRazor 2. [Log inarrow-up-right](https://www.blockrazor.io/#/login) to BlockRazor, subscribe to the plan of Tier 2 and above, and go to the account module to obtain the auth token 3. Join [Discordarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) to contact, integrate with the Block Builder's API of 0 Gwei Transaction at End of Block ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher#faq) FAQ **How to understand that the average gas price of a bundle must not be less than 0.05 gwei?** * Suppose a bundle contains three transactions {tx1, tx2, tx3}, where tx1 comes from the mempool. The BlockRazor Builder will exclude tx1 and only calculate the average gas price of tx2 and tx3. The calculation formula is: (tx2.gas price × tx2.gas used+tx3.gas price × tx3.gas used) / (tx2.gas used+tx3.gas used) [PreviousTrading Botchevron-left](https://blockrazor.gitbook.io/blockrazor/use-cases/trading-bot) [NextAlgorithmic Tradingchevron-right](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading) Last updated 1 month ago --- # Wallet / DEX | BlockRazor In the current DeFi ecosystem, wallets andvDEXs are facing increasingly severe challenges in user retention. As the market matures, users are no longer satisfied with basic transaction fulfillment; their expectations for security, convenience, and real-time execution are rising. Furthermore, there is a growing interest in emerging trading models such as copy trading and token sniping. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/wallet-dex#pain-point-analysis) Pain Point Analysis * MEV Attacks and Value Leakage: When swap transactions are submitted to standard RPC nodes, the user's intent is fully exposed in the public Mempool. MEV bots can monitor these transactions and employ "sandwich attacks" to exploit slippage, resulting in execution prices far worse than expected. * Barriers to Native Token-less Transactions: New users withdrawing from CEXs or multi-chain players often face the dilemma of having no native tokens to pay for Gas fees. This interrupts the transaction flow and lowers conversion rates. * On-chain Latency: During periods of network congestion or volatility, standard RPC nodes propagate transactions slowly, causing users to miss the optimal timing for on-chain inclusion. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/wallet-dex#product-services) Product Services BlockRazor provides targeted product services for wallets and DEXs to address the aforementioned pain points. **MEV Protection**: To combat MEV attacks and value leakage, BlockRazor offers MEV-protected RPC services. Transactions are under full-privacy protection during the submission and inclusion process, being shielded from MEV bot monitoring and malicious attacks. Additionally, RPC service allows wallets and DEXs to securely disclose transaction data to earn real-time rebates. Currently, BlockRazor provides [MEV-protected RPC](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc) for Ethereum and BSC. **Gas Sponsor**: To solve the issue of native token shortages, BlockRazor provides [Gas Sponsor](https://blockrazor.gitbook.io/blockrazor/transaction-submission/gas-sponsor) service. This allows users to perform swaps without paying any native blockchain currency (e.g., ETH, BNB, SOL). For wallets and DEXs, integrating Gas Sponsor brings additional benefits: * Attract Incremental Traffic: Gas Sponsor serves as a powerful branding and marketing tool to attract new traffic and boost overall trading activity. * Increase Revenue: By enabling more users to complete swaps, the overall volume increases, generating higher swap fee revenue for the platform. Currently, BlockRazor provides Gas Sponsor services for Ethereum, BSC, and Solana. **Fast Mode**: To address slow on-chain speeds, BlockRazor offers "[Fast Mode](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast) ", which utilizes a globally accelerated, high-performance network to achieve the lowest possible latency for transaction inclusion—ideal for global user bases with extreme speed requirements. [PreviousAuthenticationchevron-left](https://blockrazor.gitbook.io/blockrazor/authentication) [NextTrading Botchevron-right](https://blockrazor.gitbook.io/blockrazor/use-cases/trading-bot) Last updated 1 month ago --- # Authentication | BlockRazor When integrating with BlockRazor services, if "auth" is required in the request, please follow the steps below to obtain it: 1. Go to [https://www.blockrazor.ioarrow-up-right](https://www.blockrazor.io/) and click on \[Register\] in the upper right corner of the webpage, the system will redirect you to the registration page. 2. On the registration page, enter your email and password, then click \[Register\], the system will send an account activation email to your mailbox. 3. Go to your mailbox, check the account activation email, and click on the account activation link. 4. After completing the account activation, proceed to log in, check your account information, and copy the auth token. ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FdzIx3mjZtR0NoQS26mhl%252Fimage.png%3Falt%3Dmedia%26token%3D70bde407-004a-41d3-ba4f-d223ed668708&width=768&dpr=3&quality=100&sign=623a1234&sv=2) [PreviousPricingchevron-left](https://blockrazor.gitbook.io/blockrazor/pricing) [NextWallet / DEXchevron-right](https://blockrazor.gitbook.io/blockrazor/use-cases/wallet-dex) Last updated 1 month ago --- # Trading Bot | BlockRazor In the high-frequency trading (HFT) ecosystems of Solana and EVM, the success of a Trading Bot depends on two dimensions: the speed of signal acquisition and the speed of transaction execution. BlockRazor provides the underlying technology and infrastructure support for Trading Bots based on these criteria. Using a Solana sniping scenario as a case study, this article introduces how BlockRazor ensures that Trading Bots maintain a leading edge in fierce on-chain competition. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/trading-bot#pain-point-analysis) Pain Point Analysis **Lagging Sniping Signals** For bots sniping newly launched tokens, data transmission through traditional public nodes suffers from severe physical latency. Due to a lack of staking, these nodes are often at the tail end of the block broadcasting routing. By the time a bot receives signals for new token deployment or liquidity addition, the optimal sniping window has often passed, causing buy-in costs to skyrocket. **Risks and Obstacles in Transaction Execution** * Transaction Latency: For bots pursuing sub-second settlement, slow on-chain inclusion means profit giveback for users. * Sandwich Attacks: When performing large-scale snipes or swaps, if the bot's transaction intent is exposed, it becomes an easy target for MEV bots or malicious validators. * Execution Barriers: When bots frequently switch wallets or operate new accounts, critical transactions may fail due to a lack of native tokens (e.g., SOL) to cover account rent or transaction fees. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/trading-bot#services) Services BlockRazor provides targeted services for Trading Bots to address these pain points. **Sniping Signal Monitoring** To solve the problem of signal lag, BlockRazor offers Geyser Stream and Shred Stream. With high-stake validators and globally distributed network, we help Trading Bots acquire sniping signals at extreme speeds. For Ethereum & BSC: Where pending transactions can be monitored, BlockRazor provides Public Mempool and Private Mempool for tracking pending "Smart Money" transactions, as well as New Blocks for monitoring confirmed trades. Chain pending Sinping Signal confirmed Sinping Signal Ethereum [Public Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool) [Private Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) \- BSC [Public Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool) [Private Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) [New Blocks](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc/newblocks) Solana \- [Geyser Stream](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream) [Shred Stream](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/shred-stream) Base \- [FlashBlock Stream](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-flashblockstream) **Multi-Mode Transaction Execution Optimization** [**Fast**](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast) : Utilizes a globally accelerated high-performance network and SWQoS (Stake-Weighted Quality of Service) from high-stake validators to achieve the lowest possible on-chain latency. [**Gas Sponsor**](https://blockrazor.gitbook.io/blockrazor/transaction-submission/gas-sponsor) : Enables Trading Bot users to perform sniping transactions without holding SOL by sponsoring transaction fees and rent. Integrating Gas Sponsor brings additional benefits: * Attract Incremental Traffic: Serves as a powerful branding and marketing tool to draw in new users and increase overall trading activity. * Increase Revenue: Higher transaction success rates and volume lead to increased commission/fee revenue for the bot project. [**Sandwich Mitigation**](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction) : Provides a protection mechanism that monitors and skips blacklisted validators in real-time, shielding transaction profits from slippage erosion. [**Bundle**](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle) : Upon detecting a token launch transaction, the Trading Bot can use a Bundle to ensure the sniping trade is placed immediately after the launch transaction, eliminating price volatility risks caused by execution delays. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/trading-bot#benchmark) Benchmark BlockRazor aims to be the most reliable infrastructure partner for Trading Bots. By integrating our services, Trading Bots gain superior on-chain monitoring and execution performance. Our benchmarks are as follows: * [Shred Streamarrow-up-right](https://blockrazor.io/#/blogs/20250818shredbenchmark) * [Fastarrow-up-right](https://blockrazor.io/#/blogs/20250801Benchmarking) * [End to End Latencyarrow-up-right](https://blockrazor.io/#/blogs/20250826e2etest) [PreviousWallet / DEXchevron-left](https://blockrazor.gitbook.io/blockrazor/use-cases/wallet-dex) [NextSearcherchevron-right](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher) Last updated 1 month ago --- # Supported Chains | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/supported-chains#solana) Solana Service Index Transaction Submission * [Fast](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast) * [Gas Sponsor](https://blockrazor.gitbook.io/blockrazor/transaction-submission/gas-sponsor) Streams * [Block Stream](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana) * [Network Fee Stream](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/supported-chains#bsc) BSC Service Index Transaction Submission * [RPC](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc) * [Fast](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc) * [Gas Sponsor](https://blockrazor.gitbook.io/blockrazor/transaction-submission/gas-sponsor) * [Bundle](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle) Streams * [Public Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool) * [Private Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) * [Block Stream](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc) * [Node Stream](https://blockrazor.gitbook.io/blockrazor/streams/node-stream) * [Network Fee Stream](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc) Block Builder * [Block Builder](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/supported-chains#ethereum) Ethereum Service Index Transaction Submission * [RPC](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc) * [Gas Sponsor](https://blockrazor.gitbook.io/blockrazor/transaction-submission/gas-sponsor) * [Bundle](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle) Streams * [Private Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/supported-chains#base) Base Service Index Transaction Submission * [RPC](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/base) * [Fast](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/base) Streams * [Block Stream](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/supported-chains#monad) Monad Service Index Transaction Submission * [RPC](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/monad) * [Fast](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/monad) [PreviousAbout BlockRazorchevron-left](https://blockrazor.gitbook.io/blockrazor) [NextPricingchevron-right](https://blockrazor.gitbook.io/blockrazor/pricing) Last updated 1 month ago --- # Algorithmic Trading | BlockRazor DEX-CEX Arbitrage is a low-risk quantitative trading strategy. Due to factors such as liquidity, market mechanisms, and trading speed, certain trading pairs may have price differences at the same time on different exchanges. The arbitrage strategy involves buying assets on the exchange with lower prices and selling them on the exchange with higher prices, thereby earning the price difference. Although DEX-CEX arbitrage trading is relatively low-risk, its stable profitability can still be influenced by several factors, with "certainty" being a crucial one. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading#certainty-of-price-difference) Certainty of Price Difference The price difference determines the arbitrage space, and the price difference is determined by the prices of the target token on both CEX and DEX. Price difference certainty refers to ensuring that a price difference exists for the target token while the price on both CEX and DEX are changing continuously. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading#certainty-of-dex-price) Certainty of DEX Price Quantitative trading strategies can use DEX aggregator APIs (such as 1inch) to query prices from multiple DEXs. However, this approach may involve data query lantency, and APIs often have rate limits that require payment to lift. Additionally, they may not be compatible with emerging or niche DEXs, making it impossible to retrieve prices. Another method is to deploy a full node oneself, synchronize the latest blocks, and directly query the token prices from DEX contracts. This approach can solve the rate limiting and compatibility issues. To reduce data query lantency, it is necessary to synchronize the latest blocks at the earliest opportunity. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading#certainty-of-cex-price) Certainty of CEX Price Unlike DEX prices, which are updated per block, the prices of token on CEXs are in continuous real-time flux, which poses a risk. Suppose the chain where the DEX is located produces a block every 3 seconds. The strategy detects a price difference signal at 1000ms and completes the construction and sending of the DEX transaction at 1600ms. The remaining 1400ms is a period during which the price changes of token on the CEX are beyond the control. If the CEX price experiences significant fluctuations during this time, erasing the price difference or even causing a negative price difference, the strategy will face a loss. To eliminate risk of price difference and enhance the certainty of CEX prices, the time period that the quantitative strategy cannot control needs to be minimized. In other words, the quantitative strategy needs to send transactions at the last possible moment of the block to ensure that the transaction can be included in the current block while still leaving room for profit. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading#certainty-of-inclusion) Certainty of Inclusion After confirming that a price difference exists for the target token, the arbitrage strategy will place orders simultaneously on both CEX and DEX. Unlike CEXs, which use order book matching mechanisms, DEX transactions may not be included in the next block, leading to the price difference being erased. Enhancing the inclusion certainty of DEX transactions is also key to the strategy's profitability. Improving the inclusion certainty of DEX transactions can also be understood as increasing the probability that DEX transactions will be included in the next block. For more details, see the [Analysis of Swap Transaction Elementsarrow-up-right](https://www.blockrazor.io/#/blogs/20250331swap) . For quantitative trading systems that focus on strategy, it is recommended to directly integrate with a professional RPC to increase transaction inclusion rate, thus investing time and energy into the core strategy. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading#how-does-blockrazor-enhance-certainty) How does BlockRazor enhance “Certainty”? To enhance DEX price certainty, a quantitative trading system can use the [Node Stream](https://blockrazor.gitbook.io/blockrazor/streams/node-stream) to synchronize the latest blocks obtain the latest DEX trading pair prices at the earliest opportunity. For CEX price certainty, a quantitative trading system can establish a direct connection with the BlockRazor Builder to send transactions with extremely low latency at the "last moment" of a block, minimizing the risk of CEX price fluctuations. BlockRazor Builder is the top block producer on BSC. If you are interested in establishing a direct connection with BlockRazor Builder, please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us. To enhance inclusion certainty, a quantitative trading system can choose to submit strategy transactions to BlockRazor RPC. Based on a globally distributed network, BlockRazor RPC can receive transactions from clients with extremely low latency and then forward these transactions to geographically nearby Builders, which achieves end-to-end low-latency forwarding at the network level and improves the transaction inclusion rate. ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252F9hDxSegamNMcYtiG34Gm%252Fimage.png%3Falt%3Dmedia%26token%3De44c41e9-2350-45fc-a1b2-222f48f90e7d&width=768&dpr=3&quality=100&sign=60217961&sv=2) The benchmark client sends transactions to BlockRazor RPC, A RPC, and B RPC, recording the difference between the latest block number at the time of sending the transaction and the block number in which the transaction is included. A smaller difference indicates a faster on-chain speed. The chart data shows that transactions submitted to BlockRazor RPC have a probability of being included in the next block as high as 95%, and 100% probability being included in the next 2 blocks, which significantly surpasses that of competitors. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading#how-to-use-blockrazor) How to Use BlockRazor #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading#node-stream) Node Stream 1. [Registerarrow-up-right](https://www.blockrazor.io/#/register) for BlockRazor 2. [Log inarrow-up-right](https://www.blockrazor.io/#/login) to BlockRazor and subscribe to the Tier2 or Tier1 plan 3. Configure the full node, for details, see [herearrow-up-right](https://blockrazor.gitbook.io/blockrazor/tc/gao-xing-neng-wang-luo-fu-wu/bsc/quan-jie-dian-tong-bu) #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading#integrate-scutum-rpc) Integrate Scutum RPC BlockRazor RPC will generate a dedicated RPC URL for quantitative trading systems registered with BlockRazor. The dedicated RPC supports same JSON RPC methods as other Public RPC. The specific steps are as follows: 1. [Registerarrow-up-right](https://www.blockrazor.io/#/register) for BlockRazor 2. [Loginarrow-up-right](https://www.blockrazor.io/#/login) to the portal of BlockRazor 3. Go to the RPC module to view your dedicated RPC (currently supporting Ethereum and BSC). You can configure RPC parameters with one click, and then copy the RPC URL. 4. Go to the project of quantitative trading system, locate the chain's RPC configuration file, and replace the default endpoint with the dedicated RPC URL. 5. Update and publish the project of quantitative trading system(optional). 6. Execute the strategy by submitting transactions via `eth_sendRawTransaction` to the RPC. If the strategy involves multiple transactions, submit them as a Bundle to the RPC. 7. Log in to the portal of BlockRazor to check the refund and transactions. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading#direct-connection-to-builder) Direct Connection to Builder * If you need to establish a direct connection with the BlockRazor Builder, please go to [Discordarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) to get in touch with us. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading#faq) FAQ **Currently, on which chains does Scutum provide services?** * Currently, BlockRazor RPC supports Ethereum and BSC. [PreviousSearcherchevron-left](https://blockrazor.gitbook.io/blockrazor/use-cases/searcher) [NextIndividual Traderchevron-right](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader) Last updated 1 month ago --- # Individual Trader | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#introduction) Introduction -------------------------------------------------------------------------------------------------------------- circle-info Individual users can use general RPC without subscribing to a plan. For users who frequently trade on DEXs, there is a high probability that their trades will execute at the maximum slippage limit, resulting in "invisible" financial losses. Individual traders can now [add](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#how-to-add-rpc-to-my-wallet) the BlockRazor RPC to their wallets with a single click. From then on, all initiated swap transactions will benefit from the deep protection of the BlockRazor RPC, reducing slippage losses while offering the opportunity to receive real-time transaction rebates. Currently, BlockRazor supports RPC integration for individual traders on Ethereum and BSC. Advanced users can choose to [add different modes of the RPC](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#how-to-add-custom-rpc-to-wallet) according to your needs. If you have any questions, please contact us on [Discordarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) . ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#how-to-add-rpc-to-my-wallet) How to add RPC to my Wallet #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#metamask) Metamask 1. Go to [rpc.blockrazor.ioarrow-up-right](https://rpc.blockrazor.io/) , click on **GET PROTECTED** ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FG8eCz4eSjgWJGqHC63Lj%252Fimage.png%3Falt%3Dmedia%26token%3Deac2bcc5-ace3-4155-b2ee-711ec9bc0c6e&width=768&dpr=3&quality=100&sign=8ffc4a40&sv=2) 1. Click on **Connect Metamask**, and **comfirm** the connection in Metamask ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FVOt969C8zrqReL3iSmxF%252Fimage.png%3Falt%3Dmedia%26token%3D7d572865-1d1d-4feb-8e47-c8a45938f071&width=768&dpr=3&quality=100&sign=9f01d71d&sv=2) ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FbPF5NIduWQKFDmbnk0aV%252Fimage.png%3Falt%3Dmedia%26token%3D3f3913a8-69a4-4a3b-ba42-9029918e162c&width=768&dpr=3&quality=100&sign=bfd4704&sv=2) 1. Click on **Click to Add Default RPC**, and **approve** the addition of a new network in Metamask ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252F2G9NYEtiYnxXqlzQcl5F%252Fimage.png%3Falt%3Dmedia%26token%3Dc29270c3-7a7e-4fe2-8004-f9f27aca30e3&width=768&dpr=3&quality=100&sign=2c041b7&sv=2) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#other-wallets-using-coinbase-as-an-example) Other Wallets(using Coinbase as an example) 1. Click on the browser extension to invoke the Coinbase Wallet 2. Click on **Settings** - **Networks** ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252Fz33BUsswE91HNHGlSJha%252Fimage.png%3Falt%3Dmedia%26token%3Dd5df4d1f-c1ed-408c-a09f-5d0af283a297&width=768&dpr=3&quality=100&sign=198e309b&sv=2) 1. Click on **\+** to add network. ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FzbhGqm0FgrpeUqLUQfBI%252Fimage.png%3Falt%3Dmedia%26token%3D9fd4ae0f-60cc-4896-8de9-2ef06be7f6e5&width=768&dpr=3&quality=100&sign=7bb2b964&sv=2) 1. Enter the network information of MEV Protect RPC General for Wallet User and click **Save** ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FbwZzM0cqvydmrPVeIFDj%252Fimage.png%3Falt%3Dmedia%26token%3D63b56986-b8d6-4a82-9845-17974086bc49&width=768&dpr=3&quality=100&sign=c9332823&sv=2) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#how-to-add-custom-rpc-to-wallet) How to add custom RPC to wallet #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#metamask-1) Metamask 1. Go to [rpc.blockrazor.ioarrow-up-right](https://rpc.blockrazor.io/) , click on **GET PROTECTED** 2. Click on **Connect Metamask**, and **comfirm** the connection in Metamask 3. Click on **Click to Add Custom RPC**,choose [RPC mode](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#comparison-of-rpc) ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FjiBbqOlVrv51bUKnAFWd%252Fimage.png%3Falt%3Dmedia%26token%3Dcd2239fe-fa6e-4e2b-ac2b-c164aa808724&width=768&dpr=3&quality=100&sign=ec5cecda&sv=2) 1. Confirm the RPC mode, click on **Click to Add,** and approve the addition of the new network in the Metamask #### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#other-wallets-using-coinbase-as-an-example-1) Other Wallets(using Coinbase as an example) 1. Click on the browser extension to invoke the Coinbase Wallet 2. Click on **Settings** - **Networks** 3. Click on **\+** to add network 4. Fill in the [RPC network information](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#network-information) . If you need to choose the RPC mode, see [Comparison of RPC](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#comparison-of-rpc) for details. ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252Fq5KweU5gcL3bFgGVEMyL%252Fimage.png%3Falt%3Dmedia%26token%3D6cb7c3ea-fc96-4e09-b072-5344c40d2a9e&width=768&dpr=3&quality=100&sign=fdb0cf&sv=2) 1. Click on **Save** to complete the RPC addition. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#network-information) Network information Ethereum BSC Network Name Ethereum Mainnet BNB Smart Chain Mainnet RPC URL https://eth.blockrazor.xyz https://bsc.blockrazor.xyz Chain ID 1 56 Currency Symbol ETH BNB Block Explorer URL [https://etherscan.ioarrow-up-right](https://etherscan.io/) [https://bscscan.comarrow-up-right](https://bscscan.com/) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader#comparison-of-rpc) Comparison of RPC default fullprivacy maxbackrun BSC https://bsc.blockrazor.xyz https://bsc.blockrazor.xyz/fullprivacy https://bsc.blockrazor.xyz/maxbackrun Ethereum https://eth.blockrazor.xyz https://eth.blockrazor.xyz/fullprivacy https://eth.blockrazor.xyz/maxbackrun MEV Protection Protected Protected Protected Transaction Privacy Minimal Disclosure Full Privacy Maximum Disclosure Refund Probability Moderate No refunds High Refunds Supported No refunds Supported Revert Protection Not Protected Protected Protected **default** * In default mode, transactions submitted to MEV Protect RPC General for Wallet User only disclose necessary transaction data (hash, logs & state) to Searcher to win refund opportunities while protecting transaction privacy to the greatest extent. At the same time, in order to ensure the speed of transactions being included in blocks, transactions are not under revert protection (which is consistent with the default RPC of wallet). **fullprivacy** * In fullprivacy mode, transactions submitted to MEV Protect RPC General for Wallet User will not disclose any transaction data, and Scutum will directly forward the transaction to the mainstream builders. Transactions in this mode are under revert protection. In order to ensure the speed of inclusion in blocks, it is recommended to set priority fee (Ethereum) when sending transactions. **maxbackrun** * In the maxbackrun mode, transactions submitted to MEV Protect RPC General for Wallet User will disclose necessary transaction data (hash, to, calldata, functionSelector, logs & state) under the premise of MEV protection to maximize the possibility of obtaining refunds. Transactions are under revert protection. In order to ensure the speed of inclusion in blocks, it is recommended to set priority fee (Ethereum) when sending transactions. [PreviousAlgorithmic Tradingchevron-left](https://blockrazor.gitbook.io/blockrazor/use-cases/algorithmic-trading) [NextRPCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc) Last updated 1 month ago --- # Fast | BlockRazor [Solanachevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana) [BSCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc) [Suichevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui) [Basechevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/base) [Monadchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/monad) [PreviousMonadchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/monad) [NextSolanachevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana) --- # Pricing | BlockRazor circle-info * BlockRazor has upgraded subscription plan, splitting each tier by blockchain * Newly registered users have access to Tier 4 services of all chains (Tier 4-BSC, Tier 4-Solana, and Tier 4-Base) * Users can subscribe and renew for a single chain (e.g., subscribing to Tier 2-BSC grants Tier 2-level BSC services, while Solana and Base services remain at Tier 4) * Subscribing to Tier 1 or Tier 0 automatically includes services of all chains ![Cover](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FRlm8JZAuoQnzxcgqgp73%252FTier4-1.png%3Falt%3Dmedia%26token%3D96ac6ab5-b3dc-4ccf-bbe3-d06562d16105&width=752&dpr=3&quality=100&sign=a2fd93f0&sv=2) **Tier 1** $5000 / all chains / month `Comprehensive and powerful features` **Tier 2** $1500 / single chain / month `Cost-effective option to unlock more features` **Tier 3** $300 / single chain / month `Cost-effective network service` **Tier 4** Free `Designed for beginner user` ![Cover](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252Fxhb5f6zmfPQhyOxNKXrP%252FTier%25200.png%3Falt%3Dmedia%26token%3D129f9da5-1f00-4b1b-bf16-7edaafe4f34d&width=752&dpr=3&quality=100&sign=22a8d867&sv=2) **Tier 0** is a dedicate subscription plan suitable for teams at scale with customized service needs * `Unlock All Services` * `Custom rate limits` * `Custom optimization` * `Dedicate Technical Support` We welcome users interested in Tier 0 to [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us. ![Cover](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FGo2FgnAfMOXWqrTiLdmj%252Fsolanatxsending.png%3Falt%3Dmedia%26token%3D33811317-6d7f-41f1-84e0-d3004429b837&width=752&dpr=3&quality=100&sign=fdd8aa57&sv=2) With globally distributed relay and high-quality SWQoS, BlockRazor enables Solana transactions to land with the lowest latency (see the [Benchmarkarrow-up-right](https://www.blockrazor.io/#/blogs/20250801Benchmarking) ) This service is no longer bound to the subscription plan, with rate limit default to 1 TPS. If you need to increase the TPS limit, please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us and we will handle it as soon as possible ![Cover](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FagJPxFXoXe9RCQu9rcCE%252FSolanashredstream.png%3Falt%3Dmedia%26token%3D7a8100b5-f162-4a67-9b5b-3d16d2f538f5&width=752&dpr=3&quality=100&sign=d994a466&sv=2) Shred Stream delivers shreds at lowest latency to Validators, RPCs, Bots and DeFi Builders(see the [Benchmark arrow-up-right](https://www.blockrazor.io/#/blogs/20250818shredbenchmark) and [Best Practicearrow-up-right](https://www.blockrazor.io/#/blogs/20250815shred) ) Shred Stream is now available for standalone purchase. For pricing details, see [Solana Shred Stream](https://blockrazor.gitbook.io/blockrazor/pricing#solana-shred-stream) . ![Cover](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252F7ZWbHGXf365jAaf4TYaO%252FBSCfullnodesync.png%3Falt%3Dmedia%26token%3D0c80ff0e-97cc-4841-8d0d-54cae3ce38a3&width=752&dpr=3&quality=100&sign=78680c87&sv=2) The Full Node Sync enables low-latency synchronization for Ethereum clients, leveraging high-performance networks. The Full Node Sync is available for standalone purchase. For pricing details, see [BSC Full Node Sync](https://blockrazor.gitbook.io/blockrazor/pricing#bsc-full-node-sync) [hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#plan) Plan -------------------------------------------------------------------------- ### [hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#base) Base Tier 4 - Base Tier 3 - Base Tier 2 - Base Tier 1 - Base Send Transaction 1 3 5 10 Block Stream \- \- \- ☑️ ### [hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#solana) Solana Tier 4 - Solana Tier 3 - Solana Tier 2 - Solana Tier 1 - Solana Network Fee Stream 1 QPS 5 QPS 10 QPS 50 QPS Shred Stream \- \- 1 Stream 2 Streams ### [hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#bsc) BSC chevron-rightFast[hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#fast) Tier 4 - BSC Tier 3 - BSC Tier 2 - BSC Tier 1 - BSC Broadcast RawTx 10 Txs / 5s 10 Txs / day 10 Txs / 5s 10 Txs / day 50 Txs / 5s Unlimited / day 100 Txs / 5s Unlimited / day Broadcast RawTxBatch \- \- 2 Batches / 1s 10 Txs / Batch 4 Batches / 1s 10 Txs / Batch chevron-rightPrivate Mempool[hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#private-mempool) Tier4 - BSC Tier3 - BSC Tier2- BSC Tier1- BSC Private Mempool \- \- ✅ ✅ chevron-rightPublic Mempool[hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#public-mempool) Tier4 - BSC Tier3 - BSC Tier2- BSC Tier1- BSC Subscribe NewTx \- 1 stream 5 streams 10 streams chevron-rightBlock Stream[hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#block-stream) Tier4 - BSC Tier3 - BSC Tier2- BSC Tier1- BSC Subscribe NewBlock \- 1 stream 5 streams 10 streams chevron-rightNode Stream[hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#node-stream) Tier4 - BSC Tier3 - BSC Tier2- BSC Tier1- BSC Full Node Sync \- \- 2 full nodes 5 full nodes chevron-rightNetwork Fee Stream[hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#network-fee-stream) Tier 4 - BSC Tier 3 - BSC Tier 2 - BSC Tier 1 - BSC Gas Price Stream \- \- \- \- chevron-rightBlock Builder[hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#block-builder) Tier 4 - BSC Tier 3 - BSC Tier 2 - BSC Tier 1 Send Bundle Unlimited - Unlimited - Unlimited 0 Gwei Tx Unlimited 0 Gwei Tx Send PrivateTransaction Unlimited Unlimited Unlimited Unlimited Call Bundle \- ☑️ ☑️ ☑️ Bundle Tracing 4 Txs / Day 8 Txs / Day 40 Txs / Day 200 Txs / Day Bundle Explorer \- \- \- ☑️ Direct Connection to Builder \- \- \- ☑️ [hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#standalone-procurement) Standalone Procurement -------------------------------------------------------------------------------------------------------------- ### [hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#solana-transaction-landing) Solana Transaction Landing This service is no longer bound to the subscription plan, with rate limit default to 1 TPS. If you need to increase the TPS limit, please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us and we will handle it as soon as possible. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#solana-shred-stream) **Solana Shred Stream** Shred Stream allows Tier 4 - Solana and higher-level users to purchase independently, with pricing for each stream in a single region as follows: Service cycle Discount Price 1 month 100% $500(1 \* $500) 3 months 95% $1425(3 \* $475) 6 months 90% $2700(6 \* $450) 9 months 85% $3825(9 \* $425) 12 months 80% $4800(12 \* $400) The Shred Stream provided by the subscription plan can be found at [Solana](https://blockrazor.gitbook.io/blockrazor/pricing#solana) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/pricing#bsc-full-node-sync) BSC Full Node Sync BSC full node synchronization allows Tier 4 - BSC and higher-level users to purchase independently, with pricing for each Enode as follows: Service Duration Discount Price 1 month 100% $500(1 \* $500) 3 months 95% $1425(3 \* $475) 6 months 90% $2700(6 \* $450) 9 months 85% $3825(9 \* $425) 12 months 80% $4800(12 \* $400) The Enode quota provided by the subscription plan can be found at [BSC](https://blockrazor.gitbook.io/blockrazor/pricing#bsc) [PreviousSupported Chainschevron-left](https://blockrazor.gitbook.io/blockrazor/supported-chains) [NextAuthenticationchevron-right](https://blockrazor.gitbook.io/blockrazor/authentication) Last updated 1 month ago --- # RPC | BlockRazor [Overviewchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview) [BSCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc) [Ethereumchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum) [Basechevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/base) [Monadchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/monad) [PreviousIndividual Traderchevron-left](https://blockrazor.gitbook.io/blockrazor/use-cases/individual-trader) [NextOverviewchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview) --- # Gas Sponsor | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/gas-sponsor#introduction) Introduction Gas Sponsor is a feature that enables traders to perform token swaps with zero native blockchain currency (e.g., ETH, BNB, SOL) or zero gas fee. The benefits that Gas Sponsor could bring to projects are: * Trading booster: Gas Sponsor can be used as a powerful branding and marketing tool to attract incremental trading traffic and boost overall trading activity * Elimination of the biggest trading barrier: Users no longer need to acquire native tokens (e.g., ETH, BNB, SOL) solely to cover gas fees, which removes the largest obstacle to trading, enabling a truly seamless and frictionless trading experience * Increased Revenue: More users complete swaps → higher overall volume → more swap fee for the wallet or integrated project. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/gas-sponsor#gas-sponsor-feature) Gas Sponsor Feature * Complete compatibility with `eth_sendRawTransaction` / `sendTransaction` by simply changing the endpoint * Support transaction filtering and cost-control for gas sponsor * Transactions are forwarded with full privacy, completely shielding against potential MEV attacks * Transaction are routed via BlockRazor’s global high-performance network to be included with lowest latency ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/gas-sponsor#gas-sponso-flow-e.g.-ethereum) Gas Sponso Flow(e.g. Ethereum) ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FGPbNNpGvAyayNW93LZUM%252Fimage.png%3Falt%3Dmedia%26token%3D6bb20f5c-2abd-4cdb-bb96-17ab6450c8cc&width=768&dpr=3&quality=100&sign=3d226e7a&sv=2) #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/gas-sponsor#integration-steps) Integration Steps 1. The user initiates a transaction from the client 2. The client calls `pm_isSponsorable` to check whether the transaction is eligible for sponsorship 3. If `pm_isSponsorable` returns true, the user signs the transaction 4. The client calls `eth_sendRawTransaction` to submit the signed raw transaction. 5. BlockRazor appends a sponsorship transaction before the user's transaction in a Bundle, then forwards the Bundle to Builders 6. The user's transaction is included on-chain as part of a sponsored bundle [PreviousMonadchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/monad) [NextBundlechevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle) Last updated 1 month ago --- # Bundle | BlockRazor [Overviewchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/overview) [BSCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc) [Ethereumchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum) [PreviousGas Sponsorchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/gas-sponsor) [NextOverviewchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/overview) --- # Mempool | BlockRazor [Public Mempoolchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool) [Private Mempoolchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) [PreviousSearcherchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/searcher) [NextPublic Mempoolchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool) --- # Block Stream | BlockRazor [Solanachevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana) [BSCchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc) [Basechevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base) [PreviousEthereumchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/ethereum) [NextSolanachevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana) --- # Node Stream | BlockRazor [Full Node Synchronizationchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization) [PreviousParseFlashBlockchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-flashblockstream/parseflashblock) [NextFull Node Synchronizationchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization) --- # Network Fee Stream | BlockRazor [BSCchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc) [Solanachevron-right](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana) [PreviousFull Node Synchronizationchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization) [NextBSCchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc) --- # Send PrivateTransaction | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-privatetransaction#introduction) Introduction This API is used to receive private transactions submitted by users, with the method name `eth_sendPrivateTransaction` ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-privatetransaction#request-parameters) Request Parameters Parameters Mandatory Format Example Description transaction Mandatory String "0x…4b" signed raw transaction ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-privatetransaction#request-example) Request Example HTTPS Copy curl https://virginia.builder.blockrazor.io \ -H 'content-type: application/json' \ -H 'Authorization: ' \ --data '{ "jsonrpc": "2.0", "id": "1", "method": "eth_sendPrivateTransaction", "params": ["0x…9c"] }' #### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-privatetransaction#proto) Proto Copy syntax = "proto3"; package sendbundle; option go_package = "internal/ethapi/sendbundle;sendbundle"; service BundleService { rpc SendBundle (SendBundleArgs) returns (SendBundleResponse); rpc SendTransaction (SendTransactionArgs) returns (SendTransactionResponse); } message SendBundleArgs { repeated bytes txs = 1; uint64 maxBlockNumber = 2; uint64 minTimestamp = 3; uint64 maxTimestamp = 4; repeated string revertingTxHashes = 5; } message SendTransactionArgs { bytes tx = 1; } message SendBundleResponse { string result = 1; } message SendTransactionResponse { string result = 1; } ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-privatetransaction#reponse-example) Reponse Example Copy { "jsonrpc":"2.0", "id":"1", "result":"0xa06b……f7e8ec" // tx hash }‍‍ Copy { "jsonrpc":"2.0", "id":"1", "error":{ "code":-32000, "message":"nonce too low: next nonce 57, tx nonce 56" } } [PreviousSend Bundlechevron-left](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-bundle) [NextCall Bundlechevron-right](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/call-bundle) Last updated 24 days ago --- # Overview | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/overview#introduction) Introduction ----------------------------------------------------------------------------------------------------------------------- BlockRazor Builder constructs block with a high winning rate, due to its establishment of low-latency communication with Validators based on global deployment and multiple block construction algorithms to maximize block value. Currently bundle submission, private transaction submission and bundle simulation is supported. BlockRazor's Block Builder has a historical cumulative block production rate of 37%, ranking first in the entire BSC chain. To view the real-time block production rate, please visit [https://dune.com/bnbchain/bnb-smart-chain-mev-statsarrow-up-right](https://dune.com/bnbchain/bnb-smart-chain-mev-stats) . [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/overview#rpc-endpoint) RPC Endpoint ----------------------------------------------------------------------------------------------------------------------- Globally applicable [https://rpc.blockrazor.buildersarrow-up-right](https://rpc.blockrazor.builders/) This endpoint supports low-latency requests from users worldwide and is recommended for priority access. Region Availability Zone(AWS) RPC Endpoint Tokyo apne1-az4 [https://tokyo.builder.blockrazor.io arrow-up-right](https://tokyo.builder.blockrazor.io/) Frankfurt euc1-az2 [https://frankfurt.builder.blockrazor.io arrow-up-right](https://frankfurt.builder.blockrazor.io/) Virginia use1-az4 [https://virginia.builder.blockrazor.io arrow-up-right](https://virginia.builder.blockrazor.io/) Dublin euw1-az1 [https://dublin.builder.blockrazor.ioarrow-up-right](https://dublin.builder.blockrazor.io/) To further achieve the lowest request latency, BlockRazor provides region-specific RPC endpoints. It is recommended to deploy the Bot in the Builder's region and complete the connection on the basis of having connected to the globally applicable endpoint. [PreviousBlock Builderchevron-left](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder) [NextSend Bundlechevron-right](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-bundle) Last updated 1 month ago --- # Block Builder | BlockRazor [PreviousGet TransactionFeechevron-left](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee) [NextOverviewchevron-right](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/overview) Last updated 1 month ago --- # Privacy Statement | BlockRazor We promise that all services provided by BlockRazor will not track and collect any type of user personal privacy information (such as IP address, location, etc.) except necessary information. The purpose of collecting necessary information is to better provide you with products and services and to enhance your user experience. We promise not to share your personal information with third parties unless with your explicit consent or for the purpose of protecting legitimate rights and interests. [PreviousTrace Bundlechevron-left](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/trace-bundle) Last updated 1 year ago --- # Call Bundle | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/call-bundle#introduction) Introduction This API is used to receive requests for simulating bundles. The method name is `eth_callBundle`. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/call-bundle#rate-limit) Rate Limit Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 `eth_callBundle` \- ✅ ✅ ✅ ✅ ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/call-bundle#request-parameter) Request Parameter Parameters Mandatory Format Example Description txs Mandatory array\[hex\] \["0x…4b", "0x…5c"\] List of signed raw transactions blockNumber Mandatory number 39177941 Current block number + 1 ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/call-bundle#request-example) Request Example HTTPS Copy curl https://virginia.builder.blockrazor.io \ -H 'content-type: application/json' \ -H 'Authorization: ' \ --data '{ "jsonrpc": "2.0", "id": "1", "method": "eth_callBundle", "params": [\ {\ "txs":["0x…4b"],\ "blockNumber":39177941\ }\ ] }' ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/call-bundle#response-example) Response Example **Success** Copy { "jsonrpc": "2.0", "id": 1, "result": { "bundleHash": "0xb13bb92ebee57b42b7e8e91b41891e1693a449dcdb8530c6bffe684157e988da", "ethSentToBuilder": "63003000000000", "gasFees": "21000000000000", "results": [\ {\ "ethSentToBuilder": "63003000000000",\ "fromAddress": "0x12994B3004Daab21035EDa1D4b31F7F63D606128",\ "gasFees": "21000000000000",\ "gasPrice": "4000142857",\ "gasUsed": 21000,\ "toAddress": "0x1266C6bE60392A8Ff346E8d5ECCd3E69dD9c5F20",\ "txHash": "0x0fbaa913aa0ffc22bba63a81ca2958ad14d630928c5a5240130fec7037605648",\ "value": "0x"\ }\ ], "stateBlockNumber": 756983, "totalGasUsed": 21000 } } **Error** Copy { "jsonrpc": "2.0", "id": 1, "error": { "code": -32000, "message": "missing auth token" } } Copy { "jsonrpc": "2.0", "id": 1, "error": { "code": -32000, "message": "rate limit exceeded, try again later" } } Copy { "jsonrpc": "2.0", "id": 1, "error": { "code": -32000, "message": "err: nonce too low: address 0x6c85F133fa06Fe5eb185743FB6c79f4a7cb9C076, tx: 28 state: 29; txhash 0x300c95d2b3086ddc1836de1e8c87878916d332ff42e8312cd404264ab8cdcd18" } } Copy { "jsonrpc": "2.0", "id": 1, "result": { "bundleHash": "0x592da70a510720d149567bfbc5935a05780963607c3c75b93a9190bb60818f21", "ethSentToBuilder": "0", "gasFees": "218070000000000", "results": [\ {\ "error": "execution reverted",\ "ethSentToBuilder": "0",\ "fromAddress": "0xb0b10B09780aa6A315158EF724404aa1497e9E6E",\ "gasFees": "218070000000000",\ "gasPrice": "10000000000",\ "gasUsed": 21807,\ "revert": "unlock error: locked",\ "toAddress": "0xdA51Cf6ed22740FD8fAfbBe61577A577915e7526",\ "txHash": "0xa09745617e0a212c5da379ea066f64e33f5215ce235d653bbbc1359b38d78baa",\ }\ ], "stateBlockNumber": 29115, "totalGasUsed": 21807 } } [PreviousSend PrivateTransactionchevron-left](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/send-privatetransaction) [NextTrace Bundlechevron-right](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/trace-bundle) Last updated 24 days ago --- # Trace Bundle | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/trace-bundle#introduction) Introduction This method supports querying the current status of the bundle by bundle hash. Please query 5 minutes after sending the bundle to the builder. Endpoint: [https://bsc-bundle-stats.blockrazor.io/arrow-up-right](https://bsc-bundle-stats.blockrazor.io/) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/trace-bundle#rate-limit) Rate Limit Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 txs limit / day 4 / day 8 / day 40 / day 200 / day Unlimited ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/trace-bundle#request-parameter) Request Parameter Parameters Mandatory Format Example Description hash Mandatory hash 0x25f9……317097 bundle hash ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/trace-bundle#request-example) Request Example HTTPS Copy curl -X GET "https://bsc-bundle-stats.blockrazor.io/bundlestate?hash=0x25f9fc35e978709195c00e864b9a19fb41ad5c5c5b8a3e003813ae9727317097" \ -H "Content-Type: application/json" \ -H "Authorization: M2ZiZj……JhODA1"‍ ### [hashtag](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/trace-bundle#response-example) Response Example **Success** Copy { "bundle": { "timestamp": "2025-04-07T09:04:40Z", // The time when the builder receives the bundle (UTC) "bundleHash": "0x25f9fc35e978709195c00e864b9a19fb41ad5c5c5b8a3e003813ae9727317097", // bundle hash "state": "onchain", // bundle is included on chain "blockNumber": 48144954, // The block number where the bundle is located "priority": "358911000000000" // bundle value, in wei } } **Error** Copy { "bundle": { "timestamp": "2025-04-08T05:21:10Z", // The time when the builder receives the bundle (UTC) "bundleHash": "0xe06a923bce1f46b2a0602b8fb2263dffde22f21277b0b71d84b79aff6a58772b", // bundle hash "state": "failed", // builder has received bundle,but the bundle is not included "err": "non-reverting tx in bundle failed" // reason why the bundle is not included } } Copy { "bundle": { "bundleHash": "0xabc", // bundle hash in the request "state": "not found" // bundle is not found } } [PreviousCall Bundlechevron-left](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder/call-bundle) [NextPrivacy Statementchevron-right](https://blockrazor.gitbook.io/blockrazor/statement/privacy-statement) Last updated 24 days ago --- # Private Mempool | BlockRazor [PreviousPublic Mempoolchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool) [NextBSCchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc) Last updated 13 days ago --- # Public Mempool | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool#introduction) Introduction `NewTxs` is used to subscribe to the transaction data stream in the high-performance network. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool#endpoint) Endpoint Region Availability Zone(AWS) Relay Address Frankfurt euc1-az2 35.157.64.49:50051 Tokyo apne1-az4 54.249.93.63:50051 Ireland euw1-az1 3.248.65.151:50051 Virginia use1-az4 52.205.173.134:50051 ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool#rate-limit) Rate Limit Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 Parallel data streams \- 1 5 10 30 ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool#request-parameters) Request Parameters Parameters Mandatory Format Example Description NodeValidation Mandatory boolean false This field currently only supports being set to `false`, and the relay will push all new transactions (unchecked) with lower latency. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool#request-example) Request Example [https://github.com/BlockRazorinc/relay\_examplearrow-up-right](https://github.com/BlockRazorinc/relay_example) Go Copy package main import ( "context" "fmt" // directory of the generated code using the provided relay.proto file pb "github.com/BlockRazorinc/relay_example/protobuf" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/rlp" "google.golang.org/grpc" ) // auth will be used to verify the credential type Authentication struct { apiKey string } func (a *Authentication) GetRequestMetadata(context.Context, ...string) (map[string]string, error) { return map[string]string{"apiKey": a.apiKey}, nil } func (a *Authentication) RequireTransportSecurity() bool { return false } func main() { // BlockRazor relay endpoint address blzrelayEndPoint := "ip:port" // auth will be used to verify the credential auth := Authentication{ "your auth token", } // open gRPC connection to BlockRazor relay var err error conn, err := grpc.Dial(blzrelayEndPoint, grpc.WithInsecure(), grpc.WithPerRPCCredentials(&auth), grpc.WithWriteBufferSize(0), grpc.WithInitialConnWindowSize(128*1024)) if err != nil { fmt.Println("error: ", err) return } // use the Gateway client connection interface client := pb.NewGatewayClient(conn) // create context and defer cancel of context ctx, cancel := context.WithCancel(context.Background()) defer cancel() // create a subscription using the stream-specific method and request stream, err := client.NewTxs(ctx, &pb.TxsRequest{NodeValidation: false}) if err != nil { fmt.Println("failed to subscribe new tx: ", err) return } for { reply, err := stream.Recv() if err != nil { fmt.Println("stream receive error: ", err) } tx := &types.Transaction{} err = rlp.DecodeBytes(reply.Tx.RawTx, tx) if err != nil { continue } fmt.Println("recieve new tx, tx hash is ", tx.Hash().String()) } } #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool#proto) Proto The code of `relay.proto` is as follows: Copy syntax = "proto3"; package blockchain; option go_package = "/Users/code/relay/grpcServer"; service Gateway { rpc SendTx (SendTxRequest) returns (SendTxReply) {} rpc SendTxs (SendTxsRequest) returns (SendTxsReply) {} rpc NewTxs (TxsRequest) returns (stream TxsReply){} rpc NewBlocks (BlocksRequest) returns (stream BlocksReply){} } message TxsRequest{ bool node_validation = 1; } message Tx{ bytes from = 1; int64 timestamp = 2; bytes raw_tx = 3; } message TxsReply{ Tx tx = 1; } message BlocksRequest{ bool node_validation = 1; } message BlockHeader{ string parent_hash = 1; string sha3_uncles = 2; string miner = 3; string state_root = 4; string transactions_root = 5; string receipts_root = 6; string logs_bloom = 7; string difficulty = 8; string number = 9; uint64 gas_limit = 10; uint64 gas_used = 11; uint64 timestamp = 12; bytes extra_data = 13; string mix_hash = 14; uint64 nonce = 15; uint64 base_fee_per_gas = 16; string withdrawals_root = 17; uint64 blob_gas_used = 18; uint64 excess_blob_gas = 19; string parent_beacon_block_root = 20; } message NextValidator{ string block_height = 1; string coinbase = 2; } message BlocksReply{ string hash = 1; BlockHeader header = 2; repeated NextValidator nextValidator = 3; repeated Tx txs = 4; } message Transaction { string content = 1; } message Transactions { repeated Transaction transactions = 1; } message SendTxRequest { string transaction = 1; } message SendTxsRequest { string transactions = 1; } message SendTxReply { string tx_hash = 1; } message SendTxsReply { repeated string tx_hashs = 1; } ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/public-mempool#response-example) Response Example **Success** Copy { "tx":[\ {\ "raw_tx":"+QH0gjOthDuaygCDBrbAlKoP7P6dEOH8IzwtDAw9whDVeHKRhwFrzEHpAAC5AYTVQ9H9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmsrt4HBPm7jWohanh7XmbX9S/gRLrth87fXF3H2gC0FAAAAAAAAAAAAAAAAbsa1rd5IJ6lr43ixr1+LWmT/OhgAAAAAAAAAAAAAAABV05gyb5kFn/d1SFJGmZAnsxl5VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVkLNFR0SQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZ7qkBM09jlPtkQprbOV2bITVAfdbvzTltwBYjUJu6OIzF3aAAAAAAAAAAAAAAAAHqXLqcmW4qO1ZEAZXn2nYI/dKV1AAAAAAAAAAAAAAAAVdOYMm+ZBZ/3dUhSRpmQJ7MZeVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASvCnY7scAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABme6pAgZOgy2LsKlIqPeeM7d520T3eAwIVk9O+vY4wT+zifYp0GGOgTY7Z5J3zs/YCj1HvVXOZF9Q2rj5x421GBG9CrKmxVGo="\ }\ ] } **Error** Copy rpc error: code = Unknown desc = data streams have exceeded its max limit [5] [PreviousMempoolchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/mempool) [NextPrivate Mempoolchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) Last updated 1 month ago --- # BSC | BlockRazor [Integrationchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/integration) [JSON-RPCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc) [gRPCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/grpc) [PreviousOverviewchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview) [NextIntegrationchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/integration) --- # BSC | BlockRazor [NewBlockschevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc/newblocks) [PreviousJSchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream/js) [NextNewBlockschevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc/newblocks) --- # NewBlocks | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc/newblocks#introduction) Introduction `NewBlocks`is used to subscribe to the block data stream in the high-performance network. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc/newblocks#endpoint) Endpoint Region Availability Zone(AWS) Relay Address Frankfurt euc1-az2 35.157.64.49:50051 Tokyo apne1-az4 54.249.93.63:50051 Ireland euw1-az1 3.248.65.151:50051 Virginia use1-az4 52.205.173.134:50051 ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc/newblocks#rate-limit) Rate Limit Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 Parallel data streams \- 1 5 10 30 ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc/newblocks#request-parameters) Request Parameters Parameters Mandatory Format Example Description NodeValidation Mandatory boolean false This field currently only supports being set to `false`, and the relay will push all new blocks (unchecked) with lower latency. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc/newblocks#request-example) Request Example [https://github.com/BlockRazorinc/relay\_examplearrow-up-right](https://github.com/BlockRazorinc/relay_example) Go Copy package main import ( "context" "fmt" // directory of the generated code using the provided relay.proto file pb "github.com/BlockRazorinc/relay_example/protobuf" "google.golang.org/grpc" ) // auth will be used to verify the credential type Authentication struct { apiKey string } func (a *Authentication) GetRequestMetadata(context.Context, ...string) (map[string]string, error) { return map[string]string{"apiKey": a.apiKey}, nil } func (a *Authentication) RequireTransportSecurity() bool { return false } func main() { // BlockRazor relay endpoint address blzrelayEndPoint := "ip:port" // auth will be used to verify the credential auth := Authentication{ "your auth token", } // open gRPC connection to BlockRazor relay var err error conn, err := grpc.Dial(blzrelayEndPoint, grpc.WithInsecure(), grpc.WithPerRPCCredentials(&auth), grpc.WithWriteBufferSize(0), grpc.WithInitialConnWindowSize(128*1024)) if err != nil { fmt.Println("error: ", err) return } // use the Gateway client connection interface client := pb.NewGatewayClient(conn) // create context and defer cancel of context ctx, cancel := context.WithCancel(context.Background()) defer cancel() // create a subscription using the stream-specific method and request stream, err := client.NewBlocks(ctx, &pb.BlocksRequest{NodeValidation: false}) if err != nil { fmt.Println("failed to subscribe new block: ", err) return } for { reply, err := stream.Recv() if err != nil { fmt.Println("stream receive error: ", err) } fmt.Println("recieve new block, block hash is ", reply.Hash) } } #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc/newblocks#proto) Proto The code of `relay.proto` is as follows: Copy syntax = "proto3"; package blockchain; option go_package = "/Users/code/relay/grpcServer"; service Gateway { rpc SendTx (SendTxRequest) returns (SendTxReply) {} rpc SendTxs (SendTxsRequest) returns (SendTxsReply) {} rpc NewTxs (TxsRequest) returns (stream TxsReply){} rpc NewBlocks (BlocksRequest) returns (stream BlocksReply){} } message TxsRequest{ bool node_validation = 1; } message Tx{ bytes from = 1; int64 timestamp = 2; bytes raw_tx = 3; } message TxsReply{ Tx tx = 1; } message BlocksRequest{ bool node_validation = 1; } message BlockHeader{ string parent_hash = 1; string sha3_uncles = 2; string miner = 3; string state_root = 4; string transactions_root = 5; string receipts_root = 6; string logs_bloom = 7; string difficulty = 8; string number = 9; uint64 gas_limit = 10; uint64 gas_used = 11; uint64 timestamp = 12; bytes extra_data = 13; string mix_hash = 14; uint64 nonce = 15; uint64 base_fee_per_gas = 16; string withdrawals_root = 17; uint64 blob_gas_used = 18; uint64 excess_blob_gas = 19; string parent_beacon_block_root = 20; } message NextValidator{ string block_height = 1; string coinbase = 2; } message BlocksReply{ string hash = 1; BlockHeader header = 2; repeated NextValidator nextValidator = 3; repeated Tx txs = 4; } message Transaction { string content = 1; } message Transactions { repeated Transaction transactions = 1; } message SendTxRequest { string transaction = 1; } message SendTxsRequest { string transactions = 1; } message SendTxReply { string tx_hash = 1; } message SendTxsReply { repeated string tx_hashs = 1; } ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc/newblocks#response-example) Response Example **Success** Copy { "hash": "0xe4a85aaa8cf4c85c4abf59c06b744ae680941e7ffba351fd4c166f0264e860de", "header": { "parent_hash": "0x0105992a6c305b0bbfbf7b4eebbbc92c4dca1bb2a18c1f93c551afc2c73c0668", "sha3_uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "miner": "0x9f1b7FAE54BE07F4FEE34Eb1aaCb39A1F7B6FC92", "state_root": "0xce2a7e35a643e5840e510df9eea8ba9177dd62fe743439ef159d7d9e783afd28", "transactions_root": "0x63c952adbe28ef60d8e723acec299ca62a915b51d05b060cb6fe97bb28814ab3", "receipts_root": "0xd3232a5308a69591dda132bd4ce1c1dbd5968ed9feee5f1385a5e7ad1b10527b", "logs_bloom": "8477149424673580296520836103527692456522284192111573121045681184670018737794069194486118998020237483301054022136573687133364882576385281526094331485603954025070865625599001965016471857986082361337851986790329901990002923474000909032395056767065187980257808021700240863783968353544053840361314138235944346718686049569138609472702141575196319415411746602993576034439427711191239874622732325947862558346553652593648034520192193214092215911630192819139737571343595880627533215841996399050061528845101804940660169259391681335118771766679784629118424769368884717750281985023526825099358014255162966726322082309693440030370", "difficulty": "2", "number": "40370748", "gas_limit": 139997863, "gas_used": 12180159, "timestamp": 1720674742, "extra_data": "2IMBBAqEZ2V0aIhnbzEuMjEuNYVsaW51eAAAAEj6ewX4tYMf//+4YKyfFdynrjSSLQKJj9FdhVSwaDFtnAdMnqNzKeVm2agkWE79uSpjZ2Wbrxt2eCFSvBRuPLIhONzRYpQgx/DeH/Xrhsz/A+EZw4BFaOVV3ch76i1QdJy1CADUqoc/XEaBHvhMhAJoAjqg3GksrNaxsaC5pxx8JS0YFpA6OQh7ofh7pTmra2Ve7lOEAmgCO6ABBZkqbDBbC7+/e07ru8ksTcobsqGMH5PFUa/CxzwGaIBHk8oYx40FGg4hnpMSQsTiOEAObH2DV3ytkUGOdEk4KENXgVf0/xsCA56w2r/VIqP7ux7HCD9vrh7H7fjxdU3xAA==", "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", "noncpe":0, "base_fee_per_gas":0, "withdrawals_root":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "blob_gas_used": 131072, "excess_blob_gas":0, "parent_beacon_block_root":"" }, "nextValidator": [{\ "block_height": "40370749",\ "coinbase": "0xbdcc079bbb23c1d9a6f36aa31309676c258abac7"\ }, {\ "block_height": "40370750",\ "coinbase": "0xc2d534f079444e6e7ff9dabb3fd8a26c607932c8"\ }], "txs": [{\ "raw_tx": "+K6DzSWShQEqBfIAgwEwY5R2021E3EWV6NLrOtdF8XXtoTQoT4C4RKkFnLsAAAAAAAAAAAAAAAAFWjs3lXv70zRb7Zlo5+jdVtZwZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBV8GygaywAAgZOguQQg9l/3+bmldXAcm9lsSsgxwq8m+wqcXh/KwbKJ7E+gAS8g6ZuII8KJWFBFpVzTcyptzqfro00WDKR3oi1ly7g="\ }, {\ "raw_tx": "+QVPgxUyKIUBKgXyAIMHoSCUE3kk18NoFuDcrwFuthfMLJLAV4KAuQTkyYB1OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAGQptag/qdv1AH5JjIvJ4fgACqZ4AQoECA4FDA0HAQsPAgAJBgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw9aP+EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD2B6d4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPYNaEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw9jajbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD2a1DgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPZrUOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw9qNqnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD2o2qcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPajapwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw9u7fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD3ePNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPiGlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw+IaWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD4n5xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPqOuWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw+o8GuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbIQBTEAMmDL3iUlt3D7Hrj6ACjQhWYvzwIOV06fd5+CxHWRbBH4sYJEbXQ/y6+cimsuGJSFGXoSkH5dZf7RDlpIA584nEMYIrJUVhB3PQZWCiY951T9xxDCPwvuqG40jEYJR68n788tw7y1nUnZwIJVWAoko+4Z/immcv2IcTzZ53J2RNPMiqAlb21gAwDfKQtEF7HpWEwn422R1b9VDfEey+3vxMAzZcisrwfRh49shbMLJpz4CnFt5FyAS9eI9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhy0jMwJkMmVvzRghVWVS2LwKSffduFZtzpO03R2sucDE1hqfyr8bpMWOG7oHhhdknlcQ/+leSGQf9X8GF1g7MBIWrGp/Ri03p4GYSY3Rj6RaN+SWlHEPySIll217WvNyHf3dtjfz9ic4gXWSc4l+vP5fXff/59EgoqDMhgEOP/iOfCAJsJt5Uisq/0Cpz/+2fzV4KknIckM8W1VsH8S34kLRauuV1UKaY7AU0K0BIA1dr8HMkOm/Ci+fDyuSFJY94GToC30fN+eoJ0+scIcdj9XpEmHUxWAT6TtSwk1zVm14HyboHCzcmyYjRIcHxPeMrJiwXSKXkgCTggJw9V0ETOLYuZL"\ }, {\ "raw_tx": "+K6DzSWThQEqBfIAgwEw4JRV05gyb5kFn/d1SFJGmZAnsxl5VYC4RKkFnLsAAAAAAAAAAAAAAADt2wDQgCLygqAXnLTDVpf1DvOxOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALA2UyUvg7vwAgZOgReRi2miA5qA+ERtjgmiOmqwmtCDhvtj0TFKrtUAuQWegP7xd7Gj89uQM03KMcfceKvAKkxwwajcJB1M8xHQlR4g="\ }, {\ "raw_tx": "+QFrBYTodUcAgwQ7j5Td7QSbsOJzaTkPQPjEolIpjjUwjoC5AQS39rSuAAAAAAAAAAAAAAAAVdOYMm+ZBZ/3dUhSRpmQJ7MZeVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHP5UVLi+/8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcWBJiX8HPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAisdqUcyVDZgi1ouD/hrZezLNWA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGUoDDbxwrT1VjxX+u9C70/BMIgFYEATNA/P4NaAIu8AYupoFgRK+X8L9sYxgVNJobVpne44NbM/wQTYLLDGqanoAeH"\ }] } **Error** Copy rpc error: code = Unknown desc = data streams have exceeded its max limit [5] [PreviousBSCchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc) [NextBasechevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base) Last updated 1 month ago --- # Send Transaction | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction#jie-shao) Introduction ---------------------------------------------------------------------------------------------------------------------------------- circle-exclamation Solana's transaction sending service is not bound to the subscription plan, with rate limit default to 1 TPS. If you need to increase the TPS limit, please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us and we will handle it as soon as possible. BlockRazor achieves subsecond-level transaction inclusion based on globally distributed high-performance network and high-quality SWQoS(see the [Benchmarkarrow-up-right](https://www.blockrazor.io/#/blogs/20250801Benchmarking) ), and also provides multiple modes such as sandwich mitigation. `Send Transaction` is used to send signed transaction on Solana based on HTTP and gRPC. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction#xian-liu) Endpoint ------------------------------------------------------------------------------------------------------------------------------ **HTTP** Region URL Frankfurt http://frankfurt.solana.blockrazor.xyz:443/sendTransaction New York http://newyork.solana.blockrazor.xyz:443/sendTransaction Tokyo http://tokyo.solana.blockrazor.xyz:443/sendTransaction Amsterdam http://amsterdam.solana.blockrazor.xyz:443/sendTransaction London http://london.solana.blockrazor.xyz:443/sendTransaction #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction#grpc) gRPC Region URL Frankfurt frankfurt.solana-grpc.blockrazor.xyz:80 New York newyork.solana-grpc.blockrazor.xyz:80 Tokyo tokyo.solana-grpc.blockrazor.xyz:80 Amsterdam amsterdam.solana-grpc.blockrazor.xyz:80 London london.solana-grpc.blockrazor.xyz:80 [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction#xian-liu-1) Rate Limit ---------------------------------------------------------------------------------------------------------------------------------- circle-info Solana's transaction sending service is no longer bound to the subscription plan. If you need to increase the TPS limit, please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us and we will handle it as soon as possible. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction#jiao-yi-gou-jian-dai-ma-shi-li) Transaction Construction Example ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * [Go](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction/go) * [Rust](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction/rust) * [JS](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction/js) [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction#request-parameter) Request Parameter ------------------------------------------------------------------------------------------------------------------------------------------------ Parameters Mandatory Example Description transaction Mandatory "4hXTCk……tAnaAT" Fully signed transactions, compatible with encoding protocal base 64 and base 58, with base 64 being recommended mode Optional "fast" "sandwichMitigation" BlockRazor offers two modes: Fast and SandwichMitigation, with Fast as the default. In fast mode, transactions are sent based on globally distributed high-performance network and high-quality SWQoS, reaching the Leader node with the lowest latency. In sandwichMitigation mode, transactions will be sent to BlockRazor's highly trusted SWQoS to reduce the attack surface. At the same time, transactions will skip the slot of the blacklisted Leader (dynamically identified by the BlockRazor sandwich monitoring mechanism), effectively reducing the risk of transactions being attacked by malicious Leaders. safeWindow Optional 3 safeWindow is used to determine the timing of transaction sending in sandwichMitigation mode and represents the number of consecutive slots of whitelist validators. For example, if it is set to 3, the transaction will only be sent when 3 consecutive slots from the current slot belong to whitelist validators. The range of safeWindow is 3-13. The larger the number, the better the effect of mitigating the sandwich attack, but it may have a certain impact on the rate of inclusion. If not set, the default is 3. revertProtection Optional false The default value is false. If set to true, the transaction will not fail on chain, but the speed of inclusion will be affected and there is a possibility that it cannot be included. Please choose to enable it carefully according to actual needs. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction#priority-fee-and-tip) **Priority** Fee -------------------------------------------------------------------------------------------------------------------------------------------------- Priority Fee is an additional transaction fee charged by Solana on top of Base Fee (the minimum cost of sending a transaction, 5,000 lamports for each signature included in the transaction). Due to limited computing resources, Leader nodes order transactions mainly by transaction value when producing blocks. Transactions with higher Priority Fee have a higher probability of being included in the next block. The CU Price of Priority Fee is provided by [`getTransactionfee`](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee) and is recommended to be set at least 1,000,000 when conscructing transactions. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction#priority-fee-and-tip-1) Tip --------------------------------------------------------------------------------------------------------------------------------------- When constructing a transaction, you need to add a instruction of Tip transfer into the transaction(preferably added at the front position) to further speed up the inclusion. BlockRazor does not charge service fees from Tips. The Tip transfer amount is at least 1,000,000 Lamports (0.001 Sol) . It is recommended to set it to the value returned by [`getTransactionfee`](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee) . The account to receive Tip is: Copy "FjmZZrFvhnqqb9ThCuMVnENaM3JGVuGWNyCAxRJcFpg9", "6No2i3aawzHsjtThw81iq1EXPJN6rh8eSJCLaYZfKDTG", "A9cWowVAiHe9pJfKAj3TJiN9VpbzMUq6E4kEvf5mUT22", "Gywj98ophM7GmkDdaWs4isqZnDdFCW7B46TXmKfvyqSm", "68Pwb4jS7eZATjDfhmTXgRJjCiZmw1L7Huy4HNpnxJ3o", "4ABhJh5rZPjv63RBJBuyWzBK3g9gWMUQdTZP2kiW31V9", "B2M4NG5eyZp5SBQrSdtemzk5TqVuaWGQnowGaCBt8GyM", "5jA59cXMKQqZAVdtopv8q3yyw9SYfiE3vUCbt7p8MfVf", "5YktoWygr1Bp9wiS1xtMtUki1PeYuuzuCF98tqwYxf61", "295Avbam4qGShBYK7E9H5Ldew4B3WyJGmgmXfiWdeeyV", "EDi4rSy2LZgKJX74mbLTFk4mxoTgT6F7HxxzG2HBAFyK", "BnGKHAC386n4Qmv9xtpBVbRaUTKixjBe3oagkPFKtoy6", "Dd7K2Fp7AtoN8xCghKDRmyqr5U169t48Tw5fEd3wT9mq", "AP6qExwrbRgBAVaehg4b5xHENX815sMabtBzUzVB4v8S", circle-info To avoid the degradation of performance due to address occupation, causing transaction delay, please rotate the Tip account when sending transactions. [PreviousSolanachevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana) [NextGochevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction/go) Last updated 1 month ago --- # Solana | BlockRazor [Get TransactionFeechevron-right](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee) [PreviousGetAllGasPriceStreamchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getallgaspricestream) [NextGet TransactionFeechevron-right](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee) --- # Shred Stream | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/shred-stream#introduction) Introduction --------------------------------------------------------------------------------------------------------------------------- Shred Stream delivers shreds at lowest latency to Validators, RPCs, Bots and DeFi Builders. Based on a global distributed high-performance network, Shred Stream delivers shreds in native UDP packets directly from high-stake validators to clients, minimizing the number of forwarding hops. It is now deployed in Frankfurt, Amsterdam, Tokyo, and New York. [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/shred-stream#price) Price ------------------------------------------------------------------------------------------------------------- circle-info Users subscribing to a Tier 2 - Solana or higher plan could receive free quota for creating a Shred Stream. Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 Shred Stream \- \- 1 2 5 circle-info Shred Stream is not tied to a subscription plan and can be purchased independently. The following is the price per steam per region. After purchasing, you can still change the region and the IP:Port where you receive shreds during the validity period. Service cycle Discount Price 1 month 100% $500(1 \* $500) 3 months 95% $1425(3 \* $475) 6 months 90% $2700(6 \* $450) 9 months 85% $3825(9 \* $425) 12 months 80% $4800(12 \* $400) [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/shred-stream#instruction) Instruction ------------------------------------------------------------------------------------------------------------------------- 1. Go to [https://www.blockrazor.io/arrow-up-right](https://www.blockrazor.io/) , click \[Register\] in the upper right corner to complete the registration 2. Log in to the console, go to \[Solana\] - \[Shred\], and click \[Create Shred Stream\] ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FyqiCGZDnMLAi00Pi8pEX%252Fenode1.png%3Falt%3Dmedia%26token%3Dfe07b8ce-1f84-4c03-9502-0f8c986d362c&width=768&dpr=3&quality=100&sign=af2ae299&sv=2) 1. Enter the IP:Port or domain:Port of your server, and select the region closest to your server Copy # Please ensure that the port is open. If your client is deployed on AWS or other cloud services, you should additionally configure inbound rules for the security group # The steps to open the port are as follows sudo ufw allow /udp sudo ufw reload 1. Choose the service cycle and payment method, and confirm the order information 1. For users subscribed to a Tier 2 - Solana or higher plan, Step 4 is not required to complete the creation. 2. Complete the payment and return to \[Solana\] - \[Shred\], click \[Capture\] to copy the command ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FlL62R0hP0zuaLk6qxgjS%252Fenode3.png%3Falt%3Dmedia%26token%3D24c195d0-5eac-42e7-9710-4581bc96c8e8&width=768&dpr=3&quality=100&sign=c958bcdb&sv=2) 1. Access server to run the command to view the shreds delivered from the relay of Shred Stream [PreviousSolanachevron-left](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana) [NextGeyser Streamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream) Last updated 3 months ago --- # Base | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/base#introduction) Introduction The Fast Mode leverages BlockRazor's global high-performance network to achieve the lowest latency for transaction inclusion, making it suitable for users who have extreme requirements for transaction inclusion speed. The transaction submission method for Fast Mode is compatible with `eth_sendRawTransaction`. circle-info Fast Mode is not tied to the subscription plan, but each transaction sent in Fast Mode must include a tip sent to the address `0x9D70AC39166ca154307a93fa6b595CF7962fe8e5`. The minimum tip amount is the greater of 0.000003 ETH or MaxPriorityFee \* 0.05 ETH. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/base#endpoint) Endpoint http://base-fast.blockrazor.io ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/base#rate-limit) Rate Limit Fast Mode is not tied to the subscription plan, the rate limit default to 10 TPS for all users. Please contact us if you require an increase in your TPS limit. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/base#request) Request Copy curl http://base-fast.blockrazor.io \ -X POST \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ --data ' { "jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": [\ "Signed Transaction"\ ], "id": 1 } ' ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/base#response) Response **Normal** Copy { "jsonrpc":"2.0", "id":"1", "result":"0xa06b……f7e8ec" // 交易哈希 }‍ **Abnormal** Copy { "jsonrpc":"2.0", "id":"1", "error":{ "code":-32000, "message":"Tip verification failed" } } [PreviousGochevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock/go) [NextMonadchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/monad) Last updated 1 month ago --- # Monad | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/monad#introduction) Introduction The Fast Mode leverages BlockRazor's global high-performance network to achieve the lowest latency for transaction inclusion, making it suitable for users who have extreme requirements for transaction inclusion speed. The transaction submission method for Fast Mode is compatible with `eth_sendRawTransaction`. circle-info Fast Mode is not tied to the subscription plan, but each transaction sent in Fast Mode must include a tip sent to the address `0x9D70AC39166ca154307a93fa6b595CF7962fe8e5`. The minimum tip amount is the greater of 0.5 MON or MaxPriorityFee \* 0.05 MON. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/monad#endpoint) Endpoint http://monad-fast.blockrazor.io ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/monad#rate-limit) Rate Limit Fast Mode is not tied to the subscription plan, the rate limit default to 10 TPS for all users. Please contact us if you require an increase in your TPS limit. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/monad#request) Request Copy curl http://monad-fast.blockrazor.io \ -X POST \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ --data ' { "jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": [\ "Signed Transaction"\ ], "id": 1 } ' ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/monad#response) Response **Normal** Copy { "jsonrpc":"2.0", "id":"1", "result":"0xa06b……f7e8ec" // 交易哈希 }‍ **Abnormal** Copy { "jsonrpc":"2.0", "id":"1", "error":{ "code":-32000, "message":"Tip verification failed" } } [PreviousBasechevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/base) [NextGas Sponsorchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/gas-sponsor) Last updated 1 month ago --- # Solana | BlockRazor [Shred Streamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/shred-stream) [Geyser Streamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream) [PreviousBlock Streamchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/block-stream) [NextShred Streamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/shred-stream) --- # BSC | BlockRazor [GetGasPriceStreamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getgaspricestream) [GetAllGasPriceStreamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getallgaspricestream) [PreviousNetwork Fee Streamchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream) [NextGetGasPriceStreamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getgaspricestream) --- # Get FlashBlockStream | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-flashblockstream#introduction) Introduction --------------------------------------------------------------------------------------------------------------------------------- This method is used to retrieve FlashBlock data from Base, supporting both gRPC and WebSocket protocols. Flashblocks are "sub-blocks" streamed on Base every 200 milliseconds, enabling transaction pre-confirmation 10 times faster than the standard 2-second block time. These sub-blocks, called Flashblocks, contain approximately 10% of a full block's transaction data, allowing applications to receive near-instant transaction feedback, suitable for low-latency scenarios. [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-flashblockstream#endpoint) Endpoint ------------------------------------------------------------------------------------------------------------------------- gRPC WebSocket Region Endpoint Frankfurt frankfurt.grpc.base.blockrazor.xyz:80 Virginia virginia.grpc.base.blockrazor.xyz:80 Tokyo tokyo.grpc.base.blockrazor.xyz:80 Region Endpoint Frankfurt ws://frankfurt.base.blockrazor.xyz:81/ws Virginia ws://virginia.base.blockrazor.xyz:81/ws Tokyo ws://tokyo.base.blockrazor.xyz:81/ws [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-flashblockstream#rate-limit) Rate Limit ----------------------------------------------------------------------------------------------------------------------------- Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 FlashBlockStream \- \- \- ✅ ✅ [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-flashblockstream#request-example) Request Example --------------------------------------------------------------------------------------------------------------------------------------- gRPC WebSocket-Go WebSocket-Cli JS Access the example [herearrow-up-right](https://github.com/BlockRazorinc/base-api-client-go/blob/c4bec3d65e55ffb0da07253fa78aefe1b1c07e33/main.go#L93) Copy // GetFlashBlockStream provides a simplified example of subscribing to and processing the flash block stream. // Note: This function attempts to connect and subscribe only once. For production use, implement your own reconnection logic. func GetFlashBlockStream(authToken string) { log.Printf("[FlashStream] Attempting to connect to gRPC server at %s...", grpcAddr) // Establish a connection to the gRPC server with a timeout. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() conn, err := grpc.DialContext(ctx, grpcAddr, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Printf("[FlashStream] Failed to connect to gRPC server: %v", err) return } defer conn.Close() log.Println("[FlashStream] Successfully connected to gRPC server.") client := basepb.NewBaseApiClient(conn) // Create a new context with authentication metadata for the stream subscription. streamCtx := metadata.NewOutgoingContext(context.Background(), metadata.Pairs("authorization", authToken)) stream, err := client.GetRawFlashBlockStream(streamCtx, &basepb.GetRawFlashBlocksStreamRequest{}) if err != nil { log.Printf("[FlashStream] Failed to subscribe to stream: %v", err) return } log.Println("[FlashStream] Subscription successful. Waiting for new flash blocks...") // Loop indefinitely to receive messages from the stream. for { block, err := stream.Recv() if err != nil { if err == io.EOF { log.Println("[FlashStream] Stream closed by the server (EOF).") } else { log.Printf("[FlashStream] An error occurred while receiving data: %v", err) } break // Exit the loop on error or stream closure. } // Process the received flash block data. jsonString, err := ParseFlashBlockByte(block.Message) if err != nil { log.Printf("[FlashStream] Failed to parse flash block data: %v", err) continue } var jsonMap map[string]interface{} if err := json.Unmarshal([]byte(jsonString), &jsonMap); err != nil { log.Printf("[FlashStream] Failed to unmarshal flash block JSON: %v", err) continue } printPretty(jsonMap) } } Access the example [herearrow-up-right](https://github.com/BlockRazorinc/base-api-client-go/blob/1d46c2983420d6da645992a9f3ed51688f7dac88/main.go#L181) Copy // GetWebSocketFlashBlockStream provides a simplified example of using the WebSocket API to subscribe to the flash block stream. // Note: This function attempts to connect only once and will exit on a read error. For production use, implement your own reconnection logic. func GetWebSocketFlashBlockStream(authToken string) { // Set up the HTTP header with the authorization token. header := http.Header{} header.Set("Authorization", authToken) // Dial the WebSocket server. dialer := websocket.DefaultDialer conn, resp, err := dialer.Dial(websocketAddr, header) if err != nil { if resp != nil { log.Fatalf("[WebSocket] Dial failed: %v (HTTP status: %s)", err, resp.Status) } log.Fatalf("[WebSocket] Dial failed: %v", err) } defer conn.Close() log.Printf("[WebSocket] Successfully connected to %s", websocketAddr) // Prepare the JSON-RPC subscription request. req := map[string]interface{}{ "jsonrpc": "2.0", "method": "subscribe_FlashBlock", "params": []interface{}{}, "id": 1, } reqB, _ := json.Marshal(req) if err := conn.WriteMessage(websocket.TextMessage, reqB); err != nil { log.Fatalf("[WebSocket] Failed to send subscription request: %v", err) } log.Printf("[WebSocket] Subscription request sent: %s", string(reqB)) // Loop indefinitely to read messages from the server. for { msgType, msg, err := conn.ReadMessage() if err != nil { log.Printf("[WebSocket] Error reading message: %v", err) return // Exit the function on any read error. } if msgType != websocket.TextMessage && msgType != websocket.BinaryMessage { continue // Ignore messages that are not text or binary. } // Parse the outer JSON-RPC response wrapper. var outer = &FlashBlockWebSocketResponse{} if err := json.Unmarshal(msg, &outer); err != nil { log.Printf("[WebSocket] Failed to parse JSON from server: %v\nRaw data: %s", err, string(msg)) continue } // Extract the "result" field, which contains the actual flash block data, and process it. resultRaw := outer.Result if jsonString, err := ParseFlashBlockByte(resultRaw); err == nil { printPretty(jsonString) } else { log.Printf("[WebSocket] Received message without a valid result field. Raw data: %s", string(msg)) } } } Copy wscat -H "Authorization: " \ -c ws://frankfurt.base.blockrazor.xyz:81/ws \ --wait 1000 \ --execute '{"jsonrpc": "2.0", "id": 1, "method": "subscribe_FlashBlock", "params": []}' Copy const WebSocket = require('ws'); // WebSocket library for Node.js, install via npm(npm install ws) if not already installed const zlib = require('zlib'); // Node.js built-in library for compression/decompression // --- Configuration Parameters --- // Replace with your actual authorization token const AUTH_TOKEN = ""; const WS_URL = ""; // websocket URL const SUBSCRIPTION_MESSAGE = { "jsonrpc": "2.0", "id": 1, "method": "subscribe_FlashBlock", "params": [] }; const WAIT_TIME_MS = 1000; // Time to wait before sending the subscription message /** * Decompresses a Buffer using the Brotli algorithm. * @param {Buffer} dataBuffer - The data buffer to be decompressed. * @returns {Promise} - A promise that resolves with the decompressed string. */ function ParseBrotliData(dataBuffer) { return new Promise((resolve, reject) => { // zlib.brotliDecompress is used for Brotli decompression zlib.brotliDecompress(dataBuffer, (err, decompressedBuffer) => { if (err) { // Return error if decompression fails return reject(new Error("Brotli decompression failed.")); } // Convert the decompressed buffer to a string and resolve resolve(decompressedBuffer.toString('utf8')); }); }); } // --- WebSocket Connection and Operations --- function connectWebSocket() { console.log(`Attempting to connect to: ${WS_URL}`); // Create custom Headers for authorization const headers = { 'Authorization': AUTH_TOKEN }; // Establish WebSocket connection, passing headers const ws = new WebSocket(WS_URL, { headers: headers }); // 1. Connection established successfully ws.on('open', () => { console.log('✅ Connection established.'); // Mimicking --wait 1000, wait 1 second before sending the message setTimeout(() => { const messageString = JSON.stringify(SUBSCRIPTION_MESSAGE); console.log(`➡️ Sending subscription message (after waiting ${WAIT_TIME_MS}ms):`); console.log(messageString); ws.send(messageString); }, WAIT_TIME_MS); }); // 2. Message received ws.on('message', async (data) => { // Data is a Buffer received from the server, which we suspect is uncompressed JSON string. const rawJsonString = data.toString('utf8'); try { // STEP 1: Parse the outer JSON-RPC wrapper const rpcResponse = JSON.parse(rawJsonString); // Check if 'result' or 'params' field exists and contains the Base64 data const base64Data = rpcResponse.result || (rpcResponse.params && rpcResponse.params.data); if (!base64Data || typeof base64Data !== 'string') { console.log(`\n⬅️ Received non-compressed JSON message:`); console.log(JSON.stringify(rpcResponse, null, 2)); return; } console.log(`\n⬅️ Received compressed data in JSON wrapper. Base64 length: ${base64Data.length}`); // STEP 2: Decode Base64 string back into raw Buffer const rawBrotliBuffer = Buffer.from(base64Data, 'base64'); console.log(` Decoded Base64 to Buffer. Brotli Buffer size: ${rawBrotliBuffer.length} bytes.`); // STEP 3: Decompress the raw Brotli Buffer const decompressedString = await ParseBrotliData(rawBrotliBuffer); console.log("🌟 Successfully decompressed and parsed message:"); // STEP 4: Parse the inner JSON content const finalData = JSON.parse(decompressedString); console.log(JSON.stringify(finalData, null, 2)); } catch (e) { // Handle any error during the 4 steps (JSON parse, Base64 decode, Brotli decompress, final JSON parse) console.error("\n❌ Error during processing compressed payload:"); console.error(` Error message: ${e.message}`); console.log(` Raw received string (first 200 chars): ${rawJsonString.substring(0, 200)}...`); } }); // 3. Connection closed ws.on('close', (code, reason) => { console.log(`\n❌ Connection closed. Code: ${code}, Reason: ${reason.toString()}`); }); // 4. Connection error ws.on('error', (error) => { console.error(`\n🔥 An error occurred: ${error.message}`); }); } // Start the client connectWebSocket(); #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-flashblockstream#proto) [protoarrow-up-right](https://github.com/BlockRazorinc/base-api-client-go/blob/1d46c2983420d6da645992a9f3ed51688f7dac88/proto/BaseApi.proto) Copy syntax = "proto3"; option go_package = "./basepb"; import "google/protobuf/wrappers.proto"; message BaseBlock { string parent_hash = 1; string fee_recipient = 2; bytes state_root = 3; bytes receipts_root = 4; bytes logs_bloom = 5; bytes prev_randao = 6; uint64 block_number = 7; uint64 gas_limit = 8; uint64 gas_used = 9; uint64 timestamp = 10; bytes extra_data = 11; repeated uint64 base_fee_per_gas = 12; string block_hash = 13; repeated bytes transactions = 14; repeated Withdrawal withdrawals = 15; google.protobuf.UInt64Value blob_gas_used = 16; google.protobuf.UInt64Value excess_blob_gas = 17; google.protobuf.BytesValue withdrawals_root = 18; } message Withdrawal { uint64 index = 1; uint64 validator = 2; bytes address = 3; uint64 amount = 4; } message GetRawFlashBlocksStreamRequest { } message GetBlockStreamRequest { } message SendTransactionRequest { string rawTransaction = 1; } message SendTransactionResponse { string txHash = 1; } message FlashBlockStrRequest { } message RawFlashBlockStrResponse { bytes message = 1; } service BaseApi { rpc SendTransaction(SendTransactionRequest) returns (SendTransactionResponse); rpc GetBlockStream(GetBlockStreamRequest) returns (stream BaseBlock); rpc GetRawFlashBlockStream(GetRawFlashBlocksStreamRequest) returns (stream RawFlashBlockStrResponse); } [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-flashblockstream#response) Response ------------------------------------------------------------------------------------------------------------------------- **Normal** Copy { message: "185329……7e04b7" } **Abnormal** Copy rpc error: code = Unknown desc = Authentication information is missing. Please provide a valid auth token [PreviousGet BlockStreamchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-blockstream) [NextParseFlashBlockchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-flashblockstream/parseflashblock) Last updated 2 months ago --- # Base | BlockRazor [Get BlockStreamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-blockstream) [Get FlashBlockStreamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-flashblockstream) [PreviousNewBlockschevron-left](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/bsc/newblocks) [NextGet BlockStreamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-blockstream) --- # Base | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/base#introduction) Introduction ------------------------------------------------------------------------------------------------------------------ circle-info Currently, the Base RPC only supports the `eth_sendRawTransaction` method This API is used to send signed raw transactions on Base, supporting the gRPC and HTTPS protocol. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/base#endpoint) Endpoint ---------------------------------------------------------------------------------------------------------- gRPC HTTPS Region Endpoint Frankfurt frankfurt.grpc.base.blockrazor.xyz:80 Virginia virginia.grpc.base.blockrazor.xyz:80 Tokyo tokyo.grpc.base.blockrazor.xyz:80 Region Endpoint Frankfurt https://frankfurt-base.blockrazor.io:10101/eth\_sendRawTransaction Virginia https://virginia-base.blockrazor.io:10101/eth\_sendRawTransaction Tokyo https://tokyo-base.blockrazor.io:10101/eth\_sendRawTransaction [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/base#rate-limit) Rate Limit -------------------------------------------------------------------------------------------------------------- Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 TPS 1 Tx / 5s 1 Tx / 5s 3 TPS 5 TPS Custom [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/base#request-parameter) Request Parameter ---------------------------------------------------------------------------------------------------------------------------- Parameter Mandatory Format Example Remark rawTransaction mandatory string\[hex\] "0xd46e8dd67c5d32be8d24c6b0afe7c5c3f4e9c3b2dae18d0c6b0cf5c8f3e8b2c1" signed raw transaction [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/base#request-example) Request Example ------------------------------------------------------------------------------------------------------------------------ gRPC HTTPS Access the example [herearrow-up-right](https://github.com/BlockRazorinc/base-api-client-go/blob/c4bec3d65e55ffb0da07253fa78aefe1b1c07e33/main.go#L150) Copy // sendTransactions is an example function for sending a transaction. // It's designed to reuse an existing gRPC client connection to avoid connection latency. func sendTransactions(client basepb.BaseApiClient, authToken string, rawTxString string) { log.Println("[SendTx] Sending transaction...") ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() // Add the authentication token to the outgoing request's metadata. md := metadata.Pairs("authorization", authToken) ctx = metadata.NewOutgoingContext(ctx, md) req := &basepb.SendTransactionRequest{ RawTransaction: rawTxString, } res, err := client.SendTransaction(ctx, req) if err != nil { log.Printf("[SendTx] Failed to send transaction: %v", err) } else { log.Printf("[SendTx] Transaction sent successfully. Hash: %s", res.GetTxHash()) } } Copy curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer [TOKEN]" \ -d '{ "jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": [\ "0xf8668206bf831e988e825208940d287d6c8e5f8ad086f90d1933de060fdc578c2d808082422ea082d586bdef05fd6af532ca2943740f092cc5275731f175c0e0538a3e6a9b3c0ba060d2454b3b7679cc6c31ec70d6a8d926dcc40cf8cd4442776e018bd54787befb"\ ], "id": 67 }' \ https://virginia-base.blockrazor.io:10101/eth_sendRawTransaction #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/base#proto) [protoarrow-up-right](https://github.com/BlockRazorinc/base-api-client-go/blob/main/proto/BaseApi.proto) Copy syntax = "proto3"; option go_package = "./basepb"; import "google/protobuf/wrappers.proto"; message BaseBlock { string parent_hash = 1; string fee_recipient = 2; bytes state_root = 3; bytes receipts_root = 4; bytes logs_bloom = 5; bytes prev_randao = 6; uint64 block_number = 7; uint64 gas_limit = 8; uint64 gas_used = 9; uint64 timestamp = 10; bytes extra_data = 11; repeated uint64 base_fee_per_gas = 12; string block_hash = 13; repeated bytes transactions = 14; repeated Withdrawal withdrawals = 15; google.protobuf.UInt64Value blob_gas_used = 16; google.protobuf.UInt64Value excess_blob_gas = 17; google.protobuf.BytesValue withdrawals_root = 18; } message Withdrawal { uint64 index = 1; uint64 validator = 2; bytes address = 3; uint64 amount = 4; } message GetRawFlashBlocksStreamRequest { } message GetBlockStreamRequest { } message SendTransactionRequest { string rawTransaction = 1; } message SendTransactionResponse { string txHash = 1; } message FlashBlockStrRequest { } message RawFlashBlockStrResponse { bytes message = 1; } service BaseApi { rpc SendTransaction(SendTransactionRequest) returns (SendTransactionResponse); rpc GetBlockStream(GetBlockStreamRequest) returns (stream BaseBlock); rpc GetRawFlashBlockStream(GetRawFlashBlocksStreamRequest) returns (stream RawFlashBlockStrResponse); } [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/base#response) Response ---------------------------------------------------------------------------------------------------------- **Normal** Copy res: txHash:"0xaf430540d20eae2448947ffb254b03180b82333ef0c56bd526f7047489c195b5" **Abnormal** Copy res: txHash:"Unknown TxHash" [PreviousJSON-RPCchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/json-rpc) [NextMonadchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/monad) Last updated 1 month ago --- # BSC | BlockRazor [eth\_sendRawTransactionchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/eth_sendrawtransaction) [Send RawTxchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtx) [Send RawTxBatchchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtxbatch) [PreviousSend Transaction v2chevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction-v2) [Nexteth\_sendRawTransactionchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/eth_sendrawtransaction) --- # Monad | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/monad#introduction) Introduction ------------------------------------------------------------------------------------------------------------------- circle-info Currently, the Monad RPC only supports the `eth_sendRawTransaction` method This API is used to send signed raw transactions on Monad mainnet, supporting HTTP/HTTPS protocol. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/monad#endpoint) Endpoint ----------------------------------------------------------------------------------------------------------- HTTP HTTPS Region Endpoint Frankfurt http://frankfurt-monad.blockrazor.io Virginia http://virginia-monad.blockrazor.io Tokyo http://tokyo-monad.blockrazor.io Region Endpoint Frankfurt https://frankfurt-monad.blockrazor.io Virginia https://virginia-monad.blockrazor.io Tokyo https://tokyo-monad.blockrazor.io [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/monad#rate-limit) Rate Limit --------------------------------------------------------------------------------------------------------------- circle-exclamation Monad's transaction sending service is not bound to the subscription plan. If you need to use the service, please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us and we will handle it as soon as possible. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/monad#request-example) Request Example ------------------------------------------------------------------------------------------------------------------------- CURL Go JS Copy curl -X POST http://frankfurt-monad.blockrazor.io \ -H "Authorization: " \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "eth_sendRawTransaction", "params": [\ "0xd46e……e8b2c1"\ ] }' ## To maintain a persistent TCP connection, implementing a keep-alive mechanism is recommended Copy package main import ( "bytes" "encoding/json" "fmt" "io" "log" "net/http" ) type JsonRpcRequest struct { JsonRpc string        `json:"jsonrpc"` ID      int           `json:"id"` Method  string        `json:"method"` Params  []interface{} `json:"params"` } func main() { // Define request parameters and configuration url := "http://frankfurt-monad.blockrazor.io" authToken := ""        // Replace with your actual authorization token rawTransaction := "0xd46e……e8b2c1" // Replace with your actual raw transaction data // Construct the JSON-RPC request body requestBody := JsonRpcRequest{ JsonRpc: "2.0", ID:      1, Method:  "eth_sendRawTransaction", Params:  []interface{}{rawTransaction}, } // Marshal the struct into JSON format jsonBody, err := json.Marshal(requestBody) if err != nil { log.Fatalf("Error marshaling JSON: %v", err) } // Create HTTP client (Keep-Alive is supported by default) client := &http.Client{} // Create a new POST request req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonBody)) if err != nil { log.Fatalf("Error creating request: %v", err) } // Set request Headers req.Header.Set("Authorization", authToken) req.Header.Set("Content-Type", "application/json") // Go's http.Client uses Keep-Alive by default when the connection can be reused. // Explicitly setting 'Connection: keep-alive' is optional, // but can be kept if the server has strict requirements for connection behavior. // The default Go behavior is usually sufficient in this case. // req.Header.Set("Connection", "keep-alive") // Send the request resp, err := client.Do(req) if err != nil { log.Fatalf("Error sending request: %v", err) } defer resp.Body.Close() // Process the response bodyBytes, _ := io.ReadAll(resp.Body) fmt.Printf("Status Code: %d\n", resp.StatusCode) fmt.Printf("Response Body: %s\n", bodyBytes) fmt.Printf("Connection Header: %s\n", resp.Header.Get("Connection")) fmt.Printf("Keep-Alive successful (requires server support).\n") // Second request // The client will attempt to use the same underlying TCP connection // established by the first request, thus implementing Keep-Alive. fmt.Println("\n--- Sending Request 2 (Connection Reuse Test) ---") // Reset the request body to prepare for resending req2, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonBody)) if err != nil { log.Fatalf("Error creating request 2: %v", err) } // Copy the same Headers req2.Header.Set("Authorization", authToken) req2.Header.Set("Content-Type", "application/json") // ⚠️ Crucial: Continue using the existing client, do not create a new one. resp2, err := client.Do(req2) if err != nil { log.Fatalf("Error sending request 2: %v", err) } defer resp2.Body.Close() bodyBytes2, _ := io.ReadAll(resp2.Body) fmt.Printf("Status Code 2: %d\n", resp2.StatusCode) fmt.Printf("Response Body 2: %s\n", bodyBytes2) fmt.Printf("Connection Header 2: %s\n", resp2.Header.Get("Connection")) } Copy // Import Node.js built-in modules const http = require('http'); // --- Configuration --- const url = "http://frankfurt-monad.blockrazor.io"; const authToken = "";         // Replace with your actual authorization token const rawTransaction = "0xd46e……e8b2c1"; // Replace with your actual raw transaction data // Define the JSON-RPC request body const requestBody = {     jsonrpc: "2.0",     id: 1,     method: "eth_sendRawTransaction",     params: [rawTransaction] }; // Stringify the request body into a JSON string const jsonBody = JSON.stringify(requestBody); // Create an HTTP Agent to control the connection pool, Keep-Alive is enabled by default // Similar to the default http.Client in Go const keepAliveAgent = new http.Agent({     keepAlive: true,     maxSockets: 5, // Max number of sockets can be adjusted as needed }); async function sendJsonRpcRequest(requestUrl, body, token, agent, requestNumber) {     console.log(`\n--- Sending Request ${requestNumber} ---`);     try {         const response = await fetch(requestUrl, {             method: 'POST',             // Note: fetch in Node.js requires explicit specification of the agent for connection reuse control             agent: agent,             headers: {                 'Authorization': token,                 'Content-Type': 'application/json',                 // 'Connection': 'keep-alive' is enabled by default, but can be explicitly added             },             body: body         });         // Check response status         if (!response.ok) {             console.error(`Request ${requestNumber} failed with status: ${response.status}`);         }         const responseText = await response.text();                  console.log(`Status Code ${requestNumber}: ${response.status}`);         console.log(`Response Body ${requestNumber}: ${responseText}`);         console.log(`Connection Header ${requestNumber}: ${response.headers.get('connection') || 'N/A'}`);         // ⚠️ It's hard to directly confirm underlying TCP connection reuse in Node.js like in Go,         // we rely on the Agent and server support.         console.log(`Keep-Alive successful (requires server support and Agent configuration).`);         return response;     } catch (error) {         console.error(`Error sending request ${requestNumber}:`, error.message);         // Exit program or handle error         process.exit(1);      } } // Main execution function async function main() {     // First request     await sendJsonRpcRequest(url, jsonBody, authToken, keepAliveAgent, 1);     // Second request     // The client will attempt to use the same underlying TCP connection established by the first request,     // thus implementing Keep-Alive.     // ⚠️ Note: We reuse the keepAliveAgent object, not the request object itself.     await sendJsonRpcRequest(url, jsonBody, authToken, keepAliveAgent, 2);     // After completion, destroy the Agent to free up resources     keepAliveAgent.destroy(); } // Execute the main function main(); [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/monad#response) Response ----------------------------------------------------------------------------------------------------------- **Normal** Copy {"jsonrpc":"2.0","id":0,"result":"0xfb2c5fc7d7b92e2b8ba43f079ce68b67c66e42633f6bf10ab762ace2b5ec47f6"} **Abnormal** Copy {"jsonrpc":"2.0","error":{"code":-32603,"message":"Transaction nonce too low"},"id":1} [PreviousBasechevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/base) [NextFastchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast) Last updated 1 month ago --- # Geyser Stream | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream#introduction) Introduction ---------------------------------------------------------------------------------------------------------------------------- **What is Geyser Stream** Geyser is a plugin mechanism for Solana validators that enables real-time transmission of Solana's account, slot, block, and transaction data to external data storage media. Geyser Stream is a high-performance Solana data streaming service launched by BlockRazor based on the Yellowstone gRPC (Geyser plugin), allowing clients to subscribe to real-time Solana data streams with extremely low latency via the gRPC protocol. **Applications of Geyser Stream** Transaction Monitoring: Track transactions for specific accounts, ideal for following smart money trades or targeting new token launches on platforms like pump.fun. Account Balance Tracking: Monitor balance changes in designated accounts, enabling real-time price calculations for token pairs in DEX pools (e.g., Raydium, Orca, Jupiter). Block & Slot Insights: Analyze blocks and slots to assess network consensus and health status. **Key Features of Geyser Stream** High Performance: Geyser Stream delivers gRPC data streams to clients with ultra-low latency in real time. Data Integrity: Supports transaction replay for the most recent 500 slots (200 seconds), ensuring seamless data continuity during disconnections. High Stability: Operates across multiple cloud instances with seamless failover, guaranteeing long-term reliability. [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream#endpoint) Endpoint -------------------------------------------------------------------------------------------------------------------- Region Endpoint Frankfurt geyserstream-frankfurt.blockrazor.xyz:443 Amsterdam geyserstream-amsterdam.blockrazor.xyz:443 New York geyserstream-newyork.blockrazor.xyz:443 Tokyo geyserstream-tokyo.blockrazor.xyz:443 [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream#how-to-integrate-geyser-stream) How to integrate Geyser Stream ---------------------------------------------------------------------------------------------------------------------------------------------------------------- Geyser Stream is available for Tier 2 - Solana and higher-tier users who can refer to the [Authentication](https://blockrazor.gitbook.io/blockrazor/authentication) guide. For multi-language integration details, see: * [CLI](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream/cli) * [Go](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream/go) * [Rust](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream/rust) * [JS](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream/js) [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream#periodic-data-allowance) Periodic Data Allowance -------------------------------------------------------------------------------------------------------------------------------------------------- Geyser Stream provides periodic data allowance to users based on subscription plan. Users subscribed to Tier 2 - Solana or higher plans receive free periodic data allowance, with the relationship as follows: Tier Periodic Data Allowance Tier4 - Solana \- Tier3 - Solana \- Tier2 - Solana 20 TiB Tier1 50 TiB Custom Custom If the free periodic data allowance for the current cycle is exhausted, users can purchase addtional periodic data allowance at the following prices: Periodic Data Allowance Discount Price / Cycle 5 TiB 100% $250 10 TiB 100% $500 50 TiB 100% $2500 100 TiB 95% $4750 150 TiB 90% $6750 200 TiB 85% $8500 250 TiB 80% $10000 The steps to purchase periodic data allowance are as follows: 1. Log in to the BlockRazor protal and navigate to Services - Solana - Geyser Stream. 2. Click \[Purchase periodic data allowance\], select the periodic data allowance, and click \[Confirm\]. 3. Choose the service cycle (Note: The start and end times of the cycle align with the subscription plan cycle) and payment method. 4. Complete the payment for the bill. 5. Return to Services - Solana - Geyser Stream to view the periodic data allowance in the overview. [PreviousShred Streamchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/shred-stream) [NextCLIchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/solana/geyser-stream/cli) Last updated 29 days ago --- # Sui | BlockRazor [sui\_executeTransactionBlockchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock) [PreviousSend RawTxBatchchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtxbatch) [Nextsui\_executeTransactionBlockchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock) --- # Overview | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#introduction) Introduction BlockRazor RPC provides users with MEV protection and refunds, and supports BSC and Ethereum. Transactions submitted by users, if processed by regular RPC, will be publicly broadcasting between node P2P networks. Transactions are extremely vulnerable to MEV attacks, resulting in the potential rebate space generated by transactions being squeezed out. Compared to regular RPC, transactions submitted to BlockRazor RPC will be kept in a private channel, thus resisting MEV attacks of sandwich and frontrunning. And BlockRazor RPC supports users to customize the disclosure of transaction data, and the generated profit will also be refunded to users in real-time. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#advantages) Advantages **Security** Scutum supports protection for all types of transactions on Ethereum and BSC, resisting MEV attacks of sandwich and frontrunning. **Fast inclusion** Auction of bundle, supporting multi-layer nested backrun strategy, is adopted to maximize the value of transaction, which will be then sent to top block builders on Ethereum and BSC with extremely low latency utilizing the technique of high-performance network **Refund in real time** The potential transaction profits will be refunded to users in real time. Refund transactions will be built in advance within the RPC and sent to the block builder immediately after the user's transaction, and included in the same block. **Rapid Integration** Traders can add RPC to their wallets with one click, and project builders can customize RPC URL and trading privacy data to complete rapid RPC integration. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#faq) FAQ **How can transactions receive refunds while resisting MEV attacks?** * The transactions are shared with Searchers according to custom disclosure. Searchers can only perform harmless backrun strategies on transactions, thereby not only defending against sandwich and front-running attacks but also refunding the profits generated from backrun to users. **When and in what form will I receive the refund?** * If there is an opportunity to execute the backrun strategy for the transactions submitted by the project, the refund is completed by the Searcher calling the smart contract in real-time, meaning that the refund transaction and the project transaction will be successfully executed within the same block. **Will the transactions be reverted?** * If Scutum detects that a transaction will revert and its revert protection is enabled, it will not be included in the block. **How are profits distributed among various roles?** * If there is profit margin in the transaction and it is included in the block after the bid is successful, BlockRazor RPC will refund part of the bid to the user, and the remaining will be used to pay BlockRazor RPC's handling fee and to pay the builder for bribe to get the transaction included in the very next block. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#new-to-mev) New to MEV #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#mev) MEV The full name of MEV is Maximal Extractable Value, which means that during the production process of new blocks, the MEV robot will reorder the transactions in the mempool to maximize the overall value of the block while making profits from price fluctuations. In the MEV strategy, the sandwich attack is the most harmful to users. The robot will construct an attack transaction right before and after the target transaction (usually a DEX SWAP transaction), causing the user to receive a smaller amount of cryptocurrency than expected #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#searcher) Searcher Searchers refer to independent network participants who find and exploit MEV opportunities. They detect profitable MEV opportunities by running complex algorithms, construct [bundles](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#bundle) and submit them to [MEV Protect RPC](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#rpc) or block builders, with a view to including the bundle into the block to obtain profits. Among the MEV strategies executed by Searcher, [sandwich](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#sandwich) and [frontrunning](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#frontrunning) are the most harmful to users, while the backrun strategy is harmless to users because it is executed after user transactions. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#sandwich) Sandwich Sandwich is a malicious MEV strategy. This attack usually occurs on decentralized exchanges (DEX). When a user (such as Alice) wants to buy a token on the DEX, a malicious trader (such as Bob) can detect this transaction and insert two of his own transactions before and after Alice's transaction. Bob first buys token A before Alice’s transaction(Bob will insert a transaction with high gas before Alice's transaction to ensure that it is processed with priority. This type of attack is also called frontrunning), which pushes up the price of token A. Then, after Alice's transaction, Bob sells token A. At this time, since the price has been pushed up, Bob can profit from it. This attack method not only affected the execution price of Alice's original transaction, but also allowed Bob to gain profits by manipulating the price. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#backrun) Backrun Backrun is a harmless MEV strategy. The executor of the backrun strategy will strategically execute a backrun transaction immediately after a high-value transaction, taking advantage of the arbitrage opportunities generated by the price fluctuation of the previous transaction to obtain profits. Since the backrun transaction is executed after the user's transaction, it will not affect the previous transaction. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#bundle) Bundle In MEV, Searcher captures arbitrage opportunities by putting user transactions and strategy transactions into a bundle in a certain order. Bundles are atomic. If any transaction simulation in the bundle fails, the entire bundle will not be executed, which means that all transactions in the bundle will either execute successfully or fail. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#rpc) RPC RPC (Remote Procedure Call) is a protocol that allows one program (client) to request services from another program (server) over a network without knowing the details of the underlying network. In the context of blockchain, RPC is usually used for node communication and client interaction. Blockchain clients (such as wallets or DApp front-ends) interact with blockchain nodes through RPC to send transactions, query account balances, and obtain blocks. Information etc. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/overview#privacy-statement) Privacy Statement BlockRazor RPC does not track any kind of user information (i.e. IP, location, etc.). Only information that is public on the blockchain is preserved, such as timestamp of a transaction. [PreviousRPCchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc) [NextBSCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc) Last updated 1 month ago --- # Solana | BlockRazor [Send Transactionchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction) [Send Transaction v2chevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction-v2) [PreviousFastchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast) [NextSend Transactionchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction) --- # Ethereum | BlockRazor [Integrationchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/integration) [JSON-RPCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/json-rpc) [PreviousgRPCchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/grpc) [NextIntegrationchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/integration) --- # Get TransactionFee | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee#introduction) Introduction --------------------------------------------------------------------------------------------------------------------------------------- `Get TransactionFee` is used to obtain the priority fee and tip of Solana transactions in aggregate, supports gRPC protocol, endpoint: [grpc.solana-fee.blockrazor.xyz:443arrow-up-right](grpc.solana-fee.blockrazor.xyz:443) [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee#rate-limit) Rate Limit ----------------------------------------------------------------------------------------------------------------------------------- Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 TPS 1 5 10 50 100 [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee#request-parameter) Request Parameter ------------------------------------------------------------------------------------------------------------------------------------------------- Parameters Mandatory Format Exampl Remark accounts optional string\[\] \["DH4xma……HFtNYJ"\] If account is not specified, priority fee and tip of all transactions in the specified slot range will be counted. percentile mandatory int 50 Get the priority fee and tip of the specified quantile, enumerated value: 25, 50, 75, 95, 99 slotRange mandatory int 150 Statistics of priorityFee and tip of transactions in the last N confirmed slots, N ranges from 1 to 150 [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee#request-example) Request Example --------------------------------------------------------------------------------------------------------------------------------------------- Copy package main import ( "context" "crypto/tls" "log" // directory of the generated code using the provided proto file pb "fee-test/feepb" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) const ( gRPCEndpoint = "grpc.solana-fee.blockrazor.xyz:443" // endpoint address auth = "your auth" // auth to be verified testAccount1 = "DH4xmaWDnTzKXehVaPSNy9tMKJxnYL5Mo5U3oTHFtNYJ" // query priority fee and tip of transactions involving a specified account testAccount2 = "CAPhoEse9xEH95XmdnJjYrZdNCA8xfUWdy3aWymHa1Vj" ) func main() { // open gRPC connection to endpoint conn, err := grpc.Dial( gRPCEndpoint, grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})), grpc.WithPerRPCCredentials(&Authentication{auth}), ) if err != nil { panic(err) } defer conn.Close() // use the gRPC client client := pb.NewServerClient(conn) req := &pb.TransactionFee{ Accounts: []string{}, //do not set accounts Percentile: 75, SlotRange: 150, } // send gRPC request1 resp, err := client.GetTransactionFee(context.Background(), req) if err != nil { panic(err) } log.Printf("Response PriorityFee Percentile: %+v", resp.PriorityFee.Percentile) log.Printf("Response PriorityFee Value: %+v", resp.PriorityFee.Value) log.Printf("Response Tip Percentile: %+v", resp.Tip.Percentile) log.Printf("Response Tip Value: %+v", resp.Tip.Value) req2 := &pb.TransactionFee{ Accounts: []string{testAccount1, testAccount2}, //set specified accounts Percentile: 75, SlotRange: 150, } // send gRPC request2 resp2, err := client.GetTransactionFee(context.Background(), req2) if err != nil { panic(err) } log.Printf("Response2 PriorityFee Percentile: %+v", resp2.PriorityFee.Percentile) log.Printf("Response2 PriorityFee Value: %+v", resp2.PriorityFee.Value) log.Printf("Response2 Tip Percentile: %+v", resp2.Tip.Percentile) log.Printf("Response2 Tip Value: %+v", resp2.Tip.Value) } type Authentication struct { auth string } func (a *Authentication) GetRequestMetadata(context.Context, ...string) (map[string]string, error) { return map[string]string{"apiKey": a.auth}, nil } func (a *Authentication) RequireTransportSecurity() bool { return false } ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee#proto) Proto Copy syntax = "proto3"; package feepb; option go_package = "./pb/feepb"; service Server { rpc GetTransactionFee(TransactionFee) returns(TransactionFeeResponse) {}; } message TransactionFee { repeated string accounts = 1; int32 percentile = 2; int32 slotRange = 3; } message TransactionFeeResponse { FeeValue priorityFee = 1; FeeValue tip = 2; } message FeeValue { int32 percentile = 1; double value = 2; } [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee#response-example) Response Example ----------------------------------------------------------------------------------------------------------------------------------------------- Copy Response PriorityFee Percentile: 75 Response PriorityFee Value: 10000 // The priority fee corresponding to the quantile, in micro-lamports Response Tip Percentile: 75 Response Tip Value: 0.0001 // The tip corresponding to the quantile, in Sol Response2 PriorityFee Percentile: 75 Response2 PriorityFee Value: 432313.2435833086 Response2 Tip Percentile: 75 Response2 Tip Value: 0.0001 [PreviousSolanachevron-left](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana) [NextBlock Builderchevron-right](https://blockrazor.gitbook.io/blockrazor/block-builder/block-builder) Last updated 8 months ago --- # Ethereum | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/ethereum#introduction) Introduction The Ethereum Private Mempool delivers private transaction stream data, which is pushed based on the SSE protocol. Transactions within the data stream are uniformly desensitized, disclosing only transaction fields authorized for release. Private Mempool can be applied to a variety of scenarios, including backrunning, copy trading, and sniping. To avoid data interruption due to network fluctuations, it is recommended to establish a reconnection mechanism. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/ethereum#endpoint) Endpoint https://eth.blockrazor.xyz/stream ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/ethereum#authentication) Authentication circle-info To protect private transactions, Ethereum Private Mempool is restricted to designated Searchers. Please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us if you need to subscribe to the Private Mempool Copy curl -X GET \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " \ --data '{}' \ https://eth.blockrazor.xyz/stream Copy https://eth.blockrazor.xyz/stream?token= The in the example must be obtained after registering for BlockRazor. The steps are as follows: 1. Go to [https://www.blockrazor.ioarrow-up-right](https://www.blockrazor.io/) and click on \[Register\] in the upper right corner of the webpage, the system will redirect you to the registration page. 2. On the registration page, enter your email and password, then click \[Register\], the system will send an account activation email to your mailbox. 3. Go to your mailbox, check the account activation email, and click on the account activation link. 4. After completing the account activation, proceed to log in, check your account information, and copy the auth token. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/ethereum#data-stream-structure) Data Stream Structure Copy { "result": [\ {\ "chainId": "0x1",\ "to": "0x6215589d293fdf52886484f46f0d6a11c76b4a7e",\ "value": "0x4fefa17b724000",\ "data": "0x",\ "nonce": "0x10",\ "type": "0x2",\ "hash": "0x5f08dd372fce1a44dda27bed60ca036acb4979fad6ca37b9c388e351a870fe4c",\ "from": "0xcb1588f3f7e92a1278c68a6aed4bdcbc68534b29"\ },\ {\ "chainId": "0x1",\ "to": "0x8765589d293fdf52886484f46f0d6a11c76b4a7e",\ "value": "0x0",\ "data": "0x07ed2379000000000000000000000000990636ecb3ff04d33d92e970d3d588bf5cd8d086000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000005c697fee285b513711a816018dbb34dc0cfc4875000000000000000000000000990636ecb3ff04d33d92e970d3d588bf5cd8d0860000000000000000000000007718bc9e46745e94602c43a4a4903488647c4839000000000000000000000000000000000000000000000000000000002faf08000000000000000000000000000000000000000000000001771036abd0ec4309a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000003e90000000000000000000003cb00039d00033a00032000030600030000004e00a0744c8c09dac17f958d2ee523a2206206994597c13d831ec790cbe4bdd538d6e9b379bff5fe72c3d67a521de50000000000000000000000000000000000000000000000000000000000249f0000a0c9e75c4800000000000000000000000000000000bb803e8000000000000000000000000000000000000000000000000000027a00022300a007e5c0d20000000000000000000000000000000000000000000000000001ff0001b05120bbcb91440523216e2b87052a99f69c604a7b6e00dac17f958d2ee523a2206206994597c13d831ec700847fc9d4ad000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc35d29000000000000000000000000990636ecb3ff04d33d92e970d3d588bf5cd8d0860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000de6e2040c77f52ee63c1e501e0554a476a092703abdb3ef35c80e0d76d32939fa0b86991c6218b36c1d19d4a2e9eb0ce3606eb4802a0000000000000000000000000000000000000000000000000029b43aa6973f98048c95033000000000000000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000064000001000000206b4be0b94041c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2d0e30db00020d6bdbf78c02aaa39b223fe8d0a0e5c4f27ead9083c756cc202a00000000000000000000000000000000000000000000001771036abd0ec4309a0ee63c1e58061192eb6ca9fe34a3ccc5f4cd4bf6fefb77a037fc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2111111125421ca6dc452d289314280a0f8842a650020d6bdbf785c697fee285b513711a816018dbb34dc0cfc4875111111125421ca6dc452d289314280a0f8842a650000000000000000000000000000000000000000000000b59f19d6",\ "nonce": "0x11",\ "type": "0x2",\ "hash": "0x3456dd372fce1a44dda27bed60ca036acb4979fad6ca37b9c388e351a870fe4c",\ "from": "0xcb1588f3f7e92a1278c68a6aed4bdcbc68534b29"\ }\ ] } [PreviousBSCchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc) [NextBlock Streamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream) Last updated 11 days ago --- # Overview | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/overview#introduction) Introduction In blockchain, a Bundle refers to a group of multiple transactions packaged into an indivisible unit to ensure they are executed on-chain in a specific, predefined order. Bundles possess the following characteristics: * Atomicity: All transactions within a Bundle are executed as an "all-or-nothing" operation. If a single transaction fails, the entire Bundle is reverted, eliminating intermediary risks such as "buying halfway" or being unable to sell. * Strict Execution Order: The sender of the Bundle can precisely define the sequence in which the transactions are executed. * Privacy and Attack Resistance: Bundles typically bypass the Public Mempool and are sent directly to Builders or Validators, preventing exposure to malicious MEV (Maximal Extractable Value) attacks. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/overview#use-cases) Use Cases **Copy Trading** In copy trading scenarios, the primary concern for followers is high entry costs caused by transaction delays. A Bundle can package the "Smart Money" original transaction and the follower's trade together. This ensures the follower's transaction immediately follows the target—executing within the same block and at the closest possible position—minimizing price slippage. **Sniping** At the moment a new token pool is activated, sniping transactions often face high buy-in costs due to slow on-chain inclusion. Furthermore, extreme price volatility during a launch makes these trades prime targets for malicious MEV bots. By submitting a sniping trade via a Bundle immediately after the liquidity injection transaction, users can ensure same-block execution while defending against potential MEV attacks. **Backrunning** In backrunning scenarios, Searchers bundle a target transaction with an arbitrage transaction in a specific order. This ensures the backrun trade is locked into the very next position after the target transaction, without fear of competitors "cutting in line." Additionally, leveraging atomicity, the Bundle only executes if both transactions are profitable within that block. If market fluctuations erase the profit margin, the Bundle fails, preventing any loss of principal. **Approve + SWAP** Bundles significantly enhance the Swap experience. Typically, users must execute an "Approve" transaction before they can perform a "Swap." By encapsulating these two independent transactions into a single Bundle, users only need to provide a signature once, and both steps are completed within the same block. Since the transactions do not pass through the public Mempool, malicious actors cannot predict or exploit your authorization status. [PreviousBundlechevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle) [NextBSCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc) Last updated 29 days ago --- # Ethereum | BlockRazor [Project Builderchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/project-builder) [Searcherchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/searcher) [PreviousSearcherchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher) [NextProject Builderchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/project-builder) --- # BSC | BlockRazor [Project Builderchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/project-builder) [Searcherchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher) [PreviousOverviewchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/overview) [NextProject Builderchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/project-builder) --- # Searcher | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/searcher#introduction) Introduction Searchers can subscribe to transactions from the [Private Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) to execute backrun strategies, and then send bid to BlockRazor RPC to win the backrun auction. Additionally, searchers can skip bundle subscriptions and directly send bundles to BlockRazor RPC. With the network acceleration service of the high-performance network, BlockRazor RPC can forward bundles to builders with minimal latency, eliminating the need to repeatedly connect to builder interfaces. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/searcher#rpc-endpoint) RPC Endpoint https://eth.blockrazor.xyz ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/searcher#eth_sendbid) eth\_sendBid circle-info To protect private transactions, `eth_sendBid` is restricted to designated Searchers. Please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us if you need to send a bid. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/searcher#request-parameter) Request Parameter Parameter Mandatory Format Example Remark txs Mandatory \[\]string \["tx\_hash", "rawTxHex"\] `tx_hash` refers to the originator transaction in the [Private Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) , while `rawTxHex` is the backrun transaction being constructed. If the backrun target is a bundle, please fill in all `tx_hash` values from the bundle. blockNumber Optional hex string "0x102286B" A hex-encoded block number indicating the latest valid block for the bundle. The default value is the current block number + 100. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/searcher#bid-mechanism) Bid **mechanism** BlockRazor will replace the `tx_hash` in the Bid with `rawTxHex`, and after adding `refundPercent` and `refundRecipient`, immediately forward it to the Builder for block inclusion. From the Builder's perspective, the Bid's value is determined by the backrun transaction’s `priority fee + coinbase.transfer()`. Since the `refundPercent` for the same originator transaction remains consistent, the Bid with the highest total value will be successfully included. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/searcher#request-example) Request Example **Backrun Originator Transaction** Copy curl https://eth.blockrazor.xyz \ -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " \ --data '{ "jsonrpc": "2.0", "id": 1, "method": "eth_sendBid", "params": [\ {\ "txs": [\ "0x3a3c086bad1e765076986814939d2be70399e85ff75e4da8ec730aaf6ce3fea1",\ "0x02f86d0182149c808411e1a300830484e294fef10de0823f58df4f5f24856ab4274ededa6a5c8084c179306cc001a075d1f8fea39352c2da065aeef85be4b24789953f57a62ca7ad29b45bfc1e362aa043de44543083d0dafb80eaedd5764d6ef03336ff028ef02f238bccd5dfa9ece9"\ ],\ "blockNumber": "0x102286B"\ }\ ] }' **Backrun Originator Bundle** Copy curl https://eth.blockrazor.xyz \ -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " \ --data '{ "jsonrpc": "2.0", "id": 1, "method": "eth_sendBid", "params": [\ {\ "txs": [\ "0x3a3c086bad1e765076986814939d2be70399e85ff75e4da8ec730aaf6ce3fea1",\ "0x47816242f30167d1525a98801355f49370fc83049cb070d5d3ae9fd6c83d2d9d",\ "0x02f86d0182149c808411e1a300830484e294fef10de0823f58df4f5f24856ab4274ededa6a5c8084c179306cc001a075d1f8fea39352c2da065aeef85be4b24789953f57a62ca7ad29b45bfc1e362aa043de44543083d0dafb80eaedd5764d6ef03336ff028ef02f238bccd5dfa9ece9"\ ],\ "blockNumber": "0x102286B"\ }\ ] }' ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/searcher#eth_sendbundle) eth\_sendBundle Searchers can also act as project builders to send raw bundles. For details, please refer to [Project Builder](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/project-builder) . [PreviousProject Builderchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/project-builder) [NextMempoolchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/mempool) Last updated 14 days ago --- # Full Node Synchronization | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization#introduction) Introduction circle-info The Full Node Synchronization service is now available for standalone purchase. Users who subscribes to Tier 2 or higher will receive a free quota (the number of full nodes allowed for connection) based on your plan tier. The full-node synchronization service enables low-latency synchronization for Ethereum clients, leveraging high-performance networks. Different from subscribing to block data streams, Ethereum client can directly establish P2P connections with Relay in nearby areas, which synchronizes the latest blocks to the Ethereum clients through P2P network. Users can obtain the latest block events and world state in the first time. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization#price-and-free-quota) Price & Free quota circle-info The Full Node Synchronization service is available for separate purchase, and the price of a single enode is detailed in the table below. Users who subscribes to Tier 2 or higher will receive a free quota (the number of full nodes allowed for connection) based on your plan tier. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization#standalone-purchase) Standalone Purchase Service Duration Discount Price 1 month 100% $500(1 \* $500) 3 months 95% $1425(3 \* $475) 6 months 90% $2700(6 \* $450) 9 months 85% $3825(9 \* $425) 12 months 80% $4800(12 \* $400) #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization#free-quota-of-subscription-plan) Free Quota of Subscription Plan Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 Number of full nodes allowed to connect \- \- 2 5 30 ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization#relay-ip) Relay IP Region Availability Zone(AWS) Relay Address Frankfurt euc1-az2 35.157.64.49:50051 Tokyo apne1-az4 54.249.93.63:50051 Ireland euw1-az1 3.248.65.151:50051 Virginia use1-az4 52.205.173.134:50051 ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization#instruction) Instruction #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization#step-1-add-enode) Step 1: Add Enode **Add Enode for Free** 1. Go to [https://www.blockrazor.ioarrow-up-right](https://www.blockrazor.io/) , click \[Register\] in the upper right corner to complete the registration 2. Log in to the Portal, go to \[Pricing\], select Tier 2 or above, and click \[Get Started\] ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FY7QOQrSh6trtpOZXP6QN%252Fimage.png%3Falt%3Dmedia%26token%3Dcaa25a09-f7ad-494f-930f-840596e671cf&width=768&dpr=3&quality=100&sign=9190165c&sv=2) 1. Confirm the subscription duration and payment method and complete the payment 2. Go to \[Service\] - \[Full Node Sync\], click \[Add Enode\] ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252F53JGHFREjEmrCPc969qn%252Fimage.png%3Falt%3Dmedia%26token%3D2bdda0c1-ef20-4eb0-a2d0-a7ac4a7f0774&width=768&dpr=3&quality=100&sign=c5f6d6ec&sv=2) 1. Select the region where Relay is located (it is recommended to select the region closest to the geographical location of your Geth node), enter the Enode of the Ethereum client that needs to be connected, and click \[Confirm\] to complete the addition. ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FM18CnkbgxnSvJIzW37UZ%252Fimage.png%3Falt%3Dmedia%26token%3D6f6f440a-2e5d-4ad1-b892-ec6fea917107&width=768&dpr=3&quality=100&sign=537f9989&sv=2) 1. Return to the Enode list and click \[Copy Relay Enode\] **Purchasing Enode separately** 1. Go to [https://www.blockrazor.ioarrow-up-right](https://www.blockrazor.io/) , click \[Register\] in the upper right corner to complete the registration 2. Go to \[Service\] - \[Full Node Sync\], click \[Add Enode\] ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FaxlvRSRe9gWqqyx33TGn%252Fimage.png%3Falt%3Dmedia%26token%3D46204c3a-e520-4af5-84bd-f5194ec664fd&width=768&dpr=3&quality=100&sign=3568e6e5&sv=2) 1. Select the region where Relay is located (it is recommended to select the region closest to the geographical location of your Geth node), enter the Enode of the Ethereum client that needs to be connected, and click \[Confirm\] ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FmWfGtZo93f64OOYnOWUC%252Fimage.png%3Falt%3Dmedia%26token%3D92a7605a-dfcd-4b0b-af4c-340e6449e6f8&width=768&dpr=3&quality=100&sign=bbfadb36&sv=2) 1. Confirm the service duration and payment method and complete the payment 2. Return to the Enode list and click \[Copy Relay Enode\](Note: the enode is created only when the payment is completed) #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization#step-2-open-ports-to-allow-relay-access) Step 2: Open ports to allow relay access circle-info If your Ethereum client is deployed on AWS or other cloud services, you should additionally configure inbound rules for the security group. 1. Access your own Ethereum client's server and execute commands to set up the firewall to allow Relay access. Copy sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="52.205.173.134" port port="30311" protocol="tcp" accept' * "source address" is the IP of Relay which can be acquired from [Relay IP](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization#relay-ip) * The port for the Ethereum client to allow Relay access is generally set as the default, which is 30311. You can modify this based on your own node configuration. 1. Reload the firewall configuration to make the changes take effect. Copy sudo firewall-cmd --reload #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/node-stream/full-node-synchronization#step-3-check-the-connection-status-enable-the-admin-namespace-in-the-geth-node-as-an-example) Step 3: Check the connection status(Enable the admin namespace in the Geth node as an example) 1. Wait for 10 minutes, access the Geth node, execute the curl command to check the connection status Copy curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"admin_peers","params":[],"id":1}' http://localhost:8545 1. In the returned data, query the Relay Enode address (which can be copied from the Portal). If the address is found, it proves that the connection is successful. Copy [\ {\ "enode": "enode://9ddacbcca0dc1d1b112d470552acc795fce5c3e9f50983fcd5cee7b47289914295acaef3163bea819bcc967461978425def13595deb7de4063295c40e593f320@52.205.173.134:53754",\ "id": "8be29a75ac2cf81e3aa37ccc119630a9dfc43c88d7b5200398a466f5ef9097c4",\ "name": "Geth/v1.4.5/linux-amd64/go1.21.7",\ "caps": [\ "eth/68"\ ],\ "network": {\ "localAddress": "127.0.0.1:30311",\ "remoteAddress": "52.205.173.134:53754",\ "inbound": true,\ "trusted": false,\ "static": false\ },\ "protocols": {\ "eth": {\ "version": 68\ }\ }\ }\ ] circle-info If the connection status is found to be abnormal after inquiry, it may be due to network communication problems between nodes. Please go to [Discordarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) to contact us. [PreviousNode Streamchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/node-stream) [NextNetwork Fee Streamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream) Last updated 13 days ago --- # BSC | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#introduction) Introduction The BSC Private Mempool delivers private transaction stream data, which is pushed base on the SSE protocol and uniformly in bundle format. Transactions within the data stream are uniformly desensitized, disclosing only transaction fields authorized for release. Private Mempool can be applied to a variety of scenarios, including backrunning, copy trading, and sniping. To avoid data interruption due to network fluctuations, it is recommended to establish a reconnection mechanism. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#endpoint) Endpoint circle-info Please keep the domain for subscribing to bundles consistent with the domain for sending bundles. For example, if you subscribe to `https://jp-bscscutum.blockrazor.xyz/stream`, send bundles to `https://jp-bscscutum.blockrazor.xyz`. circle-info Private data streams vary across regions. It is recommended to subscribe to all three endpoints simultaneously. 地區 端點 Tokyo https://jp-bscscutum.blockrazor.xyz/stream New York https://us-bscscutum.blockrazor.xyz/stream Frankfurt https://ger-bscscutum.blockrazor.xyz/stream ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#authentication) Authentication To verify the credential, please set the auth token. An example is as follows: Copy curl -X GET \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " \ --data '{}' \ https://jp-bscscutum.blockrazor.xyz/stream Copy https://jp-bscscutum.blockrazor.xyz/stream?token= The in the example must be obtained after registering for BlockRazor. The steps are as follows: 1. Go to [https://www.blockrazor.ioarrow-up-right](https://www.blockrazor.io/) and click on \[Register\] in the upper right corner of the webpage, the system will redirect you to the registration page. 2. On the registration page, enter your email and password, then click \[Register\], the system will send an account activation email to your mailbox. 3. Go to your mailbox, check the account activation email, and click on the account activation link. 4. After completing the account activation, proceed to log in, check your account information, and copy the auth token. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#rate-limit) Rate Limit Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 Data Stream \- \- 2 streams 2 streams 2 streams ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#bundle-type) Bundle Type #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#raw-bundle) **Raw Bundle** Raw Bundle refers to the bundle that has not been followed by the strategy transaction. Transactions in Raw Bundle come from two channels. Transactions submitted through `eth_sendRawTransaction` will be automatically constructed as a bundle by BlockRazor RPC and pushed to Private Mempool. The Raw Bundle in this scenario only contains one transaction; For the Raw Bundle submitted through `eth_sendMevBundle`, the transactions come from the public mempool or are self-constructed. The Raw Bundle in this scenario can contain up to 50 transactions. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#followed-bundle) Followed Bundle After the client executes the backrun, coping trading or sniping strategy on Raw Bundle, it can choose to continue to disclose the bundle to Private Mempool to execute the nested backrun strategy. At this time, the bundle disclosed to the Private Mempool is the Followed Bundle, which contains all transactions in Raw Bundle, and one strategy transaction. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#data-stream-structure) Data Stream Structure **Bundle** Patameters Format Remark chainID string ETH: 1, BSC:56 hash string bundle hash, data streams are pushed uniformly in the form of bundles [txs](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#tx) [\[\]tx](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#tx) transactions included in bundle nextBlockNumber uint64 the block number where the bundle is going to be included maxBlockNumber uint64 the maximum block number valid for this bundle proxyBidContract string proxy contract address of bundle bidding, biding call for detail can be found in . refundAddress string input parameter of bidding call, the bidding will be refunded to refundAddress in proportion. refundCfg int input parameter of bidding call state \[\]state state change of state objects in EVM, [data stream example](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#data-stream-example-including-state) **txs** Patameters Format Remark hash string transaction hash from string sender of the transaction to string receiver of the transaction value hex value being transacted nonce uint64 nonce calldata string calldata functionSelector string the first 4 bytes of the contract function signature hash logs [\[\]log](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#log) event logs emitted during transaction execution **log** Patameters Format Remark address string the smart contract address that triggered the event topics \[\]string event log topcis data string storage area for non-index data #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#state) **state** circle-info the default data stream does not contain `state` field, if you need it, please modify the url of RPC Endpoint to [https://jp-bscscutum.blockrazor.xyz/stream?state=truearrow-up-right](https://jp-bscscutum.blockrazor.xyz/stream?state=true) Patameters Format Remark "0x7C3b……3cb9E2" \[\]string The address of the state object where the data changes, which can be EOA or smart contract "0x935b……6cf608" string the Key of the changed data in state object "0x0000……3ffc00" string the Value of changed data in state object ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#data-stream-example-default) Data Stream Example(default) Copy { "chainID":"56" //ETH: 1, BSC:56 "hash":"0x2ba4c05436d4a48a0ce30341a3164b34b31c091a28ed62618f7b0512aba41f51" // bundle hash "txs":[{\ "hash":"0x2ba4c05436d4a48a0ce30341a3164b34b31c091a28ed62618f7b0512aba41f51"\ "from":"0xB4647b856CB9C3856d559C885Bed8B43e0846a47"\ "to":"0x0000000000000000000000000000000000001000"\ "value":"0x1c4eda9192000"\ "nonce":88036\ "calldata":"0xf340fa01000000000000000000000000b4647b856cb9c3856d559c885bed8b43e0846a47"\ "functionSelector":"0xe47d166c"\ "logs":[\ {\ "address": "0x6c1bcf1b99d9f0819459dad661795802d232437e",\ "topics": ["0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000"],\ "data": "0x"\ }\ {\ "address": "0x6c1bcf1b99d9f0819459dad661795802d232437e",\ "topics": ["0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000"],\ "data": "0x"\ }\ ]\ }] "nextBlockNumber":39177941 //the block number where the bundle is going to be included "maxBlockNumber":39177941 //the maximum block number valid for this bundle "proxyBidContract":"0x74Ce839c6aDff544139f27C1257D34944B794605" //bidding contract address, call the contract's proxyBid method to bid "refundAddress":"0x6c1bcf1b99d9f0819459dad661795802d232437e", //the bidding amount will be refunded to refundAddress in proportion "refundCfg":10380050 //refund configuration } ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/bsc#data-stream-example-including-state) Data Stream Example(including state) circle-info The default data stream does not contain `state` field, if you need to obtain it, please modify the url of RPC Endpoint to [https://bsc.blockrazor.xyz/stream?state=truearrow-up-right](https://bsc.blockrazor.xyz/stream?state=true) Copy { "chainID":"56" //ETH: 1, BSC:56 "hash":"0x2ba4c05436d4a48a0ce30341a3164b34b31c091a28ed62618f7b0512aba41f51" // bundle hash "txs":[{\ "hash":"0x2ba4c05436d4a48a0ce30341a3164b34b31c091a28ed62618f7b0512aba41f51"\ "from":"0xB4647b856CB9C3856d559C885Bed8B43e0846a47"\ "to":"0x0000000000000000000000000000000000001000"\ "value":"0x1c4eda9192000"\ "nonce":88036\ "calldata":"0xf340fa01000000000000000000000000b4647b856cb9c3856d559c885bed8b43e0846a47"\ "functionSelector":"0xe47d166c"\ "logs":[\ {\ "address": "0x6c1bcf1b99d9f0819459dad661795802d232437e",\ "topics": ["0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000"],\ "data": "0x"\ }\ {\ "address": "0x6c1bcf1b99d9f0819459dad661795802d232437e",\ "topics": ["0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000"],\ "data": "0x"\ }\ ]\ }] "nextBlockNumber":39177841 //the block number where the bundle is going to be included "maxBlockNumber":39177941 //the maximum block number valid for this bundle "proxyBidContract":"0x74Ce839c6aDff544139f27C1257D34944B794605" //bidding contract address, call the contract's proxyBid method to bid "refundAddress":"0x6c1bcf1b99d9f0819459dad661795802d232437e", //the bidding amount will be refunded to refundAddress in proportion "refundCfg":10380050 //refund configuration "state": { //state change of state objects "0x7C3b00CB3B40Cc77d88329A58574E29cFA3cb9E2": { //The address of the state object where the data changes, which can be EOA or smart contract "0x935b605129a438014d6ae0692623c5e1fbf83d5a631f5a0f8489a301966cf608": "0x00000000000000000000000000000000000000000000010c86a7e418723ffc00" //"the Key of the changed data in state object":"the Value of changed data in state object" } } } [PreviousPrivate Mempoolchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) [NextEthereumchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool/ethereum) Last updated 13 days ago --- # gRPC | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/grpc#introduction) Introduction BlockRazor RPC now supports sending requests(including standardized JSON RPC, `sendMevBundle` and `Query TxProcessStatus`) based on the gRPC protocol, which can reduce communication latency and computing overhead compared to the HTTPS protocol, further improving transaction inclusion rate and auction winning rate. It is currently available on BSC. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/grpc#price) Price Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 \- \- \- ✅ ✅ ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/grpc#endpoint) Endpoint The steps to obtain the gRPC endpoint domain are as follows: 1. [Registerarrow-up-right](https://www.blockrazor.io/#/register) BlockRazor 2. [Log inarrow-up-right](https://www.blockrazor.io/#/login) to the console, go to the \[RPC\] module, select BSC, and click \[Update\] ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FtCL3ykjbWZ6FECJofDLT%252FSnipaste_2025-06-25_10-30-09.png%3Falt%3Dmedia%26token%3D4489babd-748e-4e5c-9b66-06d796986454&width=768&dpr=3&quality=100&sign=c90dee4e&sv=2) 1. Enter the custom third-level domain in the HTTPS URL, and the domain of gRPC will be updated correspondingly 2. Click \[Update\] to update the custom URL, copy the gRPC URL ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/grpc#request-example) Request Example Copy package main import ( "context" "crypto/tls" "encoding/json" "fmt" pb "github.com/easydo666/geth-grpc/rpc" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "log" "math/big" ) var From string = "0xSomePublicAddress12439439c739036a7660ec1" var PrivateKey string = "your from address's privateKey" var To string = "0xSomePublicAddress12439439c739036a7660ec2" var gRPCEndpoint string = "gRPC url" // get gRPC URL from portal func main() { // 1. create a new gRPC client connection conn, err := grpc.NewClient(gRPCEndpoint, grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{}))) if err != nil { log.Fatalf("failed to connect: %v", err) } defer conn.Close() client := pb.NewJsonRpcServiceClient(conn) // 2. construct the JSON-RPC request and obtain the nonce var params []string = []string{From, "pending"} b, _ := json.Marshal(params) req := &pb.JsonRpcRequest{ Jsonrpc: "2.0", Method: "eth_getTransactionCount", Params: string(b), Id: "1", } jsonRpc, err := client.CallJsonRpc(context.Background(), req) if err != nil || jsonRpc.GetError() != "" { if err != nil { fmt.Println(err) } else { fmt.Println(jsonRpc.GetError()) } } var nonce hexutil.Uint64 err = json.Unmarshal([]byte(jsonRpc.GetResult()), &nonce) // 3. construct the JSON-RPC request and send the transaction to := common.HexToAddress(To) tx := types.NewTx(&types.LegacyTx{Nonce: uint64(nonce), GasPrice: big.NewInt(1e8), Gas: 21000, To: &to, Value: big.NewInt(0)}) privateKey, err := crypto.HexToECDSA(PrivateKey) if err != nil { log.Fatal(err) } signedTx, err := types.SignTx(tx, types.NewEIP155Signer(big.NewInt(56)), privateKey) if err != nil { log.Fatal(err) } binary, _ := signedTx.MarshalBinary() encode := hexutil.Encode(binary) b, _ = json.Marshal([]string{encode}) req = &pb.JsonRpcRequest{ Jsonrpc: "2.0", Method: "eth_sendRawTransaction", Params: string(b), Id: "1", } res, err := client.CallJsonRpc(context.Background(), req) if err != nil || res.GetError() != "" { if err != nil { fmt.Println(err) } else { fmt.Println(res.GetError()) } } fmt.Println(res.GetResult()) } [PreviousJSON-RPCchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc) [NextEthereumchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum) Last updated 29 days ago --- # Integration | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/integration#introduction) Introduction circle-info The builder of project can use BlockRazor RPC without subscribing to a plan. BlockRzor RPC provides MEV protection for orderflow projects like Wallet, DEX, and Trading Bot on BSC, supporting refunds to the project users or project builders themselves. BlockRzor RPC will provide each project builder with an exclusive RPC URL, supporting visual customization of RPC domain names, transaction disclosure, refund address, and revert protection, facilitating the project builder to integrate RPC at a low cost and quickly. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/integration#how-to-integrate-rpc-into-your-project) How to integrate RPC into your project #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/integration#id-1.-configure-rpc) 1\. Configure RPC 1. Register and log in to the portal at [blockrazor.ioarrow-up-right](https://blockrazor.io/) . 2. Under the RPC module, click on the RPC page to view the configuration information of your RPC. 3. Click on **Update** to enter the configuration update page, and adjust the parameters according to your needs. The meaning of the parameters is shown in the following table. Parameters Meaning Default RPC URL Each account automatically generates 1 Ethereum RPC and 1 BSC RPC by default. The Default RPC URL is automatically generated and cannot be modified. Custom RPC URL The third-level domain is allowed to be modified, and the Custom RPC URL can be promoted to the project's end-users through websites or docs, guiding them to add custom RPC within their wallets. Hint The system defaults to sharing the transaction's hash and logs with the Searcher. The more fields shared, the greater the possibility of obtaining refunds, please proceed with caution after evaluating the need for disclosure of transaction data. Refund Address The default refund address is tx.origin, which means the refund will be returned to the sender of the transaction. It can be modified to a fixed refund address (EOA). Revert Protection revert protection is enabled by default; if a transaction is detected to revert, it will not be included in the block. To ensure fast inclusion in a block, it is recommended to set priority fee (Ethereum) when sending transactions. 1. Click **Confirm**, the system will update the RPC configuration in real time. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/integration#id-2.-integrate-rpc) 2\. Integrate RPC 1. Find the configuration file or code: Open the project workspace and locate the file or code segment that configures the RPC node in the DApp project. This could be a configuration file such as .env, config.js, truffle-config.js, etc., or it could be hardcoded directly in the code. 2. Modify the RPC URL: Change the RPC URL in the configuration file or code to the Scutum RPC URL. 3. Test the connection: After making the change, run the DApp or the corresponding test script locally to ensure that the new RPC URL works properly. You can use methods like `web3.eth.net.isListening()` or `ethers.provider.pollingInterval` to check if the connection is successful. 4. Deploy the update: If the test passes, you can deploy the changes to the production environment. JavaScript Copy // import Web3 const Web3 = require('web3'); // Create a Web3 instance and connect to the RPC. const web3 = new Web3('https://ethereum-rpc.publicnode.com'); // You can replace the RPC URL with the Scutum RPC URL here. // check the connection web3.eth.net.isListening() .then((listening) => { console.log('Web3 connected: ', listening); }) .catch((err) => { console.error('Web3 connection error: ', err); }); #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/integration#id-3.-query-transactions) 3\. Query Transactions 1. Log in to [blockrazor.ioarrow-up-right](https://blockrazor.io/) . 2. Under the Scutum module, click on **Refunds** to view the refund, and click on **Transactions** to view the transactions submitted to dedicated RPC. [PreviousBSCchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc) [NextJSON-RPCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc) Last updated 29 days ago --- # JSON-RPC | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc#eth_sendrawtransaction) eth\_sendRawTransaction `eth_sendRawTransaction` of BlockRazor RPC is compatible with native JSON-RPC methods and requires no additional modifications. If you need to modify parameters such as hint, refund address and revert protection, you can configure the dedicated RPC in the [portalarrow-up-right](https://www.blockrazor.io/#/login) #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc#request-parameters) Request parameters Parameters Mandatory Format Example Remark \- Mandatory bytes "0xd46e……445675" raw tx #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc#request-example) Request Example Copy curl -X POST -H "Content-Type: application/json" --data '{ "id": 1, "jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": [\ "0xd46e……445675"\ ] }' https://bsc.blockrazor.xyz #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc#response-example) Response Example **normal** Copy { "id":1, "jsonrpc": "2.0", "result": "0xe670……527331" } **abnormal** Copy { "jsonrpc": "2.0", "id": 1, "error": { "code": -32000, "message": "rlp: element is larger than containing list" } } ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc#eth_sendmevbundle) eth\_sendMevBundle Bundle Submission is supported in BlockRazor RPC, please refer to [Bundle](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/project-builder) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc#scutum_querytxprocessstatus) scutum\_queryTxProcessStatus `scutum_queryTxProcessStatus` is used to query the real-time process status of transactions sent to BlockRazor RPC. It is currently available on BSC. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc#request-example-1) Request Example Copy curl -X POST -H "Content-Type: application/json" --data'{ "id": 1, "jsonrpc": "2.0", "method": "scutum_queryTxProcessStatus", "params": ["0xf84a……e54284"] }' #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc#response-example-1) Response Example **Normal** Copy { "jsonrpc": "2.0", "result": "{"msg\":\"tx is included on chain\",\"status\":\"included\"}", "id": "1" } // the tx is executed on chain, success or reverted Copy { "jsonrpc": "2.0", "result": "{"msg\":\"tx is expired and discarded\",\"status\":\"expired\"}", "id": "1" } // 100 blocks has passed since submission of the tx Copy { "jsonrpc": "2.0", "result": "{"msg\":\"nonce too high\",\"status\":\"pending\"}", "id": "1" } // the tx is queued since the nonce is too high Copy { "jsonrpc": "2.0", "result": "{"msg\":\"tx is pending\",\"status\":\"pending\"}", "id": "1" } // the tx is being processed by Scutum Copy { "jsonrpc": "2.0", "result": "{"msg\":\"simulation error: xxxxxxx\",\"status\":\"failed\"}", "id": "1" } // the tx failed to be processed by Scutum due to the simulation error **Abnomal** Copy { "jsonrpc": "2.0", "error": "{\"code\":-32000,\"message\":\"tx not found\"}", "id": "1" } //the tx has not been sent to Scutum or has exceeded the Scutum processing time limit ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/json-rpc#other-json-rpc-methods) Other JSON-RPC Methods BlockRazor RPC supports standard JSON-RPC method, you can refer to [https://ethereum.org/zh/developers/docs/apis/json-rpc/#json-rpc-methodsarrow-up-right](https://ethereum.org/zh/developers/docs/apis/json-rpc/#json-rpc-methods) [PreviousIntegrationchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/integration) [NextgRPCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/grpc) Last updated 1 month ago --- # Send Transaction v2 | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction-v2#jie-shao) Introduction ------------------------------------------------------------------------------------------------------------------------------------- circle-exclamation Solana's transaction sending service is not bound to the subscription plan, with rate limit default to 1 TPS. If you need to increase the TPS limit, please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us and we will handle it as soon as possible. BlockRazor achieves subsecond-level transaction inclusion based on globally distributed high-performance network and high-quality SWQoS(see the [Benchmarkarrow-up-right](https://www.blockrazor.io/#/blogs/20250801Benchmarking) ), and also provides multiple modes such as sandwich mitigation. `Send Transaction v2` is used to send signed transaction on Solana based on HTTP. It presents a much more streamlined and rapid method for submitting transactions compared with [Send Transaction](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction) * Bypasses CORS Preflight: It eliminates the delay (50-100ms) that is typically incurred by OPTIONS preflight. * Plain Text over JSON: Employing a simple plain text transmission circumvents the computational burden associated with parsing JSON. Furthermore, the resulting smaller data size serves to cut down on network transfer time and costs. * Base64: Comparing with base58, encoding and decoding of Base64 are significantly faster, while its more compact serialization results in a reduced overall body size. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction-v2#xian-liu) Endpoint --------------------------------------------------------------------------------------------------------------------------------- HTTP HTTPS Region Endpoint Frankfurt http://frankfurt.solana.blockrazor.xyz:443/v2/sendTransaction New York http://newyork.solana.blockrazor.xyz:443/v2/sendTransaction Tokyo http://tokyo.solana.blockrazor.xyz:443/v2/sendTransaction Amsterdam http://amsterdam.solana.blockrazor.xyz:443/v2/sendTransaction London http://london.solana.blockrazor.xyz:443/v2/sendTransaction Region Endpoint Frankfurt https://frankfurt.solana.blockrazor.io/v2/sendTransaction New York https://newyork.solana.blockrazor.io/v2/sendTransaction Tokyo https://tokyo.solana.blockrazor.io/v2/sendTransaction [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction-v2#xian-liu-1) Rate Limit ------------------------------------------------------------------------------------------------------------------------------------- circle-info Solana's transaction sending service is no longer bound to the subscription plan. If you need to increase the TPS limit, please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us and we will handle it as soon as possible. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction-v2#jiao-yi-gou-jian-dai-ma-shi-li) Request Example -------------------------------------------------------------------------------------------------------------------------------------------------------------- CURL Copy curl -X POST 'http://frankfurt.solana.blockrazor.xyz:443/v2/sendTransaction?auth=' \ -H "Content-Type: text/plain" \ -d "" circle-info **Note:** * **the** `**auth**` **and** `**request parameter**` **are compulsory to be added in URI params, e.g.,** `http://frankfurt.solana.blockrazor.xyz:443/v2/sendTransaction?auth=&mode=fast&revertProtection=true` * **the only header permitted in the request is** `**Content-Type: text/plain**` * **Tx should be in Base64 encoded** [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction-v2#request-parameter) Request Parameter --------------------------------------------------------------------------------------------------------------------------------------------------- Parameters Mandatory Example Description transaction Mandatory "4hXTCk……tAnaAT" Fully signed transactions, Base64 encoded mode Optional "fast" "sandwichMitigation" BlockRazor offers two modes: Fast and SandwichMitigation, with Fast as the default. In fast mode, transactions are sent based on globally distributed high-performance network and high-quality SWQoS, reaching the Leader node with the lowest latency. In sandwichMitigation mode, transactions will be sent to BlockRazor's highly trusted SWQoS to reduce the attack surface. At the same time, transactions will skip the slot of the blacklisted Leader (dynamically identified by the BlockRazor sandwich monitoring mechanism), effectively reducing the risk of transactions being attacked by malicious Leaders. safeWindow Optional 3 safeWindow is used to determine the timing of transaction sending in sandwichMitigation mode and represents the number of consecutive slots of whitelist validators. For example, if it is set to 3, the transaction will only be sent when 3 consecutive slots from the current slot belong to whitelist validators. The range of safeWindow is 3-13. The larger the number, the better the effect of mitigating the sandwich attack, but it may have a certain impact on the rate of inclusion. If not set, the default is 3. revertProtection Optional false The default value is false. If set to true, the transaction will not fail on chain, but the speed of inclusion will be affected and there is a possibility that it cannot be included. Please choose to enable it carefully according to actual needs. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction-v2#priority-fee-and-tip) **Priority** Fee ----------------------------------------------------------------------------------------------------------------------------------------------------- Priority Fee is an additional transaction fee charged by Solana on top of Base Fee (the minimum cost of sending a transaction, 5,000 lamports for each signature included in the transaction). Due to limited computing resources, Leader nodes order transactions mainly by transaction value when producing blocks. Transactions with higher Priority Fee have a higher probability of being included in the next block. The CU Price of Priority Fee is provided by [`getTransactionfee`](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee) and is recommended to be set at least 1,000,000 when conscructing transactions. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction-v2#priority-fee-and-tip-1) Tip ------------------------------------------------------------------------------------------------------------------------------------------ When constructing a transaction, you need to add a instruction of Tip transfer into the transaction(preferably added at the front position) to further speed up the inclusion. BlockRazor does not charge service fees from Tips. The Tip transfer amount is at least 1,000,000 Lamports (0.001 Sol) . It is recommended to set it to the value returned by [`getTransactionfee`](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana/get-transactionfee) . The account to receive Tip is: Copy "FjmZZrFvhnqqb9ThCuMVnENaM3JGVuGWNyCAxRJcFpg9", "6No2i3aawzHsjtThw81iq1EXPJN6rh8eSJCLaYZfKDTG", "A9cWowVAiHe9pJfKAj3TJiN9VpbzMUq6E4kEvf5mUT22", "Gywj98ophM7GmkDdaWs4isqZnDdFCW7B46TXmKfvyqSm", "68Pwb4jS7eZATjDfhmTXgRJjCiZmw1L7Huy4HNpnxJ3o", "4ABhJh5rZPjv63RBJBuyWzBK3g9gWMUQdTZP2kiW31V9", "B2M4NG5eyZp5SBQrSdtemzk5TqVuaWGQnowGaCBt8GyM", "5jA59cXMKQqZAVdtopv8q3yyw9SYfiE3vUCbt7p8MfVf", "5YktoWygr1Bp9wiS1xtMtUki1PeYuuzuCF98tqwYxf61", "295Avbam4qGShBYK7E9H5Ldew4B3WyJGmgmXfiWdeeyV", "EDi4rSy2LZgKJX74mbLTFk4mxoTgT6F7HxxzG2HBAFyK", "BnGKHAC386n4Qmv9xtpBVbRaUTKixjBe3oagkPFKtoy6", "Dd7K2Fp7AtoN8xCghKDRmyqr5U169t48Tw5fEd3wT9mq", "AP6qExwrbRgBAVaehg4b5xHENX815sMabtBzUzVB4v8S", circle-info To avoid the degradation of performance due to address occupation, causing transaction delay, please rotate the Tip account when sending transactions. [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction-v2#gou-jian-jiao-yi) Keep Alive ------------------------------------------------------------------------------------------------------------------------------------------- Send post request to the health endpoint to keep connection alive, the request is as follows: CURL Copy curl -X POST 'http://frankfurt.solana.blockrazor.xyz:443/v2/health?auth=' \ -H "Content-Type: text/plain" \ -d "" [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction-v2#response) Response --------------------------------------------------------------------------------------------------------------------------------- Status Code Message Meaning 200 OK The request is normal 400 BadRequest Invalid parameter 403 Forbidden Request denied, as the authentication (auth) is empty, invalid, or expired. 500 InternalServerError The server encountered an unexpected condition that prevented it from fulfilling the request [PreviousJSchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/solana/send-transaction/js) [NextBSCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc) Last updated 23 days ago --- # GetAllGasPriceStream | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getallgaspricestream#introduction) Introduction -------------------------------------------------------------------------------------------------------------------------------------- `GetAllGasPriceStream` provides gas price subscription service on BSC. It pushes the gas price of BSC transactions in recent block to users at all percentile based on gRPC stream. The endpoint is: [grpc.bsc-fee.blockrazor.xyz:443arrow-up-right](grpc.bsc-fee.blockrazor.xyz:443) [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getallgaspricestream#rate-limit) Rate Limit ---------------------------------------------------------------------------------------------------------------------------------- Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 Streams \- \- \- \- 10 [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getallgaspricestream#request-parameter) Request Parameter ------------------------------------------------------------------------------------------------------------------------------------------------ Parameters Mandatory Format Example Remarks blockRange mandatory int 20 Statistics of gas prices of transactions in the last N blocks, where N ranges from 1 to 20 [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getallgaspricestream#request-example) Request Example -------------------------------------------------------------------------------------------------------------------------------------------- Copy package main import ( "context" "crypto/tls" "log" pb "fee-test/bscfeepb" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) const ( gRPCEndpoint = "grpc.bsc-fee.blockrazor.xyz:443" auth = "your_auth" ) func main() { conn, err := grpc.Dial( gRPCEndpoint, grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})), grpc.WithPerRPCCredentials(&Authentication{auth}), ) if err != nil { panic(err) } defer conn.Close() client := pb.NewServerClient(conn) req := &pb.BlockRange{ BlockRange: 5, } stream, err := client.GetAllGasPriceStream(context.Background(), req) if err != nil { panic(err) } for { message, err := stream.Recv() if err != nil { log.Printf("Failed to receive message: %v", err) break } log.Printf("Received Time: %s\n", message.Time.AsTime().Format("2006-01-02 15:04:05")) for _, gasPrice := range message.AllGasPrice { log.Printf("Received message percentile: %d\n", gasPrice.Percentile) log.Printf("Received message value: %s\n", gasPrice.Value) } } } type Authentication struct { auth string } func (a *Authentication) GetRequestMetadata(context.Context, ...string) (map[string]string, error) { return map[string]string{"apiKey": a.auth}, nil } func (a *Authentication) RequireTransportSecurity() bool { return false } ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getallgaspricestream#proto) Proto Copy syntax = "proto3"; package bscfeepb; import "google/protobuf/timestamp.proto"; option go_package = "./pb/bscfeepb"; service Server { rpc GetGasPriceStream(TransactionFee) returns(stream TransactionFeeStreamResponse) {}; rpc GetAllGasPriceStream(BlockRange) returns(stream AllGasPriceStreamResponse) {}; } message TransactionFee { int32 percentile = 1; int32 blockRange = 2; } message FeeValue { int32 percentile = 1; string value = 2; } message TransactionFeeStreamResponse { FeeValue gasPrice = 1; google.protobuf.Timestamp time = 2; } message BlockRange { int32 blockRange = 2; } message AllGasPriceStreamResponse { repeated FeeValue allGasPrice = 1; google.protobuf.Timestamp time = 2; } [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getallgaspricestream#response-example) Response Example ---------------------------------------------------------------------------------------------------------------------------------------------- Copy 2025/04/08 10:18:21 Received Time: 2025-04-08 02:18:21 2025/04/08 10:18:21 Received message percentile: 25 2025/04/08 10:18:21 Received message value: 1000000000 //// The gas price corresponding to the quantile, in wei 2025/04/08 10:18:21 Received message percentile: 50 2025/04/08 10:18:21 Received message value: 1100000000 2025/04/08 10:18:21 Received message percentile: 75 2025/04/08 10:18:21 Received message value: 2020000000 2025/04/08 10:18:21 Received message percentile: 95 2025/04/08 10:18:21 Received message value: 5000000000 2025/04/08 10:18:21 Received message percentile: 99 2025/04/08 10:18:21 Received message value: 20000000000 [PreviousGetGasPriceStreamchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getgaspricestream) [NextSolanachevron-right](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/solana) Last updated 10 months ago --- # GetGasPriceStream | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getgaspricestream#introduction) Introduction ----------------------------------------------------------------------------------------------------------------------------------- `GetGasPriceStream` provides gas price subscription service on BSC. It pushes the gas price of BSC transactions in recent block to users at a specified percentile based on gRPC stream. The endpoint is: [grpc.bsc-fee.blockrazor.xyz:443arrow-up-right](grpc.bsc-fee.blockrazor.xyz:443) [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getgaspricestream#rate-limit) Rate Limit ------------------------------------------------------------------------------------------------------------------------------- Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 Streams \- \- \- \- 10 [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getgaspricestream#request-parameter) Request Parameter --------------------------------------------------------------------------------------------------------------------------------------------- Parameters Mandatory Format Example Remarks percentile mandatory int 50 Get the gas price of the specified percentile, enumerated value: 25, 50, 75, 95, 99 blockRange mandatory int 20 Statistics of gas prices of transactions in the last N blocks, where N ranges from 1 to 20 [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getgaspricestream#request-example) Request Example ----------------------------------------------------------------------------------------------------------------------------------------- Copy package main import ( "context" "crypto/tls" "log" // directory of the generated code using the provided proto file pb "fee-test/bscfeepb" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) const ( gRPCEndpoint = "grpc.bsc-fee.blockrazor.xyz:443" // endpoint address auth = "your_auth" // auth to be verified ) func main() { // open gRPC connection to endpoint conn, err := grpc.Dial( gRPCEndpoint, grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})), grpc.WithPerRPCCredentials(&Authentication{auth}), ) if err != nil { panic(err) } defer conn.Close() // create the gRPC client client := pb.NewServerClient(conn) // send gRPC request req := &pb.TransactionFee{ Percentile: 95, BlockRange: 10, } stream, err := client.GetGasPriceStream(context.Background(), req) if err != nil { panic(err) } for { message, err := stream.Recv() if err != nil { log.Printf("Failed to receive message: %v", err) break } log.Printf("Received message: %s\n", message.Time.AsTime().Format("2006-01-02 15:04:05")) log.Printf("Received GasPrice: %v\n", message.GasPrice.Percentile) log.Printf("Received GasPrice: %v\n", message.GasPrice.Value) } } type Authentication struct { auth string } func (a *Authentication) GetRequestMetadata(context.Context, ...string) (map[string]string, error) { return map[string]string{"apiKey": a.auth}, nil } func (a *Authentication) RequireTransportSecurity() bool { return false } ### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getgaspricestream#proto) Proto Copy syntax = "proto3"; package bscfeepb; import "google/protobuf/timestamp.proto"; option go_package = "./pb/bscfeepb"; service Server { rpc GetGasPriceStream(TransactionFee) returns(stream TransactionFeeStreamResponse) {}; } message TransactionFee { int32 percentile = 1; int32 blockRange = 2; } message FeeValue { int32 percentile = 1; string value = 2; } message TransactionFeeStreamResponse { FeeValue gasPrice = 1; google.protobuf.Timestamp time = 2; } [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getgaspricestream#response-example) Response Example ------------------------------------------------------------------------------------------------------------------------------------------- Copy 2025/03/26 10:25:42 Received message: 2025-03-26 02:25:42 2025/03/26 10:25:42 Received GasPrice: 95 2025/03/26 10:25:42 Received GasPrice: 1000000000 // The gas price corresponding to the quantile, in wei 2025/03/26 10:25:45 Received message: 2025-03-26 02:25:45 2025/03/26 10:25:45 Received GasPrice: 95 2025/03/26 10:25:45 Received GasPrice: 1000000000 [PreviousBSCchevron-left](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc) [NextGetAllGasPriceStreamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/network-fee-stream/bsc/getallgaspricestream) Last updated 10 months ago --- # Get BlockStream | BlockRazor [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-blockstream#introduction) Introduction ---------------------------------------------------------------------------------------------------------------------------- This method is used to retrieve block data from Base and supports the gRPC protocol. [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-blockstream#endpoint) Endpoint -------------------------------------------------------------------------------------------------------------------- gRPC Region Endpoint Frankfurt frankfurt.grpc.base.blockrazor.xyz:80 Virginia virginia.grpc.base.blockrazor.xyz:80 Tokyo tokyo.grpc.base.blockrazor.xyz:80 [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-blockstream#rate-limit) Rate Limit ------------------------------------------------------------------------------------------------------------------------ Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 BlockStream \- \- \- ✅ ✅ [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-blockstream#request-example) Request Example ---------------------------------------------------------------------------------------------------------------------------------- gRPC Access the example [herearrow-up-right](https://github.com/BlockRazorinc/base-api-client-go/blob/c4bec3d65e55ffb0da07253fa78aefe1b1c07e33/main.go#L42) Copy // GetBlockStream provides a simplified example of subscribing to and processing the regular block stream. // Note: This function attempts to connect and subscribe only once. For production use, implement your own reconnection logic. func GetBlockStream(authToken string) { log.Printf("[BlockStream] Attempting to connect to gRPC server at %s...", grpcAddr) // Establish a connection to the gRPC server with a timeout. ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() conn, err := grpc.DialContext(ctx, grpcAddr, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Printf("[BlockStream] Failed to connect to gRPC server: %v", err) return } defer conn.Close() log.Println("[BlockStream] Successfully connected to gRPC server.") client := basepb.NewBaseApiClient(conn) // Create a new context with authentication metadata for the stream subscription. streamCtx := metadata.NewOutgoingContext(context.Background(), metadata.Pairs("authorization", authToken)) stream, err := client.GetBlockStream(streamCtx, &basepb.GetBlockStreamRequest{}) if err != nil { log.Printf("[BlockStream] Failed to subscribe to stream: %v", err) return } log.Println("[BlockStream] Subscription successful. Waiting for new blocks...") // Loop indefinitely to receive messages from the stream. for { block, err := stream.Recv() if err != nil { if err == io.EOF { log.Println("[BlockStream] Stream closed by the server (EOF).") } else { log.Printf("[BlockStream] An error occurred while receiving data: %v", err) } break // Exit the loop on error or stream closure. } // Process the received block data. log.Printf("=> [BlockStream] Received new block: Number=%d, Hash=%s, TransactionCount=%d", block.GetBlockNumber(), block.GetBlockHash(), len(block.GetTransactions()), ) // To decode transactions, you can call DecodeTransactions(block.Transactions). } } #### [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-blockstream#proto) [protoarrow-up-right](https://github.com/BlockRazorinc/base-api-client-go/blob/1d46c2983420d6da645992a9f3ed51688f7dac88/proto/BaseApi.proto) Copy syntax = "proto3"; option go_package = "./basepb"; import "google/protobuf/wrappers.proto"; message BaseBlock { string parent_hash = 1; string fee_recipient = 2; bytes state_root = 3; bytes receipts_root = 4; bytes logs_bloom = 5; bytes prev_randao = 6; uint64 block_number = 7; uint64 gas_limit = 8; uint64 gas_used = 9; uint64 timestamp = 10; bytes extra_data = 11; repeated uint64 base_fee_per_gas = 12; string block_hash = 13; repeated bytes transactions = 14; repeated Withdrawal withdrawals = 15; google.protobuf.UInt64Value blob_gas_used = 16; google.protobuf.UInt64Value excess_blob_gas = 17; google.protobuf.BytesValue withdrawals_root = 18; } message Withdrawal { uint64 index = 1; uint64 validator = 2; bytes address = 3; uint64 amount = 4; } message GetRawFlashBlocksStreamRequest { } message GetBlockStreamRequest { } message SendTransactionRequest { string rawTransaction = 1; } message SendTransactionResponse { string txHash = 1; } message FlashBlockStrRequest { } message RawFlashBlockStrResponse { bytes message = 1; } service BaseApi { rpc SendTransaction(SendTransactionRequest) returns (SendTransactionResponse); rpc GetBlockStream(GetBlockStreamRequest) returns (stream BaseBlock); rpc GetRawFlashBlockStream(GetRawFlashBlocksStreamRequest) returns (stream RawFlashBlockStrResponse); } [hashtag](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-blockstream#response) Response -------------------------------------------------------------------------------------------------------------------- **Normal** Copy Number=35347872, Hash=0x1c1dd5911cf8fe47c227159f5e3dad08d289879a225b6d51840f4ecd0b212dd8, TransactionCount=252 **Abnormal** Copy rpc error: code = Unknown desc = Authentication information is missing. Please provide a valid auth token [PreviousBasechevron-left](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base) [NextGet FlashBlockStreamchevron-right](https://blockrazor.gitbook.io/blockrazor/streams/block-stream/base/get-flashblockstream) Last updated 3 months ago --- # Send RawTx | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtx#introduction) Introduction circle-info This method does not provide MEV protection. Transactions sent through this method will be broadcast to the public mempool. `SendTx` is used to broadcast raw transaction on the high-performance network of BSC supporting gRPC and HTTP protocol. Transaction submission via HTTP is available to Tier 1 or higher users; please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us after [subscribingarrow-up-right](https://blockrazor.io/#/pricing) . ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtx#endpoint) Endpoint Region Availability Zone(AWS) Relay Address Frankfurt euc1-az2 35.157.64.49:50051 Tokyo apne1-az4 54.249.93.63:50051 Ireland euw1-az1 3.248.65.151:50051 Virginia use1-az4 52.205.173.134:50051 ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtx#rate-limit) Rate Limit Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 TPS 10 Txs / 5s 10 Txs / 5s 50 Txs / 5s 100 Txs / 5s 200 Txs / 5s Daily Transactions 10 Txs 10 Txs Unlimited Unlimited Unlimited ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtx#request-parameter) Request Parameter Parameters Mandatory Format Example Description Transaction Mandatory String "0xf8……8219" signed raw tx ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtx#request-example) Request Example [https://github.com/BlockRazorinc/relay\_examplearrow-up-right](https://github.com/BlockRazorinc/relay_example) gRPC HTTP Copy package main import ( "context" "encoding/hex" "fmt" "math/big" // directory of the generated code using the provided relay.proto file pb "github.com/BlockRazorinc/relay_example/protobuf" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rlp" "google.golang.org/grpc" ) // auth will be used to verify the credential type Authentication struct { apiKey string } func (a *Authentication) GetRequestMetadata(context.Context, ...string) (map[string]string, error) { return map[string]string{"apiKey": a.apiKey}, nil } func (a *Authentication) RequireTransportSecurity() bool { return false } func main() { // BlockRazor relay endpoint address blzrelayEndPoint := "ip:port" // auth will be used to verify the credential auth := Authentication{ "your auth token", } // open gRPC connection to BlockRazor relay var err error conn, err := grpc.Dial(blzrelayEndPoint, grpc.WithInsecure(), grpc.WithPerRPCCredentials(&auth), grpc.WithWriteBufferSize(0), grpc.WithInitialConnWindowSize(128*1024)) if err != nil { fmt.Println("error: ", err) return } // use the Gateway client connection interface. client := pb.NewGatewayClient(conn) // create context ctx := context.Background() // replace with your address from_private_address := "42b565……44d05c" to_public_address := "0x4321……3f1c66" // replace with your transaction data nonce := uint64(1) toAddress := common.HexToAddress(to_public_address) var data []byte gasPrice := big.NewInt(1e9) gasLimit := uint64(22000) value := big.NewInt(0) chainid := types.NewEIP155Signer(big.NewInt(56)) // create new transaction tx := types.NewTransaction(nonce, toAddress, value, gasLimit, gasPrice, data) privateKey, err := crypto.HexToECDSA(from_private_address) if err != nil { fmt.Println("fail to casting private key to ECDSA") return } // sign transaction by private key signedTx, err := types.SignTx(tx, chainid, privateKey) if err != nil { fmt.Println("fail to sign transaction") return } // use rlp to encode your transaction body, _ := rlp.EncodeToBytes([]types.Transaction{*signedTx}) // encode []byte to string encode_tx := hex.EncodeToString(body) // send raw tx by BlockRazor res, err := client.SendTx(ctx, &pb.SendTxRequest{Transaction: encode_tx}) if err != nil { fmt.Println("failed to send raw tx: ", err) return } else { fmt.Println("raw tx sent by BlockRazor, tx hash is ", res.TxHash) } } Copy curl \ -X POST \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0x02f8……869514"],"id":1}' #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtx#proto) Proto The code of `relay.proto` is as follows: Copy syntax = "proto3"; package blockchain; option go_package = "/Users/code/relay/grpcServer"; service Gateway { rpc SendTx (SendTxRequest) returns (SendTxReply) {} rpc SendTxs (SendTxsRequest) returns (SendTxsReply) {} rpc NewTxs (TxsRequest) returns (stream TxsReply){} rpc NewBlocks (BlocksRequest) returns (stream BlocksReply){} } message TxsRequest{ bool node_validation = 1; } message Tx{ bytes from = 1; int64 timestamp = 2; bytes raw_tx = 3; } message TxsReply{ Tx tx = 1; } message BlocksRequest{ bool node_validation = 1; } message BlockHeader{ string parent_hash = 1; string sha3_uncles = 2; string miner = 3; string state_root = 4; string transactions_root = 5; string receipts_root = 6; string logs_bloom = 7; string difficulty = 8; string number = 9; uint64 gas_limit = 10; uint64 gas_used = 11; uint64 timestamp = 12; bytes extra_data = 13; string mix_hash = 14; uint64 nonce = 15; uint64 base_fee_per_gas = 16; string withdrawals_root = 17; uint64 blob_gas_used = 18; uint64 excess_blob_gas = 19; string parent_beacon_block_root = 20; } message NextValidator{ string block_height = 1; string coinbase = 2; } message BlocksReply{ string hash = 1; BlockHeader header = 2; repeated NextValidator nextValidator = 3; repeated Tx txs = 4; } message Transaction { string content = 1; } message Transactions { repeated Transaction transactions = 1; } message SendTxRequest { string transaction = 1; } message SendTxsRequest { string transactions = 1; } message SendTxReply { string tx_hash = 1; } message SendTxsReply { repeated string tx_hashs = 1; } ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtx#response-example) Response Example **Success** Copy { "tx_hash":"0x2944……b2188f" } **Error** Copy rpc error: code = Unknown desc = invalid transaction format [Previouseth\_sendRawTransactionchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/eth_sendrawtransaction) [NextSend RawTxBatchchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtxbatch) Last updated 22 days ago --- # eth_sendRawTransaction | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/eth_sendrawtransaction#introduction) Introduction The Fast Mode leverages BlockRazor's global high-performance network to achieve the lowest latency for transaction inclusion, making it suitable for users who have extreme requirements for transaction inclusion speed. Compared to [Send RawTx](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtx) , transactions in the Fast Mode will not be broadcasting via the mempool, ensuring both speed and privacy. The transaction submission method for Fast Mode is compatible with `eth_sendRawTransaction`. circle-info Fast Mode is not tied to the subscription plan, but each transaction sent in Fast Mode must include a tip sent to the address `0x9D70AC39166ca154307a93fa6b595CF7962fe8e5`. The minimum tip amount is the greater of 0.000025 BNB or Transaction Fee \* 0.05 BNB. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/eth_sendrawtransaction#endpoint) Endpoint http://bsc-fast.blockrazor.io ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/eth_sendrawtransaction#rate-limit) Rate Limit Fast Mode is not tied to the subscription plan, the rate limit default to 10 TPS for all users. Please contact us if you require an increase in your TPS limit. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/eth_sendrawtransaction#request) Request Copy curl http://bsc-fast.blockrazor.io \ -X POST \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ --data ' { "jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": [\ "Signed Transaction"\ ], "id": 1 } ' ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/eth_sendrawtransaction#response) Response **Normal** Copy { "jsonrpc":"2.0", "id":"1", "result":"0xa06b……f7e8ec" // 交易哈希 }‍ **Abnormal** Copy { "jsonrpc":"2.0", "id":"1", "error":{ "code":-32000, "message":"Tip verification failed" } } [PreviousBSCchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc) [NextSend RawTxchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtx) Last updated 1 month ago --- # Send RawTxBatch | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtxbatch#introduction) Introduction circle-info This method does not provide MEV protection. Transactions sent through this method will be broadcast to the public mempool. `SendTxs`is used to broadcast raw transaction batch on the high-performance network of BSC. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtxbatch#endpoint) Endpoint Region Availability Zone(AWS) Relay Address Frankfurt euc1-az2 35.157.64.49:50051 Tokyo apne1-az4 54.249.93.63:50051 Ireland euw1-az1 3.248.65.151:50051 Virginia use1-az4 52.205.173.134:50051 ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtxbatch#rate-limit) Rate Limit Tier 4 Tier 3 Tier 2 Tier 1 Tier 0 BPS \- \- 2 batches / 1s 4 batches / 1s 12 batches / 1s Transactions per batch \- \- 10 Txs / batch 10 Txs / batch 20 Txs / batch ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtxbatch#request-parameter) Request Parameter Parameters Mandatory Format Example Description Transactions Mandatory Array\[String\] \["0xf8……8219", "0xcb……2ac0"\] signed raw txs ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtxbatch#request-example) Request Example [https://github.com/BlockRazorinc/relay\_examplearrow-up-right](https://github.com/BlockRazorinc/relay_example) Copy package main import ( "context" "encoding/hex" "fmt" "math/big" // directory of the generated code using the provided relay.proto file pb "github.com/BlockRazorinc/relay_example/protobuf" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rlp" "google.golang.org/grpc" ) // auth will be used to verify the credential type Authentication struct { apiKey string } func (a *Authentication) GetRequestMetadata(context.Context, ...string) (map[string]string, error) { return map[string]string{"apiKey": a.apiKey}, nil } func (a *Authentication) RequireTransportSecurity() bool { return false } func main() { // BlockRazor relay endpoint address blzrelayEndPoint := "ip:port" // auth will be used to verify the credential auth := Authentication{ "your auth token", } // open gRPC connection to BlockRazor relay var err error conn, err := grpc.Dial(blzrelayEndPoint, grpc.WithInsecure(), grpc.WithPerRPCCredentials(&auth), grpc.WithWriteBufferSize(0), grpc.WithInitialConnWindowSize(128*1024)) if err != nil { fmt.Println("error: ", err) return } // use the Gateway client connection interface client := pb.NewGatewayClient(conn) // create context ctx := context.Background() // replace with your address from_private_address1 := "6c0456……8b8003" from_private_address2 := "42b565……44d05c" to_public_address := "0x4321……3f1c66" // replace with your transaction data nonce1 := uint64(1) nonce2 := uint64(1) toAddress := common.HexToAddress(to_public_address) var data []byte gasPrice := big.NewInt(1e9) gasLimit := uint64(22000) value := big.NewInt(0) chainid := types.NewEIP155Signer(big.NewInt(56)) // create new transaction tx1 := types.NewTransaction(nonce1, toAddress, value, gasLimit, gasPrice, data) tx2 := types.NewTransaction(nonce2, toAddress, value, gasLimit, gasPrice, data) privateKey1, err := crypto.HexToECDSA(from_private_address1) if err != nil { fmt.Println("fail to casting private key to ECDSA") return } privateKey2, err := crypto.HexToECDSA(from_private_address2) if err != nil { fmt.Println("fail to casting private key to ECDSA") return } // sign transaction by private key signedTx1, err := types.SignTx(tx1, chainid, privateKey1) if err != nil { fmt.Println("fail to sign transaction") return } signedTx2, err := types.SignTx(tx2, chainid, privateKey2) if err != nil { fmt.Println("fail to sign transaction") return } // use rlp to encode your transaction body, _ := rlp.EncodeToBytes([]types.Transaction{*signedTx1, *signedTx2}) // encode []byte to string encode_txs := hex.EncodeToString(body) // send raw tx batch by BlockRazor res, err := client.SendTxs(ctx, &pb.SendTxsRequest{Transactions: encode_txs}) if err != nil { fmt.Println("failed to send raw tx batch: ", err) return } else { fmt.Println("raw tx batch sent by BlockRazor, tx hashes are ", res.TxHashs) } } #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtxbatch#proto) Proto The code of `relay.proto` is as follows: Copy syntax = "proto3"; package blockchain; option go_package = "/Users/code/relay/grpcServer"; service Gateway { rpc SendTx (SendTxRequest) returns (SendTxReply) {} rpc SendTxs (SendTxsRequest) returns (SendTxsReply) {} rpc NewTxs (TxsRequest) returns (stream TxsReply){} rpc NewBlocks (BlocksRequest) returns (stream BlocksReply){} } message TxsRequest{ bool node_validation = 1; } message Tx{ bytes from = 1; int64 timestamp = 2; bytes raw_tx = 3; } message TxsReply{ Tx tx = 1; } message BlocksRequest{ bool node_validation = 1; } message BlockHeader{ string parent_hash = 1; string sha3_uncles = 2; string miner = 3; string state_root = 4; string transactions_root = 5; string receipts_root = 6; string logs_bloom = 7; string difficulty = 8; string number = 9; uint64 gas_limit = 10; uint64 gas_used = 11; uint64 timestamp = 12; bytes extra_data = 13; string mix_hash = 14; uint64 nonce = 15; uint64 base_fee_per_gas = 16; string withdrawals_root = 17; uint64 blob_gas_used = 18; uint64 excess_blob_gas = 19; string parent_beacon_block_root = 20; } message NextValidator{ string block_height = 1; string coinbase = 2; } message BlocksReply{ string hash = 1; BlockHeader header = 2; repeated NextValidator nextValidator = 3; repeated Tx txs = 4; } message Transaction { string content = 1; } message Transactions { repeated Transaction transactions = 1; } message SendTxRequest { string transaction = 1; } message SendTxsRequest { string transactions = 1; } message SendTxReply { string tx_hash = 1; } message SendTxsReply { repeated string tx_hashs = 1; } ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtxbatch#response-example) Response Example **Success** Copy { "tx_hash":["0xdb95……584813", "0x887d……7aba19"] } **Error** Copy rpc error: code = Unknown desc = invalid transaction format [PreviousSend RawTxchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/bsc/send-rawtx) [NextSuichevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui) Last updated 22 days ago --- # JSON-RPC | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/json-rpc#eth_sendrawtransaction) eth\_sendRawTransaction `eth_sendRawTransaction` of BlockRazor RPC is compatible with native JSON-RPC methods and requires no additional modifications. If you need to modify parameters such as hint, refund address and revert protection, you can configure the dedicated RPC in the [portalarrow-up-right](https://www.blockrazor.io/#/login) #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/json-rpc#request-parameters) Request parameters Parameters Mandatory Format Example Remark \- Mandatory bytes "0xd46e……445675" raw tx #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/json-rpc#request-example) Request Example Copy curl -X POST -H "Content-Type: application/json" --data '{ "id": 1, "jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": [\ "0xd46e……445675"\ ] }' https://bsc.blockrazor.xyz #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/json-rpc#response-example) Response Example **normal** Copy { "id":1, "jsonrpc": "2.0", "result": "0xe670……527331" } **abnormal** Copy { "jsonrpc": "2.0", "id": 1, "error": { "code": -32000, "message": "rlp: element is larger than containing list" } } ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/json-rpc#eth_sendmevbundle) eth\_sendMevBundle Bundle Submission is supported in BlockRazor RPC, please refer to [Bundle](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/project-builder) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/json-rpc#other-json-rpc-methods) Other JSON-RPC Methods BlockRazor RPC supports standard JSON-RPC method, you can refer to [https://ethereum.org/zh/developers/docs/apis/json-rpc/#json-rpc-methodsarrow-up-right](https://ethereum.org/zh/developers/docs/apis/json-rpc/#json-rpc-methods) [PreviousIntegrationchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/integration) [NextBasechevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/base) Last updated 1 month ago --- # Integration | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/integration#introduction) Introduction circle-info The builder of project can use RPC Exclusive for Project without subscribing to a plan. BlockRzor RPC provides MEV protection for orderflow projects like Wallet, DEX, and Trading Bot on Ethereum, supporting refunds to the project users or project builders themselves. BlockRzor RPC provides each project builder with an exclusive RPC URL, supporting visual customization of RPC domain names, transaction disclosure, refund address, and revert protection, facilitating the project builder to integrate RPC at a low cost and quickly. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/integration#how-to-integrate-rpc-into-your-project) How to integrate RPC into your project #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/integration#id-1.-configure-rpc) 1\. Configure RPC 1. Register and log in to the portal at [blockrazor.ioarrow-up-right](https://blockrazor.io/) . 2. Under the RPC module, click on the RPC page to view the configuration information of your RPC. 3. Click on **Update** to enter the configuration update page, and adjust the parameters according to your needs. The meaning of the parameters is shown in the following table. Parameters Meaning Default RPC URL Each account automatically generates 1 Ethereum RPC and 1 BSC RPC by default. The Default RPC URL is automatically generated and cannot be modified. Custom RPC URL The third-level domain is allowed to be modified, and the Custom RPC URL can be promoted to the project's end-users through websites or docs, guiding them to add custom RPC within their wallets. Hint The system defaults to sharing the transaction's hash and logs with the Searcher. The more fields shared, the greater the possibility of obtaining refunds, please proceed with caution after evaluating the need for disclosure of transaction data. Refund Address The default refund address is tx.origin, which means the refund will be returned to the sender of the transaction. It can be modified to a fixed refund address (EOA). Revert Protection revert protection is enabled by default; if a transaction is detected to revert, it will not be included in the block. To ensure fast inclusion in a block, it is recommended to set priority fee (Ethereum) when sending transactions. 1. Click **Confirm**, the system will update the RPC configuration in real time. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/integration#id-2.-integrate-rpc) 2\. Integrate RPC 1. Find the configuration file or code: Open the project workspace and locate the file or code segment that configures the RPC node in the DApp project. This could be a configuration file such as .env, config.js, truffle-config.js, etc., or it could be hardcoded directly in the code. 2. Modify the RPC URL: Change the RPC URL in the configuration file or code to the Scutum RPC URL. 3. Test the connection: After making the change, run the DApp or the corresponding test script locally to ensure that the new RPC URL works properly. You can use methods like `web3.eth.net.isListening()` or `ethers.provider.pollingInterval` to check if the connection is successful. 4. Deploy the update: If the test passes, you can deploy the changes to the production environment. JavaScript Copy // import Web3 const Web3 = require('web3'); // Create a Web3 instance and connect to the RPC. const web3 = new Web3('https://ethereum-rpc.publicnode.com'); // You can replace the RPC URL with the Scutum RPC URL here. // check the connection web3.eth.net.isListening() .then((listening) => { console.log('Web3 connected: ', listening); }) .catch((err) => { console.error('Web3 connection error: ', err); }); #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/integration#id-3.-query-transactions) 3\. Query Transactions 1. Log in to [blockrazor.ioarrow-up-right](https://blockrazor.io/) . 2. Under the Scutum module, click on **Refunds** to view the refund, and click on **Transactions** to view the transactions submitted to dedicated RPC. [PreviousEthereumchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum) [NextJSON-RPCchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/json-rpc) Last updated 1 month ago --- # sui_executeTransactionBlock | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock#introduction) Introduction The Fast Mode leverages BlockRazor's global high-performance network to achieve the lowest latency for transaction inclusion, making it suitable for users who have extreme requirements for transaction inclusion speed. The transaction submission method of Fast Mode supports HTTP and gRPC. The HTTP is compatible with [`sui_executeTransactionBlock`arrow-up-right](https://docs.sui.io/sui-api-ref#sui_executetransactionblock) and the gRPC is compatible with [`sui_rpc_v2_transaction-execution-service-proto`arrow-up-right](https://docs.sui.io/references/fullnode-protocol#sui_rpc_v2_transaction-execution-service-proto) . circle-info Fast Mode is not tied to the subscription plan, but each transaction sent in Fast Mode must include a tip. The minimum tip amount is the greater of 0.001 SUI or Gas Budget × 0.05 SUI. Tip Method: Integrate the BlockRazor SDK in [TS](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock/ts) or [Go](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock/go) , and invoke the `AddTip` method. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock#endpoint) Endpoint http://sui-fast.blockrazor.io ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock#rate-limit) Rate Limit Fast Mode is not tied to the subscription plan, the rate limit default to 10 TPS for all users. Please [contactarrow-up-right](https://discord.com/invite/qqJuwRb8Nh) us if you require an increase in your TPS limit. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock#request-example) Request Example * [TS](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock/ts) * [Go](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock/go) [PreviousSuichevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui) [NextTSchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/fast/sui/sui_executetransactionblock/ts) Last updated 1 month ago --- # Project Builder | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/project-builder#rpc-endpoint) RPC Endpoint circle-info The project builders could send bundle to the [Endpoint Exclusive for Project](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/ethereum/integration) https://eth.blockrazor.xyz ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/project-builder#request-parameters) Request parameters Parameters Mandatory Format Example Remark txs mandatory \[\]bytes \[ "0xf84a……e54284" \] raw txs, up to 50 transactions allowed to be set revertingTxHashes optional \[\]hash \["0x1f23……0abb1e"\] Transactions that allow to be reverted, a subset of txs maxBlockNumber optional uint64 39177941 The maximum block number for the bundle to be valid, with the default set to the current block number + 100 ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/project-builder#request-example) Request Example Copy curl -X POST -H "Content-Type: application/json" --data '{ "id": 1, "jsonrpc": "2.0", "method": "eth_sendMevBundle", "params": [{\ "Txs": [\ "0xf8668203988405f5e100825208942ee393c739036a7660ec11bf2101d537eb52f3ac80808193a06836d5f4052376dc3114794da5fedd7a5b8090ddae0ec45dfa66c234fcabb6efa07cf17dad992c33e8e3e4d82355cfe12d3be2560fc2b0873c36dce398088d8e4f"\ ]\ "revertingTxHashes":[],\ "maxBlockNumber":62934913\ }] }' https://bsc.blockrazor.xyz ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/project-builder#response-example) Response Example normal Copy {"jsonrpc":"2.0","id":1,"result": "0x11111111..."} abnormal Copy {"jsonrpc":"2.0","id":1,"jsonerror":{"code":-38000,"message":"nonce too low: address 0x9Abae1b279A4Be25AEaE49a33e807cDd3cCFFa0C, tx: 0 state: 45"}} [PreviousEthereumchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum) [NextSearcherchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum/searcher) Last updated 1 month ago --- # Searcher | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#introduction) Introduction Searcher can subscribe [Private Mempool](https://blockrazor.gitbook.io/blockrazor/streams/mempool/private-mempool) to execute the backrun strategy, and then send the [backrun bundles](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#request-parameters) to BlockRazor RPC to obtain benefits via backrun auction. In addition, Searcher can also skip bundle subscription and send the raw bundle directly to BlockRazor RPC. With the high-performance network, BlockRazor can forward the bundle to mainstream builders with extremely low latency, eliminating the need for repeated integrations with each builder. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#auction-mechanism) Auction Mechanism ![](https://blockrazor.gitbook.io/blockrazor/~gitbook/image?url=https%3A%2F%2F2581477772-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjbyfG8gOgcdsK3wVxNdQ%252Fuploads%252FShMRdK1EgzEQo6c6QKn2%252Fimage.png%3Falt%3Dmedia%26token%3D5155e5f0-c88a-49b1-b50f-99e11423ad10&width=768&dpr=3&quality=100&sign=95407c66&sv=2) bundle flow #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#bidding-timing) Bidding timing Searcher can continuously submit bundles (repeated submissions are not allowed), and BlockRazor RPC will choose the best time to submit winning bundles to top builders. If the bundle has been included in the block or has expired, it will stop being disclosed in the data stream. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#auction-rules) Auction rules BlockRazor RPC conducts English bidding based on the bid value, of which the receipt and distribution([clickarrow-up-right](https://blockrazor.gitbook.io/blockrazor/tc/scutummev-bao-hu-rpc#ge-ge-jue-se-jian-de-li-run-fen-pei-bi-li-shi-zen-mo-yang-de) to see details) is realized via smart contract. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#bidding-method) Bidding method When constructing a backrun transaction, the backrun contract could call the proxyBid method of the bidding proxy contract as follows. Copy interface IProxyBid { function proxyBid(address refundAddress, uint256 refundCfg) external payable; } The biding proxy contract address (proxyBidContract), refundAddress and refundCfg can be obtained from Private Mempool and msg.value(the biding value) must be greater than 0. The correctness of the parameters will be strictly verified by BlockRazor RPC. Please do not directly transfer to the refundAddress and the address of bidding proxy contract or perform other operations that may cause changes to the balance of the above account. ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#rpc-endpoint) RPC Endpoint circle-info Please keep the domain for subscribing to the bundle consistent with the domain for sending the bundle. For example, if subscribing to https://jp-bscscutum.blockrazor.xyz/stream, then send the bundle to https://jp-bscscutum.blockrazor.xyz Region Endpoint Tokyo https://jp-bscscutum.blockrazor.xyz New York https://us-bscscutum.blockrazor.xyz Frankfurt https://ger-bscscutum.blockrazor.xyz ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#request-parameters) Request Parameters #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#bundle) **Bundle** Parameters Mandatory Format Example Remark hash optional hash "0xa06b……f7e8ec" The bundle hash received from the data stream, that is, the object being backrun txs mandatory \[\]bytes \[ "0xf84a……e54284" \] raw tx. If the `hash` is empty, up to 50 raw txs are allowed to set up, and if the `hash` is not empty, only 1 raw tx is allowed to set up revertingTxHashes optional \[\]hash \["0x1f23……0abb1e"\] Transactions that allow to be reverted, a subset of txs maxBlockNumber optional uint64 39177941 The maximum block number for the bundle to be valid, with the default set to the current block number + 100 [hint](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#hint) optional [map\[string\]bool](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#hint) See [hint](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#hint) for details refundAddress optional address "0x9abae1b279a4be25aeae49a33e807cdd3ccffa0c" If there is a field with a value of true in hint, this field should be set to EOA. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#hint) hint The disclosure for the transaction data in field `txs`is set by hint. If it is set to true, it will be regarded as disclosing the corresponding transaction field. If it is false, it will be regarded as not disclosing the corresponding transaction field. If it is not set, the default is false. Parameters Mandatory Format Example Remark hash optional bool true transaction hash from optional bool false sender of the transaction to optional bool true receiver of the transaction value optional bool false value being transacted nonce optional bool false nonce calldata optional bool true calldata functionSelector optional bool true the first 4 bytes of the contract function signature hash logs optional bool true event logs emitted during transaction execution(this field synchronously sets whether to disclose state changes in the state object) ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#request-example) Request Example #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#raw-bundle) **Raw Bundle** There is no backrun object so the hash field should not be set. The txs in the bundle come from the public mempool or are self-constructed, and up to 50 rawtransactions can be set. Searchers can authorize the disclosure of txs in raw bundles to allow other Searchers to backrun, or they can keep transactions private and Scutum will forward the raw bundles to mainstream builders. Copy curl -X POST -H "Content-Type: application/json" --data'{ "id": 1, "jsonrpc": "2.0", "method": "eth_sendMevBundle", "params": [{\ "txs": ["0xf84a8080808080808193a0437a5584216e68d1ff5bd7803161865e058f9bf4637fd1391213eac03ae64444a00df12bffe475d5dd8cc1544b72ee280471f1dcb5173827ba41eb25cfc3e54284"],\ "revertingTxHashes": [],\ "maxBlockNumber": 39177941,\ "hint": {\ "hash": true,\ "from": false,\ "to": false,\ "value": false,\ "nonce": false,\ "calldata": false,\ "functionSelector": false, \ "logs": true\ },\ "refundAddress": "0x9abae1b279a4be25aeae49a33e807cdd3ccffa0c"\ }] }' #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#first-backrun-bundle) First Backrun Bundle Searcher executes the backrun strategy on Raw Bundle, and can choose to continue to disclose the bundle to other Searchers to execute nested backrun strategies. The overall structure of First Backrun Bundle is generally \[Raw Bundle tx1, backrun tx1\]. Searcher executes the backrun strategy on the raw bundle to form the first backrun bundle. The `hash` field sets the raw bundle hash received in the data stream, and `txs` field sets the backrun tx. Searchers can disclose the backrun bundle to other Searchers to execute nested backrun strategy. The overall structure of the backrun bundle in the data stream is generally \[raw bundle txs…, backrun tx\]. Copy curl -X POST -H "Content-Type: application/json" --data'{ "id": 1, "jsonrpc": "2.0", "method": "eth_sendMevBundle", "params": [{\ "hash": "0x0000000000000000000000000000000000000000000000000000000000000000",\ "txs": ["0xf84a8080808080808193a0437a5584216e68d1ff5bd7803161865e058f9bf4637fd1391213eac03ae64444a00df12bffe475d5dd8cc1544b72ee280471f1dcb5173827ba41eb25cfc3e54284"],\ "revertingTxHashes": [],\ "maxBlockNumber": 39177941,\ "hint": {\ "hash": true,\ "from": false,\ "to": true,\ "value": false,\ "nonce": false,\ "calldata": true,\ "functionSelector": true, \ "logs": true\ },\ "refundAddress": "0x9abae1b279a4be25aeae49a33e807cdd3ccffa0c"\ }] }' #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#second-backrun-bundle) Second Backrun Bundle Searcher can execute the backrun strategy again on the first backrun bundle submitted by other Searchers, forming a nested bundle that is backrun twice. The `hash` field sets the hash of the first backrun bundle, and `txs` sets the second backrun tx. The overall structure of the second backrun bundle is generally \[raw bundle txs…, first backrun tx, second backrun tx\]. circle-info The second backrun bundle will no longer be disclosed to other Searchers, and the parameters hint, refundRecipient will be invalid. Copy curl -X POST -H "Content-Type: application/json" --data'{ "id": 1, "jsonrpc": "2.0", "method": "eth_sendMevBundle", "params": [{\ "hash": "0x0000000000000000000000000000000000000000000000000000000000000000",\ "txs": ["0xf84a8080808080808193a0437a5584216e68d1ff5bd7803161865e058f9bf4637fd1391213eac03ae64444a00df12bffe475d5dd8cc1544b72ee280471f1dcb5173827ba41eb25cfc3e54284"],\ "revertingTxHashes": [],\ "maxBlockNumber": 39177941,\ }] }' ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#response-example) Response Example **normal** Copy {"jsonrpc":"2.0","id":1,"result": "0x11111111..."} **abnormal** Copy {"jsonrpc":"2.0","id":1,"jsonerror":{"code":-38000,"message":"nonce too low: address 0x9Abae1b279A4Be25AEaE49a33e807cDd3cCFFa0C, tx: 0 state: 45"}} ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher#faq) FAQ **What is the difference between sending Bundle to BlockRazor RPC and Block Builders?** * In BSC, BlockRazor RPC will forward the bundle to mainstream builders, and Block Builders will send the bundle to BlockRazor Builder [PreviousProject Builderchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/project-builder) [NextEthereumchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/ethereum) Last updated 29 days ago --- # Project Builder | BlockRazor ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/project-builder#rpc-endpoint) RPC Endpoint circle-info The project builders could send bundle to the [Endpoint Exclusive for Project](https://blockrazor.gitbook.io/blockrazor/transaction-submission/rpc/bsc/integration) https://bsc.blockrazor.xyz ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/project-builder#request-parameters) Request parameters circle-info On BSC, `eth_sendMevBundle` allows transactions with 0 gwei in the bundle, but the average gasPrice of transactions(excluding those from the public mempool) in the bundle must still be no less than 0.05 gwei. Since head builders of BSC have a preference for this model, it is recommended to construct transactions with 0 gwei. #### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/project-builder#bundle) **Bundle** Parameters Mandatory Format Example Remark txs mandatory \[\]bytes \[ "0xf84a……e54284" \] raw txs, up to 50 transactions allowed to be set revertingTxHashes optional \[\]hash \["0x1f23……0abb1e"\] Transactions that allow to be reverted, a subset of txs maxBlockNumber optional uint64 39177941 The maximum block number for the bundle to be valid, with the default set to the current block number + 100 ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/project-builder#request-example) Request Example Copy curl -X POST -H "Content-Type: application/json" --data '{ "id": 1, "jsonrpc": "2.0", "method": "eth_sendMevBundle", "params": [{\ "Txs": [\ "0xf8668203988405f5e100825208942ee393c739036a7660ec11bf2101d537eb52f3ac80808193a06836d5f4052376dc3114794da5fedd7a5b8090ddae0ec45dfa66c234fcabb6efa07cf17dad992c33e8e3e4d82355cfe12d3be2560fc2b0873c36dce398088d8e4f"\ ],\ "revertingTxHashes":[],\ "maxBlockNumber":62934913\ }] }' https://bsc.blockrazor.xyz ### [hashtag](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/project-builder#response-example) Response Example normal Copy {"jsonrpc":"2.0","id":1,"result": "0x11111111..."} abnormal Copy {"jsonrpc":"2.0","id":1,"jsonerror":{"code":-38000,"message":"nonce too low: address 0x9Abae1b279A4Be25AEaE49a33e807cDd3cCFFa0C, tx: 0 state: 45"}} [PreviousBSCchevron-left](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc) [NextSearcherchevron-right](https://blockrazor.gitbook.io/blockrazor/transaction-submission/bundle/bsc/searcher) Last updated 29 days ago ---