rollkit / go-sequencing

Generic sequencer interface for modular blockchains
Apache License 2.0
4 stars 1 forks source link

feat: extend api to include rollup id, add Hash function to Batch, add maxBytes #13

Closed gupadhyaya closed 5 hours ago

gupadhyaya commented 1 day ago

Fixes #6 #10 #11

Summary by CodeRabbit

coderabbitai[bot] commented 1 day ago

Walkthrough

The changes involve updates to the go.mod file for new dependencies, modifications to the sequencing.proto file to enhance service definitions, and significant alterations to the method signatures and internal logic in various Go files, including client.go, server.go, and sequencing.go. The updates introduce structured request and response types across the sequencer interface, improving encapsulation and clarity. Additionally, a new method for hashing batches has been added, and unit tests have been introduced to validate the functionality of the updated sequencer.

Changes

Files Change Summary
go.mod Added new dependencies: github.com/stretchr/testify, github.com/davecgh/go-spew, github.com/pmezard/go-difflib, and gopkg.in/yaml.v3.
proto/sequencing/sequencing.proto Updated service definitions: added max_bytes to GetNextBatchRequest and rollup_id to both request messages.
proxy/grpc/client.go, proxy/grpc/server.go, sequencing.go, test/dummy.go Updated method signatures to use structured request and response types, enhancing encapsulation.
serialization.go Introduced a Hash method in the Batch struct for generating a SHA-256 hash of serialized data.
test/dummy_test.go Added unit tests for transaction queue and dummy sequencer operations, covering various scenarios.

Assessment against linked issues

Objective Addressed Explanation
maxBytes parameter in GetNextBatch (Issue #6)

🐰 In the meadow, where changes bloom,
New fields added, dispelling gloom.
With structured requests, our code takes flight,
A hash for batches, all feels just right!
In tests we trust, our logic is clear,
Hopping along, we have nothing to fear!
🐇✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
🪧 Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit , please review it.` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (Invoked using PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. ### Other keywords and placeholders - Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. - Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description. - Add `@coderabbitai` anywhere in the PR title to generate the title automatically. ### CodeRabbit Configuration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.
tuxcanfly commented 20 hours ago

@gupadhyaya what do you think about keeping primitive or close aliases in the go interface, e.g.:

// SequencerInput provides a method for submitting a transaction from rollup to sequencer
type SequencerInput interface {
    // SubmitRollupTransaction submits a transaction from rollup to sequencer
    // RollupId is the unique identifier for the rollup chain
    // Tx is the transaction to submit
    // returns an error if any from the sequencer
    SubmitRollupTransaction(ctx context.Context, rollupId RollupId, tx Tx) error
}

// SequencerOutput provides a method for getting the next batch of transactions from sequencer to rollup
type SequencerOutput interface {
    // GetNextBatch returns the next batch of transactions from sequencer to rollup
    // RollupId is the unique identifier for the rollup chain
    // LastBatchHash is the cryptographic hash of the last batch received by the rollup
    // MaxBytes is the maximum number of bytes to return in the batch
    // returns the next batch of transactions and an error if any from the sequencer
    GetNextBatch(ctx context.Context, rollupId RollupId, lastBatchHash Hash, maxBytes uint64) (*Batch, time.Time, error)
}

// BatchVerifier provides a method for verifying a batch of transactions received from the sequencer
type BatchVerifier interface {
    // VerifyBatch verifies a batch of transactions received from the sequencer
    // RollupId is the unique identifier for the rollup chain
    // BatchHash is the cryptographic hash of the batch to verify
    // returns a boolean indicating if the batch is valid and an error if any from the sequencer
    VerifyBatch(ctx context.Context, rollupId RollupId, batchHash Hash) (bool, error)
}

then the grpc implementations can cast to their appropriate Request, Response types. This allows the go interface to remain cleaner and not be dependent on protobuf types.

gupadhyaya commented 16 hours ago

@gupadhyaya what do you think about keeping primitive or close aliases in the go interface, e.g.:

// SequencerInput provides a method for submitting a transaction from rollup to sequencer
type SequencerInput interface {
  // SubmitRollupTransaction submits a transaction from rollup to sequencer
  // RollupId is the unique identifier for the rollup chain
  // Tx is the transaction to submit
  // returns an error if any from the sequencer
  SubmitRollupTransaction(ctx context.Context, rollupId RollupId, tx Tx) error
}

// SequencerOutput provides a method for getting the next batch of transactions from sequencer to rollup
type SequencerOutput interface {
  // GetNextBatch returns the next batch of transactions from sequencer to rollup
  // RollupId is the unique identifier for the rollup chain
  // LastBatchHash is the cryptographic hash of the last batch received by the rollup
  // MaxBytes is the maximum number of bytes to return in the batch
  // returns the next batch of transactions and an error if any from the sequencer
  GetNextBatch(ctx context.Context, rollupId RollupId, lastBatchHash Hash, maxBytes uint64) (*Batch, time.Time, error)
}

// BatchVerifier provides a method for verifying a batch of transactions received from the sequencer
type BatchVerifier interface {
  // VerifyBatch verifies a batch of transactions received from the sequencer
  // RollupId is the unique identifier for the rollup chain
  // BatchHash is the cryptographic hash of the batch to verify
  // returns a boolean indicating if the batch is valid and an error if any from the sequencer
  VerifyBatch(ctx context.Context, rollupId RollupId, batchHash Hash) (bool, error)
}

then the grpc implementations can cast to their appropriate Request, Response types. This allows the go interface to remain cleaner and not be dependent on protobuf types.

totally agree. its currently not dependent on the protobuf types. instead just wrapped types within the sequencer interface instead of primitive types. see: https://github.com/rollkit/go-sequencing/blob/max_bytes/sequencing.go#L58, these wrapper types are not protobuf types. these wrapper types will help manage future updates to params and returns better. what do you think?

github-actions[bot] commented 5 hours ago

:tada: This PR is included in version 0.2.0 :tada:

The release is available on GitHub release

Your semantic-release bot :package::rocket: