Skip to content

Conversation

@jackzhhuang
Copy link
Contributor

@jackzhhuang jackzhhuang commented Jul 14, 2025

Pull request type

Please check the type of change your PR introduces:

  • Bugfix
  • Feature
  • Code style update (formatting, renaming)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • Documentation content changes
  • Other (please describe):

What is the current behavior?

Issue Number: N/A

What is the new behavior?

Other information

Summary by CodeRabbit

  • Refactor

    • Simplified block verification by unifying and streamlining ghostdag data handling, making ghostdag data mandatory for verified blocks.
    • Removed legacy and redundant code related to uncle and DAG verification.
    • Replaced multiple verifier types with a single, consistent verifier for block validation and application.
    • Updated internal methods and tests to use the new ghostdag data calculation and commit approach.
  • Bug Fixes

    • Improved reliability of block processing by ensuring ghostdag data is always present and validated.
  • Chores

    • Updated container image version and deployment manifest for the starcoin service.
    • Increased default and minimum block time targets in consensus configurations across networks.

@coderabbitai
Copy link

coderabbitai bot commented Jul 14, 2025

## Walkthrough

This update refactors the handling of ghostdag data and block verification across the chain and DAG modules. It makes ghostdag data mandatory in verified blocks, removes legacy methods for uncle and DAG verification, consolidates verifier usage to `FullVerifier`, and simplifies the DAG commit and ghostdag calculation logic. Related tests and service logic are updated accordingly.

## Changes

| File(s) / Path(s)                                   | Change Summary                                                                                                    |
|----------------------------------------------------|------------------------------------------------------------------------------------------------------------------|
| chain/api/src/chain.rs                              | Made `ghostdata` mandatory in `VerifiedBlock`; renamed and simplified `verify_and_ghostdata` method.             |
| chain/src/chain.rs                                  | Removed `can_be_uncle`; unified block verification to `FullVerifier`; simplified ghostdag handling and method signatures. |
| chain/src/verifier/mod.rs                           | Removed legacy uncle/DAG verification; consolidated logic into `FullVerifier`; removed unused methods and structs.|
| flexidag/src/blockdag.rs                            | Removed `commit`, historical block checks, and `verify_and_ghostdata`; added `calc_ghostdata`.                   |
| flexidag/src/ghostdag/protocol.rs                   | Removed `build_ghostdata` method from `GhostdagManager`.                                                         |
| flexidag/tests/tests.rs                             | Updated tests to use `commit_trusted_block` with explicit ghostdag data instead of `commit`.                     |
| kube/manifest/starcoin-halley.yaml                  | Updated container image; removed explicit `command` field.                                                       |
| miner/src/create_block_template/new_header_service.rs| Removed extraneous blank line after cloning ghostdag data in `resolve_header`.                                  |
| miner/src/generate_block_event_pacemaker.rs         | Changed argument to `send_event` from `false` to `true` in two event handlers.                                   |
| sync/src/block_connector/block_connector_service.rs  | Switched verifier from `DagVerifier` to `FullVerifier` for block verification.                                   |
| sync/src/block_connector/write_block_chain.rs        | Changed test helper to use `FullVerifier` instead of `DagVerifier`.                                              |
| sync/src/parallel/executor.rs                       | Updated block execution to use `FullVerifier` instead of `DagVerifierWithGhostData`.                             |
| sync/src/sync.rs                                    | Changed block verifier import and usage from `DagVerifier` to `FullVerifier`.                                    |
| config/src/genesis_config.rs                        | Increased default and minimum block time targets and difficulty window constants.                               |
| sync/src/tasks/tests.rs                             | Renamed test function and increased block count in test.                                                        |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant Miner
    participant Chain
    participant DAG
    participant Verifier (FullVerifier)
    participant Ghostdag

    Miner->>Chain: submit Block
    Chain->>Verifier (FullVerifier): verify_block(Block)
    Verifier (FullVerifier)->>DAG: calc_ghostdata(BlockHeader)
    DAG-->>Verifier (FullVerifier): GhostdagData
    Verifier (FullVerifier)-->>Chain: VerifiedBlock(with GhostdagData)
    Chain->>DAG: commit_trusted_block(BlockHeader, GhostdagData)
    DAG-->>Chain: Commit Result

Possibly related PRs

  • starcoinorg/starcoin#4194: Introduces and modifies the verify_and_ghostdata method in the ChainReader trait, which is directly renamed and refactored in this PR.

Suggested reviewers

  • sanlee42
  • nkysg
  • welbon
  • simonjiao

Poem

In the warren of code, where the ghostdag hares hop,
We’ve made it required—no more optional stop.
FullVerifier now leads, uncles scamper away,
With trusted commits, the blocks never stray.
The DAG is much neater, the tests all agree—
A hoppier chain for you and for me!
🐇✨


<!-- walkthrough_end -->


---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**


<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between a0bd8386ce9a880f63c5e674d7261e2446ef6b4f and c7bdb726502e0dea55b8b4a8b06675ca546f8713.

</details>

<details>
<summary>📒 Files selected for processing (4)</summary>

* `config/example/barnard/genesis_config.json` (1 hunks)
* `config/example/main/genesis_config.json` (1 hunks)
* `config/example/proxima/genesis_config.json` (1 hunks)
* `config/example/vega/genesis_config.json` (1 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (4)</summary>

* config/example/vega/genesis_config.json
* config/example/barnard/genesis_config.json
* config/example/main/genesis_config.json
* config/example/proxima/genesis_config.json

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)</summary>

* GitHub Check: run benchmark

</details>

</details>
<!-- internal state start -->


<!-- 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= -->

<!-- internal state end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [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)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=starcoinorg/starcoin&utm_content=4584):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `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 explain this code block.`
  -	`@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 explain its main purpose.`
  - `@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.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

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 generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this 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://docs.coderabbit.ai) 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.

</details>

<!-- tips_end -->

@github-actions
Copy link

Benchmark for 354b2ff

Click to view benchmark
Test Base PR %
accumulator_append 1039.8±241.56µs 763.4±114.49µs -26.58%
block_apply/block_apply_10 361.9±8.79ms 363.6±5.42ms +0.47%
block_apply/block_apply_1000 40.7±1.25s 40.9±0.90s +0.49%
get_with_proof/db_store 45.9±7.10µs 45.0±1.53µs -1.96%
get_with_proof/mem_store 35.7±1.22µs 36.2±3.11µs +1.40%
put_and_commit/db_store/1 121.1±8.32µs 124.9±16.69µs +3.14%
put_and_commit/db_store/10 1072.8±94.11µs 1100.4±137.36µs +2.57%
put_and_commit/db_store/100 10.1±0.45ms 9.7±0.47ms -3.96%
put_and_commit/db_store/5 539.8±32.73µs 544.9±42.43µs +0.94%
put_and_commit/db_store/50 5.5±1.09ms 5.0±0.28ms -9.09%
put_and_commit/mem_store/1 72.6±10.98µs 71.6±7.95µs -1.38%
put_and_commit/mem_store/10 652.8±56.11µs 666.9±61.37µs +2.16%
put_and_commit/mem_store/100 7.0±1.47ms 6.4±0.41ms -8.57%
put_and_commit/mem_store/5 339.2±45.37µs 349.8±57.80µs +3.13%
put_and_commit/mem_store/50 3.2±0.17ms 3.4±0.47ms +6.25%
query_block/query_block_in(10)_times(100) 4.4±0.12ms 4.5±0.23ms +2.27%
query_block/query_block_in(10)_times(1000) 51.8±14.12ms 43.9±1.23ms -15.25%
query_block/query_block_in(10)_times(10000) 451.9±20.07ms 442.3±9.01ms -2.12%
query_block/query_block_in(1000)_times(100) 1110.4±79.12µs 1083.0±35.56µs -2.47%
query_block/query_block_in(1000)_times(1000) 11.0±0.36ms 10.9±0.39ms -0.91%
query_block/query_block_in(1000)_times(10000) 113.5±8.13ms 114.2±13.49ms +0.62%
storage_transaction 1134.6±402.35µs 1117.5±450.82µs -1.51%
vm/transaction_execution/1 427.4±20.08ms 417.1±17.52ms -2.41%
vm/transaction_execution/10 141.5±10.58ms 135.4±5.71ms -4.31%
vm/transaction_execution/20 127.8±7.80ms 119.2±1.94ms -6.73%
vm/transaction_execution/5 172.7±10.78ms 166.0±18.01ms -3.88%
vm/transaction_execution/50 149.0±11.56ms 145.5±11.91ms -2.35%

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f14d6f3 and 8f37a30.

📒 Files selected for processing (3)
  • config/src/genesis_config.rs (1 hunks)
  • miner/src/create_block_template/new_header_service.rs (0 hunks)
  • sync/src/tasks/tests.rs (1 hunks)
💤 Files with no reviewable changes (1)
  • miner/src/create_block_template/new_header_service.rs
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: jackzhhuang
PR: starcoinorg/starcoin#4572
File: vm/types/src/block_metadata/mod.rs:47-48
Timestamp: 2025-07-03T03:21:32.104Z
Learning: In the starcoin repository, the BlockMetadata structure changes are part of a clean slate implementation with no legacy data that needs to be deserialized, so backward compatibility concerns for field type changes are not applicable.
Learnt from: jackzhhuang
PR: starcoinorg/starcoin#4194
File: flexidag/src/blockdag.rs:444-446
Timestamp: 2024-09-30T09:31:42.793Z
Learning: In the service, `get_dag_state` is used to get the current state of the chain and it passes the main header ID to `BlockDAG`.
config/src/genesis_config.rs (2)
Learnt from: jackzhhuang
PR: starcoinorg/starcoin#4540
File: chain/src/chain.rs:1816-1824
Timestamp: 2025-05-28T10:21:10.718Z
Learning: In chain/src/chain.rs, the total_blocks calculation for epoch statistics always results in at least 1 block because total_selectd_chain_blocks = (current_block_number - epoch_start_block_number) + 1, which is always >= 1, making division by zero impossible in the avg_total_difficulty calculation.
Learnt from: jackzhhuang
PR: starcoinorg/starcoin#4572
File: miner/src/create_block_template/new_header_service.rs:0-0
Timestamp: 2025-07-03T03:25:16.732Z
Learning: In Starcoin's miner/src/create_block_template/new_header_service.rs, panic! is intentionally used in impossible code branches (like equal block ID comparison after early equality check) to detect logical errors early and ensure immediate restart rather than allowing potentially corrupted state to continue.
🔇 Additional comments (2)
config/src/genesis_config.rs (1)

730-733: Consensus parameter updates are localized and consistent in genesis_config.rs

All three constants—G_DEFAULT_BASE_BLOCK_TIME_TARGET, G_DEFAULT_BASE_BLOCK_DIFF_WINDOW, and G_MIN_BLOCK_TIME_TARGET—are defined and used exclusively in config/src/genesis_config.rs. Each network’s ConsensusConfig (Test, Dev, Halley, etc.) references the updated values uniformly, and no other files depend on these constants.

• Defined at lines 730–733 in config/src/genesis_config.rs
• Used in every ConsensusConfig block in the same file
• No external references found elsewhere in the codebase

If this consensus change is intentional, please coordinate with all network participants to ensure they upgrade to the new timing parameters.

sync/src/tasks/tests.rs (1)

341-341: Verify the increased block count aligns with consensus parameter changes.

The block production count has been increased from 10 to 50. This change may be related to the consensus parameter modifications where block time targets increased from 100ms to 500ms.

Please confirm that this increase is intentional and necessary for the test to properly exercise sync cancellation under the new consensus parameters.


#[stest::test]
pub async fn test_full_sync_cancel() -> Result<()> {
pub async fn test_full_syn_cancel() -> Result<()> {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix the typo in function name.

The function name has a typo: test_full_syn_cancel should be test_full_sync_cancel.

-pub async fn test_full_syn_cancel() -> Result<()> {
+pub async fn test_full_sync_cancel() -> Result<()> {
🤖 Prompt for AI Agents
In sync/src/tasks/tests.rs at line 338, the function name has a typo: it is
currently named test_full_syn_cancel but should be corrected to
test_full_sync_cancel. Rename the function to fix the typo by adding the missing
'c' in 'sync'.

@jackzhhuang jackzhhuang requested a review from jolestar as a code owner July 14, 2025 14:12
@jackzhhuang jackzhhuang merged commit d5e8bce into dag-master Jul 16, 2025
3 of 5 checks passed
@jackzhhuang jackzhhuang deleted the verified-block branch July 16, 2025 03:54
jackzhhuang added a commit that referenced this pull request Jul 31, 2025
* make creating block and executing block parallized

* force to mint if the dag block comes from peers

* add new header serivice

* save code temporarily

* reverse flexidag/src/blockdag.rs

* monitor the new dag and peer new dag instead of new head message to get the latest pruning point

* sort the tips by the work type and blue score and fetch the previous 10 tip stored in the dag state

* receive the block header before creating new block

* no mining until synced

* add dynamic block time

* the number of an end block of an epoch should subtract 1 before comparing

* use system time as end time

* use time plan as default block time target

* use difficulty window to calcutlate the next difficulty

* fix fmt

* use k ratio to calculate the next block time target

* use ratio to control the block time target

* fix contain checking

* use expected_blue_uncles_count to control the block time target

* add selected count in next_block_time_target

* fix div ratio

* fix div ratio not mul

* add red blocks in block meta struct

* add blue ratio in genesis config

* add latest mv

* fix fmt

* push the red blocks in latest version branch

* min and max block time target in halley is 100 and 2000

* no force to mint when new dag block message coming

* refactor to avoid duplicate codes

* fix fmt

* generate the new genesis

* update epoch mv and halley genesis

* no cache db

* fix fmt

* update red blocks

* update genesis

* change the epoch if the header changes

* print some info

* add some debug info

* add more info

* remove debug info

* no force to mint if new peer blocks come

* resolve the tips from the rabbit bot

* fix test_example_config_compact

* fix test_that_generated_file_are_up_to_date_in_git

* fix config for test case in genesis and config

* generated genesis for proxima and vega

* add upgrade version 13 stlib

* Remove blue ratio in config

* Update stdlib

* Fix genesis

* Fix config example

* update genesis

* force to mint if the dag block comes from peers

* switch main in build block service

* add new header serivice

* save code temporarily

* monitor the new dag and peer new dag instead of new head message to get the latest pruning point

* sort the tips by the work type and blue score and fetch the previous 10 tip stored in the dag state

* receive the block header before creating new block

* renew the header in block builder service asynchronically

* the new process header will be triggered 1s internally

* no mining until synced

* reconstruct verify

* reconstruct the code for verification and chain

* comment the the black list blocks

* remove the black list verification

* fix test_dag_multiple_commits

* Set the block time target from 500ms to 2000ms

* update the json and genesis binary files

* fix json config

---------

Co-authored-by: sanlee42 <[email protected]>
@coderabbitai coderabbitai bot mentioned this pull request Sep 10, 2025
7 tasks
@coderabbitai coderabbitai bot mentioned this pull request Jan 8, 2026
7 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants