# Table of Contents - [F.A.Q. | 48 Club](#f-a-q-48-club) - [Entry Member | 48 Club](#entry-member-48-club) - [KOGE Token | 48 Club](#koge-token-48-club) - [Governance | 48 Club](#governance-48-club) - [Committee | 48 Club](#committee-48-club) - [Voting | 48 Club](#voting-48-club) - [Platinum Member | 48 Club](#platinum-member-48-club) - [Supply API | 48 Club](#supply-api-48-club) - [48er NFT | 48 Club](#48er-nft-48-club) - [Gold Member | 48 Club](#gold-member-48-club) - [AirDrop | 48 Club](#airdrop-48-club) - [48 Soul Point | 48 Club](#48-soul-point-48-club) - [Domain Email | 48 Club](#domain-email-48-club) - [Free VPN | 48 Club](#free-vpn-48-club) - [48 Validators | 48 Club](#48-validators-48-club) - [Privacy RPC | 48 Club](#privacy-rpc-48-club) - [For MEV Builders | 48 Club](#for-mev-builders-48-club) - [Puissant Builder | 48 Club](#puissant-builder-48-club) - [Auction Transaction Feed | 48 Club](#auction-transaction-feed-48-club) - [Code Example | 48 Club](#code-example-48-club) - [Send Bundle | 48 Club](#send-bundle-48-club) - [Bundle Submission and On-Chain Status Query | 48 Club](#bundle-submission-and-on-chain-status-query-48-club) - [48 SoulPoint Benefits | 48 Club](#48-soulpoint-benefits-48-club) - [Send PrivateTransaction | 48 Club](#send-privatetransaction-48-club) - [For Validators | 48 Club](#for-validators-48-club) - [Cash Back | 48 Club](#cash-back-48-club) - [BSC Snapshots | 48 Club](#bsc-snapshots-48-club) - [Partnership | 48 Club](#partnership-48-club) - [RoadMap | 48 Club](#roadmap-48-club) - [Trouble Shooting | 48 Club](#trouble-shooting-48-club) - [Terms of Use | 48 Club](#terms-of-use-48-club) - [Score | 48 Club](#score-48-club) - [LitePaper | 48 Club](#litepaper-48-club) - [0Gas (membership required) | 48 Club](#0gas-membership-required-48-club) - [Infrastructure | 48 Club](#infrastructure-48-club) - [Puissant | 48 Club](#puissant-48-club) --- # F.A.Q. | 48 Club circle-info **Where is 48 Club's headquarters?** 48 Club runs completely decentralized. circle-info **Is 48 Club a whales club?** Although many whales are members of 48 Club, it's not a mandatory membership qualification. circle-info **Does 48 Club belong to Binance?** No. circle-info **Is 48 Club financially supported by Binance?** No. circle-info **error: insufficient gasprice increasement for overwriting ?** Please refrain from distributing transactions originating from a single address across multiple puissants. The acceptance of a puissant transaction is not determined at the time of your request, and there's a high likelihood of rejection if the nonces are incorrectly arranged. We won't check all txs because it's too costy. But we do check the first tx of each puissant aka the **sender**. You should avoid sending multiple puissants from a single sender. Otherwise, it will be considered an attempt at replacement, which will require an increase in gas price. circle-info **My puissant was not entirely landed or not even by 48Club partner validators** This is expected behavior when chain-reorg occurs, and it is also seen in ETH. Shit happens. Chain-reorg will make already broadcasted block not valid anymore, thus all txs included turned public. In this situation, the next validator which is likely not a partner validator may not sealed the block as puissant did. To prevent serious lost, you can add coinbase check, parent hash check, block number check in your contract to revert your tx in this case. circle-info **error:rlp: expected input list for types.LegacyTx** It's due to an unmerged type2 compatibility feature after EIP-1599. Before BSC finally merge from mainstream, you can simply bypass it by using `tx.MarshalBinary` for bytes generating. circle-info **Is it possible to send transaction with 0 gas ?** The actual question is is it possible for 48Club to accept tx with 0 gas. Yes, but with conditions. 1. Our RPC service accept 0 gas transactions with conditions. Check [Privacy RPC](https://docs.48.club/privacy-rpc) part. 2. When you are sending a bundle to Puissant, the average gas price instead of representative gas price is checked. Thus you can send txs with 0 gas as far as there are other txs paying enough gas. circle-info ~**invalid, require descending sort transactions by gas price**~ ~Pretty sure it's not an problem to sort descending by gas price, the real question is how do we define "gas price".~ ~Introduced by EIP-1599, we have several new concepts as "base price" "priority price" "max price". Different with Ethereum, "base price" on bsc will keep being 0 with no exception, so "max price" is meaningless on bsc.~ ~So, if you were dealing with legacy type of tx, everything remains; otherwise, just focus on the "priority price", make sure you are sorting your txs by "priority price" other than "max price".~ circle-info ~**error: bad score**~ ~Please check the rules of~ [~score~](https://docs.48.club/deprecated/puissant/score) ~. We encourage careful local consideration before actually sending your puissant request.~ ~It is recommended to monitor your score dynamiclly, when it is reaching down to 0, you can "buy some score" by sending some succeed-for-sure puissant.~ circle-info ~**Does puissant accept 1 gwei transaction ?**~ ~Puissant and 1gwei.48.club are two separate services, and therefore, the rules are not entirely the same.~ ~In puissant service, gas price checks are carried out by each validator locally. It is subject to each validator's respective setting.~ ~Therefore, the answer is, it depends.~ ~If the final validator openly accepts 1 gwei transactions or even lower gas price, your puissant containing 1 gwei tx will be fine.~ ~If the final validator requires a higher gas price floor than 1gwei, you can still include 1 gwei tx in your puissant as far as~ ~**the sender address of this puissant holds a 48er NFT**~~, the validator will confirm the NFT balance and accept then~~**.**~ circle-info ~When you have a negative score and can't send puissant anymore, here are what you can do:~ 1. ~Wait till next hour. The score is calculated within a 24-hour window, thus even in worst situation your score will be back to initial value after 24 hours.~ 2. ~Hold a 48er NFT. Negative score will be ignored if the puissant sender address holds an 48er NFT.~ Last updated 1 year ago --- # Entry Member | 48 Club [hashtag](https://docs.48.club/48-soul-point/entry-member#benefits) Benefits: ---------------------------------------------------------------------------------- * Send tx at 0 gwei gas price. Check [details](https://docs.48.club/privacy-rpc/0gas-membership-required) . Last updated 1 year ago --- # KOGE Token | 48 Club **KOGE** is a BEP-20 token issued on BNB Chain (Smart Chain), which basically represents every right and benefit in 48 Club. [Contractarrow-up-right](https://bscscan.com/token/0xe6df05ce8c8301223373cf5b969afcb1498c5528) : `0xe6DF05CE8C8301223373CF5B969AFCb1498c5528` Last updated 1 year ago --- # Governance | 48 Club 48 Club runs as a DAO, which is composed of two distinct branches: decision-making and off-chain execution, whose powers are vested in the [voting](https://docs.48.club/governance/voting) and the [committee](https://docs.48.club/governance/committee) , respectively. Last updated 1 year ago --- # Committee | 48 Club The Club [**Committee** arrow-up-right](https://www.bnb48.club/committee) is the delegate of and answer to the club community, check our homepage for latest committee name list. Committee members' addition and removal are subject to DAO decisions. Last updated 1 year ago --- # Voting | 48 Club The vote occurs on [48 DAOarrow-up-right](https://www.bnb48.club/) . Only staked KOGE represents voting power. Notice that once staked, you have to wait 7 days before being able to unstake. Another 7 days is required to withdraw un-staked KOGE. Notice all numbers below are subjected to DAO decision thus could differ with actual value on chain. The club will periodically allocate KOGE into a voting incentive pool. Both proposers and voters will be eligible for incentives. Every time a proposal is created, a dedicated proposal pool will be too. A default 4.8% share from the total pool will be extracted with a floor and a ceiling, subjected to governance. Once the proposal finishes its voting period(quorum met), the proposer will get 8% from the proposal pool and then all voters split the rest according to respectively voting power. Otherwise, proposal deposit will be returned and claimable by anyone. [hashtag](https://docs.48.club/governance/voting#propose) Propose ---------------------------------------------------------------------- Everyone can make a proposal if only and only if there is a [48er NFT](https://docs.48.club/governance/48er-nft) held in the wallet, only the proposer must contribute to the proposal pool, i.e. the deposit, number is subjected to governance. [hashtag](https://docs.48.club/governance/voting#vote) Vote ---------------------------------------------------------------- Everyone can vote for/against a proposal if only and only if there is [KOGE](https://docs.48.club/koge-token) staked from the wallet. Last updated 1 year ago --- # Platinum Member | 48 Club [hashtag](https://docs.48.club/48-soul-point/platinum-member#benefits) Benefits: ------------------------------------------------------------------------------------- * All Gold Member Benefits. Last updated 1 year ago --- # Supply API | 48 Club \- Simple REST API endpoint with decimals included. \- Endpoint publicly accessible without any form of authentication (password/API keys) \- not require api key (publicly accessible) \- Adequate rate limits to support polling once every 30 minutes Copy https://www.48.club/api/v1/supply/koge Copy { "result": "3388228.433995" } Last updated 1 year ago --- # 48er NFT | 48 Club You are required to hold an unoccupied **48er NFT** to propose in 48 DAO. One 48er one proposal. The very first 48er NFT is minted by burning 48 KOGE. Each time a 48er is minted, the amount of KOGE required to be burned for the next minting will increase by 4.8%. Creators are allowed to customize how the NFT looks, but it is only free when creating. Each additional modification calls for the burning of 0.48 KOGE. There is no hard cap on 48er NFT. circle-info But there is only limited KOGE to be burned. [Contractarrow-up-right](https://bscscan.com/token/0x57b81c140bdfd35dbfbb395360a66d54a650666d) : `0x57b81C140BdfD35dbfbB395360a66D54a650666D` Specially, 48er NFT holders are eligible for [Infrasturcture](https://docs.48.club/deprecated/infrastructure) privileges. Last updated 1 year ago --- # Gold Member | 48 Club [hashtag](https://docs.48.club/48-soul-point/gold-member#benefits) Benefits: --------------------------------------------------------------------------------- * All Entry Member Benefits. Last updated 1 year ago --- # AirDrop | 48 Club Sometimes 48Club occasionally obtain certain airdrop in the name of the community, these assets will be airdroped equally to qualified members. Last updated 1 year ago --- # 48 Soul Point | 48 Club 48 Soul Point is introduced to describe how active participants are in the 48Club ecosystem (48erNFT holders, Koge holders and DAO stakers, as well as delegators upon 48 partners who are BSC validator delegators) Generally, the more you participate in 48-related activities, the longer your involvement, and the larger the amount of capital, the higher your score will be. It will be a weighted-average value of multiple real-time value snapshots during past days. Official Kick-off: Oct 1st 2024. [hashtag](https://docs.48.club/48-soul-point#id-48-soul-point-value-real-time-calculation) **48 Soul Point Value Real-Time Calculation:** ---------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://docs.48.club/48-soul-point#hold-48er-nft) Hold 48er NFT: `480, regardless of Balance` ### [hashtag](https://docs.48.club/48-soul-point#hold-koge-in-wallet) Hold KOGE in Wallet: `min(Balance, 48)` ### [hashtag](https://docs.48.club/48-soul-point#staked-koge-in-https-www.48.club-staking) Staked KOGE in [https://www.48.club/stakingarrow-up-right](https://www.48.club/staking) : `Staked KOGE Balance` ### [hashtag](https://docs.48.club/48-soul-point#staked-bnb-in-any-of-https-www.48.club-validation-node) Staked BNB in any of [https://www.48.club/validation-nodearrow-up-right](https://www.48.club/validation-node) : `Staked BNB * 24` ### [hashtag](https://docs.48.club/48-soul-point#delegate-govbnb-in-48club-operator) Delegate govBNB in 48Club Operator: `Delegated govBNB * 12` You can delegate at [https://www.tally.xyz/gov/bnb-chain/delegate/0xaacc290a1a4c89f5d7bc29913122f5982916de48arrow-up-right](https://www.tally.xyz/gov/bnb-chain/delegate/0xaacc290a1a4c89f5d7bc29913122f5982916de48) [hashtag](https://docs.48.club/48-soul-point#id-48-soul-point-token) 48 Soul Point Token: ---------------------------------------------------------------------------------------------- Or 48SP Token It serves as proof of your active participation in 48Club activities and will be the threshold for enjoying various discounts and services offered by 48Club in the future. Notice that 48 SP Token is not transferrable, and your 48 Soul Point won't be counted until you holds a 48 SP Token. So basically, **mint your 48SP Token asap**. Also Notice that you can only mint 48 SP token when your real-time 48 Soul Point Value is greater than 0. [hashtag](https://docs.48.club/48-soul-point#weighting-span) Weighting Span -------------------------------------------------------------------------------- The final 48 Soul Point value will be averaged through a 48 days window with daily snapshots. [hashtag](https://docs.48.club/48-soul-point#implementation-and-access) Implementation & Access ---------------------------------------------------------------------------------------------------- View [https://soul.48.club/arrow-up-right](https://soul.48.club/) to mint 48SP token or check your Soul Point value. Check the code: [https://github.com/48Club/48SoulPointarrow-up-right](https://github.com/48Club/48SoulPoint) Last updated 1 year ago --- # Domain Email | 48 Club Get your _**username**_**@48.club** email now! Just drop a line to [domain\_email@48.clubenvelope](mailto:domain_email@bnb48.club) with your: 1. First name / last name 2. Prefered username(s) 3. Telegram username to verify your platinum qualification 4. Secondary email address where you can receive initial sign-in instructions. Do set your own security information, we don't provide account recovery service. Last updated 3 years ago --- # Free VPN | 48 Club Specially for members who live in countries which have national-wide internet censorship. Service provider: CmCloud Claim at [https://t.me/cmcloudbotarrow-up-right](https://t.me/cmcloudbot) to enjoy 10 Giga Bytes per day. Last updated 3 years ago --- # 48 Validators | 48 Club 48 Club is one of several earliest BSC community validators, there are also some more partner validators providing enhanced service together with 48Club. Check [https://www.48.club/validation-nodearrow-up-right](https://www.48.club/validation-node) for details, you are more than appreciated to stake on them. Consult validating(a)_48.club_ for partnership negotiation. Last updated 1 year ago --- # Privacy RPC | 48 Club [hashtag](https://docs.48.club/privacy-rpc#access) Access -------------------------------------------------------------- If you want your own partnership rpc, contact rpc(a)48.club Copy Network URL: https://rpc.48.club Chain ID: 56 Currency symbol: BNB Block explorer URL: https://bscscan.com [hashtag](https://docs.48.club/privacy-rpc#why-should-one-use-a-privacy-rpc) Why should one use a Privacy RPC? ------------------------------------------------------------------------------------------------------------------- In short, keep from sandwich attach, or being front-run. [hashtag](https://docs.48.club/privacy-rpc#how-does-it-work) How does it work? ----------------------------------------------------------------------------------- As the biggest MEV builder on BSC, 48Club is able to put your transaction into a produced block without broadcasting it publicly, so that front-runner will not be able to see your transaction before its landing. Using our privacy RPC ensures your transactions are sent to Puissant builder's private mem-pool, mitigating the risk of being sandwiched by attackers. [hashtag](https://docs.48.club/privacy-rpc#why-should-one-use-48s-privacy-rpc) Why should one use 48's Privacy RPC? ------------------------------------------------------------------------------------------------------------------------ As the leading BSC builder service provider, we produces most blocks on BSC, which means better chance and speed to pack your transaction a.s.a.p. Statistics are available at each index 0 transaction of a puissant-proposed block like following: [https://bscscan.com/tx/0x25b8ae3fb5c0682411be92071afa7ef10c9fd43a061808794ca82041aede0c8earrow-up-right](https://bscscan.com/tx/0x25b8ae3fb5c0682411be92071afa7ef10c9fd43a061808794ca82041aede0c8e) ![](https://docs.48.club/~gitbook/image?url=https%3A%2F%2F3020218173-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fvn0yx6BdeqedjtfCVZzW%252Fuploads%252FQEhpCeZDMUFH79OqaAfK%252Fimage.png%3Falt%3Dmedia%26token%3D8b5448a6-af61-4407-b822-260119681954&width=768&dpr=3&quality=100&sign=a239038c&sv=2) [hashtag](https://docs.48.club/privacy-rpc#how-do-i-make-sure-i-am-using-48s-privacy-rpc) How do I make sure I am using 48's privacy RPC ? ----------------------------------------------------------------------------------------------------------------------------------------------- Check following page [![Logo](https://docs.48.club/~gitbook/image?url=https%3A%2F%2Fpancakeswap.finance%2Flogo.png&width=20&dpr=3&quality=100&sign=af5601e8&sv=2)🥞 PancakeSwap - Everyone's Favorite DEXPancakeSwapchevron-right](https://pancakeswap.finance/mev) ![](https://docs.48.club/~gitbook/image?url=https%3A%2F%2F3020218173-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fvn0yx6BdeqedjtfCVZzW%252Fuploads%252FGvVZQzxf0s60pxmYudcC%252Fimage.png%3Falt%3Dmedia%26token%3D6fb175ff-8286-4e13-a407-ebe88b847cba&width=768&dpr=3&quality=100&sign=dd015b0d&sv=2) You will see this if you are protected by 48Club [hashtag](https://docs.48.club/privacy-rpc#how-do-i-make-sure-my-clients-are-using-48s-privacy-rpc) How do I make sure my clients are using 48's privacy RPC ? ------------------------------------------------------------------------------------------------------------------------------------------------------------------- All RPCs provided by 48Club will respond 0x30, i.e. 48, to a virtual contract address, 0x48, in the following manner. Since this address does not actually exist, other RPCs will return error messages. This allows the dApp frontend to determine whether the user has enabled 48Club’s RPC in their wallet. Copy ➜ ~ curl https://bscrpc.pancakeswap.finance \ -d '{ "jsonrpc":"2.0", "method":"eth_call", "params":[{\ "to":"0x0000000000000000000000000000000000000048",\ "value":"0x30"\ }], "id":83}' \ -H 'Content-Type: application/json' -s | jq { "id": 83, "jsonrpc": "2.0", "result": "0x30" } Last updated 1 year ago --- # For MEV Builders | 48 Club All 48 Validators act together in front of BSC MEV builders. ### [hashtag](https://docs.48.club/48-validators/for-mev-builders#access-control) Access Control The Builder Relay is accessible at: `https://builder-relay.48.club` * Validator nodes are located in Frankfurt, Germany and proxied by Cloudflare. * Each partner brand may appoint two builders, each submitting up to three bids per block. * For adding or adjusting builders, please contact the 48Club team via [Telegramarrow-up-right](https://t.me/+nhIQNj5G3lY2M2U9) . * Builders who meets expectations `reward does not achieve the expectation` will be banned from the 48Club Builder Relay following manual review. MEV Support MEV-related functions (adjustments) are as follows: * `mev_sendBid(arg1: types.``BidArgsUpgrade``)`: Returns `(common.Hash, error)` Copy type BidArgsUpgrade struct { RawBid *RawBid Signature hexutil.Bytes `json:"signature"` PayBidTx hexutil.Bytes `json:"payBidTx"` PayBidTxGasUsed uint64 `json:"payBidTxGasUsed"` // 48Club Specific Fields NontaxableFee *big.Int `json:"nontaxableFee"` // BNB amount exempt from BEP95 taxation, transferred to the 48Club MEV collateral address } * `mev_listCoinbase()`: Returns `([]common.Address, error)` * `mev_Params()`: Returns `(types.MevParams, error)` * `~mev_bestBidGasFee~` _**obsoleted in order to encourage blind bid**_ ### [hashtag](https://docs.48.club/48-validators/for-mev-builders#bidding-preference) Bidding Preference Preferences for bid evaluation: * **Bid Evaluation**: After BEP95 adjustments (10% burnt of the original block reward), bids are evaluated based on net rewards. Contribution is calculated as `bidReward = sumTxGasFee * 0.9 + directTransferBNB`. * **directTransferBNB**: Direct transfer BNB to the 48Club MEV collateral address: `0x1F732D6eA3BD247F0a400DBbeB479adA6D9Bda8C`. * **Payment Preferences**: Preference for direct transfers over gas fee burns for builder bribes. Payback transactions are marked but not processed in the final block. * ~**Puissant-Builder Priority**~~: The Puissant-Builder receives a 20% weight increase due to its status as a 48Club brand product.~ Removed since Feb 11th 2025. 48Club reserves the right to modify the rules at any time and may request special adjustments in the future to better serve the 48Club RPC users. Last updated 1 year ago --- # Puissant Builder | 48 Club **Puissant** is a permissionless, transparent, and fair ecosystem for efficient MEV extraction and frontrunning protection which preserves the ideals of BNB Smart Chain. Puissant provides a private communication channel between BNB Smart Chain users and validators for efficiently communicating preferred transaction order within a block. [hashtag](https://docs.48.club/puissant-builder#why-puissant) Why Puissant ? --------------------------------------------------------------------------------- In 2022, a spike in BNB Smart Chain usage has revealed a set of negative externalities brought by arb bots, as it did on Ethereum, including network congestion (i.e. p2p network load) and chain congestion (i.e. chain-reorg, empty block) caused by inefficient communication between PGA bot operators and validators for transaction order preference. Resources are wasted, chain user experience is getting worse and meanwhile BNB holders have no chance to enjoy mev profit. 48Club decided to provide this solution. It is inspired by flashbots but improved according to BNB Smart Chain's own community philosophy. ### [hashtag](https://docs.48.club/puissant-builder#rpc-endpoint) Market Share Check [https://dune.com/bnbchain/bnb-smart-chain-mev-statsarrow-up-right](https://dune.com/bnbchain/bnb-smart-chain-mev-stats) ### [hashtag](https://docs.48.club/puissant-builder#rpc-endpoint-1) Endpoint Copy https://puissant-builder.48.club/ Copy wss://puissant-builder.48.club/ # Conditional Access, 48SoulPoint Member Benefit Last updated 1 year ago --- # Auction Transaction Feed | 48 Club ### [hashtag](https://docs.48.club/puissant-builder/auction-transaction-feed#introduction) Update: A **filter** was added to the logs and stateDiffs. See [Content of Logs and StateDiffs](https://docs.48.club/puissant-builder/auction-transaction-feed#content-of-logs-and-statediffs) `**newPendingAuctions**`: require 48 SP points to subscribe `**newPendingAuctionsWithState**`: require 480 SP points to subscribe ### [hashtag](https://docs.48.club/puissant-builder/auction-transaction-feed#introduction-1) Introduction Introducing Auction Feed, a WebSocket-RPC based subscription data feed that delivers transaction-related data from the 48Club RPC service. Unlike traditional pending transaction subscriptions, Auction Feed focuses specifically on backrun opportunities, providing only the target hashes of these opportunities and the relevant logs and EVM state changes after simulation. The tracked targets may be individual transactions or bundles, but this distinction is unimportant, as the searcher only needs to assess whether a backrun opportunity exists based on the logs or state changes triggered by the target. When you submit a SendBundle with a target hash, the server automatically prepends the target transaction to the front of your bundle. ### [hashtag](https://docs.48.club/puissant-builder/auction-transaction-feed#how-to-subscribe) How to Subscribe Subscribing to Auction Feed push notifications requires no complex third-party packages. You can achieve this using go-ethereum. Simply connect to our WebSocket RPC service and subscribe to either the `newPendingAuctions` or `newPendingAuctionsWithState` event, depending on the data you need. ### [hashtag](https://docs.48.club/puissant-builder/auction-transaction-feed#how-to-sendbundle) How to SendBundle To submit a bundle that includes a backrun opportunity, use the [eth\_sendBundle](https://docs.48.club/puissant-builder/send-bundle#request-parameters) method with the [backrunTarget](https://docs.48.club/puissant-builder/send-bundle#request-parameters) parameter configured. * Please note that if the target’s gas price is below 1 gwei, it will not be considered a public pool transaction, so you must include it in your bundle’s average gas price calculation to meet the 1 gwei requirement. However, if the target’s gas price exceeds 1 gwei, you should not factor it into your bundle’s average gas price, as it is treated as a public pool transaction. ### [hashtag](https://docs.48.club/puissant-builder/auction-transaction-feed#data-format) Data Format Due to the high frequency of updates, we use gzip compression on the raw data to minimize transmission size and enhance delivery speed. This ensures efficient handling of the Auction Feed’s frequent push notifications. [Example code](https://docs.48.club/puissant-builder/auction-transaction-feed/code-example#utils) for decompressing gzip data #### [hashtag](https://docs.48.club/puissant-builder/auction-transaction-feed#subscription-to-newauctions) **Subscription to** `newAuctions` [Example code here](https://docs.48.club/puissant-builder/auction-transaction-feed/code-example#subscribe-to-newauctions) This provides essential data to check what a transaction has triggered. It is sufficient for arbitrage strategies, such as those on Uniswap v2 liquidity pools, without requiring simulation. Field Format Description `hash` string (0x hash) The auction target ID `extra_gas_fee` uint64 An additional total gas fee needs to be burned in your bundle to meet the 1 Gwei requirement for including this transaction. `logs` \[\] logData The logs produced in target simulation exp: logData.`address` string (0x address) exp: logData.`topics` \[\] string (0x hash) exp: logData.`data` string (0x data) * Note: if the target gas\_price is below 1 gwei, you should included it into your bundle's average GasPrice calculation. [Check here.](https://docs.48.club/puissant-builder/auction-transaction-feed#how-to-sendbundle) #### [hashtag](https://docs.48.club/puissant-builder/auction-transaction-feed#subscription-to-newauctionswithstates) **Subscription to** `newAuctionsWithStates` [Example code here](https://docs.48.club/puissant-builder/auction-transaction-feed/code-example#subscribe-to-newauctionswithstates) This provides advanced data for simulation-based strategies. You can create a state from the current moment and apply the state changes provided in the data. Then, begin your simulation as though it were happening in real time on the target transaction. * You have to sign current unix timestamp string by your 48SoulPoint EOA [Example code here](https://docs.48.club/puissant-builder/auction-transaction-feed/code-example#utils) * How to apply state changes on current StateDB [Example code here](https://docs.48.club/puissant-builder/auction-transaction-feed/code-example#utils) * `newAuctionsWithStates` has all data in `newAuctions`, plus `states` below Field Format Description `` `states` `` map\[str(1)\]map\[str(2)\]str(3) The state key/value changes on all state objects. exp: states.`str(1)` string (0x address) The address of changed state object exp: states.`str(2)` string (0x hash) changed Key in a changed state object exp: states.`str(3)` string (0x hash) changed Value of Key ### [hashtag](https://docs.48.club/puissant-builder/auction-transaction-feed#content-of-logs-and-statediffs) Content of Logs and StateDiffs The broadcast logs of a transaction are **filtered** (see the topic list below), and only topics related to **backrunning** will be broadcasted, along with the **stateDiffs** corresponding to this Log.Address. If you believe we should include additional topics for the **backrunning auction**, please let us know at @infra\_48club. Signature topics\[0\] Sync(uint256, uint256) 0xcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a Sync(uint112, uint112) 0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1 Sync(uint112 reserve0, uint112 reserve1, uint256 totalSupply) 0x17be3acebd510daa18778e1ee1fbaf88237b124dc0803c3be2fd4f99f3e69d33 Sync(uint256 vReserve0, uint256 vReserve1, uint256 reserve0, uint256 reserve1) 0x2f9d55abfefdfd4c3a83e00a1b419b3c2fe4b83100c559f0e2213e57f6e0bba9 Swap(address,address,int256,int256,uint160,uint128,int24) 0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67 Burn(address,int24,int24,uint128,uint256,uint256) 0x0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c Mint(address,address,int24,int24,uint128,uint256,uint256) 0x7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde Swap(address,uint256,uint256,uint256,uint256,address) 0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822 Swap(index\_topic\_1 address sender, index\_topic\_2 address recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint128 protocolFeesToken0, uint128 protocolFeesToken1) 0x19b47279256b2a23a1665c810c8d55a1758940ee09377d4f8d26497a3577dc83 Swap(index\_topic\_1 address sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, index\_topic\_2 address to, uint256 feeInPrecision) 0x606ecd02b3e3b4778f8e97b2e03351de14224efaa5fa64e62200afc9395c2499 Swap(index\_topic\_1 bytes32 id, index\_topic\_2 address sender, int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint24 fee) 0x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f ModifyLiquidity(index\_topic\_1 bytes32 id, index\_topic\_2 address sender, int24 tickLower, int24 tickUpper, int256 liquidityDelta, bytes32 salt) 0xf208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec fourmeme Create 0x396d5e902b675b032348d3d2e9517ee8f0c4a926603fbc075d3d282ff00cad20 Last updated 11 months ago --- # Code Example | 48 Club Data Type Copy type AuctionDataPkg struct { TargetHash string `json:"hash"` ExtraGasFee uint64 `json:"extra_gas_fee"` Logs []*RPCAuctionLogJson `json:"logs"` States map[string]map[string]string `json:"states"` } type RPCAuctionLogJson struct { Address string `json:"address"` Topics []string `json:"topics"` Data string `json:"data"` } ### [hashtag](https://docs.48.club/puissant-builder/auction-transaction-feed/code-example#subscribe-auctions) Subscribe Auctions method: newPendingAuctions | newPendingAuctionsWithState Copy func TestSubscribeNewPendingAuctionsWithState(t *testing.T, prv *ecdsa.PrivateKey) { client, err := rpc.Dial("wss://puissant-builder.48.club/") if err != nil { t.Fatal(err) } nowTS, signSP, err := signCurrentTimestamp(prv) if err != nil { panic(err) } ch := make(chan []byte, 10) sub, err := client.EthSubscribe(context.Background(), ch, method, nowTS, signSP) if err != nil { panic(err) } for { select { case err := <-sub.Err(): log.Fatal(err) case rawData := <-ch: auction, err := decompress(rawData) if err != nil { panic(err) } fmt.Println("tx_hash", auction.TargetHash, "gas_used", auction.GasUsed, "gas_price", auction.GasPrice) for index, eachLog := range auction.Logs { fmt.Println(index, eachLog.Address, eachLog.Topics, eachLog.Data) } // if method == newPendingAuctionsWithState count := 0 for addr, storage := range auction.States { for key, value := range storage { fmt.Println("storage change", count, addr, key, value) count++ } } fmt.Println() } } } ### [hashtag](https://docs.48.club/puissant-builder/auction-transaction-feed/code-example#utils) Utils Copy func applyStateChanges(state *state.StateDB, changes map[string]map[string]string) { for addr, storage := range changes { var ch = make(map[common.Hash]common.Hash) for key, value := range storage { ch[common.HexToHash(key)] = common.HexToHash(value) } state.SetStates(common.HexToAddress(addr), ch) } state.Finalise(true) // <<<--- This is important, don't forget } func decompress(rawData []byte) (auction *ethapi.AuctionDataPkg, err error) { var gz *gzip.Reader gz, err = gzip.NewReader(bytes.NewReader(rawData)) if err != nil { return } defer gz.Close() err = jsoniter.NewDecoder(gz).Decode(&auction) return } func signCurrentTimestamp(prv *ecdsa.PrivateKey) (int64, hexutil.Bytes, error) { nowTS := time.Now().Unix() sign48, err := crypto.Sign(crypto.Keccak256([]byte(strconv.FormatInt(nowTS, 10))), prv) if err != nil { return 0, nil, err } return nowTS, sign48, nil } Last updated 11 months ago --- # Send Bundle | 48 Club ### [hashtag](https://docs.48.club/puissant-builder/send-bundle#introduction) Introduction This document details the utilization of the `eth_sendBundle` RPC method, pivotal for submitting transaction bundles within the puissant-builder system, now entering its version 2. This iteration introduces enhanced auction and sorting flexibility compared to the first generation, puissant-mev. Version 2 of puissant-builder offers a more dynamic auction mechanism for bundle submission. The auction price is composed of two main components: the total gas fees of transactions in the bundle that are not from the tx\_pool and the BNB directly transferred to the Builder Control EOA. The calculation formula accounts for the effects of BEP95, whereby 10% of the gas fees are burnt, thus applying a 10% discount to the gas fee component. Direct transfers to the Builder Control EOA are prioritized in the auction ranking, providing a significant advantage in bundle sorting. ### [hashtag](https://docs.48.club/puissant-builder/send-bundle#builder-control-eoa) Builder Control EOA **Address:** `0x4848489f0b2BEdd788c696e2D79b6b69D7484848` **Description:** This is the externally owned account (EOA) managed by the builder. It is integral to handling transactions and prioritizing bundle sorting within the puissant-builder system. Strategic transactions directed to this EOA can significantly influence the sorting order, leveraging network efficiencies for optimized transaction execution. ### [hashtag](https://docs.48.club/puissant-builder/send-bundle#bundle-sorting) Bundle Sorting The bundle sorting algorithm employs the following formula: \[(sum(GasFee of TransactionUnique)×0.9)+(BNB sent to Builder Control EOA)\]\[ \\left(\\text{sum(GasFee of TransactionUnique)} \\times 0.9\\right) + \\left(\\text{BNB sent to Builder Control EOA}\\right) \]\[(sum(GasFee of TransactionUnique)×0.9)+(BNB sent to Builder Control EOA)\] **TransactionUnique:** Refers to a transaction included in the bundle that does not appear in the public transaction pool. ### [hashtag](https://docs.48.club/puissant-builder/send-bundle#importance-and-benefits-of-48soulpoint-member-signature) Importance and Benefits of [48SoulPoint Member](https://docs.48.club/puissant-builder/48-soulpoint-benefits) Signature The inclusion of a 48SoulPoint Member signature with your bundle submission enhances request rate limits and the number of transactions per bundle, along with additional services. It is highly recommended to leverage this feature to maximize the benefits within the puissant-builder system. ### [hashtag](https://docs.48.club/puissant-builder/send-bundle#question) Question? Join [Telegram Grouparrow-up-right](https://t.me/infra_48club) ### [hashtag](https://docs.48.club/puissant-builder/send-bundle#request-parameters) Request Parameters The table below outlines the parameters required to submit a bundle: Parameter Mandatory Format Example Description `txs` Mandatory array\[hex\] \["0x…f1", "0x…b7"\] List of signed raw transactions. `backrunTarget` Optional hash [For Auction Backrun Target Idiantify](https://docs.48.club/puissant-builder/auction-transaction-feed) `maxBlockNumber` Optional uint64 40140239 Maximum block number for the bundle's validity. Default is current block number + 100. `maxTimestamp` Optional uint64 1721003319 Maximum Unix timestamp (in seconds) for the bundle's validity. `revertingTxHashes` Optional array\[hash\] \["0x…1a", "0x…2b"\] List of transaction hashes allowed for revert. `noMerge` Optional bool false Bundle Merge is allowed to maximize profit. Default setting increases your chances of winning the auction. `positionFirst` Optional bool false Restrict bundle position strictly based on priorityFee. When disabled (default), late-arriving bundles may be appended to tail to guarantee landing in the current block `48spSign` Optional hex 0xd4cb...6300 48SoulPoint Member EOA signature, [check here for the details](https://docs.48.club/puissant-builder/48-soulpoint-benefits) ### [hashtag](https://docs.48.club/puissant-builder/send-bundle#request-example) Request Example Copy { "jsonrpc": "2.0", "id": "1", "method": "eth_sendBundle", "params": [\ {\ "txs":["0x…f1", "0x…b7"], // List of signed raw transactions\ "maxBlockNumber":39177941, // The maximum block number for the bundle to be valid, with the default set to the current block number + 100\ "maxTimestamp":1710829390, // Expected maximum Unix timestamp (in unix) for the bundle to be valid\ "revertingTxHashes":[\ "0x2a5b3732b95940abb9f7102d8cd04c35db61b66836d1471a1a01e37168078bf9"\ ], // List of transaction hashes allowed for revert\ "48spSign":"0x229252945fffd4ca018d4aa8f1e406a6b23457448c2574499e6e4a83d58d440e316044fe1617a9f10255af037a0d7da91a64e6d6a0ab65eeeb4bf6ced5f3b0f501"\ }\ ] }‍ ### [hashtag](https://docs.48.club/puissant-builder/send-bundle#response-example) Response Example Copy { "jsonrpc":"2.0", "id":"1", "result":"0x274a……053b" //bundle hash }‍ Copy { "jsonrpc":"2.0", "id":"1", "error":{ "code":-38000, "message":"bundle already exist" } } Last updated 2 months ago --- # Bundle Submission and On-Chain Status Query | 48 Club ### [hashtag](https://docs.48.club/puissant-builder/bundle-submission-and-on-chain-status-query#introduction) Endpoint Copy GET https://explore.48.club/v2/bundle?hash=0x000 ### [hashtag](https://docs.48.club/puissant-builder/bundle-submission-and-on-chain-status-query#request-example) Request Example Copy curl https://explore.48.club/v2/bundle?hash=0x77818cb1d4f40301d68bb53a66d7df4fba2fe730317309351ce0c198c248c70a ### [hashtag](https://docs.48.club/puissant-builder/bundle-submission-and-on-chain-status-query#reponse-example) Reponse Example Copy { "submitted": true, "confirmed": true, "block": 42034652, "priority": "3442155127869288", "48sp_addr": "0x19029012901290902112acacacacaac901290F", "48sp": 520, "txs": [\ {\ "tx_hash": "0x3f0452dd05f8ee23b1fa61a735760561ff19ff9b615fd1718440f0fd74c33948",\ "revertible": false\ },\ {\ "tx_hash": "0xde7af1842420a75e717f5f8a33f0f593a94e311062962c354b65abf3935112ce",\ "revertible": false\ }\ ] } ### [hashtag](https://docs.48.club/puissant-builder/bundle-submission-and-on-chain-status-query#detailed-field-descriptions) **Detailed Field Descriptions** * `**submitted**`: * Indicates whether the builder has attempted to submit the bundle for block bidding. * `true`: The builder has attempted to submit the bundle to validators. * `false`: The builder has not submitted the bundle, possible reasons include: 1. The query was made too soon, and the builder has not yet reached the submission time. 2. Any transaction within the bundle was confirmed in a block where we do not have the rights to propose blocks, causing the bundle to become invalid. 3. The bundle is competing with other bundles and its priority value is lower than others, hence it was not carried for submission. * `**confirmed**`: * Indicates whether the bundle has been confirmed on the blockchain. * `true`: The bundle has been successfully included on the blockchain, with the `block` parameter providing the block number. * `false`: The bundle has not yet been confirmed on the blockchain, and the `block` parameter will not be present. * `**block**`: * Provides the block number where the bundle was included. This is only provided if `confirmed` is `true`. * `**priority(optional)**`: * A calculated value representing the bundle's bidding priority for block inclusion. It is derived from the sum of all included transaction gas fees adjusted by certain factors and additional direct transfers. * `**48sp_addr(optional)**`: * the 48SoulPoints sign EOA address . ignore if the bundle is unsigned. * `**48sp(optional)**`: * number of 48SoulPoints held. ignore if the bundle is unsigned. * `**txs**`: * A list of transactions within the bundle, each described by: * `**tx_hash**`: The hash identifier for the transaction. * `**revertible**`: Indicates whether the transaction can be reverted, with `false` signifying it cannot be reverted. ### [hashtag](https://docs.48.club/puissant-builder/bundle-submission-and-on-chain-status-query#additional-information) Additional Information * **Data Retention**: The API retains records for up to 7 days. Records older than this duration are cleared and cannot be queried. * **Delayed Response**: Due to blockchain reorganization (reorg) concerns, there is a deliberate delay in updating the `confirmed` status, requiring a wait of five blocks to ensure accuracy. * **Immediate Status**: If immediate knowledge of the submission status is necessary, this API may not be suitable due to its delayed nature. * **Error Handling**: If a queried hash does not exist, the API will return an HTTP 404 error code. * **Rate Limiting**: The API implements rate limiting to prevent excessive use. Please refrain from unnecessary or excessive requests to ensure availability for all users. Last updated 1 year ago --- # 48 SoulPoint Benefits | 48 Club ### [hashtag](https://docs.48.club/puissant-builder/48-soulpoint-benefits#limitation-by-membership-level) Limitation by Membership Level The following documentation describes the access permissions and conditions for users at different levels of 48 SoulPoint membership. Users are classified into several levels, each with different access conditions based on the number of 48SoulPoints ~held~ **HODL**. #### [hashtag](https://docs.48.club/puissant-builder/48-soulpoint-benefits#access-conditions-table) Access Conditions Table Membership Level RateLimit Bundle Limit Additional **Unsigned Guest** 50 cond txs / 9s 5 txs / bundle \- **Signed Guest (< 48 SP)** 50 cond txs / 9s 6 txs / bundle Failure detail, Websocket RPC **Entry (≥ 48 SP)** 100 cond txs / 9s 10 txs / bundle Failure detail, Websocket RPC **Gold (≥ 100 SP)** 200 cond txs / 9s 15 txs / bundle Failure detail, Websocket RPC **Platinum (≥ 480 SP)** 500 cond txs / 9s 50 txs / bundle Failure detail, Websocket RPC #### [hashtag](https://docs.48.club/puissant-builder/48-soulpoint-benefits#explanation-of-terms) Explanation of Terms * **Cond Txs**: Represents the maximum number of ongoing (currently being simulated) and failed transactions permissible within a 9-second time window. This count includes bundle-transactions and private-transaction-services. * **Failure detail**: When a bundle simulation fails, the RPC provides specific reasons for the failure instead of a generic "bundle execution failed" message. For example, an error could be detailed as: "\[0xc5b2..a2eb\] execution reverted due to insufficient funds for gas \* price + value: available balance is 7195, but transaction cost is 7840, resulting in an overshot of 645." * **Websocket RPC**: Enables the bundles and private transactions sending through a websocket connection. ### [hashtag](https://docs.48.club/puissant-builder/48-soulpoint-benefits#signing-method-for-go-use-the-code-blow) Signing Method (For Go, use the code blow) Copy package types import ( "bytes" "crypto/ecdsa" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/crypto" ) type SendBundleArgs struct { Txs []hexutil.Bytes `json:"txs"` MaxBlockNumber uint64 `json:"maxBlockNumber"` MinTimestamp *uint64 `json:"minTimestamp"` MaxTimestamp *uint64 `json:"maxTimestamp"` RevertingTxHashes []common.Hash `json:"revertingTxHashes"` SoulPointSignature hexutil.Bytes `json:"48spSign"` // <<<<<<------ This is the 48SP signature } // Sign48SPMember signs the hash concatenation of the hashes of the given transactions with the given private key. // private key is the private key of the soul point member func Sign48SPMember(prvKey *ecdsa.PrivateKey, txs []*Transaction) (hexutil.Bytes, error) { var hashes bytes.Buffer hashes.Grow(common.HashLength * len(txs)) for _, tx := range txs { hashes.Write(tx.Hash().Bytes()) } return crypto.Sign(crypto.Keccak256(hashes.Bytes()), prvKey) } ### [hashtag](https://docs.48.club/puissant-builder/48-soulpoint-benefits#signature-result-verification) Signature Result Verification circle-info For other programming languages, we do not provide code examples. Please use the following example to verify that your signature method is correct. Copy tx1 raw hex: 0xf8ad82e69c85012a05f200830329189455d398326f99059ff775485246999027b319795580b844a9059cbb0000000000000000000000006df68f71f19081751850160118fc755bfeb036120000000000000000000000000000000000000000000000056bc75e2d631000008193a0ade014e655a2d1645efb5f37a142c2369ab96d2d962861dd353fa33fe15b76cda041b291fb742d07c0d475cb2611e9dd6010bbd052c79f99e73c7f9e3653afb6f7 tx2 raw hex: 0xf8ec8307f58584b8c6fe72830927c094bddbcbaa9cf9603b7055aad963506ede71692f1280b8830000000300000000000000000000000000000000000000000000000087250559b9145f9000000000000000000000000000000000000000000000011f35cc4934f0b52a80bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c55d398326f99059ff775485246999027b319795500006400000000000000000af935e000000000000000008193a0f63bed83d054bdecfb6852f980ed62f35922fe5b68296b603b290a3eff41fabea04b73872c7e68f541bc97eba52abf956eac4a0e198b762e1f9a872336f6748eed tx1 hash: 0x86f69e188bbfcabed6eca4d0be87843d48050ea460677b0b4656fcfb42625e44 tx2 hash: 0xb4062884c020dce933f1c1b7bccd4b94729051f7e4c61caf34ad53a24d06ce5f the signer address: 0xF3A611849696ec5801745496be3f7C8124C344c3 the signer privateKey: 48acf19375e8a27309fe5394728abc2eb6d5a0a4feb6b6c53207ca1c256a6739 the sign result: 0x83e4b3a6af20e58315554b5bc38a8398cfca44a75d42973a4454378b0dc9cae63c229b52341d1ddfc4e3ad4360e518c1f1363e2d21fcba507e8e2e10e266edd201 Copy # pip install web3 coincurve from web3 import Web3 from coincurve import PrivateKey hex_raw_transaction1 = '0xf8ad82e69c85012a05f200830329189455d398326f99059ff775485246999027b319795580b844a9059cbb0000000000000000000000006df68f71f19081751850160118fc755bfeb036120000000000000000000000000000000000000000000000056bc75e2d631000008193a0ade014e655a2d1645efb5f37a142c2369ab96d2d962861dd353fa33fe15b76cda041b291fb742d07c0d475cb2611e9dd6010bbd052c79f99e73c7f9e3653afb6f7' hex_raw_transaction2 = '0xf8ec8307f58584b8c6fe72830927c094bddbcbaa9cf9603b7055aad963506ede71692f1280b8830000000300000000000000000000000000000000000000000000000087250559b9145f9000000000000000000000000000000000000000000000011f35cc4934f0b52a80bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c55d398326f99059ff775485246999027b319795500006400000000000000000af935e000000000000000008193a0f63bed83d054bdecfb6852f980ed62f35922fe5b68296b603b290a3eff41fabea04b73872c7e68f541bc97eba52abf956eac4a0e198b762e1f9a872336f6748eed' private_key_hex = '48acf19375e8a27309fe5394728abc2eb6d5a0a4feb6b6c53207ca1c256a6739' tx1_hash = Web3.keccak(Web3.to_bytes(hexstr=hex_raw_transaction1)) tx2_hash = Web3.keccak(Web3.to_bytes(hexstr=hex_raw_transaction2)) print("tx1_hash:", tx1_hash.hex()) print("tx1_hash:", tx2_hash.hex()) private_key = PrivateKey(bytes.fromhex(private_key_hex)) signature = private_key.sign_recoverable(Web3.keccak(tx1_hash + tx2_hash), hasher=None) print("signature:", signature.hex()) Last updated 1 year ago --- # Send PrivateTransaction | 48 Club ### [hashtag](https://docs.48.club/puissant-builder/send-privatetransaction#introduction) Introduction This group of RPC methods allows users to submit private transactions to the BNB chain. These methods are specifically designed to keep transactions confidential, shielding them from the standard transaction pool to prevent front-running attacks and granting exclusive benefits to members of the 48club with [SoulPointMembership](https://docs.48.club/48-soul-point) . ### [hashtag](https://docs.48.club/puissant-builder/send-privatetransaction#rpc-method-names-and-parameters) RPC Method Names and Parameters 1. `**eth_sendPrivateTransaction**` **|** `**eth_sendRawTransaction**` * **Parameters:** * `signedRawTransaction (hexutil.Bytes)` 2. `**eth_sendPrivateTransactionWith48SP**` * **Parameters:** * `signedRawTransaction (hexutil.Bytes)` * `48SoulPointMemberSignature (hexutil.Bytes)` * **Note:** This method returns the hash of the transaction, similar to the regular `eth_sendPrivateTransaction`. 3. `**eth_sendBatchPrivateTransactionsWith48SP**` * **Parameters:** * `listSignedRawTransaction ([]hexutil.Bytes)` * `48SoulPointMemberSignature (hexutil.Bytes)` * **Note:** Unlike the single transaction method, this method does not return individual transaction hashes; it only confirms the request was received without errors or returns an error if the submission fails. For details on obtaining a `48SoulPointMemberSignature`, [please refer to here](https://docs.48.club/puissant-builder/48-soulpoint-benefits#signing-method-for-go-use-the-code-blow) . ### [hashtag](https://docs.48.club/puissant-builder/send-privatetransaction#response-examples) Response Examples **Successful Transaction Submission** For a successful single transaction submission, the response includes the transaction hash: Copy { "jsonrpc": "2.0", "id": "1", "result": "0x2a5b3732b95940abb9f7102d8cd04c35db61b66836d1471a1a01e37168078bf9" // Transaction hash } **Error in Transaction Submission** If there is an error during submission, such as a mismatch in the required gas price, the error will detail the specific issue: Copy { "jsonrpc": "2.0", "id": "1", "error": { "code": -32000, "message": "[private transaction service] require GasPrice=%d, Provide=%d" } } Last updated 1 year ago --- # For Validators | 48 Club 48Club Puissant Builder <> Vals : [https://t.me/+LLhPxPvqa3EwOTBlarrow-up-right](https://t.me/+LLhPxPvqa3EwOTBl) Last updated 1 year ago --- # Cash Back | 48 Club 48Club ensures that arbitrage happens within our blockchain blocks, allowing users to receive a **cashback** from MEV (Miner Extractable Value) fees, all while keeping trades safe from sandwich attacks. How It Works: We share a simplified version of each transaction’s details with MEV users. This provides enough information for them to identify arbitrage opportunities without making the transaction vulnerable to front-running or sandwiching. If an arbitrage is found, 48Club collects a fee, part of which is refunded to the user. This process also helps reduce slippage when trading in a single liquidity pool. [hashtag](https://docs.48.club/privacy-rpc/cash-back#customized-rpc) Customized RPC ---------------------------------------------------------------------------------------- If you have your own project or wallet portal, it is highly recommended that you set your own cashback RPC from 48Club, upon which it is allowed to set a dedicated cash-back wallet for transactions pass through. You can also access usage stats of this specific domain. [hashtag](https://docs.48.club/privacy-rpc/cash-back#some-existing-partners) Some existing partners: --------------------------------------------------------------------------------------------------------- Copy #---partnership with dApps--- https://pancake.rpc.48.club # for pancake https://four.rpc.48.club # for four.meme #---partnership with wallets https://math.rpc.48.club #for mathwallet https://tp.rpc.48.club # for tokenpocket https://bitget.rpc.48.club # for bitget wallet https://bn.rpc.48.club # for binance wallet https://ok.rpc.48.club # for ok wallet https://uxuy.rpc.48.club # for uxuy wallet https://safepal.rpc.48.club # for safepal wallet https://gate.rpc.48.club #for gate wallet https://tw.rpc.48.club # for trust wallet https://metamask.rpc.48.club # for metamask https://bybit.rpc.48.club # for bybit wallet ### [hashtag](https://docs.48.club/privacy-rpc/cash-back#statistics) Statistics Copy func stat_walletCount() int64 func stat_txCount() int64 func stat_walletList() []string Copy ➜ ~ curl https://bscrpc.pancakeswap.finance \ -d '{ "jsonrpc": "2.0", "method": "stat_walletCount", "params": [], "id": 83 }' \ -H 'Content-Type: application/json' -s | jq { "id": 83, "jsonrpc": "2.0", "result": 459 } ➜ ~ Contact rpc@48.club for details. Last updated 1 year ago --- # BSC Snapshots | 48 Club We provide both geth and erigon snapshots for BSC via global CDN. It usually takes less than 2 hours to `download/extract/run/catch up` your own node from our snapshots. Boost your new node with [48 Club BSC Snapshots arrow-up-right](https://github.com/48Club/bsc-snapshots) now. Last updated 2 years ago --- # Partnership | 48 Club [hashtag](https://docs.48.club/partnership#intro) Intro ------------------------------------------------------------ 48Club logo downloads are at the bottom of this page, but please be sure to read these guidelines first. Although 48Club distributes some of its technology under open-source licenses, the 48Club brand is not distributed under the same licenses. The following 48Club “Brand Assets” are copyrighted material, and you may only use them in accordance with the policy detailed below: • The 48Club logo, wordmark, and icon • The 48Club name • Other visual assets produced by 48Club, including but not limited to illustrations and 3D models [hashtag](https://docs.48.club/partnership#what-you-may-do) What you may do -------------------------------------------------------------------------------- You may use 48Club’s Brand Assets when you are: 👌 Referring to our products and services 👌 Linking to our official site or products, such as “Explore our services on 48Club” 👌 Announcing an official partnership, but only if you have official approval by a qualified member of the 48Club team For information on other uses of our Brand Assets, please reach out at info@48.club [hashtag](https://docs.48.club/partnership#what-you-may-not-do) What you may not do ---------------------------------------------------------------------------------------- While we strongly believe in and follow the open-source ethos, protecting the 48Club brand is extremely important for our users’ security, so that users know what is a genuine product/endorsement and what isn’t. Here are a few examples of forbidden uses of our Brand Assets: ⛔️ Don’t use our Brand Assets in your products’ name, logo, NFTs, etc. For example, making an app called “48Club Engine” or “48Club Junior” is not allowed. Don’t use the 48Club logo in whole or in part as part of your products’ logos, marketing material, website, or other. Logos with a strong resemblance to the 48Club icon are also forbidden. ⛔️ Don’t use our Brand Assets to create digital or physical products for sale, including but not limited to: • Merchandise (“Swag”) • NFTs • Other products ⛔️ Don’t create derivative names that imply official endorsement For example, don’t make a social media group called “48Club Italy” - this sounds official. “48Club Fans of Italy” may be permitted. ⛔️ Don’t change or adapt our Brand Assets in any way Use the logos and other assets exactly as provided. Do not change the colors, reassemble, abbreviate, or change these assets in any way. Use your common sense and creativity. If you want to make something relating to the 48Club ecosystem, make it your own. Have fun making a unique brand that’s clearly yours – if your product is strong, you won’t need to rely on remixing 48Club’s brand. Let me know if you need further adjustments! ### [hashtag](https://docs.48.club/partnership#download) Download [https://48.club/static/48-logos.zip48.clubchevron-right](https://48.club/static/48-logos.zip) Last updated 1 year ago --- # RoadMap | 48 Club Service Expected On Target User Status **Gas Sponsor**, pay gas fee for multiple from single wallet July. 2025 Reward Farmer [Beta Onlinearrow-up-right](https://www.48.club/gasponsor) **BSC Cloud Node**, rapid newPendingTransactions subscription Sept. 2025 MEV Searcher Under Deployment **BSC Aggregator** Dec. 2025 End-User Under Development Bundle Explorer Dec. 2025 MEV Searcher Under Development Last updated 6 months ago --- # Trouble Shooting | 48 Club [hashtag](https://docs.48.club/trouble-shooting#uptime-statistics) Uptime Statistics ----------------------------------------------------------------------------------------- [https://stats.48.club/arrow-up-right](https://stats.48.club/) [hashtag](https://docs.48.club/trouble-shooting#error-codes) Error Codes ----------------------------------------------------------------------------- Code Summary Description 4851 SendBundle reply code violation 4851 The bundle carries tx that transfer BNB to other builders 4802 koge-holder-policy 0 gwei (below 1gwei) gaslimit exceeded, check `eth_get0GweiGasRemaining` upon 0.48.club to find your quota left 429 too many requests general http ratelimit exceeded, check \`X-Ratelimit-Remaining' in http response header Last updated 1 year ago --- # Terms of Use | 48 Club **1\. IP Address Handling:** * IP addresses will be accessed solely for rate-limiting purposes and will not be actively retained at the application layer. **2\. User Data Maintenance:** * The 48Club does not engage in the active purging or retention of user footprints within lower-level protocols. **3\. Service Suspension and Termination:** * The 48Club reserves the prerogative to suspend or terminate any service listed within its offerings. If deemed necessary, 48Club may exercise this right at any point in time. **4\. Service Execution Assurance:** * **Unforeseen Circumstances:** The 48Club acknowledges that various unforeseen circumstances can impact the execution of our services. These circumstances include, but are not limited to, 0-day exploits, software bugs, network delays, computer system failures, external hacking incidents, blockchain halts, and other force majeure events. * **Reasonable Efforts:** In response to these unforeseen circumstances, the 48Club is committed to making reasonable efforts to ensure the stable and effective operation of the service execution system. * **No Guarantee of Expectations:** It is important to note, however, that while we strive for stability and effectiveness, we cannot provide an absolute guarantee or promise that the final execution of our services will meet your expectations when faced with the aforementioned unforeseen circumstances. * **Non-Responsibility Disclaimer:** Therefore, the 48Club explicitly disclaims any responsibility in cases where the execution of our services deviates from your expectations due to the factors mentioned in this section. Last updated 1 year ago --- # Score | 48 Club The score mechanism has been introduced to encourage effective usage of the puissant service. Each IP has its own score, which is calculated and applied independently. The reputation is a floating-point number with an initial value of **100**. Each time a puissant is successfully packaged, the score of where it is sent from increases by the value of: 10∗min(10000,gas\_fee21000∗60gwei)10\*min(10000,\\frac{gas\\\_fee}{21000\*60gwei})10∗min(10000,21000∗60gweigas\_fee​) where the gas\_fee means the actual gas consumed by the first tx in puissant, and 60 gwei in the formula is a configurable item, i.e., the puissant gas\_price\_floor, which can be checked [here](https://docs.48.club/deprecated/puissant/puissant-api#query-gas-price-floor) . When a puissant fails to package due to any tx revert, the score **decreases by 1**. Every unit time (hour), the score of all senders from each IP will be accumulated in the past 24-hour time window. The value from the last snapshot can be queried through [the query endpoint](https://docs.48.club/deprecated/puissant/puissant-api#query-puissant-reputation) , if there is no record from the last time, the initial value is returned. If the score value of IP is **negative**, puissant requests from which will be **refused** by the puissant service in the next unit time, and a low score error code will be returned. circle-info **If the sender address holds an 48er NFT, you can always send puissant regardless of your score.** Last updated 2 years ago --- # LitePaper | 48 Club 48 Club releases Lite-Paper in September 2020 right before **Initial Dex Offering**. Last updated 3 years ago --- # 0Gas (membership required) | 48 Club As far as: 1. Conditions applied ([Entry Level Member](https://docs.48.club/48-soul-point/entry-member) ) 2. Use our RPC service. You can enjoy a gas discount. Please notice there are conditions for this discount. The max allowed gasLimit quota is `**Your Soul Point * 10000**` If total gasLimit of your discounted txs exceeds the quota within a 252 seconds time-window, your following tx could be rejected. Specially, if you use `https://0.48.club` for RPC URL, the default gas price returned will be 1 wei because in certain wallets 0 gas price may trigger unexpected bug. Don't worry, 1 wei = 0.000000001 gwei, it's almost 0. Since not all the validators seal low-gas-price txs (while 48 Club and partners do), gas discounted tx may be sealed a bit slower, it's totally fine. _\*Please don't exploit the service, we have a blacklist mechanism._ [hashtag](https://docs.48.club/privacy-rpc/0gas-membership-required#quota-remaining-api-endpoint) Quota Remaining api endpoint ----------------------------------------------------------------------------------------------------------------------------------- Copy % curl https://0.48.club -d '{ "jsonrpc": "2.0", "method": "eth_get0GweiGasRemaining", "params": ["0xaACc290a1A4c89F5D7bc29913122F5982916de48"], "id": "0" }' -H 'Content-Type: application/json' -s | jq % { "jsonrpc": "2.0", "id": "0", "result": 605280000 } Last updated 8 months ago --- # Infrastructure | 48 Club By playing a role as part of P2P network, 48 Club helps build the crypto world. circle-info **2023-09-20** **Accept as low gas price as 1 gwei in puissant** **Attached txid info when puissant instantly rejected due to tx, e.g. "nonce too low/high"** circle-info **2023-09-19** **Adjustment to puissant score system:** Initial value, from 10 to 100 Score credit upon a successful puissant, from 3 to 10 for minimum Last updated 1 year ago --- # Puissant | 48 Club **Puissant** is a permissionless, transparent, and fair ecosystem for efficient MEV extraction and frontrunning protection which preserves the ideals of BNB Smart Chain. Puissant provides a private communication channel between BNB Smart Chain users and validators for efficiently communicating preferred transaction order within a block. [hashtag](https://docs.48.club/deprecated/puissant#why-puissant) Why Puissant ? ------------------------------------------------------------------------------------ In 2022, a spike in BNB Smart Chain usage has revealed a set of negative externalities brought by arb bots, as it did on Ethereum, including network congestion (i.e. p2p network load) and chain congestion (i.e. chain-reorg, empty block) caused by inefficient communication between PGA bot operators and validators for transaction order preference. Resources are wasted, chain user experience is getting worse and meanwhile BNB holders have no chance to enjoy mev profit. 48Club decided to provide this solution. It is inspired by flashbots but improved according to BNB Smart Chain's own community philosophy. What's most important: **All MEV profit made by Puissant goes to delegators of 48Club and its partner validators.** [hashtag](https://docs.48.club/deprecated/puissant#timeline) Timeline -------------------------------------------------------------------------- Trial version release First external partner Open-Source [hashtag](https://docs.48.club/deprecated/puissant#validating-partners) Validating partners ------------------------------------------------------------------------------------------------ Call this contract [0x5cc05fde1d231a840061c1a2d7e913cedc8eabafarrow-up-right](https://bscscan.com/address/0x5cc05fde1d231a840061c1a2d7e913cedc8eabaf) to query. This contract is maintained by 48Club. [hashtag](https://docs.48.club/deprecated/puissant#how-does-it-work) How does it work? ------------------------------------------------------------------------------------------- Basically, **Puissant** is a service that completes the special ordering of transactions by accepting off-chain requests, while we use the term **puissant** referring to the concept of **an ordered group of transactions**. 1. On start of each block, puissant starts to listen on new puissant requests. 2. All transactions in puissant should pass basic checking as it is like in an ordinary RPC service, including nonce, gas price, balance etc. Otherwise the entire puissant is considered as **invalid**. 3. The gas price of the very first transaction in each puissant, aka the **bid**, must not be less than [the min request](https://docs.48.club/deprecated/puissant/puissant-api#query-gas-price-floor) , and actual consumed gas not less than 21000. Also **invalid** if not met. 4. Txs in a puissant must be ordered nonce ascending, gas price descending and then however as you wish. Breaking nonce order or gas price order will also be considered as **invalid**. 5. Valid puissants will be forwarded to partner validators through private link and enter **waitinglist**. 6. Once successfully accepted, these transactions will be ordered in the block exactly like how they were in the puissant. Although, those transactions with exactly same gasPrice will be placed **consecutively**, but this is **not guaranteed** for the entire puissant. 7. In default, if any transaction in a puissant gets reverted during block simulation, the entire puissant will be dropped. If it's expected and acceptable result, you need to specify in the request. 8. If multiple puissants contain an identical transaction, these puissants are in conflict with each other, and only one of them can be included in the final block. In this scenario, the puissant with the highest **bid** will receive the highest priority. If, for any reason, the top puissant is removed from consideration, then the next puissant in line will be given top priority. Otherwise, the other conflicting puissants will be excluded at the end of this block period. 9. Puissants remain in the waitinglist, unless get packed or be dropped for one of following reasons : **CASE EXPIRED** When current time > `maxTimestamp` , or any tx in the puissant was included in previous block, the puissant expires. **CASE INVALID** Failed in prechecking. **CASE REVERTED** When one tx of the puissant is reverted (for any reason) and this tx-hash is not in `acceptReverting` parameter. **CASE BEATEN** When conflicted with other puissant and failed in bidding. Last updated 1 year ago ---