Send Bundle

Introduction

Currently Searcher can submit bundles to Scutum without subscribing to a plan.

Searcher can submit bundles to Scutum's RPC endpoint via eth_sendMevBundle .

eth_sendMevBundle supports Searcher to implement the backrun strategy for the bundle in the data stream and participate in the auction. It also supports Searcher to disclose the bundle to the data stream in order to obtain refunds after being backrun by other Searchers.

NOTE: On BSC, eth_sendMevBundle allows transactions with 0 gwei in the bundle, but the average gasPrice of transactions(excluding those from the public mempool) which meets the demand of the Validator in the bundle must still be no less than 1 gwei.

RPC Endpoint

Ethereum:https://eth.blockrazor.xyz

BSC:https://bsc.blockrazor.xyz

Auction Mechanism

Bidding timing

Searcher can continuously submit bundles (repeated submissions are not allowed), and Scutum 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.

Auction rules

Scutum conducts English bidding based on the bid value, of which the receipt and distribution(click to see details) is realized via smart contract.

Bidding method

When constructing a backrun transaction, the backrun contract could call the proxyBid method of the bidding proxy contract as follows.

interface IProxyBid { 
    function proxyBid(address refundAddress, uint256 refundCfg) external payable; 
}

The biding proxy contract address (proxyBidContract), refundAddress and refundCfg can be obtained from the data stream and msg.value(the biding value) must be greater than 0.

The correctness of the parameters will be strictly verified by Scutum. 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.

Request parameters

Bundle

ParametersMandatoryFormatExampleRemark

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

mandatory

uint64

39177941

The maximum block number valid for this bundle

optional

See hint for details

refundAddress

optional

address

"0x9abae1b279a4be25aeae49a33e807cdd3ccffa0c"

If there is a transaction field with a value of true in hint, this field needs to be set.

refundPercent

optional

int

90

If there is a transaction field with a value of true in hint, this field needs to be set.

hint

The disclosure for the transaction data in field txsis 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.

ParametersMandatoryFormatExampleRemark

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

gasLimit

optional

bool

false

gas limit

gasPrice

optional

bool

false

gas price

logs

optional

bool

true

event logs emitted during transaction execution(this field synchronously sets whether to disclose state changes in the state object)

Request Example

Raw Bundle

The hash field is empty and there is no backrun objects. The raw transactions in txs come from the public mempool or are self-constructed and up to 50 raw transactions can be set. Searchers can disclosure txs to allow other Searchers to backrun, or keep txs private to forward raw bundles to mainstream builders directly.

The sandwich bundle detection will be launched in the near future. If a sandwich is found in the bundle, Scutum will take corresponding measures to deal with it strictly.

curl -X POST -H "Content-Type: application/json" --data'{
	"id": 1,
	"jsonrpc": "2.0",
	"method": "eth_sendMevBundle",
	"params": [{
		"hash": "",
		"txs": ["0xf84a8080808080808193a0437a5584216e68d1ff5bd7803161865e058f9bf4637fd1391213eac03ae64444a00df12bffe475d5dd8cc1544b72ee280471f1dcb5173827ba41eb25cfc3e54284"],
		"revertingTxHashes": [],
		"maxBlockNumber": 39177941,
		"hint": {
			"hash": true,
			"from": false,
			"to": false,
			"value": false,
			"nonce": false,
			"calldata": false,
			"functionSelector": false,
			"gasLimit": false,
			"gasPrice": false,		
			"logs": true
		},
		"refundAddress": "0x9abae1b279a4be25aeae49a33e807cdd3ccffa0c",
		"refundPercent": 90
	}]
}'<ETH_NODE_URL>

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].

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,
			"gasLimit": false,
			"gasPrice": false,		
			"logs": true
		},
		"refundAddress": "0x9abae1b279a4be25aeae49a33e807cdd3ccffa0c",
		"refundPercent": 90
	}]
}'<ETH_NODE_URL>

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].

The second backrun bundle will no longer be disclosed to other Searchers, and the parameters hint, refundRecipient and refundPercent will be invalid.

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,
	}]
}'<ETH_NODE_URL>

Response Example

normal

{"jsonrpc":"2.0","id":1,"result": "0x11111111..."}

abnormal

{"jsonrpc":"2.0","id":1,"jsonerror":{"code":-38000,"message":"nonce too low: address 0x9Abae1b279A4Be25AEaE49a33e807cDd3cCFFa0C, tx: 0 state: 45"}}

Last updated