{
  "founder": "wumpus",
  "channel": "#bitcoin-core-dev",
  "network": "freenode",
  "id": "d30c0a60af584911b9980c63d35dfdce",
  "name": "#bitcoin-core-dev",
  "chair": "wumpus",
  "chairs": [
    "wumpus"
  ],
  "nicks": {
    "wumpus": 78,
    "lightningbot": 2,
    "kanzure": 1,
    "achow101": 2,
    "jonasschnelli": 31,
    "hebasto": 11,
    "fjahr": 1,
    "vasild": 14,
    "meshcollider": 3,
    "jonatack": 4,
    "gribble": 6,
    "jnewbery": 33,
    "promag": 13,
    "phantomcircuit": 1,
    "luke-jr": 7,
    "jeremyrubin": 35,
    "sipa": 25,
    "aj": 4,
    "sdaftuar": 8,
    "nehan": 3,
    "bitcoin-git": 1,
    "michaelfolkson": 3,
    "yanmaani": 6,
    "provoostenator": 6
  },
  "start_time": "2020-09-10T19:00:25+00:00",
  "end_time": "2020-09-10T20:01:42+00:00",
  "active": false,
  "original_topic": "Bitcoin Core development discussion and commit log | This is the channel for developing Bitcoin Core. Feel free to watch, but please take commentary and usage questions to #bitcoin | Channel logs: http://www.erisian.com.au/bitcoin-core-dev/, http://gnusha.org/bitcoin-core-dev/ | Meeting topics https://gist.github.com/moneyball/071d608fdae217c2a6d7c35955881d8a",
  "current_topic": "Review the experience of 3 month bitcoin-core/gui repository (jonasschnelli)",
  "messages": [
    {
      "id": "04b65c8e33bd420fa5bad5c043b6b729",
      "sender": "wumpus",
      "payload": "#startmeeting",
      "action": false,
      "timestamp": "2020-09-10T19:00:25+00:00"
    },
    {
      "id": "cc65d99ccfd642278183e81285a5abd7",
      "sender": "lightningbot",
      "payload": "Meeting started Thu Sep 10 19:00:25 2020 UTC.  The chair is wumpus. Information about MeetBot at http://wiki.debian.org/MeetBot.",
      "action": false,
      "timestamp": "2020-09-10T19:00:25+00:00"
    },
    {
      "id": "353bd932d3be4d1c9c1e955884ccb405",
      "sender": "lightningbot",
      "payload": "Useful Commands: #action #agreed #help #info #idea #link #topic.",
      "action": false,
      "timestamp": "2020-09-10T19:00:25+00:00"
    },
    {
      "id": "f1cfb9364c994f5e82a78e2a3bee64e2",
      "sender": "kanzure",
      "payload": "hi",
      "action": false,
      "timestamp": "2020-09-10T19:00:30+00:00"
    },
    {
      "id": "5f6ad664510c4bf1b0a3c70fba4662d9",
      "sender": "achow101",
      "payload": "hi",
      "action": false,
      "timestamp": "2020-09-10T19:00:31+00:00"
    },
    {
      "id": "0e2f8e4a89a443d389befc3ceda1d81e",
      "sender": "jonasschnelli",
      "payload": "hi",
      "action": false,
      "timestamp": "2020-09-10T19:00:33+00:00"
    },
    {
      "id": "bc693cf5426d434484a371e78d4b44bb",
      "sender": "hebasto",
      "payload": "hi",
      "action": false,
      "timestamp": "2020-09-10T19:00:35+00:00"
    },
    {
      "id": "9c2801219ad94ec9ab2922749ae83c9f",
      "sender": "fjahr",
      "payload": "hi",
      "action": false,
      "timestamp": "2020-09-10T19:00:36+00:00"
    },
    {
      "id": "b4fd0200387e489cacc926df71ee1220",
      "sender": "wumpus",
      "payload": "#bitcoin-core-dev Meeting: wumpus sipa gmaxwell jonasschnelli morcos luke-jr sdaftuar jtimon cfields petertodd kanzure bluematt instagibbs phantomcircuit codeshark michagogo marcofalke paveljanik NicolasDorier jl2012 achow101 meshcollider jnewbery maaku fanquake promag provoostenator aj Chris_Stewart_5 dongcarl gwillen jamesob ken281221 ryanofsky gleb moneyball kvaciral ariard digi_james",
      "action": false,
      "timestamp": "2020-09-10T19:00:44+00:00"
    },
    {
      "id": "69eaa38be34e4b5eae311e8fb92c2553",
      "sender": "wumpus",
      "payload": "amiti fjahr jeremyrubin lightlike emilengler jonatack hebasto jb55 elichai2",
      "action": false,
      "timestamp": "2020-09-10T19:00:47+00:00"
    },
    {
      "id": "ba5f454176984bbbaaa4e84458e65ff4",
      "sender": "wumpus",
      "payload": "two proposed meeting topics for today",
      "action": false,
      "timestamp": "2020-09-10T19:01:01+00:00"
    },
    {
      "id": "73f2d91ab1c64b4d8b8d8d363c258b63",
      "sender": "vasild",
      "payload": "hi",
      "action": false,
      "timestamp": "2020-09-10T19:01:02+00:00"
    },
    {
      "id": "d6e7a76158974e288124428424ece9d9",
      "sender": "wumpus",
      "payload": "strategies for removing recursive locking in the mempool (jnewbery), review the experience of 3 month bitcoin-core/gui repository (jonasschnelli)",
      "action": false,
      "timestamp": "2020-09-10T19:01:06+00:00"
    },
    {
      "id": "af0b298d703f4c5daad109538b881f88",
      "sender": "meshcollider",
      "payload": "hi",
      "action": false,
      "timestamp": "2020-09-10T19:01:06+00:00"
    },
    {
      "id": "941d92c1e8ca4acfa9f3bd09ba76aecf",
      "sender": "wumpus",
      "payload": "any last minute topic proposals?",
      "action": false,
      "timestamp": "2020-09-10T19:01:23+00:00"
    },
    {
      "id": "95887ce2ddb4472ea62190f082560141",
      "sender": "jonatack",
      "payload": "hi",
      "action": false,
      "timestamp": "2020-09-10T19:01:23+00:00"
    },
    {
      "id": "8708bb0ae69c4bd7b5f4a813ce47ebd7",
      "sender": "wumpus",
      "payload": "#topic High priority for review",
      "action": false,
      "timestamp": "2020-09-10T19:02:36+00:00"
    },
    {
      "id": "28c2eb4d80b04e0fa9721f80e588452c",
      "sender": "wumpus",
      "payload": "https://github.com/bitcoin/bitcoin/projects/8  11 blockers, 1 bugfix, 2 chasins concept ACK",
      "action": false,
      "timestamp": "2020-09-10T19:03:07+00:00"
    },
    {
      "id": "1831bdba206a46f8ab3dc5ac6abe8f2e",
      "sender": "jonatack",
      "payload": "#19845?",
      "action": false,
      "timestamp": "2020-09-10T19:03:24+00:00"
    },
    {
      "id": "6341d4a6cb7143e6b61880957dafe8c4",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/19845 | net: CNetAddr: add support to (un)serialize as ADDRv2 by vasild \u00c3\u0082\u00c2\u00b7 Pull Request #19845 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2020-09-10T19:03:37+00:00"
    },
    {
      "id": "4980bd56a3b44e39a761e62bd97c5f76",
      "sender": "meshcollider",
      "payload": "Actually 10 now :) one was merged and hadn't been removed",
      "action": false,
      "timestamp": "2020-09-10T19:04:17+00:00"
    },
    {
      "id": "3d2267095c1e41ae8571a1d5c85f50de",
      "sender": "jnewbery",
      "payload": "hi",
      "action": false,
      "timestamp": "2020-09-10T19:04:27+00:00"
    },
    {
      "id": "924434b8cfbd46c7975ff0c1cc26d809",
      "sender": "wumpus",
      "payload": "jonatack: added",
      "action": false,
      "timestamp": "2020-09-10T19:04:48+00:00"
    },
    {
      "id": "2839c476de13472c9e730648a7e9372a",
      "sender": "meshcollider",
      "payload": "#16378 pls",
      "action": false,
      "timestamp": "2020-09-10T19:05:06+00:00"
    },
    {
      "id": "c6d3e51d0e7144089f0374e6eb60ff1b",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/16378 | The ultimate send RPC by Sjors \u00c3\u0082\u00c2\u00b7 Pull Request #16378 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2020-09-10T19:05:10+00:00"
    },
    {
      "id": "2c5374d99d09424ba0417ae68695c4dd",
      "sender": "achow101",
      "payload": "#19077 please",
      "action": false,
      "timestamp": "2020-09-10T19:05:52+00:00"
    },
    {
      "id": "b37a86dfde3c4047823dcfc0436c5213",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/19077 | wallet: Add sqlite as an alternative wallet database and use it for new descriptor wallets by achow101 \u00c3\u0082\u00c2\u00b7 Pull Request #19077 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2020-09-10T19:06:00+00:00"
    },
    {
      "id": "9850d0f883a442c885f6c7e1b8920543",
      "sender": "promag",
      "payload": "#19033 for hp, ty",
      "action": false,
      "timestamp": "2020-09-10T19:06:12+00:00"
    },
    {
      "id": "b8e0be35ebff463891be335057e403e8",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/19033 | http: Release work queue after event base finish by promag \u00c3\u0082\u00c2\u00b7 Pull Request #19033 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2020-09-10T19:06:15+00:00"
    },
    {
      "id": "3fe21ce1291f4fbd9d6cc7c8a7da0b54",
      "sender": "phantomcircuit",
      "payload": "hi",
      "action": false,
      "timestamp": "2020-09-10T19:06:21+00:00"
    },
    {
      "id": "e02b0931fc404d6aa1379567028fcdfa",
      "sender": "luke-jr",
      "payload": "pokes gribble",
      "action": true,
      "timestamp": "2020-09-10T19:06:52+00:00"
    },
    {
      "id": "d52a4a142f014e13ad06dec814adb593",
      "sender": "wumpus",
      "payload": "meshcollider, achow101  added",
      "action": false,
      "timestamp": "2020-09-10T19:07:22+00:00"
    },
    {
      "id": "4b2ef6aaa41c4a8e8f37b6f86535f9b2",
      "sender": "wumpus",
      "payload": "promag: already on there, right?",
      "action": false,
      "timestamp": "2020-09-10T19:07:27+00:00"
    },
    {
      "id": "bea56c3f509145c59dea1da2d6797d3f",
      "sender": "jeremyrubin",
      "payload": "i think so",
      "action": false,
      "timestamp": "2020-09-10T19:08:01+00:00"
    },
    {
      "id": "096265d545aa4368a4563dd7e4ce6085",
      "sender": "promag",
      "payload": "indeed, I guess I have to name it \"http: blocklist work queue...\"",
      "action": false,
      "timestamp": "2020-09-10T19:08:58+00:00"
    },
    {
      "id": "52d7eb642fc841119529d7bd6f9ed00c",
      "sender": "wumpus",
      "payload": "unless someone else just added it, but I vaguely remember it was already there",
      "action": false,
      "timestamp": "2020-09-10T19:09:04+00:00"
    },
    {
      "id": "f6b2e3081a58449b8051e014c9ae5f58",
      "sender": "wumpus",
      "payload": "#topic Strategies for removing recursive locking in the mempool (jnewbery)",
      "action": false,
      "timestamp": "2020-09-10T19:09:43+00:00"
    },
    {
      "id": "9140b9e28390432e984990919e221716",
      "sender": "wumpus",
      "payload": "(https://github.com/bitcoin/bitcoin/pull/19872#issuecomment-688852261)",
      "action": false,
      "timestamp": "2020-09-10T19:09:51+00:00"
    },
    {
      "id": "8b13df396f304fbfa87998670c93a2f5",
      "sender": "jnewbery",
      "payload": "Thanks wumpus",
      "action": false,
      "timestamp": "2020-09-10T19:09:58+00:00"
    },
    {
      "id": "41ef853509b64d39b60a62ccf7dc5f2f",
      "sender": "jnewbery",
      "payload": "gist here: https://gist.github.com/hebasto/072ad3a9370641b035a36d08607a3d34",
      "action": false,
      "timestamp": "2020-09-10T19:10:16+00:00"
    },
    {
      "id": "37552fff0bd44288b8109cb3c6aae721",
      "sender": "jnewbery",
      "payload": "summary: RecusiveMutex is generally considered bad, and avoided if possible. It'd be nice to change the mempool's mutex from recursive to non-recursive",
      "action": false,
      "timestamp": "2020-09-10T19:10:53+00:00"
    },
    {
      "id": "48a1ece94b3549b69062deb71ce291ee",
      "sender": "wumpus",
      "payload": "I think getting rid of the recursive locks is good, though, it seems changes are becoming increasingly risky",
      "action": false,
      "timestamp": "2020-09-10T19:11:00+00:00"
    },
    {
      "id": "6a72262698ea4943a6668e2e953a84f9",
      "sender": "wumpus",
      "payload": "and involved",
      "action": false,
      "timestamp": "2020-09-10T19:11:07+00:00"
    },
    {
      "id": "1c5cd688ac5545988de84b0c5822812b",
      "sender": "jnewbery",
      "payload": "There are different ways to do this, and hebasto would like some input on which way is preferred",
      "action": false,
      "timestamp": "2020-09-10T19:11:22+00:00"
    },
    {
      "id": "63aa49853557477b9ae17089d02c82a5",
      "sender": "wumpus",
      "payload": "we had all the low-hanging fruit I guess",
      "action": false,
      "timestamp": "2020-09-10T19:11:23+00:00"
    },
    {
      "id": "3d7986330e914a7c9f7903ca1ec18420",
      "sender": "jnewbery",
      "payload": "wumpus: i don't think so. I think there's a lot more low-hanging fruit (although cs_mempool isn't very low hanging)",
      "action": false,
      "timestamp": "2020-09-10T19:12:00+00:00"
    },
    {
      "id": "ee845f3b02404b8f82c3c61ee5f3c890",
      "sender": "hebasto",
      "payload": "tracking issue for all recursive mutexes #19303",
      "action": false,
      "timestamp": "2020-09-10T19:12:33+00:00"
    },
    {
      "id": "7bce884e21e14d3ba9ee60b793e2a963",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/19303 | Replace all of the RecursiveMutex instances with the Mutex ones \u00c3\u0082\u00c2\u00b7 Issue #19303 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2020-09-10T19:12:35+00:00"
    },
    {
      "id": "ce25dedf1e8d40af9b06e729bd06de00",
      "sender": "jeremyrubin",
      "payload": "Probably makes more sense to have the locking external to the functions",
      "action": false,
      "timestamp": "2020-09-10T19:12:40+00:00"
    },
    {
      "id": "e48e1eb59cdc4c56b055bb46aaed9f37",
      "sender": "jeremyrubin",
      "payload": "More general to e.g., calling a function in a for loop",
      "action": false,
      "timestamp": "2020-09-10T19:12:55+00:00"
    },
    {
      "id": "dcc6988b16224e309127b21bb2b8d8dc",
      "sender": "jnewbery",
      "payload": "Two possible ways are making a lot more of the mempool functions require the lock, and make locking external to the mempool",
      "action": false,
      "timestamp": "2020-09-10T19:13:01+00:00"
    },
    {
      "id": "bd60619b2efb4756acacd6ffc3762bcc",
      "sender": "wumpus",
      "payload": "\"... two functions could be used - one that locks and another that does not...\" yes, that's the common solution",
      "action": false,
      "timestamp": "2020-09-10T19:13:03+00:00"
    },
    {
      "id": "b2983414d03d43799756a3ec025d2a0a",
      "sender": "jnewbery",
      "payload": "and the other way is having two versions of the function - one which requires the lock and one which takes the lock",
      "action": false,
      "timestamp": "2020-09-10T19:13:26+00:00"
    },
    {
      "id": "80c388d52caf42de916d0ecc89d5d766",
      "sender": "jnewbery",
      "payload": "wumpus: right",
      "action": false,
      "timestamp": "2020-09-10T19:13:31+00:00"
    },
    {
      "id": "c8a64a5f8e67478398891269e46ffb53",
      "sender": "wumpus",
      "payload": "moving locking external has its own risks",
      "action": false,
      "timestamp": "2020-09-10T19:13:32+00:00"
    },
    {
      "id": "974b54bc85d04e0482a536ba8699dece",
      "sender": "hebasto",
      "payload": "what risk?",
      "action": false,
      "timestamp": "2020-09-10T19:13:51+00:00"
    },
    {
      "id": "e76952309e7f4daa9e77a38a68024a8f",
      "sender": "jeremyrubin",
      "payload": "wumpus: if we use the clang safety annotations it's lesser, right?",
      "action": false,
      "timestamp": "2020-09-10T19:13:52+00:00"
    },
    {
      "id": "c3bf647d2b334bf2a1b3b64ebbfbbd7a",
      "sender": "wumpus",
      "payload": "having separate private \"without lock\" avoids that",
      "action": false,
      "timestamp": "2020-09-10T19:13:55+00:00"
    },
    {
      "id": "5f6c7f781cd9407abf82a5dc8a4107b9",
      "sender": "jnewbery",
      "payload": "wumpus: I agree. Best to keep locking internal wherever possible",
      "action": false,
      "timestamp": "2020-09-10T19:13:57+00:00"
    },
    {
      "id": "75099b5f4a324148af6ef987b3b3e6e0",
      "sender": "vasild",
      "payload": "\"the locking mechanism used by a thread-safe class is part of its internal implementation\" (from https://gist.github.com/hebasto/072ad3a9370641b035a36d08607a3d34#gistcomment-3448023)",
      "action": false,
      "timestamp": "2020-09-10T19:14:24+00:00"
    },
    {
      "id": "a74a87bf6a1949cf82e301d0aacc4c37",
      "sender": "luke-jr",
      "payload": "stabs ISP",
      "action": true,
      "timestamp": "2020-09-10T19:14:32+00:00"
    },
    {
      "id": "82ed0776f2e04bd88e45ef3d99cbd61a",
      "sender": "sipa",
      "payload": "ideally, locks are internal",
      "action": false,
      "timestamp": "2020-09-10T19:14:36+00:00"
    },
    {
      "id": "6f3dd0cb43ac43159f4c81ffbc7a2984",
      "sender": "wumpus",
      "payload": "hebasto: well, it goes against, the principle of encapsulation, knowledge of how to remove locks moves to outside the code",
      "action": false,
      "timestamp": "2020-09-10T19:14:37+00:00"
    },
    {
      "id": "c963135971e645749703a9978840a26a",
      "sender": "wumpus",
      "payload": "hebasto: at the least it makes reasoning more difficult",
      "action": false,
      "timestamp": "2020-09-10T19:15:06+00:00"
    },
    {
      "id": "a91d4a9461cd4d99b9073c2017e62197",
      "sender": "hebasto",
      "payload": "wumpus: agree",
      "action": false,
      "timestamp": "2020-09-10T19:15:14+00:00"
    },
    {
      "id": "cab85563064d4270828ac8bfa8427d0c",
      "sender": "sipa",
      "payload": "if a lock is internal to a class, and the class never invokes a callback passed down from elsewhere while holding that lock, it even guarantees no deadlocks",
      "action": false,
      "timestamp": "2020-09-10T19:15:25+00:00"
    },
    {
      "id": "7dc7368210364fdc8d732ea87e73180a",
      "sender": "wumpus",
      "payload": "lock annotations are not a replacement for that",
      "action": false,
      "timestamp": "2020-09-10T19:15:35+00:00"
    },
    {
      "id": "833eb376d1b64d58a20c5c5dbfdf68b2",
      "sender": "jnewbery",
      "payload": "if locks can't always be internal, then making two versions of the public interface function makes it explicit where the function is called with the lock held and without.",
      "action": false,
      "timestamp": "2020-09-10T19:16:30+00:00"
    },
    {
      "id": "082a1c3477f24b10951d50d5da07fa92",
      "sender": "sipa",
      "payload": "jnewbery: that's what CAddrMan does",
      "action": false,
      "timestamp": "2020-09-10T19:16:49+00:00"
    },
    {
      "id": "b5a035a4c087403993ab0521670c9f14",
      "sender": "sipa",
      "payload": "but i don't see how one conflicts with the other",
      "action": false,
      "timestamp": "2020-09-10T19:16:59+00:00"
    },
    {
      "id": "10294eef3da94c37b9abb5aea8b10b19",
      "sender": "jeremyrubin",
      "payload": "What about a type-safe (using newtype) pass lock guard in as arugment?",
      "action": false,
      "timestamp": "2020-09-10T19:17:04+00:00"
    },
    {
      "id": "e8983a714ed940ecb8435326efc40d26",
      "sender": "jeremyrubin",
      "payload": "That would have both safety properties",
      "action": false,
      "timestamp": "2020-09-10T19:17:14+00:00"
    },
    {
      "id": "64acd02cefd248b285aa2bdfcc0e6643",
      "sender": "sipa",
      "payload": "jeremyrubin: it works, but imho it still reeks of bad design",
      "action": false,
      "timestamp": "2020-09-10T19:17:20+00:00"
    },
    {
      "id": "ee747bca38be45f6a1a5fa15a63fd32e",
      "sender": "jeremyrubin",
      "payload": "as there would only be one way to get a satisfying lock",
      "action": false,
      "timestamp": "2020-09-10T19:17:28+00:00"
    },
    {
      "id": "7b2890d72cc5423fb54fe882adb87319",
      "sender": "wumpus",
      "payload": "I don't really like that, I hope that can be avoided",
      "action": false,
      "timestamp": "2020-09-10T19:17:33+00:00"
    },
    {
      "id": "146d2496eaff4640a2f6d879be2de9dd",
      "sender": "promag",
      "payload": "and I'd like to discuss for() { LOCK(cs); } VS { LOCK() for() {} }",
      "action": false,
      "timestamp": "2020-09-10T19:17:34+00:00"
    },
    {
      "id": "72c8131d479d44d79820a59a76a6095f",
      "sender": "hebasto",
      "payload": "how to name this two functions? some kind of suffix to distinguish them?",
      "action": false,
      "timestamp": "2020-09-10T19:18:11+00:00"
    },
    {
      "id": "450b5c84cbf44390b98c04ba705d2651",
      "sender": "jnewbery",
      "payload": "sipa: I'm not saying they do. Ideally, all locks are internal. If they can't be and sometimes need to be held by the caller, make it explicit where that is by using Mutex and having two versions of public functions where needed.",
      "action": false,
      "timestamp": "2020-09-10T19:18:12+00:00"
    },
    {
      "id": "c51e5ce86dcc4555b338630a0605bf5d",
      "sender": "aj",
      "payload": "promag: with or without performance benchmarks?",
      "action": false,
      "timestamp": "2020-09-10T19:18:20+00:00"
    },
    {
      "id": "198841804834405aa46d78d32e88f356",
      "sender": "wumpus",
      "payload": "promag: well that depends on the granularity of the work, so locking overhad versus the loop body, and whether it's undesirable to hold the lock for long",
      "action": false,
      "timestamp": "2020-09-10T19:18:29+00:00"
    },
    {
      "id": "a2fa72025f9e43fda2141329350494cc",
      "sender": "sipa",
      "payload": "promag: grabbing an uncontended lock is ~100 cpu cycles",
      "action": false,
      "timestamp": "2020-09-10T19:18:31+00:00"
    },
    {
      "id": "ccb350d0bb3a46c4baa74ab4de2cf06a",
      "sender": "jeremyrubin",
      "payload": "hebasto: I'd do a type tag argument maybe; like atmoic primitives.",
      "action": false,
      "timestamp": "2020-09-10T19:18:46+00:00"
    },
    {
      "id": "c4b56728b947458488b0c46a14c5dfda",
      "sender": "jeremyrubin",
      "payload": "but maybe that's overkill",
      "action": false,
      "timestamp": "2020-09-10T19:19:09+00:00"
    },
    {
      "id": "9e044a8a48b24063ad673c1bc37a5244",
      "sender": "sipa",
      "payload": "jnewbery: sorry, i misread what you suggested",
      "action": false,
      "timestamp": "2020-09-10T19:19:25+00:00"
    },
    {
      "id": "f07644579de549ca89fdf9467ef7a91e",
      "sender": "aj",
      "payload": "jeremyrubin: void foo(int x); void foo(int x, LockAlreadyHeld h);  foo(3, LockAlreadyHeld()); // ?",
      "action": false,
      "timestamp": "2020-09-10T19:20:00+00:00"
    },
    {
      "id": "20de7a1e82a3407390e0ea02959fe6ad",
      "sender": "wumpus",
      "payload": "I'm starting to understand Marcofalke's point now--this is a lot of work, conflicts with other changes, while we don't have a direct problem with RecursiveMutex",
      "action": false,
      "timestamp": "2020-09-10T19:20:21+00:00"
    },
    {
      "id": "31d118468aae416a8f17ccfadf54164a",
      "sender": "aj",
      "payload": "jeremyrubin: LockAlreadyHeld(cs_main); ?",
      "action": false,
      "timestamp": "2020-09-10T19:20:23+00:00"
    },
    {
      "id": "65f37601be1940238bcde38e005275fb",
      "sender": "jeremyrubin",
      "payload": "aj: Uh that can work yeah",
      "action": false,
      "timestamp": "2020-09-10T19:20:26+00:00"
    },
    {
      "id": "0f655e9b57a5436d88692b07aa9cf078",
      "sender": "vasild",
      "payload": "promag: I would say if the current code does one of that, we better have some proof that changing it is for the better.",
      "action": false,
      "timestamp": "2020-09-10T19:20:28+00:00"
    },
    {
      "id": "0bcd66097a804f6ca2294a714f7f3e73",
      "sender": "sdaftuar",
      "payload": "wumpus: that is my gut reaction as well",
      "action": false,
      "timestamp": "2020-09-10T19:20:39+00:00"
    },
    {
      "id": "a87ba3be97b24174a06071981e5d0f59",
      "sender": "promag",
      "payload": "aj: in simple cases not really",
      "action": false,
      "timestamp": "2020-09-10T19:21:11+00:00"
    },
    {
      "id": "82a66713c4f3404eab59faa72a19ca7a",
      "sender": "sdaftuar",
      "payload": "it would be nice to motivate this change with some new behavior we wish to implement, that woudl benefit from it?",
      "action": false,
      "timestamp": "2020-09-10T19:21:26+00:00"
    },
    {
      "id": "fdf7b49c5943409287197fed88d52865",
      "sender": "wumpus",
      "payload": "if it helps to have a non-recursive mutex for future mempool changes it makes sense to do it, of course, but this seems a lot of design work for a pure refactor",
      "action": false,
      "timestamp": "2020-09-10T19:21:30+00:00"
    },
    {
      "id": "329116d7978c481ca00e4a44132bd4fc",
      "sender": "wumpus",
      "payload": "sdaftuar: +1",
      "action": false,
      "timestamp": "2020-09-10T19:21:34+00:00"
    },
    {
      "id": "1d3e5ba67fdb442196b535eaa7c20989",
      "sender": "jeremyrubin",
      "payload": "overall, same. It works as is.",
      "action": false,
      "timestamp": "2020-09-10T19:21:41+00:00"
    },
    {
      "id": "32b881d2291a48c9bcc6faa20c2a0549",
      "sender": "luke-jr",
      "payload": "I suspect it actually might make future changes harder :x",
      "action": false,
      "timestamp": "2020-09-10T19:22:20+00:00"
    },
    {
      "id": "e07cc6e0b04040c499b69417d193849d",
      "sender": "sipa",
      "payload": "luke-jr: depends on how it's done, i think",
      "action": false,
      "timestamp": "2020-09-10T19:22:39+00:00"
    },
    {
      "id": "000deaba82784e228ecf68c7bf004f49",
      "sender": "jeremyrubin",
      "payload": "I think that's the motivation; if future changes are leaning more on the recursive mutexing we don't want to make them that way",
      "action": false,
      "timestamp": "2020-09-10T19:22:48+00:00"
    },
    {
      "id": "147a29d462dd4806840778be6d6c3765",
      "sender": "sipa",
      "payload": "really usually cleaning up locking means cleaning up the boundary between interfaces",
      "action": false,
      "timestamp": "2020-09-10T19:22:51+00:00"
    },
    {
      "id": "03837c11378e40e59e29dfee9aa84308",
      "sender": "sipa",
      "payload": "and if that's a side effect, it may definitely make things easier",
      "action": false,
      "timestamp": "2020-09-10T19:23:01+00:00"
    },
    {
      "id": "74d05dac3963493f8bf673b701c2a891",
      "sender": "promag",
      "payload": "sipa: I'm taking about cs_main",
      "action": false,
      "timestamp": "2020-09-10T19:23:04+00:00"
    },
    {
      "id": "fc8fc15c56b949cebc3e8949dd04d2ca",
      "sender": "jnewbery",
      "payload": "sipa: +1",
      "action": false,
      "timestamp": "2020-09-10T19:23:05+00:00"
    },
    {
      "id": "9395969b9a484ac2b994c0b6d3c81c82",
      "sender": "wumpus",
      "payload": "sipa: yes, if it can make that clearer it's a good thing",
      "action": false,
      "timestamp": "2020-09-10T19:23:10+00:00"
    },
    {
      "id": "8f37326f02e442a980ab8a491d21dbfc",
      "sender": "promag",
      "payload": "wumpus: agree",
      "action": false,
      "timestamp": "2020-09-10T19:23:10+00:00"
    },
    {
      "id": "c0ae669a763b41929c40c9662fc900c0",
      "sender": "jnewbery",
      "payload": "cs_main is something else entirely",
      "action": false,
      "timestamp": "2020-09-10T19:23:14+00:00"
    },
    {
      "id": "0f8d690c4683491a8a751a54ce73aa8c",
      "sender": "sipa",
      "payload": "just doing a dumb \"whatever necessary to avoid recursive locking\" is unlikely to be beneficial",
      "action": false,
      "timestamp": "2020-09-10T19:23:30+00:00"
    },
    {
      "id": "5511e31e3a8f4c40960d070167c2380a",
      "sender": "wumpus",
      "payload": "agree",
      "action": false,
      "timestamp": "2020-09-10T19:23:37+00:00"
    },
    {
      "id": "44fbd722e7a04524a1560d1e9472e6d7",
      "sender": "promag",
      "payload": "vasild: agree",
      "action": false,
      "timestamp": "2020-09-10T19:24:14+00:00"
    },
    {
      "id": "40fa9c6ca3714aacb7a03141d0b9229f",
      "sender": "sipa",
      "payload": "but it's probably hard to speak very generically here",
      "action": false,
      "timestamp": "2020-09-10T19:24:26+00:00"
    },
    {
      "id": "276812535b49470295cab66410ca92f8",
      "sender": "jnewbery",
      "payload": "I think adding a lock-not-held version of all public functions which may or may not hold a lock is a pretty trivial change",
      "action": false,
      "timestamp": "2020-09-10T19:24:43+00:00"
    },
    {
      "id": "af1cdad928c84962ad760c6f7b2f07ff",
      "sender": "promag",
      "payload": "i'm meh with that approach",
      "action": false,
      "timestamp": "2020-09-10T19:25:16+00:00"
    },
    {
      "id": "7721b2dfea4f49d5b4aab72c6c4c8d3d",
      "sender": "jeremyrubin",
      "payload": "It's kinda annoying for other patches if you have to change 2 func signatures",
      "action": false,
      "timestamp": "2020-09-10T19:25:19+00:00"
    },
    {
      "id": "83052cf8d76b44d2b23bad79775edced",
      "sender": "wumpus",
      "payload": "jnewbery: at least that can be done virtually mechanically which makes it easier to review",
      "action": false,
      "timestamp": "2020-09-10T19:25:35+00:00"
    },
    {
      "id": "8b1f9ed25e444d679cd99e1a6315e4ef",
      "sender": "jnewbery",
      "payload": "I think changing the function to assert the lock is held and then adding locks outside the class _isn't_ a good change",
      "action": false,
      "timestamp": "2020-09-10T19:25:36+00:00"
    },
    {
      "id": "3bb4a4c01dc04ba5aaaf82d5542cb324",
      "sender": "vasild",
      "payload": "funcUnprotected() { do stuff; }; func() { LOCK(); funcUnprotected(); }",
      "action": false,
      "timestamp": "2020-09-10T19:25:53+00:00"
    },
    {
      "id": "bc7e44de14134842902cc2cc0bffda5e",
      "sender": "sipa",
      "payload": "jnewbery: that does not seem crazy, but it's easier to judge with code",
      "action": false,
      "timestamp": "2020-09-10T19:25:54+00:00"
    },
    {
      "id": "e4b4e78342d24e84aff963d33283b31b",
      "sender": "wumpus",
      "payload": "jnewbery: +1",
      "action": false,
      "timestamp": "2020-09-10T19:26:11+00:00"
    },
    {
      "id": "62e1a2615fa1475ebf4e010ac2b3c4d2",
      "sender": "sdaftuar",
      "payload": "i'm a bit confused -- would some of those functions not be used?",
      "action": false,
      "timestamp": "2020-09-10T19:26:18+00:00"
    },
    {
      "id": "578c2396a44d4d5dac808a2afb4fa781",
      "sender": "promag",
      "payload": "jnewbery: IMO it's a good change if it comes with a follow up refactor",
      "action": false,
      "timestamp": "2020-09-10T19:26:30+00:00"
    },
    {
      "id": "9f876606de554e15b86b7542cbbbea1b",
      "sender": "luke-jr",
      "payload": "I don't see what's wrong with func() that locks if necessary, but also works inside an external lock :x",
      "action": false,
      "timestamp": "2020-09-10T19:26:40+00:00"
    },
    {
      "id": "5aa038c66d2145eda44590056f90c97e",
      "sender": "jnewbery",
      "payload": "sdaftuar: you'd only add new functions where it may or may not already hold the lock",
      "action": false,
      "timestamp": "2020-09-10T19:26:55+00:00"
    },
    {
      "id": "cba79822cdda47c183199e9d1084f484",
      "sender": "jeremyrubin",
      "payload": "luke-jr: I think that's basically a recursive lock",
      "action": false,
      "timestamp": "2020-09-10T19:27:20+00:00"
    },
    {
      "id": "511e2ffe406d4cd2920b36d8dc5a4828",
      "sender": "sipa",
      "payload": "luke-jr: it's a very abstract objection, but to me it is: code should be written to work inside our outside the private parts of a class that need locking",
      "action": false,
      "timestamp": "2020-09-10T19:27:25+00:00"
    },
    {
      "id": "cbfe5c5421634c549e5be52b1a06390d",
      "sender": "vasild",
      "payload": "luke-jr: that's like re-implementing recursive mutex",
      "action": false,
      "timestamp": "2020-09-10T19:27:34+00:00"
    },
    {
      "id": "ccd3aab8aabb48a9aa0aa179be0ef996",
      "sender": "jeremyrubin",
      "payload": "the difference being maybe you can assert if you know you have lock already or not",
      "action": false,
      "timestamp": "2020-09-10T19:27:35+00:00"
    },
    {
      "id": "1d8d4a98720141f88d820bd63d2ccd97",
      "sender": "luke-jr",
      "payload": "sipa: this does..?",
      "action": false,
      "timestamp": "2020-09-10T19:27:53+00:00"
    },
    {
      "id": "295197cabce24529be8b49333f5709bc",
      "sender": "sipa",
      "payload": "luke-jr: it's just hard to reason about the interface if you have code that works in both",
      "action": false,
      "timestamp": "2020-09-10T19:27:55+00:00"
    },
    {
      "id": "3ca25c8cfa3b4d50b1d611782ed3faa4",
      "sender": "wumpus",
      "payload": "hand rolling a recursive-ish mutex sounds even worse than simply using one",
      "action": false,
      "timestamp": "2020-09-10T19:28:10+00:00"
    },
    {
      "id": "c652b1f839944c93b92a2d31d5c09d79",
      "sender": "sipa",
      "payload": "please no",
      "action": false,
      "timestamp": "2020-09-10T19:28:17+00:00"
    },
    {
      "id": "20cea4aa4f904cc5bffe7fe058e1c4f6",
      "sender": "nehan",
      "payload": "the argument in https://gist.github.com/hebasto/072ad3a9370641b035a36d08607a3d34 for why RecursiveMutex is bad indicates why it's bad to use RecursiveMutex in the first place (it is a symptom of an underlying problem). i do not see how it explains the benefit of removing RecursiveMutex without addressing the underlying problem.",
      "action": false,
      "timestamp": "2020-09-10T19:28:22+00:00"
    },
    {
      "id": "f6f45281e4c746d093a9176576d7aff7",
      "sender": "sipa",
      "payload": "nehan: +1",
      "action": false,
      "timestamp": "2020-09-10T19:28:38+00:00"
    },
    {
      "id": "0ada8edf90a84c32bb06fa03c900e124",
      "sender": "nehan",
      "payload": "which it sounds like what this dual-function thing is doing",
      "action": false,
      "timestamp": "2020-09-10T19:28:41+00:00"
    },
    {
      "id": "c0cc3d47da344680ac5792aaed9731bd",
      "sender": "sipa",
      "payload": "nehan: i think the dual function makes the interface layer explicit",
      "action": false,
      "timestamp": "2020-09-10T19:28:58+00:00"
    },
    {
      "id": "c63099b1e03a4cd08dd945bf3c950f31",
      "sender": "nehan",
      "payload": "so the benefit of it is making a small (perhaps important) step towards making the interface more clear?",
      "action": false,
      "timestamp": "2020-09-10T19:29:44+00:00"
    },
    {
      "id": "acf9b77c4b014d30bbdaf3959c6a8dd7",
      "sender": "luke-jr",
      "payload": "my point wasn't to reinvent RM, but that RM has a use :p",
      "action": false,
      "timestamp": "2020-09-10T19:29:48+00:00"
    },
    {
      "id": "ba89adcb100442a28473eba9276f9e02",
      "sender": "jnewbery",
      "payload": "and by making it explicit, brings to attention what the underlying problem may be",
      "action": false,
      "timestamp": "2020-09-10T19:29:52+00:00"
    },
    {
      "id": "b488ae09f6d74fbc8c654e6d35200e44",
      "sender": "sipa",
      "payload": "nehan: right, it makes it obvious where the problem is",
      "action": false,
      "timestamp": "2020-09-10T19:29:58+00:00"
    },
    {
      "id": "3ac6ae5d35704931bde06857b66f3784",
      "sender": "sipa",
      "payload": "it doesn't fix it",
      "action": false,
      "timestamp": "2020-09-10T19:30:02+00:00"
    },
    {
      "id": "01387a47c9c94c44898ee8cbb06910c1",
      "sender": "wumpus",
      "payload": "nehan: yes, the general arguments against recursive mutex described there definitely make sense",
      "action": false,
      "timestamp": "2020-09-10T19:30:06+00:00"
    },
    {
      "id": "e4f86c4e6a06402b9b829013bf652b3c",
      "sender": "sdaftuar",
      "payload": "so i think the right next step would be to precisely define what the interface ought ot be",
      "action": false,
      "timestamp": "2020-09-10T19:30:08+00:00"
    },
    {
      "id": "b9d156c442cd4775973d2eea9b102286",
      "sender": "sdaftuar",
      "payload": "and then we can work towards that",
      "action": false,
      "timestamp": "2020-09-10T19:30:17+00:00"
    },
    {
      "id": "a0f3f47831714d4986174a0ce0350874",
      "sender": "jeremyrubin",
      "payload": "It sounds like it might be worth to prepare this PR and not merge it",
      "action": false,
      "timestamp": "2020-09-10T19:30:18+00:00"
    },
    {
      "id": "07a91d0b1b2445c99b0320e68da14791",
      "sender": "jeremyrubin",
      "payload": "Because if it indentifies what the problem is, then we can see if a fix can be built on it",
      "action": false,
      "timestamp": "2020-09-10T19:30:34+00:00"
    },
    {
      "id": "6f05e32c8a3949c08239c7ddf5ad7fad",
      "sender": "sdaftuar",
      "payload": "refactoring without a design in mind seems bad to me",
      "action": false,
      "timestamp": "2020-09-10T19:30:39+00:00"
    },
    {
      "id": "c7e75c12b498461bb1de07a139ca2fd8",
      "sender": "jnewbery",
      "payload": "sometimes it's not a problem to have a function that can be called with or without a lock. Sometimes you want to carry out multiple operations on an object atomically. That's not a problem, but it's always better to be explicit about what you're doing",
      "action": false,
      "timestamp": "2020-09-10T19:31:02+00:00"
    },
    {
      "id": "7c95dbe585ce4570968ab23465db6f89",
      "sender": "bitcoin-git",
      "payload": "[bitcoin] instagibbs opened pull request #19936: Test: batch rpc with params (master...batch_param) https://github.com/bitcoin/bitcoin/pull/19936",
      "action": false,
      "timestamp": "2020-09-10T19:32:18+00:00"
    },
    {
      "id": "17012141dd02477182cef23c0f7caf35",
      "sender": "promag",
      "payload": "sipa: WITH_LOCK(..., ...) is already an indicator",
      "action": false,
      "timestamp": "2020-09-10T19:33:14+00:00"
    },
    {
      "id": "cba0909c4f9b4f248dad119fe66f6002",
      "sender": "jnewbery",
      "payload": "hebasto: did you have anything else that you wanted input on?",
      "action": false,
      "timestamp": "2020-09-10T19:33:25+00:00"
    },
    {
      "id": "50d5350dba9b42f4a4388b6a14a3d469",
      "sender": "vasild",
      "payload": "I think we can/should make mempool.cs mutex private",
      "action": false,
      "timestamp": "2020-09-10T19:33:33+00:00"
    },
    {
      "id": "cf9e8c63854c41d4ad56ba7fa5f4fc42",
      "sender": "jnewbery",
      "payload": "vasild: that's a lot of work",
      "action": false,
      "timestamp": "2020-09-10T19:33:51+00:00"
    },
    {
      "id": "78c3fcc1e9f04bb281173932db45de2b",
      "sender": "jnewbery",
      "payload": "and might not even be desirable",
      "action": false,
      "timestamp": "2020-09-10T19:34:00+00:00"
    },
    {
      "id": "3c9ff3f54fee45378ca398e91deda081",
      "sender": "hebasto",
      "payload": "jnewbery: it seems all discussed. what is consensus?",
      "action": false,
      "timestamp": "2020-09-10T19:34:02+00:00"
    },
    {
      "id": "02561fb63a7c43278792600dc269f857",
      "sender": "promag",
      "payload": "vasild: lots of refactors right?",
      "action": false,
      "timestamp": "2020-09-10T19:34:21+00:00"
    },
    {
      "id": "68b071fbab1744138fbc80cb1a2b7f26",
      "sender": "vasild",
      "payload": "IMO amount of work would be comparable to making it non-recursive",
      "action": false,
      "timestamp": "2020-09-10T19:34:24+00:00"
    },
    {
      "id": "eb675d52939740f9b37c6ab881183559",
      "sender": "jnewbery",
      "payload": "vasild: not even close, I don't think. There are lots of places where we make multiple calls to the mempool atomically. Those would all need to be changed into higher-level interfaces to the mempool",
      "action": false,
      "timestamp": "2020-09-10T19:35:10+00:00"
    },
    {
      "id": "de8d6f30ecd347f19641ef2a2ec673b2",
      "sender": "wumpus",
      "payload": "vasild: at least that'd remove the problem of public functions needing the lock held",
      "action": false,
      "timestamp": "2020-09-10T19:35:12+00:00"
    },
    {
      "id": "95a29c4c284b4b7ea748b820d2d25144",
      "sender": "wumpus",
      "payload": "but yes, it's also much more work",
      "action": false,
      "timestamp": "2020-09-10T19:35:28+00:00"
    },
    {
      "id": "94f68ce538694ea4a97cf06a3373c519",
      "sender": "vasild",
      "payload": "ok, my assessment could be wrong",
      "action": false,
      "timestamp": "2020-09-10T19:35:54+00:00"
    },
    {
      "id": "88435a5413804606be6252bbe14dc05b",
      "sender": "jeremyrubin",
      "payload": "wild idea: mempool via message passing only?",
      "action": false,
      "timestamp": "2020-09-10T19:36:10+00:00"
    },
    {
      "id": "130916be0c6946ee8f07459b902f78a4",
      "sender": "jnewbery",
      "payload": "vasild: eg all of this would need to become a single call to the mempool: https://github.com/bitcoin/bitcoin/blob/564e1ab0f3dc573bd3ea60a80f6649c361243df9/src/rpc/blockchain.cpp#L1406-L1421",
      "action": false,
      "timestamp": "2020-09-10T19:36:24+00:00"
    },
    {
      "id": "16b6d555ee34480288173bf31362461f",
      "sender": "jeremyrubin",
      "payload": "Might be good as there are some proposals to make the mempool a separate entity",
      "action": false,
      "timestamp": "2020-09-10T19:36:25+00:00"
    },
    {
      "id": "30683eb71382440da4dfafd223082ee8",
      "sender": "jeremyrubin",
      "payload": "and message passing based would cleanly separate internal details",
      "action": false,
      "timestamp": "2020-09-10T19:36:44+00:00"
    },
    {
      "id": "ad73b5ce2d0740fba89b40b42450df3e",
      "sender": "hebasto",
      "payload": "vasild: that is possible",
      "action": false,
      "timestamp": "2020-09-10T19:37:01+00:00"
    },
    {
      "id": "debc8b712b434ebcb8af4413efe37496",
      "sender": "vasild",
      "payload": "jnewbery: yes, I looked into that, it would be one call that returns a struct holding all the data, not a big deal",
      "action": false,
      "timestamp": "2020-09-10T19:37:16+00:00"
    },
    {
      "id": "fb40b4ccebb54feb9eda546d9c90889b",
      "sender": "jonatack",
      "payload": "i like sdaftuar's suggestion that it be motivated by new behavior or a clear idea of the desired design/interface",
      "action": false,
      "timestamp": "2020-09-10T19:38:14+00:00"
    },
    {
      "id": "b95ece04bb1645118d3b702383a31f1f",
      "sender": "jnewbery",
      "payload": "vasild: maybe. It just feels like a much bigger change. If you had a branch that moved the lock to be totally internal, I'd be very interested to see it",
      "action": false,
      "timestamp": "2020-09-10T19:38:27+00:00"
    },
    {
      "id": "d3b647bf8ff4410b9e9fe0579fd4cade",
      "sender": "vasild",
      "payload": "mempool.AtomicallyGiveMeYourStats(&pool_stats); ;-)",
      "action": false,
      "timestamp": "2020-09-10T19:38:40+00:00"
    },
    {
      "id": "f3ef6ca5f11a48d69c6a81826d668200",
      "sender": "vasild",
      "payload": "jnewbery: no, I don't have",
      "action": false,
      "timestamp": "2020-09-10T19:39:00+00:00"
    },
    {
      "id": "8830797cd2dd4014a766e75263e45a07",
      "sender": "aj",
      "payload": "time for the gui repo topic?",
      "action": false,
      "timestamp": "2020-09-10T19:39:15+00:00"
    },
    {
      "id": "154f3a0f25cb436ab067ef0c82ffe163",
      "sender": "jeremyrubin",
      "payload": "vasild: a mempool interior thread/workqueue with condvar for wake on return could implement that API :p",
      "action": false,
      "timestamp": "2020-09-10T19:39:24+00:00"
    },
    {
      "id": "57a15ec050ad42219066da293acdd158",
      "sender": "wumpus",
      "payload": "I guess it would be good to see an example of the various proposals and maybe re-discuss next week",
      "action": false,
      "timestamp": "2020-09-10T19:39:25+00:00"
    },
    {
      "id": "e7e541d7ae9a4d9387c2ce62bd8b7f29",
      "sender": "hebasto",
      "payload": "wumpus: +1",
      "action": false,
      "timestamp": "2020-09-10T19:39:46+00:00"
    },
    {
      "id": "0fc5ebf2e8fc4481b0bbf22f8f04828e",
      "sender": "wumpus",
      "payload": "if this is all worth it at all",
      "action": false,
      "timestamp": "2020-09-10T19:39:51+00:00"
    },
    {
      "id": "54d8ce7cf7f946edbaafc8aab771e666",
      "sender": "wumpus",
      "payload": "maybe we're creaeting a problem where there's none",
      "action": false,
      "timestamp": "2020-09-10T19:40:03+00:00"
    },
    {
      "id": "c71b336d26b34b888c9bdc630d23bdb9",
      "sender": "wumpus",
      "payload": "#topic Review the experience of 3 month bitcoin-core/gui repository (jonasschnelli)",
      "action": false,
      "timestamp": "2020-09-10T19:40:27+00:00"
    },
    {
      "id": "960eac72c19d4c3a9137450ae7d78e7a",
      "sender": "sdaftuar",
      "payload": "i would reiterate that a design document for how the mempool would ideally interact with the rest of our software would be very helpful for evaulating any proposals",
      "action": false,
      "timestamp": "2020-09-10T19:40:39+00:00"
    },
    {
      "id": "d5b8429749534084a1b10d277adefc3b",
      "sender": "jonasschnelli",
      "payload": "I'd like to collect feedback on how well the separation of the GUI repository has been received.",
      "action": false,
      "timestamp": "2020-09-10T19:40:48+00:00"
    },
    {
      "id": "1128a6651e794813a1453c817ef35598",
      "sender": "jonasschnelli",
      "payload": "my feedback: it's seems still unclear how we merge things back to the main repository and if that has been documented.",
      "action": false,
      "timestamp": "2020-09-10T19:41:16+00:00"
    },
    {
      "id": "c8e42ebb16b5429cbd531ae61b11d53d",
      "sender": "wumpus",
      "payload": "yes, what's the plan for merging back the GUI changes?",
      "action": false,
      "timestamp": "2020-09-10T19:41:23+00:00"
    },
    {
      "id": "d75d95fb37f548d5b5f2147ef0749410",
      "sender": "jonasschnelli",
      "payload": "on top, the mix of PRs on both sides feels confusing to me.",
      "action": false,
      "timestamp": "2020-09-10T19:41:32+00:00"
    },
    {
      "id": "be891411640947459e2eb006c2eb958f",
      "sender": "jnewbery",
      "payload": "I think Marco has a script that merges them into both repositories simultaneously, no?",
      "action": false,
      "timestamp": "2020-09-10T19:41:54+00:00"
    },
    {
      "id": "61de338242ec4c05b3330cd0e3cc0e3c",
      "sender": "jonasschnelli",
      "payload": "Overall,... i would have prefered to split of the repository with a split off through a clean interface (process seperation in some ways)",
      "action": false,
      "timestamp": "2020-09-10T19:41:55+00:00"
    },
    {
      "id": "9e9a4bf2c6e34b98b851cb84c72e9c29",
      "sender": "wumpus",
      "payload": "I think it's nice to have GUI design discussions etc in the other repo",
      "action": false,
      "timestamp": "2020-09-10T19:42:08+00:00"
    },
    {
      "id": "000edeca25884ae0ab1fcdcfc67da9cf",
      "sender": "jonasschnelli",
      "payload": "jnewbery: could be. I don't know.",
      "action": false,
      "timestamp": "2020-09-10T19:42:19+00:00"
    },
    {
      "id": "1308451398684adfb4bb6b2392f9921d",
      "sender": "jonasschnelli",
      "payload": "Yes. I also like the split of the discussions and some GUI only PRs.",
      "action": false,
      "timestamp": "2020-09-10T19:42:35+00:00"
    },
    {
      "id": "c987529bcb75481a936fcfe82619db95",
      "sender": "jonasschnelli",
      "payload": "I just don't know what burden we have when merging things back",
      "action": false,
      "timestamp": "2020-09-10T19:42:47+00:00"
    },
    {
      "id": "db7910276fb44c148aaa163378128b5a",
      "sender": "wumpus",
      "payload": "it's sufficiently distinct from what happens in the main repo that that makes sense",
      "action": false,
      "timestamp": "2020-09-10T19:42:58+00:00"
    },
    {
      "id": "d8a4b539f7604816b40b92478b0fc561",
      "sender": "jonasschnelli",
      "payload": "Also,... things that touch both \"sides\": still unclear how to handle that",
      "action": false,
      "timestamp": "2020-09-10T19:43:05+00:00"
    },
    {
      "id": "ba841ef27f5a4d31bd4dc915e2fdf3e9",
      "sender": "wumpus",
      "payload": "I don't know either, looks like Marco Falke is missing for this discussion",
      "action": false,
      "timestamp": "2020-09-10T19:43:16+00:00"
    },
    {
      "id": "e90802eaa4e44da1a72e62ec3082b2d3",
      "sender": "jonasschnelli",
      "payload": "looks like",
      "action": false,
      "timestamp": "2020-09-10T19:43:22+00:00"
    },
    {
      "id": "3b218b75c75b4a44a929e03ef0be96a5",
      "sender": "promag",
      "payload": "wumpus: most people just have to go to both repos.. it was a good change for those that want stay away from gui stuff",
      "action": false,
      "timestamp": "2020-09-10T19:43:27+00:00"
    },
    {
      "id": "b58214add8c7411f95aee89baf0109ae",
      "sender": "jonasschnelli",
      "payload": "However we go further, I think it would be nice to document the process more clear",
      "action": false,
      "timestamp": "2020-09-10T19:43:40+00:00"
    },
    {
      "id": "5734e775353445a4915f76123f9cf3ee",
      "sender": "jnewbery",
      "payload": "they seem to be pretty synchronized. The GUI repository is just one merge commit behind bitcoin/bitcoin",
      "action": false,
      "timestamp": "2020-09-10T19:44:29+00:00"
    },
    {
      "id": "7ee7f98c7a254f17a0bf84b9d1ee583d",
      "sender": "jonasschnelli",
      "payload": "Also unclear to me how we handle merge conflicts if we merge node stuff into the GUI repository",
      "action": false,
      "timestamp": "2020-09-10T19:44:31+00:00"
    },
    {
      "id": "5c4e9c6a06484798b4b1d217dff16004",
      "sender": "jeremyrubin",
      "payload": "jonasschnelli: +1 on process isolation being important for making the separation clearer",
      "action": false,
      "timestamp": "2020-09-10T19:44:39+00:00"
    },
    {
      "id": "baf492fe79fb49e4932aacd1a0b1472f",
      "sender": "luke-jr",
      "payload": "did anyone ever get in touch with GitHub about the PR issues?",
      "action": false,
      "timestamp": "2020-09-10T19:44:41+00:00"
    },
    {
      "id": "403ed3e61408491a9c4253b4d7f0b4d2",
      "sender": "jnewbery",
      "payload": "jonasschnelli: they're the same commits",
      "action": false,
      "timestamp": "2020-09-10T19:44:53+00:00"
    },
    {
      "id": "4c4c837ce2d74f4d81b16443c21fdcc9",
      "sender": "jnewbery",
      "payload": "there's no conflicts because it's always fast-forwards",
      "action": false,
      "timestamp": "2020-09-10T19:45:26+00:00"
    },
    {
      "id": "35be1583335d4ba9ad80e9448fcaba54",
      "sender": "wumpus",
      "payload": "jeremyrubin: IIRC there's a PR that does process isolation",
      "action": false,
      "timestamp": "2020-09-10T19:45:28+00:00"
    },
    {
      "id": "1091fb5676074022b57db2b94bd9c5e4",
      "sender": "jonasschnelli",
      "payload": "jnewbery: Right. I tihink its a non-issue as long as they stay in sync. Which I guess is a manual script",
      "action": false,
      "timestamp": "2020-09-10T19:45:29+00:00"
    },
    {
      "id": "881e005d26a34ccda6ae2bdbacd12def",
      "sender": "jeremyrubin",
      "payload": "wumpus: ryanofsky's right?",
      "action": false,
      "timestamp": "2020-09-10T19:46:02+00:00"
    },
    {
      "id": "3e7bcdc4e60448109990fe51ac467e02",
      "sender": "michaelfolkson",
      "payload": "I think the major concern is if review decreases with it being separate. I think people on the GUI repo need to regularly prod (cc) GUI reviewers who spend most of their time on the main repo.",
      "action": false,
      "timestamp": "2020-09-10T19:46:02+00:00"
    },
    {
      "id": "9fcf63a62a2140d0bc3fb3b724cb7d06",
      "sender": "wumpus",
      "payload": "ryanofsky is working on that #19461",
      "action": false,
      "timestamp": "2020-09-10T19:46:22+00:00"
    },
    {
      "id": "8d94ccf97b6141dfb2bd3112a14d7f5b",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/19461 | multiprocess: Add bitcoin-gui -ipcconnect option by ryanofsky \u00c3\u0082\u00c2\u00b7 Pull Request #19461 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2020-09-10T19:46:25+00:00"
    },
    {
      "id": "256591dcd07c4cd296fafee38459a387",
      "sender": "wumpus",
      "payload": "yes",
      "action": false,
      "timestamp": "2020-09-10T19:46:25+00:00"
    },
    {
      "id": "c84642b020874e67a3cf011afc28dc98",
      "sender": "jonasschnelli",
      "payload": "michaelfolkson: maybe only an initial issue. I think there are now also contributors stepping forward _because_ its GUI only",
      "action": false,
      "timestamp": "2020-09-10T19:46:33+00:00"
    },
    {
      "id": "77db35df8b2c43cea8555824defdbc9c",
      "sender": "hebasto",
      "payload": "^ and designers",
      "action": false,
      "timestamp": "2020-09-10T19:47:06+00:00"
    },
    {
      "id": "0fff25d1578a4c4580b02d5398bd5796",
      "sender": "wumpus",
      "payload": "jonasschnelli: exactly, though there's some overlap, it's also meant to get a different group of people involved",
      "action": false,
      "timestamp": "2020-09-10T19:47:07+00:00"
    },
    {
      "id": "96d314923fdf4416a534a5909d85ee66",
      "sender": "michaelfolkson",
      "payload": "But mainly designers right jonasschnelli? It needs normal Core reviewers too",
      "action": false,
      "timestamp": "2020-09-10T19:47:22+00:00"
    },
    {
      "id": "7161efad48f04cc38fb0261513d33447",
      "sender": "michaelfolkson",
      "payload": "I think for design related review it is a material success so far",
      "action": false,
      "timestamp": "2020-09-10T19:48:03+00:00"
    },
    {
      "id": "3fe5c0a638ea49d19ed90dfe4db2aca2",
      "sender": "wumpus",
      "payload": "ideally we want more GUI contributors, improving the GUI, they don't necessarily need to get involved with the rest of the code",
      "action": false,
      "timestamp": "2020-09-10T19:48:08+00:00"
    },
    {
      "id": "adb87fc868cb42dab60330423a978026",
      "sender": "jonasschnelli",
      "payload": "michaelfolkson: Yes. Thats correct.",
      "action": false,
      "timestamp": "2020-09-10T19:48:18+00:00"
    },
    {
      "id": "326a7719f82d4d2f8128f2aedf7677c9",
      "sender": "jonasschnelli",
      "payload": "It's a different complexity level (mostly). Also the risks are different.",
      "action": false,
      "timestamp": "2020-09-10T19:48:29+00:00"
    },
    {
      "id": "b5d02ebc3b4c472ebc777f8c6b3b339d",
      "sender": "vasild",
      "payload": "I think a separate GUI repository only makes sense as long as both repositories contain different chunks of software. Right now both contain the same, e.g. the gui repo contains bitcoind.cpp, net_processing.cpp, etc. Would it be possible to make only src/qt in the gui repo (and then make it a git submodule in the main one)?",
      "action": false,
      "timestamp": "2020-09-10T19:48:36+00:00"
    },
    {
      "id": "57484cf7d886484cbfa8607d6f10027e",
      "sender": "wumpus",
      "payload": "a different kind of complexity to navigate at least",
      "action": false,
      "timestamp": "2020-09-10T19:48:45+00:00"
    },
    {
      "id": "6fbe81d53dae4b2eba75b478e35f795d",
      "sender": "jeremyrubin",
      "payload": "wumpus: is there a framework for moving forward ryanofsky's work? last I checked it was still nack on capnproto?",
      "action": false,
      "timestamp": "2020-09-10T19:48:55+00:00"
    },
    {
      "id": "eeeb26fdfec4428aaef85f9a6da332d0",
      "sender": "wumpus",
      "payload": "I definitely found out I can't do it, I can't handle the subjectivity and bikeshedding involved :)",
      "action": false,
      "timestamp": "2020-09-10T19:49:15+00:00"
    },
    {
      "id": "f2ae3bb457c54e27a301409ca527cbac",
      "sender": "jonasschnelli",
      "payload": "vasild: this is a valid point",
      "action": false,
      "timestamp": "2020-09-10T19:49:37+00:00"
    },
    {
      "id": "7a8d3a4cb58840a3b9e2421f08402e3e",
      "sender": "jonasschnelli",
      "payload": "wumpus : that. yes.",
      "action": false,
      "timestamp": "2020-09-10T19:49:52+00:00"
    },
    {
      "id": "f9d95ae540154d628c99d6853c9f31c8",
      "sender": "wumpus",
      "payload": "vasild: maybe, though it can't be built independently anymore then, it's harder for contributors",
      "action": false,
      "timestamp": "2020-09-10T19:50:08+00:00"
    },
    {
      "id": "d0b06b71094045788b8daf469f19352b",
      "sender": "hebasto",
      "payload": "bikeshedding is a work for designers, no?",
      "action": false,
      "timestamp": "2020-09-10T19:50:28+00:00"
    },
    {
      "id": "3fff8dc4bd064e07866e710e365a68c6",
      "sender": "yanmaani",
      "payload": "Can't you refactor it to make the GUI an RPC client?",
      "action": false,
      "timestamp": "2020-09-10T19:50:31+00:00"
    },
    {
      "id": "d5924cc8da44470c8bfa0923f0ccddb7",
      "sender": "vasild",
      "payload": "hm, right, src/qt can't be build separately",
      "action": false,
      "timestamp": "2020-09-10T19:50:33+00:00"
    },
    {
      "id": "da82401a6de34ce3848d776e395b093e",
      "sender": "yanmaani",
      "payload": "(and then optionally have it spawn a bitcoind)",
      "action": false,
      "timestamp": "2020-09-10T19:50:50+00:00"
    },
    {
      "id": "b929c327591a46b3808ccdc34274f688",
      "sender": "vasild",
      "payload": "make make it compilable, libsrcqt.so :)",
      "action": false,
      "timestamp": "2020-09-10T19:50:55+00:00"
    },
    {
      "id": "a1592fb748e944c0ae0917ca8ad4e5a7",
      "sender": "jonasschnelli",
      "payload": "yanmaani: I would also like to see that",
      "action": false,
      "timestamp": "2020-09-10T19:51:03+00:00"
    },
    {
      "id": "cac72cb5c7994a2c953bcecec6c46b86",
      "sender": "yanmaani",
      "payload": "Then the GUI could indeed be moved to a separate repo",
      "action": false,
      "timestamp": "2020-09-10T19:51:16+00:00"
    },
    {
      "id": "c5854e4a46f14c3997fdc28a82114ad5",
      "sender": "jonasschnelli",
      "payload": "but I guess we are drifting off-topic",
      "action": false,
      "timestamp": "2020-09-10T19:51:23+00:00"
    },
    {
      "id": "492768981e4f40e2926d7cb6cec6949b",
      "sender": "yanmaani",
      "payload": "and you could have other people making other GUIs in other frameworks",
      "action": false,
      "timestamp": "2020-09-10T19:51:24+00:00"
    },
    {
      "id": "d40c79fe16a846eca981e25f79fa9bbd",
      "sender": "wumpus",
      "payload": "yanmaani: that's what the multiprocess PR does, basically",
      "action": false,
      "timestamp": "2020-09-10T19:51:26+00:00"
    },
    {
      "id": "9b9836229ebf4ba287427f36941a1518",
      "sender": "sipa",
      "payload": "people tried that in 2012 or so, but it's terrible as RPC is query-response based, not asynchronous",
      "action": false,
      "timestamp": "2020-09-10T19:51:28+00:00"
    },
    {
      "id": "898fdcd9cd2940d69c7e8330baec92e9",
      "sender": "sipa",
      "payload": "but the multiprocess work does this the right way",
      "action": false,
      "timestamp": "2020-09-10T19:51:46+00:00"
    },
    {
      "id": "8e41832b44d94518893f2edbe44756f6",
      "sender": "jonasschnelli",
      "payload": "sipa: we could use the long polling to make it faster though",
      "action": false,
      "timestamp": "2020-09-10T19:51:46+00:00"
    },
    {
      "id": "34af36ac92374570ac651f657788a8cf",
      "sender": "yanmaani",
      "payload": "sipa: is RPC single-threaded?",
      "action": false,
      "timestamp": "2020-09-10T19:51:47+00:00"
    },
    {
      "id": "8b4d334637eb41be94d93dff95da62dd",
      "sender": "wumpus",
      "payload": "yanmaani: (except it doesn't use JSON-RPC but its own RPC mechanism)",
      "action": false,
      "timestamp": "2020-09-10T19:51:48+00:00"
    },
    {
      "id": "406ecc23cff54a5690e9098a58d1efde",
      "sender": "promag",
      "payload": "yanmaani: no",
      "action": false,
      "timestamp": "2020-09-10T19:52:00+00:00"
    },
    {
      "id": "8aa32d2ab6a54d04b49dd3c2361e2516",
      "sender": "wumpus",
      "payload": "in any case ryanofsky's work already exists",
      "action": false,
      "timestamp": "2020-09-10T19:52:03+00:00"
    },
    {
      "id": "6161deba0cf0497f8ddf7d4ddd998ff2",
      "sender": "sipa",
      "payload": "yanmaani: it would be more useful if you'd comment after you've spent some time looking at the code",
      "action": false,
      "timestamp": "2020-09-10T19:52:10+00:00"
    },
    {
      "id": "3bec99a4687f4a47a7f8dcb53e4760c8",
      "sender": "yanmaani",
      "payload": "ok :)",
      "action": false,
      "timestamp": "2020-09-10T19:52:21+00:00"
    },
    {
      "id": "5dc0753d07e64f0e95d7889d81a31027",
      "sender": "wumpus",
      "payload": "no need to brainstorm the 2012 idea of doing it again now",
      "action": false,
      "timestamp": "2020-09-10T19:52:34+00:00"
    },
    {
      "id": "4b9d747ee89e4c02986aa47735cb6690",
      "sender": "provoostenator",
      "payload": "I suggest waiting a while before opening that can of worms though :-)",
      "action": false,
      "timestamp": "2020-09-10T19:52:37+00:00"
    },
    {
      "id": "ef99f81a944e4046ae01ebf36ab861d3",
      "sender": "jnewbery",
      "payload": "yanmaani: even more useful if you review/test ryanofsky's work!",
      "action": false,
      "timestamp": "2020-09-10T19:52:40+00:00"
    },
    {
      "id": "de5c867ebec644f8ba8fccf3b452d4f8",
      "sender": "jonasschnelli",
      "payload": "I think I suggest then that we pimp up the documentation on how things are managed between the two repositories, avoid questions, etc.",
      "action": false,
      "timestamp": "2020-09-10T19:53:02+00:00"
    },
    {
      "id": "06cca5e34137427c8ee6919d5a09b131",
      "sender": "wumpus",
      "payload": "jonasschnelli: +1",
      "action": false,
      "timestamp": "2020-09-10T19:53:17+00:00"
    },
    {
      "id": "bac8e8a78f5d4afc9ba80c174080fc58",
      "sender": "jeremyrubin",
      "payload": "wumpus: if some set of maintainers can establish a bit more of a framework on the validity of ryanofsky's approach i would spend some cycles on it. but AFAIU some contribs are nack on the approach so I'm not sure how likely it will proceed if that remains the case or what can be done to un-nack",
      "action": false,
      "timestamp": "2020-09-10T19:53:19+00:00"
    },
    {
      "id": "91921098b8b5473fba02c4daaba8c61a",
      "sender": "jonasschnelli",
      "payload": "Let's hope MarcoFalke has time and willingness to do this",
      "action": false,
      "timestamp": "2020-09-10T19:53:21+00:00"
    },
    {
      "id": "b06904987654433684186d0ba226cd12",
      "sender": "wumpus",
      "payload": "just documenting things would make sense",
      "action": false,
      "timestamp": "2020-09-10T19:53:22+00:00"
    },
    {
      "id": "19c8167b39374a869b90d643ff3bdec6",
      "sender": "wumpus",
      "payload": "jeremyrubin: who is completely against it?",
      "action": false,
      "timestamp": "2020-09-10T19:53:40+00:00"
    },
    {
      "id": "c6cb437c08ae482680bc1c857481771f",
      "sender": "jonasschnelli",
      "payload": "people deserve to know what happens with PRs they write on the GUI repo",
      "action": false,
      "timestamp": "2020-09-10T19:53:43+00:00"
    },
    {
      "id": "b6eebd2c0156468ca9cae7de6fd9c588",
      "sender": "jeremyrubin",
      "payload": "gmax iirc?",
      "action": false,
      "timestamp": "2020-09-10T19:53:45+00:00"
    },
    {
      "id": "bf8c34f39199488e8adbb58f1a4d49e2",
      "sender": "jeremyrubin",
      "payload": "iirc he was against capnproto at all and wanted a custom IPC lib",
      "action": false,
      "timestamp": "2020-09-10T19:54:15+00:00"
    },
    {
      "id": "a44df836ecec450c8787431a6ee1ded2",
      "sender": "hebasto",
      "payload": "+1 for documenting",
      "action": false,
      "timestamp": "2020-09-10T19:54:16+00:00"
    },
    {
      "id": "c44eca41d8d94b92a777d3aa6d362c4e",
      "sender": "wumpus",
      "payload": "for using capnproto for the GUI? I don't think so, he hates using it for internet protocols, but for internal communication between processes it doesn't matter too much",
      "action": false,
      "timestamp": "2020-09-10T19:54:24+00:00"
    },
    {
      "id": "eb9911f7f5a54db0b0a8660c7a6e261c",
      "sender": "sipa",
      "payload": "no reason to speculate here",
      "action": false,
      "timestamp": "2020-09-10T19:54:41+00:00"
    },
    {
      "id": "6c1e2fbedfba4bbcba406bbaf8457a8c",
      "sender": "sipa",
      "payload": "afaik ryanofsky said that capnproto could easily be swapped out for something else if needed",
      "action": false,
      "timestamp": "2020-09-10T19:54:56+00:00"
    },
    {
      "id": "b5362c0985424e2bb29a97e3592e2bba",
      "sender": "jonasschnelli",
      "payload": "just the glue",
      "action": false,
      "timestamp": "2020-09-10T19:55:06+00:00"
    },
    {
      "id": "0f132035d1984dd19c90987a297c83b2",
      "sender": "provoostenator",
      "payload": "Indeed",
      "action": false,
      "timestamp": "2020-09-10T19:55:11+00:00"
    },
    {
      "id": "c85633a162d942f5bc44b5bbcaba36c3",
      "sender": "wumpus",
      "payload": "I'd really dislike rolling our own IPC mechanism tbh",
      "action": false,
      "timestamp": "2020-09-10T19:55:12+00:00"
    },
    {
      "id": "694b0ee59ede4220aad27829df926a5b",
      "sender": "jeremyrubin",
      "payload": "do we already depend on it?",
      "action": false,
      "timestamp": "2020-09-10T19:55:19+00:00"
    },
    {
      "id": "a7133872a78b47098293499f2b8bf35c",
      "sender": "jeremyrubin",
      "payload": "It's in depends :)",
      "action": false,
      "timestamp": "2020-09-10T19:55:25+00:00"
    },
    {
      "id": "ce68ea764b2e4f06ab96e7956fabfacc",
      "sender": "wumpus",
      "payload": "there are so many one already, not everything needs to be invented here",
      "action": false,
      "timestamp": "2020-09-10T19:55:38+00:00"
    },
    {
      "id": "8cdc727f70714cdaa106ee48cd03d5e7",
      "sender": "provoostenator",
      "payload": "We already merged the build stuff for it.",
      "action": false,
      "timestamp": "2020-09-10T19:55:44+00:00"
    },
    {
      "id": "9ba1f45bc4104de0aaeee1b83f96af6c",
      "sender": "jonasschnelli",
      "payload": "I'm still in favour or RPC",
      "action": false,
      "timestamp": "2020-09-10T19:55:54+00:00"
    },
    {
      "id": "ab71e9c0c48c44ad9d72af29526930d6",
      "sender": "jeremyrubin",
      "payload": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-289842646",
      "action": false,
      "timestamp": "2020-09-10T19:55:55+00:00"
    },
    {
      "id": "ef39ceabadf44e968a672143c2515695",
      "sender": "provoostenator",
      "payload": "But it's an opt-in config flag",
      "action": false,
      "timestamp": "2020-09-10T19:55:56+00:00"
    },
    {
      "id": "9e1b7061d9c248369c07b2a5cc976a93",
      "sender": "wumpus",
      "payload": "sipa: yes, it should be easy to swap out",
      "action": false,
      "timestamp": "2020-09-10T19:55:58+00:00"
    },
    {
      "id": "500117114d264c92930c518968ea93f5",
      "sender": "wumpus",
      "payload": "he designed it so that the specific mechanism used is abstracted",
      "action": false,
      "timestamp": "2020-09-10T19:56:14+00:00"
    },
    {
      "id": "45eb7fc6544b4fdf883b018684ba65ed",
      "sender": "jnewbery",
      "payload": "jonasschnelli: I think it's even easier than I said. Marco just merges the gui PR branch into the bitcoin/bitcoin repo",
      "action": false,
      "timestamp": "2020-09-10T19:56:15+00:00"
    },
    {
      "id": "c987bddc42454a40930603ab4130e2ce",
      "sender": "wumpus",
      "payload": "better just review the code...",
      "action": false,
      "timestamp": "2020-09-10T19:56:18+00:00"
    },
    {
      "id": "4dc1aaf54b3444688ff90fe0e0070199",
      "sender": "jonasschnelli",
      "payload": "RPC can also work async. But yes. Not the topic now.",
      "action": false,
      "timestamp": "2020-09-10T19:56:29+00:00"
    },
    {
      "id": "6fdbd82a4b864b6aafd6599677a6b3eb",
      "sender": "wumpus",
      "payload": "jonasschnelli: I mean we can do something wildly different but *only* if someone is willing to do the work",
      "action": false,
      "timestamp": "2020-09-10T19:56:46+00:00"
    },
    {
      "id": "dac1e09af6ca45399076a4781a709607",
      "sender": "jnewbery",
      "payload": "and then I guess there's a bot or something that is syncing bitcoin-core/gui to the latest master",
      "action": false,
      "timestamp": "2020-09-10T19:56:47+00:00"
    },
    {
      "id": "af6a33fd9f7c44b6b4a3d2c70c1e7cee",
      "sender": "jonatack",
      "payload": "there is a good recent writeup by ryanofsky, one month ago, here: https://bitcoincore.reviews/19160",
      "action": false,
      "timestamp": "2020-09-10T19:56:52+00:00"
    },
    {
      "id": "76dd530de8af451c874d446fb039768c",
      "sender": "wumpus",
      "payload": "I see no reason to second-guess ryanofsky now after all this time",
      "action": false,
      "timestamp": "2020-09-10T19:56:57+00:00"
    },
    {
      "id": "dc5f7a3984694d55b14aca31c2220ffe",
      "sender": "jonasschnelli",
      "payload": "wumpus: that's a point.",
      "action": false,
      "timestamp": "2020-09-10T19:57:00+00:00"
    },
    {
      "id": "f00f6f91a0064bac9eda215e99dd5145",
      "sender": "jnewbery",
      "payload": "https://github.com/bitcoin/bitcoin/pull/19071",
      "action": false,
      "timestamp": "2020-09-10T19:57:02+00:00"
    },
    {
      "id": "269508e204b3488283e2d36c4e4c315b",
      "sender": "jeremyrubin",
      "payload": "I have no issue with capnproto I think it's fine :)",
      "action": false,
      "timestamp": "2020-09-10T19:57:14+00:00"
    },
    {
      "id": "7ac35f3672a7471ca39be78116aae7a4",
      "sender": "provoostenator",
      "payload": "Last time I dug into it I found the approach pretty sane.",
      "action": false,
      "timestamp": "2020-09-10T19:57:18+00:00"
    },
    {
      "id": "3fa27fa51673428ba9be623efc20ab2d",
      "sender": "wumpus",
      "payload": "at least it's a step forward",
      "action": false,
      "timestamp": "2020-09-10T19:57:33+00:00"
    },
    {
      "id": "051c42965fe64447b32a69ee1e56fa7d",
      "sender": "jeremyrubin",
      "payload": "I spent a bunch of time reviewing it in '17 and think it's a good approach",
      "action": false,
      "timestamp": "2020-09-10T19:57:34+00:00"
    },
    {
      "id": "1967c85f4b584a2eaf8e67646ef0667b",
      "sender": "wumpus",
      "payload": "when RPC one day converges on what we need for the GUI, then we can switch to that",
      "action": false,
      "timestamp": "2020-09-10T19:57:44+00:00"
    },
    {
      "id": "fe14c6637ce84372bf66ba6e8995fd41",
      "sender": "jonasschnelli",
      "payload": "Haven't looked into it. But separating the GUI from the node via the internet/wireguard would be a requirement,.. right?",
      "action": false,
      "timestamp": "2020-09-10T19:58:18+00:00"
    },
    {
      "id": "73af80215b4b43698142ea9b6c8bd3e7",
      "sender": "wumpus",
      "payload": "I think it's *very important* to take a step by step approach with things",
      "action": false,
      "timestamp": "2020-09-10T19:58:22+00:00"
    },
    {
      "id": "d43d3de968034176a6a4e64dbe7fbd4f",
      "sender": "provoostenator",
      "payload": "Conversely, when the IPC interface simplifies and needs fewer locks...",
      "action": false,
      "timestamp": "2020-09-10T19:58:23+00:00"
    },
    {
      "id": "4a4a878ed3cc46248997703561013c08",
      "sender": "wumpus",
      "payload": "if not, we'll never go anywhere, this kind of thing has been proposed since at least 2012",
      "action": false,
      "timestamp": "2020-09-10T19:59:07+00:00"
    },
    {
      "id": "67956f490344403fb4e46ec6675a7cc9",
      "sender": "jonasschnelli",
      "payload": "indeed",
      "action": false,
      "timestamp": "2020-09-10T19:59:16+00:00"
    },
    {
      "id": "41a7505fe7bc4a3f84b5dcd05cc5b8b8",
      "sender": "wumpus",
      "payload": "because everyone wants something else",
      "action": false,
      "timestamp": "2020-09-10T19:59:20+00:00"
    },
    {
      "id": "e12aacaf0ab1498ba6f7662ba7d419e0",
      "sender": "jonasschnelli",
      "payload": "the power of open source",
      "action": false,
      "timestamp": "2020-09-10T19:59:29+00:00"
    },
    {
      "id": "1ec6cfb5c7b046bcb305acde03309458",
      "sender": "wumpus",
      "payload": "and then someone does it and peopel want yet something else",
      "action": false,
      "timestamp": "2020-09-10T19:59:30+00:00"
    },
    {
      "id": "c67fd3350fc043278f1bba24f0445968",
      "sender": "jeremyrubin",
      "payload": "I think that's all I'm asking. If ryanofsky's pr is reasonably reviewed",
      "action": false,
      "timestamp": "2020-09-10T19:59:59+00:00"
    },
    {
      "id": "1c7f3b0ba81347f6a0368a5d16e1fc01",
      "sender": "wumpus",
      "payload": "so, anyhow, if you're interested in process separation, please review ryanofsky's PRs",
      "action": false,
      "timestamp": "2020-09-10T20:00:03+00:00"
    },
    {
      "id": "3bf352878fbe4aaa9ceb54a4ae0359e1",
      "sender": "jeremyrubin",
      "payload": "there is no 'hard reason' it can't be merged",
      "action": false,
      "timestamp": "2020-09-10T20:00:06+00:00"
    },
    {
      "id": "37a29542a9634e6d8f0fad08357eacfa",
      "sender": "jeremyrubin",
      "payload": "which is great news for anyone willing to spend review cycles on it, it derisks that time spent",
      "action": false,
      "timestamp": "2020-09-10T20:00:30+00:00"
    },
    {
      "id": "1efa960db6c24624a471172b470f2306",
      "sender": "wumpus",
      "payload": "dont' come up with new wild ideas that would have to start from scratch :)",
      "action": false,
      "timestamp": "2020-09-10T20:00:33+00:00"
    },
    {
      "id": "02d20ed639484276b6848f85ba39c3a5",
      "sender": "sdaftuar",
      "payload": "jeremyrubin: i would hope not, my understanding is that ryanofsky has been making progress towards this goal for quite some time now",
      "action": false,
      "timestamp": "2020-09-10T20:00:47+00:00"
    },
    {
      "id": "82603dd883694f6b826a45017c238098",
      "sender": "wumpus",
      "payload": "of course after reviewing the PR you could give more targeted suggestions",
      "action": false,
      "timestamp": "2020-09-10T20:01:28+00:00"
    },
    {
      "id": "0ed01973c94d46c5a779b6a26de58645",
      "sender": "wumpus",
      "payload": "oh, it's time",
      "action": false,
      "timestamp": "2020-09-10T20:01:38+00:00"
    },
    {
      "id": "77a26d69cc5c42c7b3f91824a9413527",
      "sender": "wumpus",
      "payload": "#endmeeting",
      "action": false,
      "timestamp": "2020-09-10T20:01:42+00:00"
    }
  ],
  "events": [
    {
      "event_type": "START_MEETING",
      "message": {
        "id": "04b65c8e33bd420fa5bad5c043b6b729",
        "sender": "wumpus",
        "payload": "#startmeeting",
        "action": false,
        "timestamp": "2020-09-10T19:00:25+00:00"
      },
      "operand": null,
      "id": "04b65c8e33bd420fa5bad5c043b6b729",
      "timestamp": "2020-09-10T19:00:25+00:00"
    },
    {
      "event_type": "TOPIC",
      "message": {
        "id": "8708bb0ae69c4bd7b5f4a813ce47ebd7",
        "sender": "wumpus",
        "payload": "#topic High priority for review",
        "action": false,
        "timestamp": "2020-09-10T19:02:36+00:00"
      },
      "operand": "High priority for review",
      "id": "8708bb0ae69c4bd7b5f4a813ce47ebd7",
      "timestamp": "2020-09-10T19:02:36+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "28c2eb4d80b04e0fa9721f80e588452c",
        "sender": "wumpus",
        "payload": "https://github.com/bitcoin/bitcoin/projects/8  11 blockers, 1 bugfix, 2 chasins concept ACK",
        "action": false,
        "timestamp": "2020-09-10T19:03:07+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/projects/8",
      "id": "28c2eb4d80b04e0fa9721f80e588452c",
      "timestamp": "2020-09-10T19:03:07+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "6341d4a6cb7143e6b61880957dafe8c4",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/19845 | net: CNetAddr: add support to (un)serialize as ADDRv2 by vasild \u00c3\u0082\u00c2\u00b7 Pull Request #19845 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2020-09-10T19:03:37+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/19845",
      "id": "6341d4a6cb7143e6b61880957dafe8c4",
      "timestamp": "2020-09-10T19:03:37+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "c6d3e51d0e7144089f0374e6eb60ff1b",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/16378 | The ultimate send RPC by Sjors \u00c3\u0082\u00c2\u00b7 Pull Request #16378 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2020-09-10T19:05:10+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/16378",
      "id": "c6d3e51d0e7144089f0374e6eb60ff1b",
      "timestamp": "2020-09-10T19:05:10+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "b37a86dfde3c4047823dcfc0436c5213",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/19077 | wallet: Add sqlite as an alternative wallet database and use it for new descriptor wallets by achow101 \u00c3\u0082\u00c2\u00b7 Pull Request #19077 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2020-09-10T19:06:00+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/19077",
      "id": "b37a86dfde3c4047823dcfc0436c5213",
      "timestamp": "2020-09-10T19:06:00+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "b8e0be35ebff463891be335057e403e8",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/19033 | http: Release work queue after event base finish by promag \u00c3\u0082\u00c2\u00b7 Pull Request #19033 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2020-09-10T19:06:15+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/19033",
      "id": "b8e0be35ebff463891be335057e403e8",
      "timestamp": "2020-09-10T19:06:15+00:00"
    },
    {
      "event_type": "TOPIC",
      "message": {
        "id": "f6b2e3081a58449b8051e014c9ae5f58",
        "sender": "wumpus",
        "payload": "#topic Strategies for removing recursive locking in the mempool (jnewbery)",
        "action": false,
        "timestamp": "2020-09-10T19:09:43+00:00"
      },
      "operand": "Strategies for removing recursive locking in the mempool (jnewbery)",
      "id": "f6b2e3081a58449b8051e014c9ae5f58",
      "timestamp": "2020-09-10T19:09:43+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "7bce884e21e14d3ba9ee60b793e2a963",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/19303 | Replace all of the RecursiveMutex instances with the Mutex ones \u00c3\u0082\u00c2\u00b7 Issue #19303 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2020-09-10T19:12:35+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/19303",
      "id": "7bce884e21e14d3ba9ee60b793e2a963",
      "timestamp": "2020-09-10T19:12:35+00:00"
    },
    {
      "event_type": "TOPIC",
      "message": {
        "id": "c71b336d26b34b888c9bdc630d23bdb9",
        "sender": "wumpus",
        "payload": "#topic Review the experience of 3 month bitcoin-core/gui repository (jonasschnelli)",
        "action": false,
        "timestamp": "2020-09-10T19:40:27+00:00"
      },
      "operand": "Review the experience of 3 month bitcoin-core/gui repository (jonasschnelli)",
      "id": "c71b336d26b34b888c9bdc630d23bdb9",
      "timestamp": "2020-09-10T19:40:27+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "8d94ccf97b6141dfb2bd3112a14d7f5b",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/19461 | multiprocess: Add bitcoin-gui -ipcconnect option by ryanofsky \u00c3\u0082\u00c2\u00b7 Pull Request #19461 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2020-09-10T19:46:25+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/19461",
      "id": "8d94ccf97b6141dfb2bd3112a14d7f5b",
      "timestamp": "2020-09-10T19:46:25+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "ab71e9c0c48c44ad9d72af29526930d6",
        "sender": "jeremyrubin",
        "payload": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-289842646",
        "action": false,
        "timestamp": "2020-09-10T19:55:55+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-289842646",
      "id": "ab71e9c0c48c44ad9d72af29526930d6",
      "timestamp": "2020-09-10T19:55:55+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "f00f6f91a0064bac9eda215e99dd5145",
        "sender": "jnewbery",
        "payload": "https://github.com/bitcoin/bitcoin/pull/19071",
        "action": false,
        "timestamp": "2020-09-10T19:57:02+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/pull/19071",
      "id": "f00f6f91a0064bac9eda215e99dd5145",
      "timestamp": "2020-09-10T19:57:02+00:00"
    },
    {
      "event_type": "END_MEETING",
      "message": {
        "id": "77a26d69cc5c42c7b3f91824a9413527",
        "sender": "wumpus",
        "payload": "#endmeeting",
        "action": false,
        "timestamp": "2020-09-10T20:01:42+00:00"
      },
      "operand": null,
      "id": "77a26d69cc5c42c7b3f91824a9413527",
      "timestamp": "2020-09-10T20:01:42+00:00"
    }
  ],
  "aliases": {},
  "vote_in_progress": false,
  "motion_index": null
}