Skip to content

Flashbots RPC client that is compatible with the Go-Ethereum library

License

Notifications You must be signed in to change notification settings

adzil/bundlerpc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flashbots Bundle RPC

Go Reference Go Report Card

BundleRPC implements Flashbots JSON-RPC client that is compatible with the standard Go-Ethereum data types.

For more information about Flashbots RPC, please visit their documentation website.

Quick Start by Example

The following code snippet is incomplete and cannot be run as-is. However, it can be used as the starting point for interacting with the Flashbots RPC.

package main

import (
    "fmt"

    "github.com/adzil/bundlerpc"
    "github.com/ethereum/go-ethereum/core/types"
    "github.com/ethereum/go-ethereum/crypto"
    "github.com/ethereum/go-ethereum/ethclient"
    "github.com/ethereum/go-ethereum/rpc"
)

func main() {
    // Create random private key for signing the Flashbots JSON-RPC payload.
    // Consider using stored private key for long-term usage to build
    // reputation with the Flashbots relay.
    flashbotsKey, err := crypto.GenerateKey()
    if err != nil {
        panic(err)
    }

    // Create new JSON-RPC client using the previously generated private key.
    flashbots, err := bundlerpc.Dial("https://relay.flashbots.net", flashbotsKey)
    if err != nil {
        panic(err)
    }

    // Instantiate the Eth client to obtain the latest block number.
    ethrpc, err := rpc.Dial("http://localhost:8545")
    if err != nil {
        panic(err)
    }
    defer ethrpc.Close()
    eth := ethclient.NewClient(ethrpc)

    // ...Build the actual transactions here...
    var txOne, txTwo *types.Transaction

    // Get the latest block number.
    blockNumber, err := eth.BlockNumber(context.Background())
    if err != nil {
        panic(err)
    }

    // Send transaction bundle of txOne and txTwo using Flashbots relay. Note
    // that you must explicitly set NoSend field in the bind.TransactionOpts to
    // prevent sending them into the public mempool.
    bundle, err := flashbots.SendBundle(context.Background(), bundlerpc.SendBundleParam{
        Txs: []*types.Transaction{
            txOne,
            txTwo,
        },
        BlockNumber: blockNumber,
    })
    if err != nil {
        panic(err)
    }

    // Print the resulting bundle hash.
    fmt.Printf("%#v\n", bundle)
}

About

Flashbots RPC client that is compatible with the Go-Ethereum library

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages