proxy

package
v0.5.4 Latest Latest
Warning

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

Go to latest
Published: Jul 4, 2025 License: MIT Imports: 31 Imported by: 0

Documentation

Overview

Package proxy provides the main proxy server.

Index

Constants

View Source
const (
	FlashbotsPeerName = "flashbots"

	EthSendBundleMethod         = "eth_sendBundle"
	MevSendBundleMethod         = "mev_sendBundle"
	EthCancelBundleMethod       = "eth_cancelBundle"
	EthSendRawTransactionMethod = "eth_sendRawTransaction"
	BidSubsidiseBlockMethod     = "bid_subsidiseBlock"
)
View Source
const DefaultLocalhostMaxIdleConn = 1000
View Source
const DefaultMaxRequestBodySizeBytes = int64(30 * 1024 * 1024) // 30 MB
View Source
const NewOrderEventsMethod = "flashbots_newOrderEvents"

Variables

View Source
var (
	// ArchiveBatchSize is a maximum size of the batch to send to the archive
	ArchiveBatchSize = 100
	// ArchiveBatchSizeFlushTimeout is a timeout to force flush the batch to the archive
	ArchiveBatchSizeFlushTimeout = time.Second * 6

	ArchiveRequestTimeout = time.Second * 15
	ArchiveRetryMaxTime   = time.Second * 120

	ArchiveWorkerQueueSize = 20000
)
View Source
var (
	HTTPDefaultReadTimeout             = time.Duration(cli.GetEnvInt("HTTP_READ_TIMEOUT_SEC", 60)) * time.Second
	HTTPDefaultWriteTimeout            = time.Duration(cli.GetEnvInt("HTTP_WRITE_TIMEOUT_SEC", 30)) * time.Second
	HTTPDefaultIdleTimeout             = time.Duration(cli.GetEnvInt("HTTP_IDLE_TIMEOUT_SEC", 3600)) * time.Second
	HTTP2DefaultMaxUploadPerConnection = int32(cli.GetEnvInt("HTTP2_MAX_UPLOAD_PER_CONN", 32<<20))  // 32MiB
	HTTP2DefaultMaxUploadPerStream     = int32(cli.GetEnvInt("HTTP2_MAX_UPLOAD_PER_STREAM", 8<<20)) // 8MiB
	HTTP2DefaultMaxConcurrentStreams   = uint32(cli.GetEnvInt("HTTP2_MAX_CONCURRENT_STREAMS", 4096))
)
View Source
var (
	DefaultOrderflowProxyPublicPort = "5544"
	DefaultHTTPCLientWriteBuffer    = cli.GetEnvInt("HTTP_CLIENT_WRITE_BUFFER", 64<<10) // 64 KiB
)
View Source
var (
	ReceiverProxyWorkerQueueSize = 10000
)
View Source
var (
	ShareWorkerQueueSize = 10000
)

Functions

func EnsureReplacementUUID added in v0.3.1

func EnsureReplacementUUID(args *rpctypes.EthSendBundleArgs) (*rpctypes.EthSendBundleArgs, error)

EnsureReplacementUUID updates bundle with consistent replacement uuid value (falling back to `uuid` field if needed)

func HTTPClientLocalhost added in v0.4.0

func HTTPClientLocalhost(maxOpenConnections int) *http.Client

func HTTPClientWithMaxConnections added in v0.2.2

func HTTPClientWithMaxConnections(maxOpenConnections int) *http.Client

func IsVersionValid added in v0.3.1

func IsVersionValid(version *string) bool

func NewFastHTTPClient added in v0.5.2

func NewFastHTTPClient(certPEM []byte, maxOpenConnections int) (*fasthttp.Client, error)

func OrderflowProxyURLFromIPOrDNSName added in v0.4.2

func OrderflowProxyURLFromIPOrDNSName(ipOrDNSName string) string

func RPCClientWithCertAndSigner

func RPCClientWithCertAndSigner(endpoint string, certPEM []byte, signer *signature.Signer, maxOpenConnections int) (rpcclient.RPCClient, error)

func SerializeParsedRequestForSharing added in v0.5.2

func SerializeParsedRequestForSharing(req *ParsedRequest, signer *signature.Signer) error

func ValidateEthCancelBundle

func ValidateEthCancelBundle(args *rpctypes.EthCancelBundleArgs, publicEndpoint bool) error

func ValidateEthSendBundle

func ValidateEthSendBundle(args *rpctypes.EthSendBundleArgs, publicEndpoint bool) error

func ValidateMevSendBundle

func ValidateMevSendBundle(args *rpctypes.MevSendBundleArgs, publicEndpoint bool) error

Types

type ArchiveEvent

type ArchiveEvent struct {
	EthSendBundle   *ArchiveEventEthSendBundle   `json:"eth_sendBundle,omitempty"`
	MevSendBundle   *ArchiveEventMevSendBundle   `json:"mev_sendBundle,omitempty"`
	EthCancelBundle *ArchiveEventEthCancelBundle `json:"eth_cancelBundle,omitempty"`
}

type ArchiveEventEthCancelBundle

type ArchiveEventEthCancelBundle struct {
	Params   *rpctypes.EthCancelBundleArgs `json:"params"`
	Metadata *ArchiveEventMetadata         `json:"metadata"`
}

type ArchiveEventEthSendBundle

type ArchiveEventEthSendBundle struct {
	Params   *rpctypes.EthSendBundleArgs `json:"params"`
	Metadata *ArchiveEventMetadata       `json:"metadata"`
}

type ArchiveEventMetadata

type ArchiveEventMetadata struct {
	// ReceivedAt is a unix millisecond timestamp
	ReceivedAt int64 `json:"receivedAt"`
}

type ArchiveEventMevSendBundle

type ArchiveEventMevSendBundle struct {
	Params   *rpctypes.MevSendBundleArgs `json:"params"`
	Metadata *ArchiveEventMetadata       `json:"metadata"`
}

type ArchiveQueue

type ArchiveQueue struct {
	// contains filtered or unexported fields
}

func (*ArchiveQueue) Run

func (aq *ArchiveQueue) Run()

type BlockNumberSource

type BlockNumberSource struct {
	// contains filtered or unexported fields
}

func NewBlockNumberSource

func NewBlockNumberSource(endpoint string) *BlockNumberSource

func (*BlockNumberSource) BlockNumber

func (bs *BlockNumberSource) BlockNumber() (uint64, error)

func (*BlockNumberSource) UpdateCachedBlockNumber

func (bs *BlockNumberSource) UpdateCachedBlockNumber() error

type BuilderConfigHub

type BuilderConfigHub struct {
	// contains filtered or unexported fields
}

func NewBuilderConfigHub

func NewBuilderConfigHub(log *slog.Logger, endpoint string) *BuilderConfigHub

func (*BuilderConfigHub) Builders

func (b *BuilderConfigHub) Builders(internal bool) (result []ConfighubBuilder, err error)

func (*BuilderConfigHub) RegisterCredentials

func (b *BuilderConfigHub) RegisterCredentials(ctx context.Context, info ConfighubOrderflowProxyCredentials) error

type ConfighubBuilder

type ConfighubBuilder struct {
	Name           string                             `json:"name"`
	IP             string                             `json:"ip"`
	DNSName        string                             `json:"dns_name"`
	OrderflowProxy ConfighubOrderflowProxyCredentials `json:"orderflow_proxy"`
	Instance       ConfighubInstanceData              `json:"instance"`
}

func (*ConfighubBuilder) SystemAPIAddress added in v0.4.2

func (b *ConfighubBuilder) SystemAPIAddress() string

func (*ConfighubBuilder) TLSCert added in v0.4.2

func (b *ConfighubBuilder) TLSCert() string

type ConfighubInstanceData added in v0.4.2

type ConfighubInstanceData struct {
	TLSCert string `json:"tls_cert"`
}

type ConfighubOrderflowProxyCredentials

type ConfighubOrderflowProxyCredentials struct {
	TLSCert            string         `json:"tls_cert,omitempty"` // for backward compatibility
	EcdsaPubkeyAddress common.Address `json:"ecdsa_pubkey_address"`
}

type FlashbotsNewOrderEventsArgs

type FlashbotsNewOrderEventsArgs struct {
	OrderEvents []ArchiveEvent `json:"orderEvents"`
}

type LocalBuilderSender added in v0.5.2

type LocalBuilderSender struct {
	// contains filtered or unexported fields
}

func NewLocalBuilderSender added in v0.5.2

func NewLocalBuilderSender(logger *slog.Logger, endpoint string, maxOpenConnections int) (LocalBuilderSender, error)

func (*LocalBuilderSender) SendRequest added in v0.5.2

func (s *LocalBuilderSender) SendRequest(req *ParsedRequest) error

type ParsedRequest

type ParsedRequest struct {
	// contains filtered or unexported fields
}

type ReceiverProxy

type ReceiverProxy struct {
	ReceiverProxyConstantConfig

	ConfigHub *BuilderConfigHub

	OrderflowSigner *signature.Signer

	UserHandler   http.Handler
	SystemHandler http.Handler
	// contains filtered or unexported fields
}

func NewReceiverProxy

func NewReceiverProxy(config ReceiverProxyConfig) (*ReceiverProxy, error)

func (*ReceiverProxy) BidSubsidiseBlock

func (prx *ReceiverProxy) BidSubsidiseBlock(ctx context.Context, bidSubsidiseBlock rpctypes.BidSubsisideBlockArgs, systemEndpoint bool) error

func (*ReceiverProxy) BidSubsidiseBlockSystem added in v0.3.1

func (prx *ReceiverProxy) BidSubsidiseBlockSystem(ctx context.Context, bidSubsidiseBlock rpctypes.BidSubsisideBlockArgs) error

func (*ReceiverProxy) BidSubsidiseBlockUser added in v0.3.1

func (prx *ReceiverProxy) BidSubsidiseBlockUser(ctx context.Context, bidSubsidiseBlock rpctypes.BidSubsisideBlockArgs) error

func (*ReceiverProxy) EthCancelBundle

func (prx *ReceiverProxy) EthCancelBundle(ctx context.Context, ethCancelBundle rpctypes.EthCancelBundleArgs, systemEndpoint bool) error

func (*ReceiverProxy) EthCancelBundleSystem added in v0.3.1

func (prx *ReceiverProxy) EthCancelBundleSystem(ctx context.Context, ethCancelBundle rpctypes.EthCancelBundleArgs) error

func (*ReceiverProxy) EthCancelBundleUser added in v0.3.1

func (prx *ReceiverProxy) EthCancelBundleUser(ctx context.Context, ethCancelBundle rpctypes.EthCancelBundleArgs) error

func (*ReceiverProxy) EthSendBundle

func (prx *ReceiverProxy) EthSendBundle(ctx context.Context, ethSendBundle rpctypes.EthSendBundleArgs, systemEndpoint bool) error

func (*ReceiverProxy) EthSendBundleSystem added in v0.3.1

func (prx *ReceiverProxy) EthSendBundleSystem(ctx context.Context, ethSendBundle rpctypes.EthSendBundleArgs) error

func (*ReceiverProxy) EthSendBundleUser added in v0.3.1

func (prx *ReceiverProxy) EthSendBundleUser(ctx context.Context, ethSendBundle rpctypes.EthSendBundleArgs) error

func (*ReceiverProxy) EthSendRawTransaction

func (prx *ReceiverProxy) EthSendRawTransaction(ctx context.Context, ethSendRawTransaction rpctypes.EthSendRawTransactionArgs, systemEndpoint bool) error

func (*ReceiverProxy) EthSendRawTransactionSystem added in v0.3.1

func (prx *ReceiverProxy) EthSendRawTransactionSystem(ctx context.Context, ethSendRawTransaction rpctypes.EthSendRawTransactionArgs) error

func (*ReceiverProxy) EthSendRawTransactionUser added in v0.3.1

func (prx *ReceiverProxy) EthSendRawTransactionUser(ctx context.Context, ethSendRawTransaction rpctypes.EthSendRawTransactionArgs) error

func (*ReceiverProxy) FlushArchiveQueue

func (prx *ReceiverProxy) FlushArchiveQueue()

FlushArchiveQueue forces the archive queue to flush

func (*ReceiverProxy) HandleParsedRequest

func (prx *ReceiverProxy) HandleParsedRequest(ctx context.Context, parsedRequest ParsedRequest) error

func (*ReceiverProxy) MevSendBundle

func (prx *ReceiverProxy) MevSendBundle(ctx context.Context, mevSendBundle rpctypes.MevSendBundleArgs, systemEndpoint bool) error

func (*ReceiverProxy) MevSendBundleSystem added in v0.3.1

func (prx *ReceiverProxy) MevSendBundleSystem(ctx context.Context, mevSendBundle rpctypes.MevSendBundleArgs) error

func (*ReceiverProxy) MevSendBundleUser added in v0.3.1

func (prx *ReceiverProxy) MevSendBundleUser(ctx context.Context, mevSendBundle rpctypes.MevSendBundleArgs) error

func (*ReceiverProxy) RegisterSecrets

func (prx *ReceiverProxy) RegisterSecrets(ctx context.Context) error

func (*ReceiverProxy) RequestNewPeers

func (prx *ReceiverProxy) RequestNewPeers() error

RequestNewPeers updates currently available peers from the builder config hub

func (*ReceiverProxy) Stop

func (prx *ReceiverProxy) Stop()

func (*ReceiverProxy) SystemJSONRPCHandler added in v0.3.1

func (prx *ReceiverProxy) SystemJSONRPCHandler(maxRequestBodySizeBytes int64) (*rpcserver.JSONRPCHandler, error)

func (*ReceiverProxy) UserJSONRPCHandler added in v0.3.1

func (prx *ReceiverProxy) UserJSONRPCHandler(maxRequestBodySizeBytes int64) (*rpcserver.JSONRPCHandler, error)

func (*ReceiverProxy) ValidateSigner

func (prx *ReceiverProxy) ValidateSigner(ctx context.Context, req *ParsedRequest, systemEndpoint bool) error

type ReceiverProxyConfig

type ReceiverProxyConfig struct {
	ReceiverProxyConstantConfig

	BuilderConfigHubEndpoint string
	ArchiveEndpoint          string
	ArchiveConnections       int
	BuilderReadyEndpoint     string

	// EthRPC should support eth_blockNumber API
	EthRPC string

	MaxRequestBodySizeBytes int64

	ConnectionsPerPeer int
	MaxUserRPS         int
	ArchiveWorkerCount int
}

type ReceiverProxyConstantConfig

type ReceiverProxyConstantConfig struct {
	Log *slog.Logger
	// Name is optional field and it used to distringuish multiple proxies when running in the same process in tests
	Name                   string
	FlashbotsSignerAddress common.Address
	LocalBuilderEndpoint   string
}

type ReceiverProxyServers

type ReceiverProxyServers struct {
	// contains filtered or unexported fields
}

func StartReceiverServers

func StartReceiverServers(proxy *ReceiverProxy, userListenAddress, systemListenAddress string) (*ReceiverProxyServers, error)

func (*ReceiverProxyServers) Stop

func (s *ReceiverProxyServers) Stop()

type SenderProxy

type SenderProxy struct {
	SenderProxyConstantConfig
	ConfigHub *BuilderConfigHub
	Handler   http.Handler

	PeerUpdateForce chan struct{}
	// contains filtered or unexported fields
}

func NewSenderProxy

func NewSenderProxy(config SenderProxyConfig) (*SenderProxy, error)

func (*SenderProxy) BidSubsidiseBlock

func (prx *SenderProxy) BidSubsidiseBlock(ctx context.Context, bidSubsidiseBlock rpctypes.BidSubsisideBlockArgs) error

func (*SenderProxy) EthCancelBundle

func (prx *SenderProxy) EthCancelBundle(ctx context.Context, ethCancelBundle rpctypes.EthCancelBundleArgs) error

func (*SenderProxy) EthSendBundle

func (prx *SenderProxy) EthSendBundle(ctx context.Context, ethSendBundle rpctypes.EthSendBundleArgs) error

func (*SenderProxy) EthSendRawTransaction

func (prx *SenderProxy) EthSendRawTransaction(ctx context.Context, ethSendRawTransaction rpctypes.EthSendRawTransactionArgs) error

func (*SenderProxy) HandleParsedRequest

func (prx *SenderProxy) HandleParsedRequest(ctx context.Context, parsedRequest ParsedRequest) error

func (*SenderProxy) MevSendBundle

func (prx *SenderProxy) MevSendBundle(ctx context.Context, mevSendBundle rpctypes.MevSendBundleArgs) error

func (*SenderProxy) Stop

func (prx *SenderProxy) Stop()

type SenderProxyConfig

type SenderProxyConfig struct {
	SenderProxyConstantConfig
	BuilderConfigHubEndpoint string
	MaxRequestBodySizeBytes  int64
	ConnectionsPerPeer       int
}

type SenderProxyConstantConfig

type SenderProxyConstantConfig struct {
	Log             *slog.Logger
	OrderflowSigner *signature.Signer
}

type SenderProxyServers

type SenderProxyServers struct {
	// contains filtered or unexported fields
}

func StartSenderServers

func StartSenderServers(proxy *SenderProxy, listenAddress string) (*SenderProxyServers, error)

func (*SenderProxyServers) Stop

func (s *SenderProxyServers) Stop()

type ShareQueue

type ShareQueue struct {
	// contains filtered or unexported fields
}

func (*ShareQueue) Run

func (sq *ShareQueue) Run()

Jump to

Keyboard shortcuts

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