---
# System prepended metadata

title: '#1002'
tags: [pullrequestreviewclub]

---

:::info
- **PR:** https://github.com/bitcoindevkit/bdk/pull/1002
- **Host:** @evanlinjin
- **Date:** June 22th, 2023 13:00 UTC
- **Location:** [BDK Discord @ #review-club-meeting](https://discord.com/channels/753336465005608961/1118461443235381288)
:::

### Notes

- PR#1002 makes `LocalChain` a linked-list of `BlockId`s. The examples are updated to use the new API, and the rpc-chain module and example is added.
- Using a linked list allows us to cheaply share the entire state of the chain between threads.

### Questions

1. We replace the `LocalChain::determine_changeset` method with `LocalChain::update`. What are the main differences between these two methods?
2. What are the benefits of using `CheckPoint` as an input of `update()`? What did we use before?
3. What does the [`fix_links()`](https://github.com/bitcoindevkit/bdk/blob/c7eff5a2c45ab9c2bf1b4ea714a1680c8698a4bd/crates/chain/src/local_chain.rs#L370-L386) method do? Where is it used? When does `update()` need to call `fix_links()`?
4. [`// The height of the first block to invalidate (if any) must be represented in the `update`.`](https://github.com/bitcoindevkit/bdk/blob/c7eff5a2c45ab9c2bf1b4ea714a1680c8698a4bd/crates/chain/src/local_chain.rs#L293)
    Why does this rule need to exist?