flashbots

package module
v0.0.0-...-e341911 Latest Latest
Warning

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

Go to latest
Published: Oct 1, 2022 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

ℹ 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()

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),
)

⚠ 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)

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

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

BundleStats 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.CallerFactory[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 failes.

func MustDial

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

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

func SendBundle

SendBundle sends the bundle to the client's endpoint.

func SendPrivateTx

SendPrivateTx sends a private transaction to the Flashbots relay.

func UserStats

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

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

Types

type BundleStatsResponse

type BundleStatsResponse struct {
	IsSimulated    bool
	IsSentToMiners bool
	IsHighPriority bool
	SimulatedAt    time.Time
	SubmittedAt    time.Time
	SentToMinersAt 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        *big.Int           // 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      *big.Int           // Minimum Unix Timestamp for which the bundle is valid
	MaxTimestamp      *big.Int           // 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

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

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

func (*UserStatsResponse) UnmarshalJSON

func (u *UserStatsResponse) 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