Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: added blob sidecar tracing #2

Merged
merged 1 commit into from
Mar 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,37 @@
`cbctl` is a CLI tool for interacting with the Chainbound backend.

## Installation

With Go:

```bash
go install github.com/chainbound/cbctl@latest
```

## Usage

First, initialize `cbctl` with your API key. This will write a config file to `~/.config/cbctl/config.toml`:

```bash
cbctl init --key <your_api_key>
```

### Fiber Commands

The `fiber` subcommand let's you interact with the Fiber backend.

* `cbctl fiber quota`
- `cbctl fiber quota`

Gets your quota for the current billing period.
* `cbctl fiber trace tx --hash <tx_hash>`

- `cbctl fiber trace tx --hash <tx_hash>`

Gets the trace for a transaction. Run `cbctl fiber trace tx --help` for more info.

* `cbctl fiber trace block --hash <block_hash>` or `cbctl fiber trace block --number <block_number>`
- `cbctl fiber trace block --hash <block_hash>` or `cbctl fiber trace block --number <block_number>`

Gets a block trace. Run `cbctl fiber trace block --help` for more info.

- `cbctl fiber trace blob --commitment <blob_kzg_commitment>`

Gets a blob trace. Run `cbctl fiber trace blob --help` for more info.
40 changes: 40 additions & 0 deletions api/fiber.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,3 +157,43 @@ func (f *FiberAPI) TraceBlock(hashOrNumber, observationType string) ([]*TraceEnt

return response.Message, nil
}

func (f *FiberAPI) TraceBlob(commitment string, observationType string) ([]*TraceEntry, error) {
req, err := http.NewRequest("GET", f.url+"/trace/blob/"+commitment, nil)
if err != nil {
return nil, err
}

if observationType == "" {
observationType = "all"
}

q := req.URL.Query()
q.Add("observation_type", observationType)
req.URL.RawQuery = q.Encode()

f.prepareRequest(req)

res, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}

defer res.Body.Close()

body, err := io.ReadAll(res.Body)
if err != nil {
return nil, err
}

response := new(Response[[]*TraceEntry])
if err := json.Unmarshal(body, response); err != nil {
return nil, err
}

if response.Status != "success" {
return nil, fmt.Errorf("Error getting quota: %s", response.Error)
}

return response.Message, nil
}
48 changes: 48 additions & 0 deletions cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,54 @@ func NewApp() *cli.App {

printMessageTrace(traces, showSource)

return nil
},
},
{
Name: "blob",
Usage: "Trace a blob sidecar (consensus layer)",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "commitment",
Aliases: []string{"C"},
Usage: "The blob KZG commitment to trace",
Required: true,
},
&cli.StringFlag{
Name: "type",
Aliases: []string{"t"},
Usage: "The observation type to trace (p2p | fiber | all)",
Value: "all",
},
&cli.BoolFlag{
Name: "show-source",
Aliases: []string{"s"},
Usage: "Whether or not to show the source of the transaction",
Value: false,
},
},
Action: func(c *cli.Context) error {
cfg, err := ReadConfig()
if err != nil {
return fmt.Errorf("Error reading config, did you run cbctl init?: %w", err)
}

commitment := c.String("commitment")
if commitment == "" {
return fmt.Errorf("Must specify a blob commitment")
}

observationType := c.String("type")
showSource := c.Bool("show-source")

api := api.NewFiberAPI(cfg.Url, cfg.ApiKey)
traces, err := api.TraceBlob(commitment, observationType)
if err != nil {
return fmt.Errorf("Error getting quota: %w", err)
}

printMessageTrace(traces, showSource)

return nil
},
},
Expand Down
5 changes: 5 additions & 0 deletions fmt.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ import (
)

func printMessageTrace(trace []*api.TraceEntry, showSource bool) {
if len(trace) == 0 {
fmt.Println("No trace entries found")
return
}

t := table.NewWriter()
t.SetOutputMirror(os.Stdout)
t.SetStyle(table.StyleLight)
Expand Down