:::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?