{
  "founder": "glozow",
  "channel": "#bitcoin-core-pr-reviews",
  "network": "libera",
  "id": "b6374e446a6e458c8c4e004018528920",
  "name": "#bitcoin-core-pr-reviews",
  "chair": "glozow",
  "chairs": [
    "glozow"
  ],
  "nicks": {
    "glozow": 57,
    "corebot": 5,
    "sipa": 47,
    "abubakarsadiq": 29,
    "monlovesmango": 37,
    "pseudoramdom": 11,
    "Murch[m]": 4
  },
  "start_time": "2025-04-23T17:00:55.504522+00:00",
  "end_time": "2025-04-23T18:01:55.433190+00:00",
  "active": false,
  "original_topic": "https://bitcoincore.reviews | meetings on the first Wednesday of each month at 17:00 UTC",
  "current_topic": null,
  "messages": [
    {
      "id": "0d0c06e13a5642de969d8bd844342ce0",
      "sender": "glozow",
      "payload": "#startmeeting",
      "action": false,
      "timestamp": "2025-04-23T17:00:55.504118+00:00"
    },
    {
      "id": "d3deb05ce33a4da3a1183514b02c5ec1",
      "sender": "corebot",
      "payload": "glozow: Meeting started at 2025-04-23T17:00+0000",
      "action": false,
      "timestamp": "2025-04-23T17:00:55.511175+00:00"
    },
    {
      "id": "1810ada3d43b4dcdb3d57a2f19a7dec6",
      "sender": "corebot",
      "payload": "glozow: Current chairs: glozow",
      "action": false,
      "timestamp": "2025-04-23T17:00:56.514305+00:00"
    },
    {
      "id": "fcc0aa056c084fd68867547c3f2a0b79",
      "sender": "corebot",
      "payload": "glozow: Useful commands: #action #info #idea #link #topic #motion #vote #close #endmeeting",
      "action": false,
      "timestamp": "2025-04-23T17:00:57.518367+00:00"
    },
    {
      "id": "ddb70a1dd87b4f7697665b01bf6f1762",
      "sender": "corebot",
      "payload": "glozow: See also: https://hcoop-meetbot.readthedocs.io/en/stable/",
      "action": false,
      "timestamp": "2025-04-23T17:00:58.522447+00:00"
    },
    {
      "id": "13bf28d88ef84ede95b2415ce148f1e8",
      "sender": "corebot",
      "payload": "glozow: Participants should now identify themselves with '#here' or with an alias like '#here FirstLast'",
      "action": false,
      "timestamp": "2025-04-23T17:00:59.526469+00:00"
    },
    {
      "id": "736a73cbd73e405ab3b374418cebc44e",
      "sender": "sipa",
      "payload": "hello!",
      "action": false,
      "timestamp": "2025-04-23T17:00:59.968120+00:00"
    },
    {
      "id": "8e6ec70855bb4d768e1611aa7c9f2b50",
      "sender": "glozow",
      "payload": "Welcome to PR review club! Today is txgraph round 2, notes are available here: https://bitcoincore.reviews/31444",
      "action": false,
      "timestamp": "2025-04-23T17:01:30.517289+00:00"
    },
    {
      "id": "40198d2cb100412a977e840d0e05706b",
      "sender": "glozow",
      "payload": "Did anybody have a chance to review the PR or the notes?",
      "action": false,
      "timestamp": "2025-04-23T17:01:59.325355+00:00"
    },
    {
      "id": "20a175acda1140f599440f8fb5724523",
      "sender": "abubakarsadiq",
      "payload": "I am in the process of reviewing the PR",
      "action": false,
      "timestamp": "2025-04-23T17:02:22.620473+00:00"
    },
    {
      "id": "7311726a1dbd4ac2bdefe38b1d179a00",
      "sender": "monlovesmango",
      "payload": "I did review the best that I could",
      "action": false,
      "timestamp": "2025-04-23T17:02:45.042268+00:00"
    },
    {
      "id": "07686ca640d64a398e03a63edbfae7c4",
      "sender": "glozow",
      "payload": "Nice! What is your review approach/",
      "action": false,
      "timestamp": "2025-04-23T17:03:14.563018+00:00"
    },
    {
      "id": "668306bf6b75406e936bd7f9799b38f8",
      "sender": "glozow",
      "payload": "?*",
      "action": false,
      "timestamp": "2025-04-23T17:03:34.773539+00:00"
    },
    {
      "id": "2274df3effe04522a56875e5df7069ab",
      "sender": "monlovesmango",
      "payload": "read PR review club notes, read through pr desc, read/skimmed through the commits, tried to answer pr review club questions",
      "action": false,
      "timestamp": "2025-04-23T17:03:59.099533+00:00"
    },
    {
      "id": "1145f311d5864f6fa789ff5d1cfdd31e",
      "sender": "abubakarsadiq",
      "payload": "I like the approach, I am reviewing it commit by commit and running the fuzz test locally with modifications",
      "action": false,
      "timestamp": "2025-04-23T17:04:02.723200+00:00"
    },
    {
      "id": "66a2ce06fd0a4c30805d7363d37af12d",
      "sender": "pseudoramdom",
      "payload": "Hi! First time here. Did glance over the PR and the notes. Getting caught up on Cluster Mempool",
      "action": false,
      "timestamp": "2025-04-23T17:04:10.958356+00:00"
    },
    {
      "id": "1f3edee1f821483daa4af329d7efe9e7",
      "sender": "glozow",
      "payload": "pseudoramdom: welcome!",
      "action": false,
      "timestamp": "2025-04-23T17:04:24.891055+00:00"
    },
    {
      "id": "f1816828a8c049cb826165393c2d5dc1",
      "sender": "sipa",
      "payload": "pseudoramdom: welcome to the (review) club!",
      "action": false,
      "timestamp": "2025-04-23T17:04:26.333475+00:00"
    },
    {
      "id": "94152fbf120249a396524833709651a4",
      "sender": "glozow",
      "payload": "Let's start with the questions",
      "action": false,
      "timestamp": "2025-04-23T17:04:45.221706+00:00"
    },
    {
      "id": "efd277ed49614c1ca050eae3aa59847a",
      "sender": "monlovesmango",
      "payload": "oh yeah I also am runnign fuzz tests but it is taking forever and this is my first time so not sure what i'm doing",
      "action": false,
      "timestamp": "2025-04-23T17:04:45.343965+00:00"
    },
    {
      "id": "31aa9148c9c74be6b3a19e522e19a3cc",
      "sender": "glozow",
      "payload": "Why are block building and eviction relevant to each other? Wouldn\u2019t it be easier to evict transactions by the order they entered the mempool?",
      "action": false,
      "timestamp": "2025-04-23T17:04:46.750285+00:00"
    },
    {
      "id": "8a81483016174a45a1ea6c84cd0d5989",
      "sender": "glozow",
      "payload": "Feel free to ask any of your own questions, whenever you like",
      "action": false,
      "timestamp": "2025-04-23T17:05:19.421358+00:00"
    },
    {
      "id": "2eb394d243e64f4790c7128c5eb94fe7",
      "sender": "sipa",
      "payload": "monlovesmango: just in case you're not aware - running fuzz tests generally runs indefinitely; it keeps trying to make randomized changes to the input, and seeing if those trigger code coverage change and (even better) assertion failures",
      "action": false,
      "timestamp": "2025-04-23T17:05:46.337926+00:00"
    },
    {
      "id": "a5369cdecc474254aaba789a42c79b9c",
      "sender": "monlovesmango",
      "payload": "they are both looking for the same data (ording of tx clusters by fee rate), just opposite goals. one wants the top fee rates, the other the lowest fee rate.",
      "action": false,
      "timestamp": "2025-04-23T17:06:13.959490+00:00"
    },
    {
      "id": "a0cb842a69a24f8d8027adf53839461c",
      "sender": "abubakarsadiq",
      "payload": "glozow: you would want to evict the worst transaction in the mempool, i.e the one very unlikely to be mined soon.",
      "action": false,
      "timestamp": "2025-04-23T17:06:50.437943+00:00"
    },
    {
      "id": "ebe23315eb554da1bd0020265c4a1750",
      "sender": "abubakarsadiq",
      "payload": "As such when you use the order they enter mempool you will likely evict a transaction that might be mined in the next block.",
      "action": false,
      "timestamp": "2025-04-23T17:06:50.559957+00:00"
    },
    {
      "id": "801a443ac0404ee8b2eca03d2bafdb33",
      "sender": "monlovesmango",
      "payload": "it would be easier to evict by order they entered, but this can also evict your highest paying tx",
      "action": false,
      "timestamp": "2025-04-23T17:06:55.495854+00:00"
    },
    {
      "id": "f832742818c548d1b6ea276e7d40a656",
      "sender": "pseudoramdom",
      "payload": "Does block building and eviction need to be opposites? or not necessary?",
      "action": false,
      "timestamp": "2025-04-23T17:07:10.865675+00:00"
    },
    {
      "id": "a6e48b3963b3419ebd4816c8a0d1cfd5",
      "sender": "sipa",
      "payload": "monlovesmango: just a tiny nit, it's not sorting the *clusters* by feerate, but something else",
      "action": false,
      "timestamp": "2025-04-23T17:07:14.362937+00:00"
    },
    {
      "id": "7c3066d3f42b4956b68eaf9369f4b85b",
      "sender": "monlovesmango",
      "payload": "sipa: haha ok thank you for letting me know! will have to look into how to run that properly",
      "action": false,
      "timestamp": "2025-04-23T17:07:32.533920+00:00"
    },
    {
      "id": "cee822878e594fc3b72c2120eadbce25",
      "sender": "monlovesmango",
      "payload": "sipa: not clusters, chunks right?",
      "action": false,
      "timestamp": "2025-04-23T17:07:44.744300+00:00"
    },
    {
      "id": "2e52e65bd06f47b9b6b1cc639702fd90",
      "sender": "sipa",
      "payload": "monlovesmango: bingo",
      "action": false,
      "timestamp": "2025-04-23T17:07:48.403844+00:00"
    },
    {
      "id": "a3dcd4c033c94b0bb12168a1b6a6f7ba",
      "sender": "glozow",
      "payload": "monlovesmango: abubakarsadiq: yes exactly",
      "action": false,
      "timestamp": "2025-04-23T17:07:51.068058+00:00"
    },
    {
      "id": "b22afe6e09804c83aa4a2ad3d5d5c4a0",
      "sender": "sipa",
      "payload": "pseudoramdom: today, they are very much not each other's opposite; the question is why we'd like them to be opposities",
      "action": false,
      "timestamp": "2025-04-23T17:08:17.015851+00:00"
    },
    {
      "id": "5f2435d9bc594a78bddbd51727eb3474",
      "sender": "glozow",
      "payload": "to be fair, today, eviction is an approximation of the opposite of block building, just not an accurate one",
      "action": false,
      "timestamp": "2025-04-23T17:08:57.048830+00:00"
    },
    {
      "id": "d54fef8426a34a5dad6bafabb3830865",
      "sender": "sipa",
      "payload": "glozow: right, that's phrased more clearly",
      "action": false,
      "timestamp": "2025-04-23T17:09:10.618933+00:00"
    },
    {
      "id": "1e08176ff6cd48819d5e895b124cb21d",
      "sender": "glozow",
      "payload": "True / false: if all clusters are singletons (have 1 transaction each), m_main_chunkindex would just be sorting the transactions by feerate",
      "action": false,
      "timestamp": "2025-04-23T17:09:29.797858+00:00"
    },
    {
      "id": "3a35775688544495930b3b9b6dfb905c",
      "sender": "monlovesmango",
      "payload": "I want to say true",
      "action": false,
      "timestamp": "2025-04-23T17:09:46.069303+00:00"
    },
    {
      "id": "339167ac085e4d31921ba87d1adba19c",
      "sender": "abubakarsadiq",
      "payload": "True :)",
      "action": false,
      "timestamp": "2025-04-23T17:09:53.111723+00:00"
    },
    {
      "id": "c8d3a9250f854614afadce0b3bcbc2a9",
      "sender": "pseudoramdom",
      "payload": "I see. Yeah, it makes sense to have them accurately ordered. Block building can select the \"best\" end of the list. And eviction removes from the \"worst\" end",
      "action": false,
      "timestamp": "2025-04-23T17:10:32.221321+00:00"
    },
    {
      "id": "fcb3f4a50ecf4017816c3bb8e86a1fb9",
      "sender": "glozow",
      "payload": "Great :) can you explain why true?",
      "action": false,
      "timestamp": "2025-04-23T17:10:43.466718+00:00"
    },
    {
      "id": "4010778506484173b73ca1b9cfab15a1",
      "sender": "abubakarsadiq",
      "payload": "If there is tie it it will compare the sequence of the clusters (individual tx)",
      "action": false,
      "timestamp": "2025-04-23T17:10:45.221362+00:00"
    },
    {
      "id": "09f7de00b6244b759d9e9d4647bde1c9",
      "sender": "monlovesmango",
      "payload": "if all clusters are singletons, then each cluster will have one chunk, and the linearization orders by chunk fee rate",
      "action": false,
      "timestamp": "2025-04-23T17:11:29.954881+00:00"
    },
    {
      "id": "2e651475d9e14344802092ed2bcaa301",
      "sender": "sipa",
      "payload": "Bonus question: imagine two singleton clusters, with the same feerate, but they have different vsize. What can you say about their order?",
      "action": false,
      "timestamp": "2025-04-23T17:11:47.605861+00:00"
    },
    {
      "id": "843efa4e1f3e4dc2bb1d9684d89e92dc",
      "sender": "glozow",
      "payload": "for the people following at home, we are looking at https://github.com/bitcoin-core-review-club/bitcoin/blob/27a0c93abb7e70b93214eb857e2046f848139e68/src/txgraph.cpp#L290-L306",
      "action": false,
      "timestamp": "2025-04-23T17:11:56.834891+00:00"
    },
    {
      "id": "fa755dceec5b48dd8d55e48775cf76c8",
      "sender": "abubakarsadiq",
      "payload": "sipa: thats a tie?",
      "action": false,
      "timestamp": "2025-04-23T17:12:19.190352+00:00"
    },
    {
      "id": "4b66e9809c1345409cb563fde5cf4b42",
      "sender": "sipa",
      "payload": "abubakarsadiq: depends on your perspective :p",
      "action": false,
      "timestamp": "2025-04-23T17:12:31.926601+00:00"
    },
    {
      "id": "94fdb2a5ebea4a0588ab453421bce6e9",
      "sender": "glozow",
      "payload": "monlovesmango: yes!",
      "action": false,
      "timestamp": "2025-04-23T17:12:46.290477+00:00"
    },
    {
      "id": "bd2771375e5143d4be4f9fcf285ad8f4",
      "sender": "abubakarsadiq",
      "payload": "We have two comparators yes.",
      "action": false,
      "timestamp": "2025-04-23T17:13:10.715159+00:00"
    },
    {
      "id": "eb2b0bb8381945148639eb40daca6e36",
      "sender": "pseudoramdom",
      "payload": "m_sequence?",
      "action": false,
      "timestamp": "2025-04-23T17:13:42.600408+00:00"
    },
    {
      "id": "0fa7402fc09847cd89fe65d14377a582",
      "sender": "abubakarsadiq",
      "payload": "sipa: I think the one with higher vsize will come first in the order since the sorting uses the > operator not `FeeRateCompare`?",
      "action": false,
      "timestamp": "2025-04-23T17:15:13.095789+00:00"
    },
    {
      "id": "7ad32557be0a484fbcf9b9673a539e7f",
      "sender": "sipa",
      "payload": "abubakarsadiq: no it uses FeeRateCompare, sorry - I thought it didn't, so this was a very trick question",
      "action": false,
      "timestamp": "2025-04-23T17:15:52.209693+00:00"
    },
    {
      "id": "b751fd5abd8e488cbaeaf64d2adf0cb3",
      "sender": "sipa",
      "payload": "they'll be sorted by cluster creation order (m_sequence)",
      "action": false,
      "timestamp": "2025-04-23T17:16:06.901217+00:00"
    },
    {
      "id": "f24be7f12dfe4a88987f82a726017f06",
      "sender": "Murch[m]",
      "payload": "monlovesmango: You can just interrupt fuzz tests any time, or you can set a `max_total_time` or `runs` limit. You can ping me later if you want",
      "action": false,
      "timestamp": "2025-04-23T17:16:19.889539+00:00"
    },
    {
      "id": "b3080e2411fd4357823fcb6ad1b956a4",
      "sender": "glozow",
      "payload": "does `FeeRateCompare` return 0 for same feerate different vsize?",
      "action": false,
      "timestamp": "2025-04-23T17:16:26.628503+00:00"
    },
    {
      "id": "2b97faa40137401bb9939568e50c29ef",
      "sender": "glozow",
      "payload": "I suppose yes",
      "action": false,
      "timestamp": "2025-04-23T17:16:51.471575+00:00"
    },
    {
      "id": "58266cf98b594e069a8d8e43624c1fd7",
      "sender": "sipa",
      "payload": "glozow: yes, FeeFrac::operator<=> (and derived operator<, ... etc) treat equal feerate objects as sorted by increasing size",
      "action": false,
      "timestamp": "2025-04-23T17:17:02.474334+00:00"
    },
    {
      "id": "dbcedf9265364b0b942c79b2606da891",
      "sender": "glozow",
      "payload": "So it tie-breaks by sequence",
      "action": false,
      "timestamp": "2025-04-23T17:17:07.481974+00:00"
    },
    {
      "id": "be2a454de0014b5ba012eb0df054532a",
      "sender": "abubakarsadiq",
      "payload": "ah, I've mentioned that as well above. and changed my mind :)",
      "action": false,
      "timestamp": "2025-04-23T17:17:11.104445+00:00"
    },
    {
      "id": "391c44de664d44b9bfa0100d735a4b35",
      "sender": "sipa",
      "payload": "but FeeRateCompare specifically just compares the feerate itself",
      "action": false,
      "timestamp": "2025-04-23T17:17:12.680870+00:00"
    },
    {
      "id": "d6c4d93237824fa582d17cbf8d529da6",
      "sender": "monlovesmango",
      "payload": "Murch: ok sounds good thank you!",
      "action": false,
      "timestamp": "2025-04-23T17:17:20.251300+00:00"
    },
    {
      "id": "05bc7e242101403ea77f6b840554ec56",
      "sender": "glozow",
      "payload": "here: https://github.com/bitcoin-core-review-club/bitcoin/blob/27a0c93abb7e70b93214eb857e2046f848139e68/src/util/feefrac.h#L113",
      "action": false,
      "timestamp": "2025-04-23T17:18:35.796653+00:00"
    },
    {
      "id": "545bfa36ce3340cebcfaf93f80fc5dfa",
      "sender": "glozow",
      "payload": "Next question",
      "action": false,
      "timestamp": "2025-04-23T17:18:46.866364+00:00"
    },
    {
      "id": "ebb758f6f65348cdb0030a21dbde85c7",
      "sender": "Murch[m]",
      "payload": "(or rather, we can discuss here in this channel after the meeting, I think others might also chime in or want to read it)",
      "action": false,
      "timestamp": "2025-04-23T17:18:47.467337+00:00"
    },
    {
      "id": "80cd63abb59d402ba116adea26969743",
      "sender": "glozow",
      "payload": "In English, using the approach in this PR, what is the algorithm for selecting transactions in order for block building? And for eviction?",
      "action": false,
      "timestamp": "2025-04-23T17:18:47.711138+00:00"
    },
    {
      "id": "1a8241fb57f342ac89dab72ba1b5666f",
      "sender": "abubakarsadiq",
      "payload": "@monlovesmango: I run the fuzz test to verify my understand that if I make modification to a commit I expect an assertion I added to be triggered which always do.",
      "action": false,
      "timestamp": "2025-04-23T17:19:04.695667+00:00"
    },
    {
      "id": "609aac7286b948469a7d706f306447ac",
      "sender": "glozow",
      "payload": "You can discuss here, it's about the PR",
      "action": false,
      "timestamp": "2025-04-23T17:19:13.430376+00:00"
    },
    {
      "id": "a46e243d0bb046058e1ad39b45191335",
      "sender": "monlovesmango",
      "payload": "glozow: I can't process too much at a time and would rather focus on questions :)",
      "action": false,
      "timestamp": "2025-04-23T17:19:54.569139+00:00"
    },
    {
      "id": "281cf92aed3b4cea818085e69988a5b7",
      "sender": "monlovesmango",
      "payload": "abubakarsa: that is a good idea!",
      "action": false,
      "timestamp": "2025-04-23T17:20:10.949176+00:00"
    },
    {
      "id": "9fdd8314eaee412592acee97a4a958bd",
      "sender": "Murch[m]",
      "payload": "glozow: Repeatedly pick from all clusters the chunk with the highest available chunk feerate until the block is full",
      "action": false,
      "timestamp": "2025-04-23T17:21:15.429445+00:00"
    },
    {
      "id": "a8e4b6d443cf47118e3c607a20db659c",
      "sender": "sipa",
      "payload": "glozow: is your question more about what BlockBuildImpl does internally, or how you imagine high-level code would use BlockBuilder based on its interface?",
      "action": false,
      "timestamp": "2025-04-23T17:21:44.824190+00:00"
    },
    {
      "id": "9c44edd8d7b54b9ebfa59b1b8b5f727a",
      "sender": "sipa",
      "payload": "(because the actual block building code isn't inside this PR)",
      "action": false,
      "timestamp": "2025-04-23T17:22:02.601279+00:00"
    },
    {
      "id": "cf7f8c8cd0ae425babf7e3c7872cbc4d",
      "sender": "glozow",
      "payload": "let's start with: how would higher level code use BlockBuilder?",
      "action": false,
      "timestamp": "2025-04-23T17:22:08.172654+00:00"
    },
    {
      "id": "58a76e582ada4754acc1466c2a46141d",
      "sender": "abubakarsadiq",
      "payload": "In English?",
      "action": false,
      "timestamp": "2025-04-23T17:22:09.199577+00:00"
    },
    {
      "id": "6bf55ffcc33f476aa078040ad650149a",
      "sender": "glozow",
      "payload": "(Oh oops, that's the next question)",
      "action": false,
      "timestamp": "2025-04-23T17:22:31.233487+00:00"
    },
    {
      "id": "c7cab567cd864fdea20e8f21acd8c314",
      "sender": "pseudoramdom",
      "payload": "@glozow picking chunks in the order of highest to lowest feerate",
      "action": false,
      "timestamp": "2025-04-23T17:22:39.778200+00:00"
    },
    {
      "id": "ba71259fe1424cfb9556f7e1d19c4216",
      "sender": "Murch[m]",
      "payload": "abubakarsadiq: Hausa would be confusing to most of us :~",
      "action": false,
      "timestamp": "2025-04-23T17:22:43.263836+00:00"
    },
    {
      "id": "dcc8e9d2b0e6427ca7b16ff0635ac402",
      "sender": "sipa",
      "payload": "Murch[m]: :D",
      "action": false,
      "timestamp": "2025-04-23T17:22:54.065922+00:00"
    },
    {
      "id": "e17b0dc098c742929ca2ee21fd57a965",
      "sender": "abubakarsadiq",
      "payload": ":P",
      "action": false,
      "timestamp": "2025-04-23T17:22:54.737731+00:00"
    },
    {
      "id": "5eee7e51951c4990b6ec4bcf7b60b6b8",
      "sender": "glozow",
      "payload": "so let's start with: How would a client of BlockBuilder use it to build a block? When would GetCurrentChunk, Include, and Skip be called?",
      "action": false,
      "timestamp": "2025-04-23T17:24:01.012783+00:00"
    },
    {
      "id": "5c1583eacb73440f9df73dc4dffa9150",
      "sender": "monlovesmango",
      "payload": "the algorithm for selecting transactions is to group related tx into clusters, and then linearize each cluster into chunks by their fee rate (this part i'm still fuzzy on), and then order all chunks by fee rate, and then pick chunks by decreasing fee rate (skipping chunks from clusters that have had a chunk skipped)",
      "action": false,
      "timestamp": "2025-04-23T17:24:03.951344+00:00"
    },
    {
      "id": "47c2507f793d48fea1be0af3586eaa9b",
      "sender": "glozow",
      "payload": "monlovesmango: yes!",
      "action": false,
      "timestamp": "2025-04-23T17:24:28.940723+00:00"
    },
    {
      "id": "afa93411d13a446ab781b777e7341a38",
      "sender": "monlovesmango",
      "payload": "eviction is the same but starting from lowest fee rate",
      "action": false,
      "timestamp": "2025-04-23T17:24:31.105287+00:00"
    },
    {
      "id": "3112181a76c2495a8968b06a8226f19c",
      "sender": "abubakarsadiq",
      "payload": "It's a linear algorithm that just get the current chunk recommended by block builder and include it when it satisfy a condition  or skip it when it didn't",
      "action": false,
      "timestamp": "2025-04-23T17:25:06.367675+00:00"
    },
    {
      "id": "a72c772479d141e0968a1a85232c00f2",
      "sender": "abubakarsadiq",
      "payload": "Not sure why a chunk will be skipped is it because of blockmintxfee?",
      "action": false,
      "timestamp": "2025-04-23T17:25:45.073429+00:00"
    },
    {
      "id": "4dd7c4539dfd4d898f88d61bc752316b",
      "sender": "pseudoramdom",
      "payload": "GetCurrentChunk would give the \"best\" chunk available?",
      "action": false,
      "timestamp": "2025-04-23T17:25:56.751074+00:00"
    },
    {
      "id": "a297d6fb78724c59b43af9a78e0dba4e",
      "sender": "monlovesmango",
      "payload": "i think if the cluster can't fit in a block?",
      "action": false,
      "timestamp": "2025-04-23T17:25:58.334461+00:00"
    },
    {
      "id": "fcc39412bda6432799d3104167a50c02",
      "sender": "glozow",
      "payload": "abubakarsadiq; can you think of a nother reason?",
      "action": false,
      "timestamp": "2025-04-23T17:26:03.217815+00:00"
    },
    {
      "id": "7c3a7793577642cbab18d8757b5731f1",
      "sender": "glozow",
      "payload": "monlovesmango; yes! but s/cluster/chunk",
      "action": false,
      "timestamp": "2025-04-23T17:26:20.180958+00:00"
    },
    {
      "id": "8c32b5b3d0ed47c8a282dc9a743355d3",
      "sender": "glozow",
      "payload": "What is the expected lifetime of BlockBuilder (is it similar to CTxMemPool\u2019s or very different)?",
      "action": false,
      "timestamp": "2025-04-23T17:26:42.973616+00:00"
    },
    {
      "id": "7a35b77f5b4c49cd9072bef64c009b53",
      "sender": "abubakarsadiq",
      "payload": "thanks @monlovesmango",
      "action": false,
      "timestamp": "2025-04-23T17:26:51.518506+00:00"
    },
    {
      "id": "f6925f0bbd5c48a38a483c1625d086a4",
      "sender": "monlovesmango",
      "payload": "oh, but then why does it remember what to skip by cluster?",
      "action": false,
      "timestamp": "2025-04-23T17:27:03.750679+00:00"
    },
    {
      "id": "cb29440f52ca4ae883a8574151766a2e",
      "sender": "glozow",
      "payload": "monlovesmango: what happens if it doesn't?",
      "action": false,
      "timestamp": "2025-04-23T17:27:17.511076+00:00"
    },
    {
      "id": "26cfb0c756774293978fb903d839d720",
      "sender": "sipa",
      "payload": "monlovesmango: once any chunk in a cluster has been skipped, nothing else from the cluster can't be included anymore, because the later transactions in the cluster may depend on transactions from the skipped chunk",
      "action": false,
      "timestamp": "2025-04-23T17:27:43.153231+00:00"
    },
    {
      "id": "a5f34031d1a44151a43fc39616c3dc50",
      "sender": "sipa",
      "payload": "oh, sorry, spoiler",
      "action": false,
      "timestamp": "2025-04-23T17:27:47.417512+00:00"
    },
    {
      "id": "5f8c47f79cf143bca354222612dcbaa3",
      "sender": "abubakarsadiq",
      "payload": "It is different, you should discard it immediately you are done building a block template.",
      "action": false,
      "timestamp": "2025-04-23T17:28:04.874248+00:00"
    },
    {
      "id": "d8a25aec40a84839bf571d92ea102c22",
      "sender": "abubakarsadiq",
      "payload": "TxGraph mutation methods can't be triggered  when we have a block builder instance;",
      "action": false,
      "timestamp": "2025-04-23T17:28:04.996222+00:00"
    },
    {
      "id": "ff3eb89011b2408dbccc3a65266cdc84",
      "sender": "monlovesmango",
      "payload": "it will evaluate a chunk fromt he same cluster, which likely has missing dependencies! hah yeah what you said",
      "action": false,
      "timestamp": "2025-04-23T17:28:14.217130+00:00"
    },
    {
      "id": "8fc297d49d6c45ed8ef0b2e54535f5ef",
      "sender": "glozow",
      "payload": "is it necessarily true that nothing else from the cluster can be included/",
      "action": false,
      "timestamp": "2025-04-23T17:28:38.388579+00:00"
    },
    {
      "id": "2b0f97e9075f47bd8c1cbd08ccdb1878",
      "sender": "glozow",
      "payload": "?* ugh my shift key",
      "action": false,
      "timestamp": "2025-04-23T17:28:42.598648+00:00"
    },
    {
      "id": "fcbe16181f104da0aea0eb185ef204e5",
      "sender": "sipa",
      "payload": "glozow: you used it correctly for \"English\"",
      "action": false,
      "timestamp": "2025-04-23T17:28:56.259085+00:00"
    },
    {
      "id": "cce02f5f67524e59956a27e017ec65a9",
      "sender": "monlovesmango",
      "payload": "glozow: cool that makes a lot of sense thanks!",
      "action": false,
      "timestamp": "2025-04-23T17:28:58.461784+00:00"
    },
    {
      "id": "02aecb413acc4ee39652f9b6727be989",
      "sender": "abubakarsadiq",
      "payload": "@sipa also if you skip a chunk in a cluster then that cluster linearization is incorrect yeah?",
      "action": false,
      "timestamp": "2025-04-23T17:30:12.573802+00:00"
    },
    {
      "id": "d39eca9d237c435999f2ac7da8ed237c",
      "sender": "sipa",
      "payload": "abubakarsadiq: maybe",
      "action": false,
      "timestamp": "2025-04-23T17:30:29.396905+00:00"
    },
    {
      "id": "4da8b8ffe6ed472581e78424a86f74f7",
      "sender": "monlovesmango",
      "payload": "expected lifetime of BlockBuilder is short, as you can't make updates to txgraph if there is an observer right?",
      "action": false,
      "timestamp": "2025-04-23T17:30:30.741612+00:00"
    },
    {
      "id": "04e559455c50465da3156188af49aac2",
      "sender": "glozow",
      "payload": "If you skip something, you could still include its sibling, no?",
      "action": false,
      "timestamp": "2025-04-23T17:30:56.047609+00:00"
    },
    {
      "id": "0b5cf42dcd724cc3ad715c7ff030d20e",
      "sender": "monlovesmango",
      "payload": "should always be contained within CTxMemPool's lifetime",
      "action": false,
      "timestamp": "2025-04-23T17:31:01.774304+00:00"
    },
    {
      "id": "19aaa1ba79c54a5cb95cfa93aca394f3",
      "sender": "sipa",
      "payload": "abubakarsadiq: depends what you mean with correct; it won't be a linearization for the full cluster anymore as some transactions will clearly be missing, but it may still be a valid linearization for what remains of the cluster after removing the skipped chunk",
      "action": false,
      "timestamp": "2025-04-23T17:31:11.614043+00:00"
    },
    {
      "id": "dae4bdfaca154981ab16bd567d42a5c9",
      "sender": "sipa",
      "payload": "but BlockBuilderImpl (currently) doesn't try to reason about that because it's hard, and breaks the abstraction offered by linearizations/chunks",
      "action": false,
      "timestamp": "2025-04-23T17:31:51.087315+00:00"
    },
    {
      "id": "c434c776520049928b16631a0b8060c4",
      "sender": "glozow",
      "payload": "monlovesmango: yes!",
      "action": false,
      "timestamp": "2025-04-23T17:32:05.360172+00:00"
    },
    {
      "id": "f1423caa90c949379f587d247188b708",
      "sender": "sipa",
      "payload": "so as soon as you skip anything of a cluster, it conservatively assumes nothing more from that cluster can be included",
      "action": false,
      "timestamp": "2025-04-23T17:32:06.759234+00:00"
    },
    {
      "id": "e704be4d2cb2416dbe9d44d2c2bae5d4",
      "sender": "abubakarsadiq",
      "payload": "then if it is valid and topological even with the skipped chunk, arent miners losing on fees by skipping everything in the cluster?",
      "action": false,
      "timestamp": "2025-04-23T17:32:23.238139+00:00"
    },
    {
      "id": "b8be6b79acee48e1a7dcd3f942a4a3df",
      "sender": "glozow",
      "payload": "Why should `TxGraph` disallow changes while an observer exists?",
      "action": false,
      "timestamp": "2025-04-23T17:32:36.643246+00:00"
    },
    {
      "id": "97d48b41b10e4efe962d2cf7356cce08",
      "sender": "sipa",
      "payload": "abubakarsadiq: yes, it is neccessarily an approximation, like block building always is",
      "action": false,
      "timestamp": "2025-04-23T17:32:42.368365+00:00"
    },
    {
      "id": "9b3b02d01c244c03884a2bb1a6cdd2b9",
      "sender": "sipa",
      "payload": "abubakarsadiq: even the fact that we're only considering transactions in just a single order (the linearization) may result in small amounts of lost fees",
      "action": false,
      "timestamp": "2025-04-23T17:33:07.497145+00:00"
    },
    {
      "id": "9fcf12cb3b2846e19edeb2ae74e77cd9",
      "sender": "sipa",
      "payload": "or the fact that it's an eager algorithm to begin with",
      "action": false,
      "timestamp": "2025-04-23T17:33:21.616348+00:00"
    },
    {
      "id": "37ba28044f8f47af8b42633621ecbf13",
      "sender": "glozow",
      "payload": "Can you create a BlockBuilder when staging exists? Can you build a block using the TxGraph\u2019s state with its staged changes?",
      "action": false,
      "timestamp": "2025-04-23T17:34:25.270772+00:00"
    },
    {
      "id": "b3dedaa3091443e89216f5a1e6210536",
      "sender": "monlovesmango",
      "payload": "bc everytime TxGraph is updated it will need re-linearization, which you don't want to do while something is actively observing the ordering",
      "action": false,
      "timestamp": "2025-04-23T17:35:04.223276+00:00"
    },
    {
      "id": "dc8780d7de634339812b7e55d87b0c35",
      "sender": "glozow",
      "payload": "monlovesmango: exactly, it'll invalidate the chunk ordering that the observer is using",
      "action": false,
      "timestamp": "2025-04-23T17:35:26.397693+00:00"
    },
    {
      "id": "87a94c86e5cb44469fda0f02ed59a8eb",
      "sender": "pseudoramdom",
      "payload": "Why should `TxGraph` disallow changes while an observer exists? - the ordering mught change, possibility of missing a tx if the underlying graph changed?",
      "action": false,
      "timestamp": "2025-04-23T17:35:32.948311+00:00"
    },
    {
      "id": "cccbabd302a546008eabccbdbaaba836",
      "sender": "abubakarsadiq",
      "payload": "I think this case will likely happen towards the tail end of the block building process when we are close to the 4M `WU` limit.",
      "action": false,
      "timestamp": "2025-04-23T17:35:41.457278+00:00"
    },
    {
      "id": "4a030a18e55042cd8875915fe913bde4",
      "sender": "abubakarsadiq",
      "payload": "And also I think majority of tx are single clusters so it is fine?",
      "action": false,
      "timestamp": "2025-04-23T17:35:41.579094+00:00"
    },
    {
      "id": "d8157140377947e3b2de21aa47e8241e",
      "sender": "monlovesmango",
      "payload": "yes I think you can't create a BlockBuilder when staging exists, but you can't build a block using staging",
      "action": false,
      "timestamp": "2025-04-23T17:36:28.763044+00:00"
    },
    {
      "id": "9826212b65514d97a80ecc31be8b39c2",
      "sender": "sipa",
      "payload": "monlovesmango: correct",
      "action": false,
      "timestamp": "2025-04-23T17:36:39.081863+00:00"
    },
    {
      "id": "b4caeb2255654004b83cda85a38004b8",
      "sender": "monlovesmango",
      "payload": "you can* create a BlockBuiler",
      "action": false,
      "timestamp": "2025-04-23T17:36:40.784061+00:00"
    },
    {
      "id": "015de4812b5b49ffbbbf144e03f40c44",
      "sender": "sipa",
      "payload": "oh, *can*, indeed",
      "action": false,
      "timestamp": "2025-04-23T17:36:46.510669+00:00"
    },
    {
      "id": "16902ff2c18c43f5a5715808f61ecdab",
      "sender": "monlovesmango",
      "payload": "haha",
      "action": false,
      "timestamp": "2025-04-23T17:36:53.344452+00:00"
    },
    {
      "id": "97159e3c12a04f2caba82ee467f7d891",
      "sender": "abubakarsadiq",
      "payload": "@glozow: I think you can create a block builder while we have staging; but the recommended chunks will always be from main",
      "action": false,
      "timestamp": "2025-04-23T17:37:15.200295+00:00"
    },
    {
      "id": "9104ebc808274e5e8331832303eed99b",
      "sender": "glozow",
      "payload": "yep yep",
      "action": false,
      "timestamp": "2025-04-23T17:37:35.430041+00:00"
    },
    {
      "id": "e0e9b009ddce4a298dffc3a71aeaf08a",
      "sender": "sipa",
      "payload": "specifically, if you were making changes to main while a block builder exists, what would go wrong (ignoring the fact that it's not allowed, and might trigger Assume failes)",
      "action": false,
      "timestamp": "2025-04-23T17:37:51.198188+00:00"
    },
    {
      "id": "53c93107b57942e1a4adbb33cfcca0b7",
      "sender": "sipa",
      "payload": "glozow: tell me to shut up if my extra questions make us move too slowly",
      "action": false,
      "timestamp": "2025-04-23T17:38:35.071068+00:00"
    },
    {
      "id": "1845e99f137144308fb247bfbe38ef54",
      "sender": "monlovesmango",
      "payload": "sipa: I would imagine things like double including a tx, or missing txs all together",
      "action": false,
      "timestamp": "2025-04-23T17:38:36.295665+00:00"
    },
    {
      "id": "8ab2f4c86a534ff3b470a5bd19a46823",
      "sender": "glozow",
      "payload": "sipa: all good",
      "action": false,
      "timestamp": "2025-04-23T17:38:58.883608+00:00"
    },
    {
      "id": "f8b85de78c084265b3aa7e5c542ad679",
      "sender": "abubakarsadiq",
      "payload": "@sipa; I think you will mess up with chunk order and invalidate the chunk index iterators?",
      "action": false,
      "timestamp": "2025-04-23T17:39:08.909927+00:00"
    },
    {
      "id": "4f548ad672f24f6cbffeea061981f2c4",
      "sender": "sipa",
      "payload": "abubakarsadiq: yep, that's it",
      "action": false,
      "timestamp": "2025-04-23T17:39:15.781653+00:00"
    },
    {
      "id": "39c76b7476014d56aa8dc0db2143e3d9",
      "sender": "sipa",
      "payload": "the m_current_chunk iterator in BlockBuilderImpl may end up referring to a chunk index entry that no longer exists",
      "action": false,
      "timestamp": "2025-04-23T17:39:42.382366+00:00"
    },
    {
      "id": "5eff0c2eba12415d9de4f3733569a5a5",
      "sender": "sipa",
      "payload": "which would be undefined behavior in C++",
      "action": false,
      "timestamp": "2025-04-23T17:39:50.906996+00:00"
    },
    {
      "id": "0e813d2392ba46dfa49007cfcb565ed6",
      "sender": "abubakarsadiq",
      "payload": "yeah",
      "action": false,
      "timestamp": "2025-04-23T17:39:59.538532+00:00"
    },
    {
      "id": "ff7dc4f2737f4853897e865becc0e12f",
      "sender": "monlovesmango",
      "payload": "ok interesting. is there no way that it would point to an inaccurate index, but one that does exist?",
      "action": false,
      "timestamp": "2025-04-23T17:40:30.221984+00:00"
    },
    {
      "id": "4f23cfc7c52544dab7b5b6ae6ead61a1",
      "sender": "sipa",
      "payload": "monlovesmango: that is definitely possible, the point of undefined behavior is that it makes the behavior of the entire program undefined",
      "action": false,
      "timestamp": "2025-04-23T17:41:14.040105+00:00"
    },
    {
      "id": "a6f8d5ea60a549b28f972ac6ea7ba90c",
      "sender": "sipa",
      "payload": "so it might do that",
      "action": false,
      "timestamp": "2025-04-23T17:41:17.043631+00:00"
    },
    {
      "id": "d10ceded087a40fcadd8586bdf4ceb0d",
      "sender": "glozow",
      "payload": "Does `BlockBuilder` modify `TxGraph`?",
      "action": false,
      "timestamp": "2025-04-23T17:41:26.011484+00:00"
    },
    {
      "id": "86be0511f347456cb6f35d88a9617c41",
      "sender": "sipa",
      "payload": "it might also result in sending all your BTC away",
      "action": false,
      "timestamp": "2025-04-23T17:41:31.496979+00:00"
    },
    {
      "id": "9093803e07e54b939a8b85b59457086a",
      "sender": "abubakarsadiq",
      "payload": "yep in constructor and destructor, while incrementing and decrementing block builder observer",
      "action": false,
      "timestamp": "2025-04-23T17:42:32.759787+00:00"
    },
    {
      "id": "8df1d5e125684c0f978ab6905369c224",
      "sender": "monlovesmango",
      "payload": "yes, it modifies observer count",
      "action": false,
      "timestamp": "2025-04-23T17:42:38.446802+00:00"
    },
    {
      "id": "a8a6f40e3fa0462bb0c32f0c023e9adf",
      "sender": "sipa",
      "payload": "might it make any other changes in the constructor?",
      "action": false,
      "timestamp": "2025-04-23T17:43:13.401018+00:00"
    },
    {
      "id": "5165e0bf40be49d0b0c83b0e071a132a",
      "sender": "abubakarsadiq",
      "payload": "peeping at the constructor.......",
      "action": false,
      "timestamp": "2025-04-23T17:43:52.900491+00:00"
    },
    {
      "id": "162845a3122f4eb4a5c62cead9aba82c",
      "sender": "monlovesmango",
      "payload": "MakeAllAcceptable",
      "action": false,
      "timestamp": "2025-04-23T17:44:01.156510+00:00"
    },
    {
      "id": "061f2ee97664496198885b6bb5b59f11",
      "sender": "sipa",
      "payload": "\u2705",
      "action": false,
      "timestamp": "2025-04-23T17:44:16.167488+00:00"
    },
    {
      "id": "113b756c207e420b9529cc47a51bf710",
      "sender": "glozow",
      "payload": "tada https://github.com/bitcoin-core-review-club/bitcoin/blob/27a0c93abb7e70b93214eb857e2046f848139e68/src/txgraph.cpp#L2394",
      "action": false,
      "timestamp": "2025-04-23T17:44:32.057076+00:00"
    },
    {
      "id": "f649e4ea513a400f834adc57b932fc2a",
      "sender": "monlovesmango",
      "payload": "which looks like it does ApplyDependencies, which will mutate txgraph",
      "action": false,
      "timestamp": "2025-04-23T17:45:05.582063+00:00"
    },
    {
      "id": "f67dd4b54e124381ac4a23295a3fefcb",
      "sender": "sipa",
      "payload": "indeed",
      "action": false,
      "timestamp": "2025-04-23T17:45:20.245668+00:00"
    },
    {
      "id": "287b3c51bfcd41c3aa41706145e87ea0",
      "sender": "abubakarsadiq",
      "payload": "I second :)",
      "action": false,
      "timestamp": "2025-04-23T17:45:30.307902+00:00"
    },
    {
      "id": "0d8e05abd2df4d0cb5cb0758d75c1943",
      "sender": "sipa",
      "payload": "but it doesn't make any *observable* changes to the graph, as in, ApplyDependencies would have been called anyway, but possibly later",
      "action": false,
      "timestamp": "2025-04-23T17:45:45.842985+00:00"
    },
    {
      "id": "04bb7e3e44cf46f78a20bafc25918e09",
      "sender": "glozow",
      "payload": "In some ways, \"no,\" because the observable contents of the graph don't change - BlockBuilder doesn't remove transactions for exampl",
      "action": false,
      "timestamp": "2025-04-23T17:45:50.766221+00:00"
    },
    {
      "id": "be3395266d9e4309b8726b25bdefb72f",
      "sender": "abubakarsadiq",
      "payload": "It might not though when their is nothing to apply",
      "action": false,
      "timestamp": "2025-04-23T17:45:55.532396+00:00"
    },
    {
      "id": "f816271d22bd43bebec5b0d0d77d6923",
      "sender": "glozow",
      "payload": "We already answered Q9 before, so moving on to Q10",
      "action": false,
      "timestamp": "2025-04-23T17:47:13.511201+00:00"
    },
    {
      "id": "17ecd0718ed44bbc96e4d75bcb419972",
      "sender": "glozow",
      "payload": "looking at this commit https://github.com/bitcoin-core-review-club/bitcoin/commit/3429e9d79df1336cf1d0a61cb5f9bf028aa860b2",
      "action": false,
      "timestamp": "2025-04-23T17:47:22.588119+00:00"
    },
    {
      "id": "53855255814c4f3da152820814a6d88a",
      "sender": "glozow",
      "payload": "This commit adds new fields in data structures that need to point to each other: Entry now contains an iterator to the transaction\u2019s ChunkData in m_main_chunkindex, and ChunkData refrence Entrys by their position in m_entries. In your review, how did you check that these pointers are always kept up-to-date?",
      "action": false,
      "timestamp": "2025-04-23T17:47:34.977625+00:00"
    },
    {
      "id": "48da454beed247c8abf4c481fb15e9b7",
      "sender": "monlovesmango",
      "payload": "wasn't able to finish trying to answer this question, but I would imagine that you want to check all the places where txgraph mutates (ApplyDependencies and Relinearize)",
      "action": false,
      "timestamp": "2025-04-23T17:49:06.901677+00:00"
    },
    {
      "id": "028e0f914bae448a901a8807ad514fcd",
      "sender": "glozow",
      "payload": "Yeah, this is more of a \"how do you review stuff?\" question. I counted up the pointers and checked that there were assertions for them in `SanityCheck()`",
      "action": false,
      "timestamp": "2025-04-23T17:51:01.835101+00:00"
    },
    {
      "id": "755fc404dc9d41348b30b1eb9f084521",
      "sender": "glozow",
      "payload": "Conceptually, what are all the ways that an entry\u2019s chunk index can change?",
      "action": false,
      "timestamp": "2025-04-23T17:51:18.689643+00:00"
    },
    {
      "id": "72611f6895d049a68817544a677a7f21",
      "sender": "pseudoramdom",
      "payload": "when child tx is added/removed?",
      "action": false,
      "timestamp": "2025-04-23T17:52:09.153010+00:00"
    },
    {
      "id": "6986e156536d44e992a18e7a23bc9ff5",
      "sender": "monlovesmango",
      "payload": "glozow: can you explain more about SanityCheck()?",
      "action": false,
      "timestamp": "2025-04-23T17:52:11.093504+00:00"
    },
    {
      "id": "f18b5e396b344d8fb4e73afe50330ce5",
      "sender": "monlovesmango",
      "payload": "when a tx is added or removed from that entry's cluster?",
      "action": false,
      "timestamp": "2025-04-23T17:52:46.528951+00:00"
    },
    {
      "id": "b2fc82d9e8124096973dedebedf2d643",
      "sender": "monlovesmango",
      "payload": "i guess also if any tx is added/removed from mempool",
      "action": false,
      "timestamp": "2025-04-23T17:53:20.744904+00:00"
    },
    {
      "id": "9cb5f05382e740dcbf3962f072632423",
      "sender": "pseudoramdom",
      "payload": "oops, there could be more scenarios - maybe when feerate changes by RBF",
      "action": false,
      "timestamp": "2025-04-23T17:53:35.743589+00:00"
    },
    {
      "id": "2b1ff31432a04dedb679930ea41015d9",
      "sender": "glozow",
      "payload": "monlovesmango: sure. generally I think that if pointer consistency is checked in `SanityCheck` and the fuzzer is good at finding possible (mis)uses of `TxGraph`, I can feel reasonably confident that `TxGraph` is updating those pointers correctly",
      "action": false,
      "timestamp": "2025-04-23T17:54:12.012618+00:00"
    },
    {
      "id": "65dc8dae0c594102be69a1b67b8a1e31",
      "sender": "sipa",
      "payload": "pseudoramdom: that's the same thing... chunk feerates are a function of the linearization of a cluster, so anything that changes the linearization can affect it... and that includes RBF, but that is effectively through the cluster changes by adding/removing transactions from it",
      "action": false,
      "timestamp": "2025-04-23T17:54:37.056038+00:00"
    },
    {
      "id": "e961622fb6b44c0f9acadee8265db7da",
      "sender": "sipa",
      "payload": "glozow: and as abubakarsadiq already mentioned, to get confidence that the fuzzer is indeed capable of finding such problems, it's often good to just try introducing a bug you expect SanityCheck (or other assertion) to find, and see if it actually does",
      "action": false,
      "timestamp": "2025-04-23T17:55:21.994272+00:00"
    },
    {
      "id": "31673b5e65e743e1b4f04427f2b51b8f",
      "sender": "pseudoramdom",
      "payload": "gotcha yeah, thanks for claryfying. (For a sec I was wondering my messages were not going thr')",
      "action": false,
      "timestamp": "2025-04-23T17:55:47.099004+00:00"
    },
    {
      "id": "368e9266b72b4769993315c13b326ba9",
      "sender": "glozow",
      "payload": "monlovesmango: pseudoramdom: yeah, any of the mutators can change the chunk index",
      "action": false,
      "timestamp": "2025-04-23T17:55:47.888850+00:00"
    },
    {
      "id": "4fe14320483f4c7e9dcbbf8888828b2a",
      "sender": "sipa",
      "payload": "also CommitStaging",
      "action": false,
      "timestamp": "2025-04-23T17:56:04.015602+00:00"
    },
    {
      "id": "bd3ba40f709a48ae81c590fb329fd57a",
      "sender": "pseudoramdom",
      "payload": "can clusters merge?",
      "action": false,
      "timestamp": "2025-04-23T17:56:14.440973+00:00"
    },
    {
      "id": "bcc3c3ef09b9471781878326af63a3e0",
      "sender": "monlovesmango",
      "payload": "glozow: interesting thank you!",
      "action": false,
      "timestamp": "2025-04-23T17:56:23.641535+00:00"
    },
    {
      "id": "dcee1a290bdf4ccd9d5e6d294877da66",
      "sender": "glozow",
      "payload": "pseudoramdom: yep!",
      "action": false,
      "timestamp": "2025-04-23T17:56:28.059437+00:00"
    },
    {
      "id": "1554c8447e1d4818bfc758326206c35f",
      "sender": "sipa",
      "payload": "pseudoramdom: yes, by adding a dependency between transactions that are in distinct clusters",
      "action": false,
      "timestamp": "2025-04-23T17:56:28.336354+00:00"
    },
    {
      "id": "f1ac1470b37344dcab57ae0c0059d47d",
      "sender": "sipa",
      "payload": "also, invoking the ~Ref destructor can change clusters",
      "action": false,
      "timestamp": "2025-04-23T17:56:42.561818+00:00"
    },
    {
      "id": "3ac41cd0cfa44a6d917a3b65d459f5ce",
      "sender": "sipa",
      "payload": "because it causes the corresponding transaction to be removed",
      "action": false,
      "timestamp": "2025-04-23T17:56:54.084229+00:00"
    },
    {
      "id": "548ddab3af264704921bbf3b35e0e881",
      "sender": "glozow",
      "payload": "In the ChunkOrder comparator, when cmp_feerate != 0, why can it be returned directly without comparing position within the cluster?",
      "action": false,
      "timestamp": "2025-04-23T17:57:02.820445+00:00"
    },
    {
      "id": "b97aa97640764e2889fdb7dadb3f71ce",
      "sender": "monlovesmango",
      "payload": "bc fee rate is the first priority when determining order?",
      "action": false,
      "timestamp": "2025-04-23T17:58:35.209044+00:00"
    },
    {
      "id": "3293d584e1a047b18fc2d8e6ff41ca0f",
      "sender": "sipa",
      "payload": "monlovesmango: but why is that ok?",
      "action": false,
      "timestamp": "2025-04-23T17:58:53.387220+00:00"
    },
    {
      "id": "c6b9df182a364c32a87c45404e6f689f",
      "sender": "glozow",
      "payload": "monlovesmango: but why doesn't that violate any dependencies?",
      "action": false,
      "timestamp": "2025-04-23T17:59:07.566489+00:00"
    },
    {
      "id": "7f4b99995c0e414c9f5bd44ab4a26cee",
      "sender": "monlovesmango",
      "payload": "bc we know they are from different clusters?",
      "action": false,
      "timestamp": "2025-04-23T18:00:16.714504+00:00"
    },
    {
      "id": "10ffbad74c0c404abcfbe0c328fe8a96",
      "sender": "monlovesmango",
      "payload": "hmm no",
      "action": false,
      "timestamp": "2025-04-23T18:00:28.765679+00:00"
    },
    {
      "id": "3a00a37cfc3c4f6eb88c3a102b7e64d6",
      "sender": "glozow",
      "payload": "No, they can be within the same cluster",
      "action": false,
      "timestamp": "2025-04-23T18:00:31.666454+00:00"
    },
    {
      "id": "97dc9e115bd44d419146dff67c2adb2d",
      "sender": "glozow",
      "payload": "But chunks within a cluster are already in feerate order :)",
      "action": false,
      "timestamp": "2025-04-23T18:01:00.376165+00:00"
    },
    {
      "id": "0b6af3e550a848f5a296ec7a377a67a5",
      "sender": "glozow",
      "payload": "Uh oh, we're already out of time!",
      "action": false,
      "timestamp": "2025-04-23T18:01:31.536820+00:00"
    },
    {
      "id": "48cd8366e38d4a7f9e3f1b4e65c088ae",
      "sender": "glozow",
      "payload": "We got through a lot today, thanks for coming everybody",
      "action": false,
      "timestamp": "2025-04-23T18:01:46.992052+00:00"
    },
    {
      "id": "a6faeb6487224ed192468a9a0800a5ae",
      "sender": "glozow",
      "payload": "#endmeeting",
      "action": false,
      "timestamp": "2025-04-23T18:01:55.432700+00:00"
    }
  ],
  "events": [
    {
      "event_type": "START_MEETING",
      "message": {
        "id": "0d0c06e13a5642de969d8bd844342ce0",
        "sender": "glozow",
        "payload": "#startmeeting",
        "action": false,
        "timestamp": "2025-04-23T17:00:55.504118+00:00"
      },
      "operand": null,
      "id": "0d0c06e13a5642de969d8bd844342ce0",
      "timestamp": "2025-04-23T17:00:55.504118+00:00"
    },
    {
      "event_type": "END_MEETING",
      "message": {
        "id": "a6faeb6487224ed192468a9a0800a5ae",
        "sender": "glozow",
        "payload": "#endmeeting",
        "action": false,
        "timestamp": "2025-04-23T18:01:55.432700+00:00"
      },
      "operand": null,
      "id": "a6faeb6487224ed192468a9a0800a5ae",
      "timestamp": "2025-04-23T18:01:55.432700+00:00"
    }
  ],
  "aliases": {},
  "vote_in_progress": false,
  "motion_index": null
}