Fork of ethrpc with additional Flashbots RPC methods:
FlashbotsCallBundle(eth_callBundle)FlashbotsSendBundle(eth_sendBundle)FlashbotsGetUserStats(flashbots_getUserStats)FlashbotsSendPrivateTransaction(eth_sendPrivateTransaction)FlashbotsCancelPrivateTransaction(eth_cancelPrivateTransaction)FlashbotsSimulateBlock: simulate a full block
Add library to your project:
go get github.com/metachris/flashbotsrpc
Create a new private key here for testing (you probably want to use an existing one):
privateKey, _ := crypto.GenerateKey()
callBundleArgs := flashbotsrpc.FlashbotsCallBundleParam{ Txs: []string{"YOUR_RAW_TX"}, BlockNumber: fmt.Sprintf("0x%x", 13281018), StateBlockNumber: "latest", } result, err := rpc.FlashbotsCallBundle(privateKey, callBundleArgs) if err != nil { log.Fatal(err) } fmt.Printf("%+v\n", result)
rpc := flashbotsrpc.New("https://relay.flashbots.net") result, err := rpc.FlashbotsGetUserStats(privateKey, 13281018) if err != nil { log.Fatal(err) } fmt.Printf("%+v\n", result)
sendBundleArgs := flashbotsrpc.FlashbotsSendBundleRequest{ Txs: []string{"YOUR_RAW_TX"}, BlockNumber: fmt.Sprintf("0x%x", 13281018), } result, err := rpc.FlashbotsSendBundle(privateKey, sendBundleArgs) if err != nil { log.Fatal(err) } fmt.Printf("%+v\n", result)
Send a transaction bundle to a list of Builder endpoints with eth_sendBundle (full example [/examples/broadcastbundle]):
urls := []string{ "https://relay.flashbots.net", // Refer to https://www.mev.to/builders for builder endpoints } rpc := flashbotsrpc.NewBuilderBroadcastRPC(urls) sendBundleArgs := flashbotsrpc.FlashbotsSendBundleRequest{ Txs: []string{"YOUR_RAW_TX"}, BlockNumber: fmt.Sprintf("0x%x", 13281018), } results := rpc.BroadcastBundle(privateKey, sendBundleArgs) for _, result := range results { if result.Err != nil { log.Fatal(result.Err) } fmt.Printf("%+v\n", result.BundleResponse) }
You can find example code in the /examples/ directory.