Created
June 16, 2022 03:15
-
-
Save mdehoog/aecbb3d33f77968ff9f0f550e1d07094 to your computer and use it in GitHub Desktop.
Request blob sidecar from beacon node
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"fmt" | |
libp2pcore "github.com/libp2p/go-libp2p-core" | |
"github.com/libp2p/go-libp2p-core/peer" | |
"github.com/pkg/errors" | |
"github.com/prysmaticlabs/prysm/beacon-chain/p2p" | |
"github.com/prysmaticlabs/prysm/beacon-chain/sync" | |
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" | |
"io" | |
) | |
func main() { | |
ctx, cancel := context.WithCancel(context.Background()) | |
defer cancel() | |
req := ðpb.BlobsSidecarsByRangeRequest{ | |
StartSlot: 10, | |
Count: 10, | |
} | |
svc, err := p2p.NewService(ctx, &p2p.Config{}) | |
if err != nil { | |
panic(err) | |
} | |
addr, err := peer.AddrInfoFromString("/ip4/192.168.86.249/tcp/13000/p2p/16Uiu2HAmD5XwkprYDfmgunmafiH58ZfY3n56Dr41ahydoCmh23Kt") | |
if err != nil { | |
panic(err) | |
} | |
err = svc.Connect(*addr) | |
if err != nil { | |
panic(err) | |
} | |
sidecars, err := SendBlobsSidecarsByRangeRequest(ctx, svc, addr.ID, req) | |
if err != nil { | |
panic(err) | |
} | |
fmt.Printf("Got %d sidecars: %+v\n", len(sidecars), sidecars) | |
} | |
func SendBlobsSidecarsByRangeRequest( | |
ctx context.Context, p2pProvider p2p.P2P, pid peer.ID, req *ethpb.BlobsSidecarsByRangeRequest) ([]*ethpb.BlobsSidecar, error) { | |
stream, err := p2pProvider.Send(ctx, req, p2p.RPCBlobsSidecarsByRangeTopicV1, pid) | |
if err != nil { | |
return nil, err | |
} | |
defer func() { | |
_ = stream.Close() | |
}() | |
var blobsSidecars []*ethpb.BlobsSidecar | |
for { | |
blobs, err := ReadChunkedBlobsSidecar(stream, p2pProvider) | |
if errors.Is(err, io.EOF) { | |
break | |
} | |
if err != nil { | |
return nil, err | |
} | |
blobsSidecars = append(blobsSidecars, blobs) | |
} | |
return blobsSidecars, nil | |
} | |
func ReadChunkedBlobsSidecar(stream libp2pcore.Stream, p2p p2p.P2P) (*ethpb.BlobsSidecar, error) { | |
code, errMsg, err := sync.ReadStatusCode(stream, p2p.Encoding()) | |
if err != nil { | |
return nil, err | |
} | |
if code != 0 { | |
return nil, errors.New(errMsg) | |
} | |
sidecar := new(ethpb.BlobsSidecar) | |
err = p2p.Encoding().DecodeWithMaxLength(stream, sidecar) | |
return sidecar, err | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment