flashbots

package module
v0.6.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 2, 2024 License: MIT Imports: 17 Imported by: 0

README

flashbots ⚡🤖

Go Reference Go Report Card Coverage Status Latest Release

Package flashbots implements RPC API bindings for the Flashbots relay and mev-geth for use with the w3 package.

Install

go get github.com/lmittmann/flashbots

Getting Started

[!NOTE] Check out the examples!

Connect to the Flashbots relay. The w3.Client returned by Dial uses the AuthTransport to add the X-Flashbots-Signature header to every request.

// Private key for request signing.
var prv *ecdsa.PrivateKey

// Connect to Flashbots Relay
client := flashbots.MustDial("https://relay.flashbots.net", prv)
defer client.Close()

// Or… Connect to any RPC endpoint that does not require signed requests
client := w3.MustDial("http://localhost:8545")
defer client.Close()

Send a bundle to the Flashbots relay.

bundle := []*types.Transaction{ /* signed transactions… */ }

var bundleHash common.Hash
err := client.Call(
	flashbots.SendBundle(&flashbots.SendBundleRequest{
		Transactions: bundle,
		BlockNumber:  big.NewInt(999_999_999),
	}).Returns(&bundleHash),
)

[!WARNING] The Flashbots relay does not support batch requests. Thus, sending more than one call in Client.Call will result in a server error.

RPC Methods

List of supported RPC methods.

Method Go Code
eth_sendBundle flashbots.SendBundle(r *flashbots.SendBundleRequest).Returns(bundleHash *common.Hash)
eth_callBundle flashbots.CallBundle(r *flashbots.CallBundleRequest).Returns(resp *flashbots.CallBundleResponse)
eth_sendPrivateTransaction flashbots.SendPrivateTx(r *flashbots.SendPrivateTxRequest).Returns(txHash *common.Hash)
eth_cancelPrivateTransaction flashbots.CancelPrivateTx(txHash common.Hash).Returns(success *bool)
flashbots_getUserStats flashbots.UserStats(blockNumber *big.Int).Returns(resp *flashbots.UserStatsResponse)
flashbots_getBundleStats flashbots.BundleStats(bundleHash common.Hash, blockNumber *big.Int).Returns(resp *flashbots.BundleStatsResponse)
flashbots_getUserStatsV2 flashbots.UserStatsV2(blockNumber *big.Int).Returns(resp *flashbots.UserStatsV2Response)
flashbots_getBundleStatsV2 flashbots.BundleStatsV2(bundleHash common.Hash, blockNumber *big.Int).Returns(resp *flashbots.BundleStatsV2Response)

Documentation

Overview

Package flashbots implements RPC API bindings for the Flashbots relay and mev-geth for use with the w3 package.

Example
package main

import (
	"crypto/ecdsa"
	"fmt"
	"math/big"

	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/core/types"
	"github.com/lmittmann/flashbots"
)

func main() {
	// Private key for request signing
	var prv *ecdsa.PrivateKey

	// Connect to Flashbots relay
	client := flashbots.MustDial("https://relay.flashbots.net", prv)
	defer client.Close()

	// Send bundle
	bundle := []*types.Transaction{ /* signed transactions... */ }

	var bundleHash common.Hash
	if err := client.Call(
		flashbots.SendBundle(&flashbots.SendBundleRequest{
			Transactions: bundle,
			BlockNumber:  big.NewInt(999_999_999),
		}).Returns(&bundleHash),
	); err != nil {
		fmt.Printf("Failed to send bundle to Flashbots relay: %v\n", err)
		return
	}
	fmt.Printf("Sent bundle successfully: %s\n", bundleHash)
}
Output:

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func AuthTransport

func AuthTransport(privKey *ecdsa.PrivateKey) http.RoundTripper

AuthTransport returns a http.RoundTripper that adds the 'X-Flashbots-Signature' header to every request.

func BundleStats deprecated

func BundleStats(bundleHash common.Hash, blockNumber *big.Int) w3types.RPCCallerFactory[BundleStatsResponse]

BundleStats requests the bundles Flashbots relay stats. The given block number must be within 20 blocks of the current chain tip.

Deprecated: Use BundleStatsV2 instead.

func BundleStatsV2 added in v0.6.0

func BundleStatsV2(bundleHash common.Hash, blockNumber *big.Int) w3types.RPCCallerFactory[BundleStatsV2Response]

BundleStatsV2 requests the bundles Flashbots relay stats. The given block number must be within 20 blocks of the current chain tip.

func CallBundle added in v0.2.0

CallBundle simulates a bundle.

func CancelPrivateTx added in v0.5.0

func CancelPrivateTx(hash common.Hash) w3types.RPCCallerFactory[bool]

CancelPrivateTx stops the private transactions with the given hash from being submitted for future blocks by the Flashbots relay.

func Dial added in v0.5.0

func Dial(rawurl string, prv *ecdsa.PrivateKey) (*w3.Client, error)

Dial returns a new w3.Client connected to the URL rawurl that adds the 'X-Flashbots-Signature' to every request. An error is returned if the connection establishment failes.

Use w3.Dial to connect to an RPC endpoint that does not require signed requests.

func MustDial added in v0.5.0

func MustDial(rawurl string, prv *ecdsa.PrivateKey) *w3.Client

MustDial is like Dial but panics if the connection establishment failes.

Use w3.MustDial to connect to an RPC endpoint that does not require signed requests.

func SendBundle

SendBundle sends the bundle to the client's endpoint.

func SendPrivateTx added in v0.5.0

SendPrivateTx sends a private transaction to the Flashbots relay.

func UserStats deprecated

func UserStats(blockNumber *big.Int) w3types.RPCCallerFactory[UserStatsResponse]

UserStats requests the users Flashbots relay stats. The given block number must be within 20 blocks of the current chain tip.

Deprecated: Use UserStatsV2 instead.

func UserStatsV2 added in v0.6.0

func UserStatsV2(blockNumber *big.Int) w3types.RPCCallerFactory[UserStatsV2Response]

UserStatsV2 requests the users Flashbots relay stats. The given block number must be within 20 blocks of the current chain tip.

Types

type BundleStatsResponse deprecated

type BundleStatsResponse struct {
	IsSimulated    bool
	IsSentToMiners bool
	IsHighPriority bool
	SimulatedAt    time.Time
	SubmittedAt    time.Time
	SentToMinersAt time.Time
}

Deprecated: Use BundleStatsV2Response instead.

type BundleStatsV2Response added in v0.6.0

type BundleStatsV2Response struct {
	IsHighPriority bool
	IsSimulated    bool
	SimulatedAt    time.Time
	ReceivedAt     time.Time

	ConsideredByBuildersAt []*struct {
		Pubkey    string
		Timestamp time.Time
	}
	SealedByBuildersAt []*struct {
		Pubkey    string
		Timestamp time.Time
	}
}

type CallBundleRequest added in v0.2.0

type CallBundleRequest struct {
	Transactions     types.Transactions // List of signed transactions to simulate in a bundle.
	RawTransactions  [][]byte           // List of signed raw transactions to simulate in a bundle.
	BlockNumber      *big.Int           // Block number for which the bundle is valid.
	StateBlockNumber *big.Int           // Block number of state to use for simulation, "latest" if nil.
	Timestamp        uint64             // Timestamp of block used for simulation (Optional).
}

func (CallBundleRequest) MarshalJSON added in v0.2.0

func (c CallBundleRequest) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler.

type CallBundleResponse added in v0.2.0

type CallBundleResponse struct {
	BundleGasPrice    *big.Int
	BundleHash        common.Hash
	CoinbaseDiff      *big.Int
	EthSentToCoinbase *big.Int
	GasFees           *big.Int
	StateBlockNumber  *big.Int
	TotalGasUsed      uint64
	Results           []CallBundleResult
}

func (*CallBundleResponse) UnmarshalJSON added in v0.2.0

func (c *CallBundleResponse) UnmarshalJSON(input []byte) error

UnmarshalJSON implements the json.Unmarshaler.

type CallBundleResult added in v0.2.0

type CallBundleResult struct {
	CoinbaseDiff      *big.Int
	EthSentToCoinbase *big.Int
	FromAddress       common.Address
	GasFees           *big.Int
	GasPrice          *big.Int
	GasUsed           uint64
	ToAddress         *common.Address
	TxHash            common.Hash
	Value             []byte // Output

	Error  error
	Revert string // Revert reason
}

type SendBundleRequest added in v0.2.0

type SendBundleRequest struct {
	Transactions      types.Transactions // List of signed transactions to execute in a bundle.
	RawTransactions   [][]byte           // List of signed raw transactions to execute in a bundle.
	BlockNumber       *big.Int           // Block number for which the bundle is valid
	MinTimestamp      uint64             // Minimum Unix Timestamp for which the bundle is valid
	MaxTimestamp      uint64             // Maximum Unix Timestamp for which the bundle is valid
	RevertingTxHashes []common.Hash      // List of tx hashes in bundle that are allowed to revert.
}

func (SendBundleRequest) MarshalJSON added in v0.2.0

func (s SendBundleRequest) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler.

type SendPrivateTxRequest added in v0.5.0

type SendPrivateTxRequest struct {
	Tx             *types.Transaction // Signed transaction to send.
	RawTx          []byte             // Raw signed transaction to send.
	MaxBlockNumber *big.Int           // Max block number for which the tx should be included (Optional).
	Fast           bool               // Enable fast mode (Optional). See https://docs.flashbots.net/flashbots-protect/rpc/fast-mode
}

func (SendPrivateTxRequest) MarshalJSON added in v0.5.0

func (c SendPrivateTxRequest) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler.

type UserStatsResponse deprecated

type UserStatsResponse struct {
	IsHighPriority       bool     // True if the searcher has an high enough reputation to be in the high priority queue.
	AllTimeMinerPayments *big.Int // Total amount paid to miners over all time.
	AllTimeGasSimulated  *big.Int // Total amount of gas simulated across all bundles submitted to the relay.
	Last7dMinerPayments  *big.Int // Total amount paid to miners over the last 7 days.
	Last7dGasSimulated   *big.Int // Total amount of gas simulated across all bundles submitted to the relay in the last 7 days.
	Last1dMinerPayments  *big.Int // Total amount paid to miners over the last day.
	Last1dGasSimulated   *big.Int // Total amount of gas simulated across all bundles submitted to the relay in the last day.
}

Deprecated: Use UserStatsV2Response instead.

func (*UserStatsResponse) UnmarshalJSON

func (u *UserStatsResponse) UnmarshalJSON(input []byte) error

UnmarshalJSON implements the json.Unmarshaler.

type UserStatsV2Response added in v0.6.0

type UserStatsV2Response struct {
	IsHighPriority           bool     // True if the searcher has an high enough reputation to be in the high priority queue.
	AllTimeValidatorPayments *big.Int // Total amount paid to validators over all time.
	AllTimeGasSimulated      *big.Int // Total amount of gas simulated across all bundles submitted to the relay.
	Last7dValidatorPayments  *big.Int // Total amount paid to validators over the last 7 days.
	Last7dGasSimulated       *big.Int // Total amount of gas simulated across all bundles submitted to the relay in the last 7 days.
	Last1dValidatorPayments  *big.Int // Total amount paid to validators over the last day.
	Last1dGasSimulated       *big.Int // Total amount of gas simulated across all bundles submitted to the relay in the last day.
}

func (*UserStatsV2Response) UnmarshalJSON added in v0.6.0

func (u *UserStatsV2Response) UnmarshalJSON(input []byte) error

UnmarshalJSON implements the json.Unmarshaler.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL