{
  "founder": "jonasschnelli",
  "channel": "#bitcoin-core-dev",
  "network": "freenode",
  "id": "0c1717900a124682bf32e8ffbf69bbfa",
  "name": "#bitcoin-core-dev",
  "chair": "jonasschnelli",
  "chairs": [
    "jonasschnelli",
    "wumpus"
  ],
  "nicks": {
    "jonasschnelli": 9,
    "lightningbot": 3,
    "wumpus": 55,
    "kanzure": 1,
    "cfields": 18,
    "meshcollider": 3,
    "achow101": 34,
    "luke-jr": 38,
    "michagogo": 3,
    "gribble": 8,
    "jtimon": 2,
    "sipa": 35,
    "jnewbery": 5,
    "BlueMatt": 7,
    "morcos": 3,
    "Murch": 4,
    "gmaxwell": 58,
    "sdaftuar": 20,
    "RealM9": 2
  },
  "start_time": "2017-10-05T19:02:18+00:00",
  "end_time": "2017-10-05T20:01:57+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: https://botbot.me/freenode/bitcoin-core-dev, http://www.erisian.com.au/bitcoin-core-dev/",
  "current_topic": "dealing with platform-specific code (sipa)",
  "messages": [
    {
      "id": "7ef538b87dc74b97b9f57591fd879bd7",
      "sender": "jonasschnelli",
      "payload": "#startmeeting",
      "action": false,
      "timestamp": "2017-10-05T19:02:18+00:00"
    },
    {
      "id": "c1a6d7d9423842cd8a2f88e1c9702f72",
      "sender": "lightningbot",
      "payload": "Meeting started Thu Oct  5 19:02:18 2017 UTC.  The chair is jonasschnelli. Information about MeetBot at http://wiki.debian.org/MeetBot.",
      "action": false,
      "timestamp": "2017-10-05T19:02:18+00:00"
    },
    {
      "id": "6ed0a64e282a454087b464d072b9a4d1",
      "sender": "lightningbot",
      "payload": "Useful Commands: #action #agreed #help #info #idea #link #topic.",
      "action": false,
      "timestamp": "2017-10-05T19:02:18+00:00"
    },
    {
      "id": "7716c92d6d184640a6a4655dce1bdb2a",
      "sender": "wumpus",
      "payload": "yes",
      "action": false,
      "timestamp": "2017-10-05T19:02:22+00:00"
    },
    {
      "id": "e6f2f73528484c918d4928ddee3c28a7",
      "sender": "jonasschnelli",
      "payload": "Meeting: wumpus sipa gmaxwell jonasschnelli morcos luke-jr btcdrak sdaftuar jtimon cfields petertodd kanzure bluematt instagibbs phantomcircuit codeshark michagogo marcofalke paveljanik NicolasDorier",
      "action": false,
      "timestamp": "2017-10-05T19:02:26+00:00"
    },
    {
      "id": "497043ff04e2479ca5719fecc97e0268",
      "sender": "kanzure",
      "payload": "hi.",
      "action": false,
      "timestamp": "2017-10-05T19:02:32+00:00"
    },
    {
      "id": "5192c23a835d4b1fab5c586dca107b28",
      "sender": "jonasschnelli",
      "payload": "wumpus: sry: though your where OL",
      "action": false,
      "timestamp": "2017-10-05T19:02:34+00:00"
    },
    {
      "id": "4fe55dbf99584e338dacd7fd431001a2",
      "sender": "cfields",
      "payload": "hi",
      "action": false,
      "timestamp": "2017-10-05T19:02:42+00:00"
    },
    {
      "id": "acac62fba5e24edaba815889e75a5bf3",
      "sender": "wumpus",
      "payload": "#bitcoin-core-dev Meeting: wumpus sipa gmaxwell jonasschnelli morcos luke-jr btcdrak sdaftuar jtimon cfields petertodd kanzure bluematt instagibbs phantomcircuit codeshark michagogo marcofalke paveljanik NicolasDorier jl2012 achow101",
      "action": false,
      "timestamp": "2017-10-05T19:02:43+00:00"
    },
    {
      "id": "c25e405476b245cb95ac8b1763790027",
      "sender": "meshcollider",
      "payload": "Hello",
      "action": false,
      "timestamp": "2017-10-05T19:02:43+00:00"
    },
    {
      "id": "9271e752810b4fc28175b5e35c4701d8",
      "sender": "achow101",
      "payload": "hi",
      "action": false,
      "timestamp": "2017-10-05T19:02:45+00:00"
    },
    {
      "id": "39c32e84839e481a8b3ff5881374205b",
      "sender": "luke-jr",
      "payload": "hi",
      "action": false,
      "timestamp": "2017-10-05T19:02:49+00:00"
    },
    {
      "id": "6dd9e9e0fd1d41ae9a658c9e16d4df04",
      "sender": "wumpus",
      "payload": "jonasschnelli: yes I was a bit late, sorry",
      "action": false,
      "timestamp": "2017-10-05T19:03:10+00:00"
    },
    {
      "id": "15521c94a55a4f358a8db77659cc2f06",
      "sender": "wumpus",
      "payload": "#topic high-priority for review",
      "action": false,
      "timestamp": "2017-10-05T19:03:21+00:00"
    },
    {
      "id": "edc5630b9e13490f95f97f0136824cf9",
      "sender": "michagogo",
      "payload": "Huh?",
      "action": false,
      "timestamp": "2017-10-05T19:03:43+00:00"
    },
    {
      "id": "b0c16943005e4208bf33ba9255523ad4",
      "sender": "jonasschnelli",
      "payload": "#chair wumpus",
      "action": false,
      "timestamp": "2017-10-05T19:03:43+00:00"
    },
    {
      "id": "29801972695542d48e3ae460cd2e2d1f",
      "sender": "lightningbot",
      "payload": "Current chairs: jonasschnelli wumpus",
      "action": false,
      "timestamp": "2017-10-05T19:03:43+00:00"
    },
    {
      "id": "ac6efd6147544a16bf235c7bda939ded",
      "sender": "achow101",
      "payload": "#10637 please?",
      "action": false,
      "timestamp": "2017-10-05T19:03:44+00:00"
    },
    {
      "id": "278b18ba5ab8479f9be285317b98a42c",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/10637 | Coin Selection with Murchs algorithm by achow101 \u00c3\u0082\u00c2\u00b7 Pull Request #10637 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2017-10-05T19:03:47+00:00"
    },
    {
      "id": "96562afd45cf41deaa81e1f222d69106",
      "sender": "michagogo",
      "payload": "Oh, right",
      "action": false,
      "timestamp": "2017-10-05T19:04:15+00:00"
    },
    {
      "id": "d22f312f471349f0a9a57d3cace02038",
      "sender": "michagogo",
      "payload": "It's actually Thursday",
      "action": false,
      "timestamp": "2017-10-05T19:04:19+00:00"
    },
    {
      "id": "fe98469d9aa840b287b69f8a1c180df1",
      "sender": "wumpus",
      "payload": "achow101: ok",
      "action": false,
      "timestamp": "2017-10-05T19:04:34+00:00"
    },
    {
      "id": "a9ebb030f143409facb4a3a0e86b62ae",
      "sender": "wumpus",
      "payload": "I also added #11389 today as it's blocking segwit wallet support",
      "action": false,
      "timestamp": "2017-10-05T19:05:16+00:00"
    },
    {
      "id": "a5215dc5fb064acea535f1b7c99bf063",
      "sender": "jtimon",
      "payload": "locks at #8498 and hides for the rest of the meeting",
      "action": true,
      "timestamp": "2017-10-05T19:05:16+00:00"
    },
    {
      "id": "f882f70984964bb9b0f742fcb23ec82a",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/11389 | Support having SegWit always active in regtest by sipa \u00c3\u0082\u00c2\u00b7 Pull Request #11389 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2017-10-05T19:05:17+00:00"
    },
    {
      "id": "1c7ec293d9974c4ebccbc9819f2c9844",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/8498 | Near-Bugfix: Optimization: Minimize the number of times it is checked that no money... by jtimon \u00c3\u0082\u00c2\u00b7 Pull Request #8498 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2017-10-05T19:05:20+00:00"
    },
    {
      "id": "df8ed33f2e504098a37e9be3421cd0c4",
      "sender": "meshcollider",
      "payload": "#11403 itself should be in there too probably?",
      "action": false,
      "timestamp": "2017-10-05T19:05:47+00:00"
    },
    {
      "id": "b0c34668229e4f10bbec401c10017edf",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/11403 | SegWit wallet support by sipa \u00c3\u0082\u00c2\u00b7 Pull Request #11403 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2017-10-05T19:05:50+00:00"
    },
    {
      "id": "8e77cd543b7a4345b8443ef9d2c8421b",
      "sender": "sipa",
      "payload": "wumpus: i haven't had the time to work further on 11403, though concept review is certainly welcome",
      "action": false,
      "timestamp": "2017-10-05T19:06:07+00:00"
    },
    {
      "id": "b2f9a23a747d4fe2bbf03b080508991a",
      "sender": "jnewbery",
      "payload": "I've been reviewing 11389 this afternoon. It looks generally good, but breaks assumevalid.py, which I'm trying to fix now",
      "action": false,
      "timestamp": "2017-10-05T19:06:16+00:00"
    },
    {
      "id": "aba8df8c638d47dab734926d92187678",
      "sender": "jtimon",
      "payload": "s/locks/looks/",
      "action": false,
      "timestamp": "2017-10-05T19:06:28+00:00"
    },
    {
      "id": "99230b18ed954f24aca8961092542d0c",
      "sender": "BlueMatt",
      "payload": "sipa: I think we need a document on the various possible approaches, tbh",
      "action": false,
      "timestamp": "2017-10-05T19:06:47+00:00"
    },
    {
      "id": "b86fab7f33bd43caa37a728a0790ef4a",
      "sender": "sipa",
      "payload": "BlueMatt: yes, i'll work on that soon",
      "action": false,
      "timestamp": "2017-10-05T19:06:58+00:00"
    },
    {
      "id": "dd4f41cd802947b2b435cd7b8743bb33",
      "sender": "BlueMatt",
      "payload": "there are a few and talking through all of them is going to need something more formal",
      "action": false,
      "timestamp": "2017-10-05T19:07:00+00:00"
    },
    {
      "id": "4e4476893d444a56912062237a0e813f",
      "sender": "BlueMatt",
      "payload": "thanks",
      "action": false,
      "timestamp": "2017-10-05T19:07:02+00:00"
    },
    {
      "id": "c9a0c964caff41e1971161ff0ed300c7",
      "sender": "morcos",
      "payload": "achow101: does 10637 implement all the coin selection logic we discussed in SF or only BnB?  Is there a high level description somewhere of what the PR is purporting to accomplish and what else will need to be done before 0.16?",
      "action": false,
      "timestamp": "2017-10-05T19:07:21+00:00"
    },
    {
      "id": "ed13b39d96174a45af40b8f54e70f9db",
      "sender": "achow101",
      "payload": "morcos: only BnB",
      "action": false,
      "timestamp": "2017-10-05T19:07:32+00:00"
    },
    {
      "id": "4b443aaad022432da33d44287c71b5d8",
      "sender": "achow101",
      "payload": "morcos: IIRC Murch is working on all of the coin selection stuff that we discussed",
      "action": false,
      "timestamp": "2017-10-05T19:07:48+00:00"
    },
    {
      "id": "09d3ac45b6cf4738857c3af322fc325c",
      "sender": "wumpus",
      "payload": "btw I posted a proposed release schedule for 0.16.0 yesterday",
      "action": false,
      "timestamp": "2017-10-05T19:07:52+00:00"
    },
    {
      "id": "70851dee0fdd464d96ead885c6ca61df",
      "sender": "wumpus",
      "payload": "#link https://github.com/bitcoin/bitcoin/issues/11449",
      "action": false,
      "timestamp": "2017-10-05T19:07:55+00:00"
    },
    {
      "id": "ed90a40a41b14188b5289c62786289c7",
      "sender": "morcos",
      "payload": "achow101: ok.. i've already forgotten what that is, so might be nice to have that written up in an issue or something so we remember the goal and can think about how this BnB implementation is going to fit into the big picture",
      "action": false,
      "timestamp": "2017-10-05T19:08:28+00:00"
    },
    {
      "id": "d2016d615ce54a5b95194820037dbf5a",
      "sender": "achow101",
      "payload": "morcos: the description of what 10637 does is in the first comment.",
      "action": false,
      "timestamp": "2017-10-05T19:09:16+00:00"
    },
    {
      "id": "21250b23c24047e8be069a292cd72529",
      "sender": "achow101",
      "payload": "I can make an issue for coin selection changes in general",
      "action": false,
      "timestamp": "2017-10-05T19:09:35+00:00"
    },
    {
      "id": "a05d27529b974ef6beddc033247cea56",
      "sender": "achow101",
      "payload": "*to keep track of",
      "action": false,
      "timestamp": "2017-10-05T19:09:42+00:00"
    },
    {
      "id": "e514c7701ee04951910fb9897af655ff",
      "sender": "wumpus",
      "payload": "ok, I think that concludes high priority for review proposals",
      "action": false,
      "timestamp": "2017-10-05T19:10:53+00:00"
    },
    {
      "id": "e0fc24debea844e295d8ac0f169c5f10",
      "sender": "wumpus",
      "payload": "any other topics?",
      "action": false,
      "timestamp": "2017-10-05T19:10:57+00:00"
    },
    {
      "id": "ef4115df90a64356a6cfedc25a5e094f",
      "sender": "achow101",
      "payload": "topic suggestion: bad block interrogation/invalid block peer banning",
      "action": false,
      "timestamp": "2017-10-05T19:11:20+00:00"
    },
    {
      "id": "6605808d378845078f474b1459666732",
      "sender": "wumpus",
      "payload": "#action achow101 make an issue for coin selection changes in general",
      "action": false,
      "timestamp": "2017-10-05T19:11:25+00:00"
    },
    {
      "id": "fe0944044dca446ca1b2fdcae03ca96a",
      "sender": "wumpus",
      "payload": "#topic bad block interrogation/invalid block peer banning",
      "action": false,
      "timestamp": "2017-10-05T19:11:38+00:00"
    },
    {
      "id": "597d92ed1f254babbfd171be8a20c239",
      "sender": "achow101",
      "payload": "relevant PR is #11446 (I did this in class so it kinda sucks)",
      "action": false,
      "timestamp": "2017-10-05T19:11:53+00:00"
    },
    {
      "id": "7936ea6429a54f45afff75f9b6f1b400",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/11446 | [WIP] Bad block interrogation by achow101 \u00c3\u0082\u00c2\u00b7 Pull Request #11446 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2017-10-05T19:11:54+00:00"
    },
    {
      "id": "2e8bcf9b64884e49b8b7f5c063b4a292",
      "sender": "Murch",
      "payload": "hey, sorry, was still in a meeting",
      "action": false,
      "timestamp": "2017-10-05T19:12:06+00:00"
    },
    {
      "id": "febbd0f773744785a6f4c3846a3fc55a",
      "sender": "achow101",
      "payload": "basically the idea is gmaxwell's. when we receive an invalid block, we want to make sure that all of our peers would also reject that block as invalid. If they don't ban them",
      "action": false,
      "timestamp": "2017-10-05T19:12:34+00:00"
    },
    {
      "id": "daeb95d00faa4726b3d13df0f47c439c",
      "sender": "Murch",
      "payload": "I've been working on it, but since I do that in my free time in the evenings, it's been rather slow.",
      "action": false,
      "timestamp": "2017-10-05T19:12:37+00:00"
    },
    {
      "id": "6122957557404b1f8e5451e6cd151c66",
      "sender": "luke-jr",
      "payload": "wumpus: this feels delayed?",
      "action": false,
      "timestamp": "2017-10-05T19:12:53+00:00"
    },
    {
      "id": "439f5d698e5a4344bbf72fa6d3747a1f",
      "sender": "gmaxwell",
      "payload": "The general idea is that we aren't sufficiently agressive about punting peers on different consensus rules, so they can DOS attack us by sucking up slots, potentially hours per peer leaving us isolated... So there are number of things we can to do seek and destroy to speed up up.",
      "action": false,
      "timestamp": "2017-10-05T19:13:07+00:00"
    },
    {
      "id": "eb3f3fd836da4d918d6e69a4ba55382e",
      "sender": "wumpus",
      "payload": "luke-jr: what feels delayed?",
      "action": false,
      "timestamp": "2017-10-05T19:13:09+00:00"
    },
    {
      "id": "3b1736a1882640a4b1ad24aa9611c214",
      "sender": "luke-jr",
      "payload": "wumpus: 0.16",
      "action": false,
      "timestamp": "2017-10-05T19:13:14+00:00"
    },
    {
      "id": "69cc11a4e0f0469bb6efbe72ebb8249d",
      "sender": "Murch",
      "payload": "@achow101: If you want to collaborate on a write-up, I'd make myself available for that.",
      "action": false,
      "timestamp": "2017-10-05T19:13:17+00:00"
    },
    {
      "id": "fbc6bb0878d949b19d5b71e476031bb0",
      "sender": "gmaxwell",
      "payload": "luke-jr: release schedule is delayed because of 0.15.1",
      "action": false,
      "timestamp": "2017-10-05T19:13:20+00:00"
    },
    {
      "id": "307f620a3e1143a3b11db58d5d9e0976",
      "sender": "achow101",
      "payload": "Murch: ok",
      "action": false,
      "timestamp": "2017-10-05T19:13:23+00:00"
    },
    {
      "id": "5eb9ec002f804e7d9ca888e69b3355b0",
      "sender": "luke-jr",
      "payload": "i c",
      "action": false,
      "timestamp": "2017-10-05T19:13:24+00:00"
    },
    {
      "id": "5c433fdaf2bc4bb4bfd7fca25a00729e",
      "sender": "wumpus",
      "payload": "luke-jr: yes, two months extra added, I mention that in the issue",
      "action": false,
      "timestamp": "2017-10-05T19:13:31+00:00"
    },
    {
      "id": "5508590387444060929b45fab7997ed6",
      "sender": "achow101",
      "payload": "what I wanted to discuss was the way to actually go about determining who to ban",
      "action": false,
      "timestamp": "2017-10-05T19:13:53+00:00"
    },
    {
      "id": "fc05acdcedcf4c61b8ff6dad59d21989",
      "sender": "Murch",
      "payload": "@achow101: Gonna be traveling the next three weeks, so I might actually have more time. ;)",
      "action": false,
      "timestamp": "2017-10-05T19:14:20+00:00"
    },
    {
      "id": "dafc911cc51b4c38b913ab301444716d",
      "sender": "sipa",
      "payload": "what is the issue with just looking at headers?",
      "action": false,
      "timestamp": "2017-10-05T19:14:22+00:00"
    },
    {
      "id": "39672c7a9e0244ebb0988f4d0f76c3af",
      "sender": "gmaxwell",
      "payload": "achow101: I was kinda hoping we could implement something just from the messages we already get, it's my belief (could be wrong) that effectively we always learn the peers best header chain-- so we can begin kicking off peers based on that, as a first pass.",
      "action": false,
      "timestamp": "2017-10-05T19:14:23+00:00"
    },
    {
      "id": "e4503c6911b34cb89ae5572d54938987",
      "sender": "luke-jr",
      "payload": "achow101: this contradicts the fixes in #10593",
      "action": false,
      "timestamp": "2017-10-05T19:14:34+00:00"
    },
    {
      "id": "bdf4d8fe75a84a15bf09b79794736db6",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/10593 | Relax punishment for peers relaying invalid blocks and headers by luke-jr \u00c3\u0082\u00c2\u00b7 Pull Request #10593 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2017-10-05T19:14:36+00:00"
    },
    {
      "id": "2b0e1af7b98a46b5baf283eb533d26ac",
      "sender": "gmaxwell",
      "payload": "achow101: I think we should be also drawing a distinction between inbound and outbound: the issue is what if we have a peer that accepts a broader set of blocks but would switch to our chain after learning of it.",
      "action": false,
      "timestamp": "2017-10-05T19:14:58+00:00"
    },
    {
      "id": "c6c8b71299724b65874208602ddd7677",
      "sender": "achow101",
      "payload": "gmaxwell: that's what I am not sure about. I don't think we necessarily know our peer's best header chain. suppose both us and them are fully synced, how do we know their best header chain until a new block appears?",
      "action": false,
      "timestamp": "2017-10-05T19:15:15+00:00"
    },
    {
      "id": "668317f016d2486f87eca14417087c12",
      "sender": "wumpus",
      "payload": "luke-jr: maybe two months is too much, but we'll see...",
      "action": false,
      "timestamp": "2017-10-05T19:15:47+00:00"
    },
    {
      "id": "1f3ba3bb330c47eeb8d56a0b3a7c326c",
      "sender": "luke-jr",
      "payload": "wumpus: nah, that sounds reasonable",
      "action": false,
      "timestamp": "2017-10-05T19:16:03+00:00"
    },
    {
      "id": "989614321bbd432088fa4901d5ec067c",
      "sender": "sipa",
      "payload": "achow101: when a new block appears, assuming it's PoW-valid to us, we'll learn about it through inv/headers/cb/...",
      "action": false,
      "timestamp": "2017-10-05T19:16:06+00:00"
    },
    {
      "id": "33f680bbdc6f4dc5a60e5e08d98e38cb",
      "sender": "jonasschnelli",
      "payload": "Yes. +2 M seems okay to me",
      "action": false,
      "timestamp": "2017-10-05T19:16:14+00:00"
    },
    {
      "id": "c7840ea2c0694c8b94a25209a2c99fa0",
      "sender": "gmaxwell",
      "payload": "sipa: but I believe he's right, we would have to wait for a new block, which is among the situations we're trying to resolve.",
      "action": false,
      "timestamp": "2017-10-05T19:16:36+00:00"
    },
    {
      "id": "a2ee85437bf24858b7b30975b47a58f7",
      "sender": "achow101",
      "payload": "sipa: right, but I'm concerned about before a new block appears. we just connected to them or they just connected to us. we want to know then if we should ban them or not",
      "action": false,
      "timestamp": "2017-10-05T19:17:07+00:00"
    },
    {
      "id": "a00095ffcc534a19ad0a70fd67938ac5",
      "sender": "luke-jr",
      "payload": "IMO the desirable logic would be: for outbound connections, disconnect (don't ban) peers that aren't on the same chain; for inbound, tolerate it unless they reject a known-valid block",
      "action": false,
      "timestamp": "2017-10-05T19:17:20+00:00"
    },
    {
      "id": "43c2c953484e49348e42ae47241f11b4",
      "sender": "sdaftuar",
      "payload": "we send getheaders messages on connect, typically",
      "action": false,
      "timestamp": "2017-10-05T19:17:22+00:00"
    },
    {
      "id": "9978806bf7ae4049a274587a73a08dba",
      "sender": "gmaxwell",
      "payload": "For example say we are surrounded by ForkCoin peers, they are rejecting all bitcoin blocks.  There are few forkcoin miners so they only get blocks once per day.",
      "action": false,
      "timestamp": "2017-10-05T19:17:25+00:00"
    },
    {
      "id": "2c1f47843713406bb9d2fa8e0371caa6",
      "sender": "gmaxwell",
      "payload": "We don't want to wait for them to get a new block just to figure out our current batch of peers are already on a chain we reject.",
      "action": false,
      "timestamp": "2017-10-05T19:18:01+00:00"
    },
    {
      "id": "d52adbe353c6415c9c6dc2d5dcc1402e",
      "sender": "achow101",
      "payload": "sdaftuar: are you sure? all I could find is that we sometimes send getheaders, not all the time",
      "action": false,
      "timestamp": "2017-10-05T19:18:02+00:00"
    },
    {
      "id": "766cedbe59744ac2be38270b87d00256",
      "sender": "sdaftuar",
      "payload": "achow101: we send getheaders messages to all our peers at some point after startup, but they might ignore them",
      "action": false,
      "timestamp": "2017-10-05T19:18:29+00:00"
    },
    {
      "id": "7c4540c2dac84086a688be4d646a7515",
      "sender": "cfields",
      "payload": "sdaftuar: not to incoming light clients, i think?",
      "action": false,
      "timestamp": "2017-10-05T19:18:34+00:00"
    },
    {
      "id": "93dc278958c6454b913272efcf0ca0c9",
      "sender": "sdaftuar",
      "payload": "eg if they are doing ibd themselves or something",
      "action": false,
      "timestamp": "2017-10-05T19:18:35+00:00"
    },
    {
      "id": "1db5cef6651446c2b21f85b840892d78",
      "sender": "sdaftuar",
      "payload": "not to light clients, correct",
      "action": false,
      "timestamp": "2017-10-05T19:18:44+00:00"
    },
    {
      "id": "484b710280184fcc8f72a6fc30dd3330",
      "sender": "sipa",
      "payload": "light clients don't matter here",
      "action": false,
      "timestamp": "2017-10-05T19:18:52+00:00"
    },
    {
      "id": "64518f2f068e47b3a58e8b9fcb173d51",
      "sender": "sdaftuar",
      "payload": "but to inbound node_network ndoes we do",
      "action": false,
      "timestamp": "2017-10-05T19:18:53+00:00"
    },
    {
      "id": "3526fe14752b493082e924cc5f77c75f",
      "sender": "gmaxwell",
      "payload": "If we _always_ sent getheaders and then kicked outbound peers whos chain has a block we've rejected, then I think that is the best we can do per that concern (still not a perfect fix, since you're isolated until forkcoin finds at least one block)",
      "action": false,
      "timestamp": "2017-10-05T19:19:07+00:00"
    },
    {
      "id": "f755d512c0ba467caf9342f596c3b29f",
      "sender": "achow101",
      "payload": "sdaftuar: if we are sending getheaders, if they are on a different chain, we still wouldn't necessarily know because our start block may not be on their best chain",
      "action": false,
      "timestamp": "2017-10-05T19:19:18+00:00"
    },
    {
      "id": "0ce78025eec04f08b90b93dc952ed67f",
      "sender": "gmaxwell",
      "payload": "oh hm. then perhaps we already do where it matters.",
      "action": false,
      "timestamp": "2017-10-05T19:19:23+00:00"
    },
    {
      "id": "683891428f044915a92b8deb1681d8d3",
      "sender": "sdaftuar",
      "payload": "gmaxwell: the difficult part might be that you don't know the chain they're on is invalid",
      "action": false,
      "timestamp": "2017-10-05T19:19:42+00:00"
    },
    {
      "id": "72403c8b77304b6f93203ef913306c4d",
      "sender": "sdaftuar",
      "payload": "if it's got less work than yours",
      "action": false,
      "timestamp": "2017-10-05T19:19:47+00:00"
    },
    {
      "id": "d65da64bf84b4ed6a7578a27f3abae2e",
      "sender": "RealM9",
      "payload": "Topic suggestion: s2x",
      "action": false,
      "timestamp": "2017-10-05T19:19:53+00:00"
    },
    {
      "id": "8edc34f1ea994bfd84312e6e59a8fe4e",
      "sender": "jonasschnelli",
      "payload": "RealM9: no",
      "action": false,
      "timestamp": "2017-10-05T19:20:04+00:00"
    },
    {
      "id": "eae3a2e04c854f6f9bb63377803dc205",
      "sender": "luke-jr",
      "payload": "sdaftuar: do you care?",
      "action": false,
      "timestamp": "2017-10-05T19:20:06+00:00"
    },
    {
      "id": "fa12c54c73bb4e8f87bdfbd81cf40f60",
      "sender": "luke-jr",
      "payload": "if they're rejecting your better chain, you want to disconnect them anyway",
      "action": false,
      "timestamp": "2017-10-05T19:20:28+00:00"
    },
    {
      "id": "e4c6bcc6412c46c6855c60323fa2e453",
      "sender": "gmaxwell",
      "payload": "sdaftuar: seems like a seperate concern, we should also be kicking outbound peers that have less work than us, I think.",
      "action": false,
      "timestamp": "2017-10-05T19:20:33+00:00"
    },
    {
      "id": "c063805896074191a67772a20a018b67",
      "sender": "RealM9",
      "payload": "Ok, but community is pretty interested. Are you going to change POW?",
      "action": false,
      "timestamp": "2017-10-05T19:20:38+00:00"
    },
    {
      "id": "9812a1c8b9b344ff9fa77be85f37339e",
      "sender": "sdaftuar",
      "payload": "gmaxwell: i think that would be a good idea, yeah",
      "action": false,
      "timestamp": "2017-10-05T19:20:43+00:00"
    },
    {
      "id": "dcd4aeaeff4e4a4b99da788593f6ef7b",
      "sender": "gmaxwell",
      "payload": "But it would be silly to be overly agressive.",
      "action": false,
      "timestamp": "2017-10-05T19:20:43+00:00"
    },
    {
      "id": "3e1f06a2023640969f88c1728d2fbcb3",
      "sender": "sipa",
      "payload": "RealM9: us?",
      "action": false,
      "timestamp": "2017-10-05T19:20:48+00:00"
    },
    {
      "id": "e29d31e3983b40c4b0eea32da0639e56",
      "sender": "achow101",
      "payload": "sdaftuar: gmaxwell what I propose is that we send a getheaders for our earliest known invalid block (within a certain time frame) and see if they respond with invalid blocks",
      "action": false,
      "timestamp": "2017-10-05T19:20:58+00:00"
    },
    {
      "id": "84d9d4d9bc3e49f69ffe4b6b053e8b79",
      "sender": "luke-jr",
      "payload": "RealM9: that's a decision for the community, not for developers. anyhow, ask on #bitcoin if you really want to discuss it",
      "action": false,
      "timestamp": "2017-10-05T19:21:18+00:00"
    },
    {
      "id": "6c6e6c7587dc4f1b823330e7bf92ef7d",
      "sender": "gmaxwell",
      "payload": "achow101: I don't think we need to do that: for sync purposes any outbound peer we should be makign sure we learn their headers chain period (they may have a better chain than us and we should sync up ASAP)",
      "action": false,
      "timestamp": "2017-10-05T19:21:34+00:00"
    },
    {
      "id": "18dc0ad0d67847c58514fb0948a02b8d",
      "sender": "sdaftuar",
      "payload": "achow101: i'm not sure that's necessary?",
      "action": false,
      "timestamp": "2017-10-05T19:21:36+00:00"
    },
    {
      "id": "07d1be9f5ccf4dee915f3f8917db14c5",
      "sender": "morcos",
      "payload": "RealM9: we're in a meeting , but please see: https://bitcoincore.org/en/2017/08/18/btc1-misleading-statements/",
      "action": false,
      "timestamp": "2017-10-05T19:21:45+00:00"
    },
    {
      "id": "5976307a66e54faf9309b8648d9a5a9a",
      "sender": "gmaxwell",
      "payload": "achow101: if we're already doing that we'll notice known invalid block in their header chaip (well we will once we have code for that)",
      "action": false,
      "timestamp": "2017-10-05T19:21:49+00:00"
    },
    {
      "id": "044d0e244dec4c28ba25412efcb7a829",
      "sender": "sdaftuar",
      "payload": "i think if we do gmaxwell's suggestion of booting inbound peers who are on less work chains, then we'd be in good shape",
      "action": false,
      "timestamp": "2017-10-05T19:21:52+00:00"
    },
    {
      "id": "8cf8f7e31f2745369a3e80843ff05350",
      "sender": "sdaftuar",
      "payload": "s/inbound/outbound/",
      "action": false,
      "timestamp": "2017-10-05T19:21:58+00:00"
    },
    {
      "id": "a6f2297c29064b079db9ca43ab62bc7f",
      "sender": "luke-jr",
      "payload": "I think we may actually want to track the headers of invalid chains..",
      "action": false,
      "timestamp": "2017-10-05T19:22:14+00:00"
    },
    {
      "id": "617c8375859a448f9cad68ef3a149b1e",
      "sender": "achow101",
      "payload": "what about inbound peers?",
      "action": false,
      "timestamp": "2017-10-05T19:22:21+00:00"
    },
    {
      "id": "e7e395c07e0f464282fa1c6cd2cae490",
      "sender": "gmaxwell",
      "payload": "For _inbound_ I think we should be setting a flag that they're consensus inconsistent which excludes them from the inbound peer management connection reservation.",
      "action": false,
      "timestamp": "2017-10-05T19:22:31+00:00"
    },
    {
      "id": "1a6bc2f20ccb4ee2a3b9368e5ae5d234",
      "sender": "sdaftuar",
      "payload": "achow101: i think we should more aggerssively evict inbound peers if they appear to be on invalid chains",
      "action": false,
      "timestamp": "2017-10-05T19:22:35+00:00"
    },
    {
      "id": "cfbe029d550a436a883cdd37c352c540",
      "sender": "gmaxwell",
      "payload": "so they'll get kicked off in favor of other inbound peers.",
      "action": false,
      "timestamp": "2017-10-05T19:22:43+00:00"
    },
    {
      "id": "0b7123165f894d0399795268bb540fdd",
      "sender": "meshcollider",
      "payload": "Agreed",
      "action": false,
      "timestamp": "2017-10-05T19:22:52+00:00"
    },
    {
      "id": "a17f99b8d874447a88159886f6ba8447",
      "sender": "gmaxwell",
      "payload": "so we don't need to be agressive: they'll just get pushed out by other inbound peers.",
      "action": false,
      "timestamp": "2017-10-05T19:23:02+00:00"
    },
    {
      "id": "a23419cd00a448d79c5096d03d1261b0",
      "sender": "luke-jr",
      "payload": "consider: if an invalid chain has higher hashrate than the real chain, and then suddenly the invalid chain's hashrate drops off, without an equivalent increase on the main chain, we should consider that a possible attack and hold back on confirming transactions until it is resolved",
      "action": false,
      "timestamp": "2017-10-05T19:23:02+00:00"
    },
    {
      "id": "26a35cc90f9a4824ba1ce82c92b4aeb9",
      "sender": "sdaftuar",
      "payload": "gmaxwell: yes i agree with you",
      "action": false,
      "timestamp": "2017-10-05T19:23:16+00:00"
    },
    {
      "id": "f26efbfdc84e41e1bad6ef009722fef2",
      "sender": "achow101",
      "payload": "my point is how do we know that an inbound peer is on an invalid chain?",
      "action": false,
      "timestamp": "2017-10-05T19:23:49+00:00"
    },
    {
      "id": "ba534628894f4f318781152f29107798",
      "sender": "gmaxwell",
      "payload": "luke-jr: I think there is some need for smarter wallet confirmation logic but I think thats a seperate matter. (there was a paper 6-ish months ago that also points out the the reorg probablity math in the whitepaper is somewhat incomplete)",
      "action": false,
      "timestamp": "2017-10-05T19:24:03+00:00"
    },
    {
      "id": "c3d9ab3681cd4c1d9eae36514816115c",
      "sender": "sdaftuar",
      "payload": "achow101: set a flag if they relay an invalid block/blockheader",
      "action": false,
      "timestamp": "2017-10-05T19:24:19+00:00"
    },
    {
      "id": "6b1358d76ef4416c929a6f9568bdd156",
      "sender": "luke-jr",
      "payload": "gmaxwell: right, but this is relevant because we can't assume \"relays invalid headers\" means the other node *accepts* the invalid block",
      "action": false,
      "timestamp": "2017-10-05T19:24:32+00:00"
    },
    {
      "id": "811e12d7bf21413b835aeea33262477b",
      "sender": "gmaxwell",
      "payload": "and we still interogate their headers if they're NODE_NETWORK/NODE_LIMITED",
      "action": false,
      "timestamp": "2017-10-05T19:24:44+00:00"
    },
    {
      "id": "db252c5f18334ae8988dc9462821d9bf",
      "sender": "luke-jr",
      "payload": "sdaftuar: we intentionally relay blocks before checking validity now",
      "action": false,
      "timestamp": "2017-10-05T19:24:58+00:00"
    },
    {
      "id": "56d143a4e42e49bb93aa2e4655964b72",
      "sender": "achow101",
      "payload": "sdaftuar: that requires them to have a block to relay to us, which could take hours or days",
      "action": false,
      "timestamp": "2017-10-05T19:25:03+00:00"
    },
    {
      "id": "f48459e78da04260a12e277677c221ca",
      "sender": "gmaxwell",
      "payload": "luke-jr: the protocol does not have you realying a header of a block you haven't accepted. If you do that you risk dos attacking peers already.",
      "action": false,
      "timestamp": "2017-10-05T19:25:18+00:00"
    },
    {
      "id": "e97984df595c4c59a684f0f82b20530a",
      "sender": "sdaftuar",
      "payload": "achow101: i don't think we need to worry as much about inbound peers",
      "action": false,
      "timestamp": "2017-10-05T19:25:19+00:00"
    },
    {
      "id": "41e185048c234e54b1d66467239e71a4",
      "sender": "sdaftuar",
      "payload": "achow101: for instance an attacker can already try to use all your inbound slots and not send you anything",
      "action": false,
      "timestamp": "2017-10-05T19:25:34+00:00"
    },
    {
      "id": "03d1f02b84ef4ccb9ccd129ee3531ae7",
      "sender": "gmaxwell",
      "payload": "luke-jr: the only place that happens in the protocol is HB BIP152 messages.",
      "action": false,
      "timestamp": "2017-10-05T19:25:40+00:00"
    },
    {
      "id": "a8335a1ce7604be680fc8d338528d41d",
      "sender": "achow101",
      "payload": "sdaftuar: right, ok",
      "action": false,
      "timestamp": "2017-10-05T19:25:51+00:00"
    },
    {
      "id": "d7b7411373064c4181b28cd043a8e847",
      "sender": "luke-jr",
      "payload": "gmaxwell: which may be all you see from CB peers",
      "action": false,
      "timestamp": "2017-10-05T19:25:58+00:00"
    },
    {
      "id": "c0ae711a1b7f43afaa7cb32d397e63b5",
      "sender": "gmaxwell",
      "payload": "sdaftuar: yes, for inbound we can just deprive them of reservations.",
      "action": false,
      "timestamp": "2017-10-05T19:26:18+00:00"
    },
    {
      "id": "4b1b1e40edeb44a89ba38bebc1159b13",
      "sender": "sdaftuar",
      "payload": "luke-jr: even with bip152 the headers need to be valid",
      "action": false,
      "timestamp": "2017-10-05T19:26:49+00:00"
    },
    {
      "id": "e158d67b19b14acf86fb261ec6f86d1c",
      "sender": "luke-jr",
      "payload": "sdaftuar: yes, the header itself; but it can be a valid header for an invalid block",
      "action": false,
      "timestamp": "2017-10-05T19:27:04+00:00"
    },
    {
      "id": "7de7cb0572504bf6a544b9c96c4b602f",
      "sender": "gmaxwell",
      "payload": "yes, though we'd catch it on the _next_ block.",
      "action": false,
      "timestamp": "2017-10-05T19:27:16+00:00"
    },
    {
      "id": "210eb28fee2e4182a551710d94873b39",
      "sender": "sdaftuar",
      "payload": "luke-jr: if it builds on an invalid chain, i believe the header would be invalid",
      "action": false,
      "timestamp": "2017-10-05T19:27:19+00:00"
    },
    {
      "id": "3ca42de521c64009a747ca9a10caadaf",
      "sender": "achow101",
      "payload": "so when we connect to an outbound peer, we will send them a getheaders so we know their best headers chain and ban accordingly",
      "action": false,
      "timestamp": "2017-10-05T19:27:26+00:00"
    },
    {
      "id": "3533e18233c942038a1f9e6907927587",
      "sender": "luke-jr",
      "payload": "(note I tried to keep track of peer bestblocks in #10512 and basically gave up)",
      "action": false,
      "timestamp": "2017-10-05T19:27:29+00:00"
    },
    {
      "id": "3e63b6792996466ebd808b02a56e0013",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/10512 | Rework same-chain from abusing DoS banning, to explicit checks by luke-jr \u00c3\u0082\u00c2\u00b7 Pull Request #10512 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2017-10-05T19:27:31+00:00"
    },
    {
      "id": "e81e03d756ac446cb71501de6da89d61",
      "sender": "gmaxwell",
      "payload": "when they relay a CB message for a child of an invalid block.",
      "action": false,
      "timestamp": "2017-10-05T19:27:41+00:00"
    },
    {
      "id": "347c176f989c4673b99277e0e7bff51e",
      "sender": "gmaxwell",
      "payload": "achow101: yes, but based on the above I believe we already always send it.",
      "action": false,
      "timestamp": "2017-10-05T19:28:04+00:00"
    },
    {
      "id": "322630b41a464f6fba095d4bf1d78d82",
      "sender": "achow101",
      "payload": "the other part of 11446 is to ban other peers for relaying us an invalid block for which we already know is invalid",
      "action": false,
      "timestamp": "2017-10-05T19:28:11+00:00"
    },
    {
      "id": "83189d17f7b44be886a7958c15c0861e",
      "sender": "gmaxwell",
      "payload": "achow101: because we send it to nodenetwork peers and outbound always are (or or disconnected)",
      "action": false,
      "timestamp": "2017-10-05T19:28:20+00:00"
    },
    {
      "id": "636b169d3f9241b8aeb748c8ee3c73d2",
      "sender": "achow101",
      "payload": "but I'm not sure how that interacts with compact blocks",
      "action": false,
      "timestamp": "2017-10-05T19:28:20+00:00"
    },
    {
      "id": "5674090c54c34385a9286db63564dd46",
      "sender": "gmaxwell",
      "payload": "achow101: FWIW, I think we should probably be just disconnecting and not banning.",
      "action": false,
      "timestamp": "2017-10-05T19:28:33+00:00"
    },
    {
      "id": "2e1485f220b14be0972b5fe6adb18abd",
      "sender": "sdaftuar",
      "payload": "achow101: oh that interaction might be tricky",
      "action": false,
      "timestamp": "2017-10-05T19:28:37+00:00"
    },
    {
      "id": "04bdb817911b4b90bb3a1108b5b5b1e7",
      "sender": "achow101",
      "payload": "gmaxwell: why not ban?",
      "action": false,
      "timestamp": "2017-10-05T19:28:54+00:00"
    },
    {
      "id": "8139f8e5da6b444c98d55ed202fd75d6",
      "sender": "gmaxwell",
      "payload": "I think the interaction isn't too bad, for this purpose a BIP152 CB HB block is relaying you the header of its parent.",
      "action": false,
      "timestamp": "2017-10-05T19:29:07+00:00"
    },
    {
      "id": "a8c039ca62ec4b9ab49a55aa53825c39",
      "sender": "luke-jr",
      "payload": "achow101: in a softfork, old nodes will send invalid blocks",
      "action": false,
      "timestamp": "2017-10-05T19:29:22+00:00"
    },
    {
      "id": "0c91c4e6ef8a4e53897554a313cf7ba9",
      "sender": "luke-jr",
      "payload": "potentially",
      "action": false,
      "timestamp": "2017-10-05T19:29:27+00:00"
    },
    {
      "id": "2988c2060dae4c7b9f10a34fdc0079a2",
      "sender": "gmaxwell",
      "payload": "achow101: because it's hardly any better and it means that when some dimbulb tries running forkcoin it results in him being unable to run Bitcoin (perhaps concurrently) on the same host.",
      "action": false,
      "timestamp": "2017-10-05T19:29:42+00:00"
    },
    {
      "id": "fb7b33ca661e450e954aad15f912e5a2",
      "sender": "achow101",
      "payload": "gmaxwell: ok",
      "action": false,
      "timestamp": "2017-10-05T19:30:03+00:00"
    },
    {
      "id": "5bff0a8e0c7a431fad678c133ba61745",
      "sender": "gmaxwell",
      "payload": "it also blocks inbound from that peer, which we'd be find allowing.",
      "action": false,
      "timestamp": "2017-10-05T19:30:04+00:00"
    },
    {
      "id": "52c76813b3584856b38301dda74fc1a5",
      "sender": "gmaxwell",
      "payload": "s/find/fine/",
      "action": false,
      "timestamp": "2017-10-05T19:30:09+00:00"
    },
    {
      "id": "4fa0156690fb4e528a41a53c266a1fbf",
      "sender": "gmaxwell",
      "payload": "In general we should be moving away from bans except when the thing we banned for was expensive for us.",
      "action": false,
      "timestamp": "2017-10-05T19:30:34+00:00"
    },
    {
      "id": "a770d17b1c0f4c9db66af0997e934b63",
      "sender": "achow101",
      "payload": "so 11446 can really just be reduced to an ~1 line change to disconnect on a header for a block we already know is invalid",
      "action": false,
      "timestamp": "2017-10-05T19:31:03+00:00"
    },
    {
      "id": "e63e1cc8863b45d69068e64fa9bac45a",
      "sender": "BlueMatt",
      "payload": "yea, that",
      "action": false,
      "timestamp": "2017-10-05T19:31:11+00:00"
    },
    {
      "id": "21097075e8bb4458a04eaa368e5a075e",
      "sender": "sdaftuar",
      "payload": "achow101: agree, though we have to be careful about compact blocks i think",
      "action": false,
      "timestamp": "2017-10-05T19:31:18+00:00"
    },
    {
      "id": "6333ffac1f0a4a0e833bd7e23e79a75d",
      "sender": "luke-jr",
      "payload": "achow101: aka #10593 \u00c3\u00a2\u00c2\u0080\u00c2\u00a6",
      "action": false,
      "timestamp": "2017-10-05T19:31:20+00:00"
    },
    {
      "id": "b925e99d00624167a2ec6dd2f608cd31",
      "sender": "gribble",
      "payload": "https://github.com/bitcoin/bitcoin/issues/10593 | Relax punishment for peers relaying invalid blocks and headers by luke-jr \u00c3\u0082\u00c2\u00b7 Pull Request #10593 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
      "action": false,
      "timestamp": "2017-10-05T19:31:22+00:00"
    },
    {
      "id": "434bef70b5284d8a810788270850b838",
      "sender": "gmaxwell",
      "payload": "achow101: yes, but for compact block interactions (HB mode will relay us blocks that are invalid).",
      "action": false,
      "timestamp": "2017-10-05T19:31:48+00:00"
    },
    {
      "id": "9e54120b230d44679204d7af20868526",
      "sender": "achow101",
      "payload": "gmaxwell: so we would have to check the specific type of invalidness and whether it was a CB?",
      "action": false,
      "timestamp": "2017-10-05T19:32:27+00:00"
    },
    {
      "id": "4f5719bec9aa41f9bb9d7af6560a5af2",
      "sender": "gmaxwell",
      "payload": "luke-jr: IIRC when you proposed that before you got squaked at that it would undermine our protection against isolation...",
      "action": false,
      "timestamp": "2017-10-05T19:32:31+00:00"
    },
    {
      "id": "89d5f17c68e44f2180de76f591a72de8",
      "sender": "gmaxwell",
      "payload": "achow101: or just don't do it for the peers maked for HB CBs for now",
      "action": false,
      "timestamp": "2017-10-05T19:33:04+00:00"
    },
    {
      "id": "e54cdf990bf84206bc1c2d5dc53c5ea0",
      "sender": "achow101",
      "payload": "gmaxwell: isn't that likely to be most peers though",
      "action": false,
      "timestamp": "2017-10-05T19:33:17+00:00"
    },
    {
      "id": "fd64190046ff4cf6986c46d210511879",
      "sender": "achow101",
      "payload": "?",
      "action": false,
      "timestamp": "2017-10-05T19:33:19+00:00"
    },
    {
      "id": "fe281d840a914a58b9f2b38ebd61d661",
      "sender": "gmaxwell",
      "payload": "No, it's at most three.",
      "action": false,
      "timestamp": "2017-10-05T19:33:23+00:00"
    },
    {
      "id": "ec61168d7c724bd5a1e1739a2d7e859b",
      "sender": "luke-jr",
      "payload": "gmaxwell: I don't see how. It's literally what achow101 was just describing.",
      "action": false,
      "timestamp": "2017-10-05T19:33:33+00:00"
    },
    {
      "id": "b3b0b6fd869642e6ac83fa3e0aac460c",
      "sender": "luke-jr",
      "payload": "gmaxwell: maybe you're thinking of the predecessor 10512?",
      "action": false,
      "timestamp": "2017-10-05T19:34:32+00:00"
    },
    {
      "id": "b0e95afba8b04ef5955fe14e3dd02f6a",
      "sender": "achow101",
      "payload": "luke-jr: it doesn't look like you are handling invalid duplicates?",
      "action": false,
      "timestamp": "2017-10-05T19:34:35+00:00"
    },
    {
      "id": "66bf0fccde3948c4bbb7b10c111732b4",
      "sender": "gmaxwell",
      "payload": "probably.",
      "action": false,
      "timestamp": "2017-10-05T19:34:40+00:00"
    },
    {
      "id": "d176afe10b6346848f4c923876b0ef0a",
      "sender": "gmaxwell",
      "payload": "achow101: in any case, we can pick this up on a PR and later discussion.",
      "action": false,
      "timestamp": "2017-10-05T19:34:58+00:00"
    },
    {
      "id": "fb8fcdbee1c5473fb217a4f88441b969",
      "sender": "achow101",
      "payload": "gmaxwell: ok",
      "action": false,
      "timestamp": "2017-10-05T19:35:09+00:00"
    },
    {
      "id": "f3ec0bb3513c43c4805e0b455588b7fb",
      "sender": "achow101",
      "payload": "next topic then?",
      "action": false,
      "timestamp": "2017-10-05T19:36:08+00:00"
    },
    {
      "id": "1a86d923c3ae4ab0a557cd229c9d9710",
      "sender": "wumpus",
      "payload": "any other topics?",
      "action": false,
      "timestamp": "2017-10-05T19:36:09+00:00"
    },
    {
      "id": "491fdcf7ea7e41a083e2c58a6fb1bf5e",
      "sender": "luke-jr",
      "payload": "achow101: IIRC it does, we can go over it later if you like",
      "action": false,
      "timestamp": "2017-10-05T19:36:10+00:00"
    },
    {
      "id": "5cda6c2e7d7c409b80fc6c6debb6a034",
      "sender": "achow101",
      "payload": "luke-jr: ok",
      "action": false,
      "timestamp": "2017-10-05T19:36:14+00:00"
    },
    {
      "id": "6418be6d4be4447e91ca5ebd53c1bd99",
      "sender": "jnewbery",
      "payload": "luke-jr: any progress on multiwallet GUI without the rpcauth parts?",
      "action": false,
      "timestamp": "2017-10-05T19:37:09+00:00"
    },
    {
      "id": "943bb301541746c0bbc887f3df630a72",
      "sender": "wumpus",
      "payload": "#topic multiwallet ui",
      "action": false,
      "timestamp": "2017-10-05T19:37:21+00:00"
    },
    {
      "id": "0b44d582747e469fa318ea9f1dea053d",
      "sender": "luke-jr",
      "payload": "jnewbery: not yet, I'll plan to push the update later today",
      "action": false,
      "timestamp": "2017-10-05T19:37:32+00:00"
    },
    {
      "id": "9726b484329c4fbdbb878049e94506ab",
      "sender": "jnewbery",
      "payload": "great! I had a look myself, and I think it's just a one-line change to the debug console commit",
      "action": false,
      "timestamp": "2017-10-05T19:38:04+00:00"
    },
    {
      "id": "cd0610e6ed2b4a1ca852fe7b3c9f44ac",
      "sender": "jonasschnelli",
      "payload": "https://github.com/bitcoin/bitcoin/pull/11383",
      "action": false,
      "timestamp": "2017-10-05T19:38:05+00:00"
    },
    {
      "id": "f2adb2a96bc7450fa6c63acf9632bd39",
      "sender": "sipa",
      "payload": "topic suggestion: dealing with platform-specific code",
      "action": false,
      "timestamp": "2017-10-05T19:38:12+00:00"
    },
    {
      "id": "a1554602a4e74a84b66b71c6fb609851",
      "sender": "jonasschnelli",
      "payload": "luke-jr: I can continue to work on 11383 if you want?",
      "action": false,
      "timestamp": "2017-10-05T19:38:24+00:00"
    },
    {
      "id": "98f24b237de64734b5c6a633b4d566dc",
      "sender": "jonasschnelli",
      "payload": "(remove the auth stuff :P)",
      "action": false,
      "timestamp": "2017-10-05T19:38:32+00:00"
    },
    {
      "id": "c53b653b2e954c7ba5744ab14075e4ac",
      "sender": "luke-jr",
      "payload": "jnewbery: certainly not that simple.. still need to resolve wallet name to CWallet earlier",
      "action": false,
      "timestamp": "2017-10-05T19:38:50+00:00"
    },
    {
      "id": "fb98b51f48c7495d837f6a69b3c38425",
      "sender": "jnewbery",
      "payload": "ok, well I've got a branch that works with just that change. Happy to share with you",
      "action": false,
      "timestamp": "2017-10-05T19:39:13+00:00"
    },
    {
      "id": "d2df116199954900b51e81343431fd13",
      "sender": "gmaxwell",
      "payload": "Sounds good.",
      "action": false,
      "timestamp": "2017-10-05T19:39:47+00:00"
    },
    {
      "id": "e274aacd86894787aad7d5a116de3bf7",
      "sender": "luke-jr",
      "payload": "jnewbery: push it and I'll take a look",
      "action": false,
      "timestamp": "2017-10-05T19:40:00+00:00"
    },
    {
      "id": "c0d6794576c847f99e2efb5fda87038a",
      "sender": "jnewbery",
      "payload": "thanks",
      "action": false,
      "timestamp": "2017-10-05T19:40:17+00:00"
    },
    {
      "id": "212067158ef0482e811d3ade5016e72b",
      "sender": "wumpus",
      "payload": "#topic dealing with platform-specific code (sipa)",
      "action": false,
      "timestamp": "2017-10-05T19:41:03+00:00"
    },
    {
      "id": "0c540bc8d27f4896ae5112ad0214a761",
      "sender": "sipa",
      "payload": "i've recently been looking into faster parallel hashing code",
      "action": false,
      "timestamp": "2017-10-05T19:41:19+00:00"
    },
    {
      "id": "6a96074cab64499ea4283f3882a03487",
      "sender": "wumpus",
      "payload": "hashing as in sha256?",
      "action": false,
      "timestamp": "2017-10-05T19:41:37+00:00"
    },
    {
      "id": "0a0634eda64d4a2db3ed620ebf4b5aac",
      "sender": "sipa",
      "payload": "in particular, for 8-way parallel SHA256 (which would be useful in merkle root computation and block deserialization), a 5x speedup is doable with AVX2",
      "action": false,
      "timestamp": "2017-10-05T19:41:50+00:00"
    },
    {
      "id": "7ed99e2ab31746b0b468431cb120e6bd",
      "sender": "sipa",
      "payload": "and maybe 2.5x with SSE2",
      "action": false,
      "timestamp": "2017-10-05T19:42:04+00:00"
    },
    {
      "id": "9462708e198a44d0a1660b2be0a535df",
      "sender": "wumpus",
      "payload": "and parallel in this case means computing multiple hashes of multiple pieces of data at once?",
      "action": false,
      "timestamp": "2017-10-05T19:42:22+00:00"
    },
    {
      "id": "944b79817f0f4f87a78e64a408e5703d",
      "sender": "sipa",
      "payload": "correct",
      "action": false,
      "timestamp": "2017-10-05T19:42:27+00:00"
    },
    {
      "id": "2327d9eb38cb452a8c51f86930baf190",
      "sender": "luke-jr",
      "payload": "how much speedup is this for the entire IBD?",
      "action": false,
      "timestamp": "2017-10-05T19:42:28+00:00"
    },
    {
      "id": "5125bd9963234203b3c1c159241a7165",
      "sender": "gmaxwell",
      "payload": "luke-jr: It saves something like 10 minutes on IBD.  But the greater impact is in block relay.",
      "action": false,
      "timestamp": "2017-10-05T19:42:57+00:00"
    },
    {
      "id": "f697d417716843e6b15cae80134bd70a",
      "sender": "wumpus",
      "payload": "(I guess there are constraints there, do all the inputs need to be the same size?)",
      "action": false,
      "timestamp": "2017-10-05T19:43:01+00:00"
    },
    {
      "id": "c0313bc8a695446cbb56dcdec61a7c92",
      "sender": "luke-jr",
      "payload": "I imagine merkle root is a tiny fraction of the overall process, but otoh it's also possibly a blocker on parallelization",
      "action": false,
      "timestamp": "2017-10-05T19:43:05+00:00"
    },
    {
      "id": "8cd91d057f094872ab0d8169a228a712",
      "sender": "gmaxwell",
      "payload": "Where hash tree computation is most of the time.",
      "action": false,
      "timestamp": "2017-10-05T19:43:05+00:00"
    },
    {
      "id": "cfe5a683b5a64e99977adea0694fee2a",
      "sender": "luke-jr",
      "payload": "gmaxwell: it is? :O",
      "action": false,
      "timestamp": "2017-10-05T19:43:25+00:00"
    },
    {
      "id": "7d77427813a242e5938b0b69b1343655",
      "sender": "sipa",
      "payload": "wumpus: yes and no; for now, it's just a primitive that you give a pointer to N 64-byte inputs, and produces 32-byte outputs",
      "action": false,
      "timestamp": "2017-10-05T19:43:32+00:00"
    },
    {
      "id": "4def2d205ad64286b3fcd807fffbb901",
      "sender": "luke-jr",
      "payload": "oh, because the signature checks are cached?",
      "action": false,
      "timestamp": "2017-10-05T19:43:33+00:00"
    },
    {
      "id": "21be60cfe3604afa97558f3a4de38abc",
      "sender": "BlueMatt",
      "payload": "in terms of compact block relay, merkle root calculation and deserialize are about the only big timesinks before you can relay",
      "action": false,
      "timestamp": "2017-10-05T19:43:37+00:00"
    },
    {
      "id": "41fd0c1a55874a83a3710ee739cdea97",
      "sender": "sipa",
      "payload": "wumpus: which is specific for merkle root computation",
      "action": false,
      "timestamp": "2017-10-05T19:43:46+00:00"
    },
    {
      "id": "4fb858eac0204dad8d7a38326f701508",
      "sender": "gmaxwell",
      "payload": "luke-jr: yes for HB BIP152 we don't to validation except hashing!",
      "action": false,
      "timestamp": "2017-10-05T19:43:48+00:00"
    },
    {
      "id": "1f3a7227ce9b49b6816751df06e753d4",
      "sender": "sipa",
      "payload": "but it can certainly be adapted",
      "action": false,
      "timestamp": "2017-10-05T19:43:50+00:00"
    },
    {
      "id": "8c0a624f22c142319c26d91d8ce2a1df",
      "sender": "wumpus",
      "payload": "sipa: ok",
      "action": false,
      "timestamp": "2017-10-05T19:44:37+00:00"
    },
    {
      "id": "3437245aa004452991141f952f8add1f",
      "sender": "cfields",
      "payload": "sipa: i had a scare when reviewing some new leveldb crc32 changes that i thought (at first glance) could be a consensus issue. I was very angry at myself at that point for not adding a fallback un-optimized verification of the optimized path.",
      "action": false,
      "timestamp": "2017-10-05T19:44:38+00:00"
    },
    {
      "id": "3f1fe86d399540d29742df68b01dbb02",
      "sender": "sipa",
      "payload": "anyway, there are multiple ways to integrate this: separate asm code, inline asm blocks, or code using intrinsics (my preference, it's much more easy to review, and has no OS-specific warts like the L label prefix...)",
      "action": false,
      "timestamp": "2017-10-05T19:44:43+00:00"
    },
    {
      "id": "a23584fc8dd843e399e5e545dfcf0ed3",
      "sender": "gmaxwell",
      "payload": "sipa has actually implemented the 8-way AVX2 sha2 and a hash tree computation that uses it... along with specialized implementation of 64-byte input double sha2.. which affords an addition 20%-ish speedup over generic sha2.",
      "action": false,
      "timestamp": "2017-10-05T19:44:56+00:00"
    },
    {
      "id": "62052a392e5c43f9b9b64a58c2fe73cb",
      "sender": "cfields",
      "payload": "very cool :)",
      "action": false,
      "timestamp": "2017-10-05T19:45:09+00:00"
    },
    {
      "id": "f59e21e1ac2346d396d14618f652d544",
      "sender": "wumpus",
      "payload": "I prefer intrinsics",
      "action": false,
      "timestamp": "2017-10-05T19:45:12+00:00"
    },
    {
      "id": "f1d78fa9547f496a841e4f90dbabf82d",
      "sender": "wumpus",
      "payload": "(except for arm32 whre they suck)",
      "action": false,
      "timestamp": "2017-10-05T19:45:21+00:00"
    },
    {
      "id": "6702436c0267460a8e87840c080a2770",
      "sender": "sipa",
      "payload": "so, for intrinsics... do we want to have a separate LIBCRYPTO_AVX2 LIBCRYPTO_SSE2 LIBCRYPTO_... with different compile flags each?",
      "action": false,
      "timestamp": "2017-10-05T19:45:48+00:00"
    },
    {
      "id": "d1c2e1e563744a53adcaeb7348a0b800",
      "sender": "sipa",
      "payload": "or could we rely on __attribute__((target(\"avx2\")))",
      "action": false,
      "timestamp": "2017-10-05T19:46:05+00:00"
    },
    {
      "id": "206bbf36b79a4b869adcefa1576e3890",
      "sender": "gmaxwell",
      "payload": "Historically, For some code you cannot achieve equivilent performance w/ intrinsics because you must manage register allocation precisely for things to work, but that isn't the case here....",
      "action": false,
      "timestamp": "2017-10-05T19:46:05+00:00"
    },
    {
      "id": "4c18a29bb7ce47908245bb4cb71e0bc3",
      "sender": "wumpus",
      "payload": "but 64 bit platforms the SIMD instructions have been specially tweaked to work well with compilers and intrinsics",
      "action": false,
      "timestamp": "2017-10-05T19:46:08+00:00"
    },
    {
      "id": "c319e5b457c544939f19fa22cfa652ec",
      "sender": "sipa",
      "payload": "(which works on both clang and gcc)",
      "action": false,
      "timestamp": "2017-10-05T19:46:12+00:00"
    },
    {
      "id": "3344409f63554f058c2aea3bdced1d7b",
      "sender": "cfields",
      "payload": "sipa: i think we should test for the target attribute and use it if possible, but not completely rely on it",
      "action": false,
      "timestamp": "2017-10-05T19:46:36+00:00"
    },
    {
      "id": "4f50fa283e6746aeaecb697ad368bc6f",
      "sender": "cfields",
      "payload": "iirc that improves dispatching time as well?",
      "action": false,
      "timestamp": "2017-10-05T19:46:44+00:00"
    },
    {
      "id": "669f4479bbb34ae6aff4def12134c1a8",
      "sender": "sipa",
      "payload": "cfields: no",
      "action": false,
      "timestamp": "2017-10-05T19:46:49+00:00"
    },
    {
      "id": "e236ac4349814546820d24ba485e4631",
      "sender": "wumpus",
      "payload": "different compile flags for different compile units, that's the only portable way",
      "action": false,
      "timestamp": "2017-10-05T19:46:57+00:00"
    },
    {
      "id": "cd100144f38f4ba1b2460e1a94cd5d6b",
      "sender": "luke-jr",
      "payload": "sipa: I think we can't assume intrinsics for all platforms, so we want the separate lib route",
      "action": false,
      "timestamp": "2017-10-05T19:47:01+00:00"
    },
    {
      "id": "daf0e908ef214abe9c9d7c9d3094fe22",
      "sender": "gmaxwell",
      "payload": "dispatching is via a function pointer ultimately in all those cases.",
      "action": false,
      "timestamp": "2017-10-05T19:47:07+00:00"
    },
    {
      "id": "3ff44d2974e5434180c0d9fbddac79b0",
      "sender": "wumpus",
      "payload": "luke-jr: you're confusing, that's not about intrinsics",
      "action": false,
      "timestamp": "2017-10-05T19:47:14+00:00"
    },
    {
      "id": "33b5f19cb1d54d7ba89babb23e7112e7",
      "sender": "sipa",
      "payload": "the only difference is avoiding the need for build system complication",
      "action": false,
      "timestamp": "2017-10-05T19:47:30+00:00"
    },
    {
      "id": "bb87dbd38f264b3780a509a9f37b0aaf",
      "sender": "wumpus",
      "payload": "intrinsics inthis case are headers like xmmintr.h which provides functions that work on vector types",
      "action": false,
      "timestamp": "2017-10-05T19:47:35+00:00"
    },
    {
      "id": "00ac73128930420783633ef80741603c",
      "sender": "sipa",
      "payload": "exactly",
      "action": false,
      "timestamp": "2017-10-05T19:47:42+00:00"
    },
    {
      "id": "f610cb9feeba415aa13b37eb3fceff25",
      "sender": "luke-jr",
      "payload": "wumpus: __attribute__((target(\"avx2\"))) isn't an option for separate asm code, though, right?",
      "action": false,
      "timestamp": "2017-10-05T19:47:52+00:00"
    },
    {
      "id": "7c6d8ada0a8b4389955cbcbbd88ff6f0",
      "sender": "sipa",
      "payload": "luke-jr: it also isn't needed for asm code",
      "action": false,
      "timestamp": "2017-10-05T19:48:00+00:00"
    },
    {
      "id": "87e574f0536841afb0f816ab36cadcfd",
      "sender": "cfields",
      "payload": "gmaxwell: isn't there elf data that allows them to be setup at load time?",
      "action": false,
      "timestamp": "2017-10-05T19:48:02+00:00"
    },
    {
      "id": "26c3e3a14c094008b03b0c81d93a6785",
      "sender": "wumpus",
      "payload": "oh no no ELF magic please",
      "action": false,
      "timestamp": "2017-10-05T19:48:14+00:00"
    },
    {
      "id": "cdd7da9d35eb4d89a9044343892c7c68",
      "sender": "luke-jr",
      "payload": "hmm",
      "action": false,
      "timestamp": "2017-10-05T19:48:24+00:00"
    },
    {
      "id": "51c7037f1a3d442dbe6ab26def39d5d6",
      "sender": "cfields",
      "payload": "not by hand, i thought __attribute__(target) did that behind the scenes",
      "action": false,
      "timestamp": "2017-10-05T19:48:36+00:00"
    },
    {
      "id": "0d4f67310d0f44c79811bc3b74e98430",
      "sender": "sipa",
      "payload": "target(\"avx2\") just means \"this function is compiled as if -mavx2 was passed on the command line",
      "action": false,
      "timestamp": "2017-10-05T19:48:41+00:00"
    },
    {
      "id": "1264f430b13d4168a5281253767eb452",
      "sender": "sipa",
      "payload": "cfields: GCC also has target(\"default\"), where you can have multiple versions of the same function... which causes automatic dispatch to be added",
      "action": false,
      "timestamp": "2017-10-05T19:49:02+00:00"
    },
    {
      "id": "b15a68987f2a496a8f7e2d7f57a7007e",
      "sender": "sipa",
      "payload": "that's non-portable and has other issues",
      "action": false,
      "timestamp": "2017-10-05T19:49:08+00:00"
    },
    {
      "id": "f3a8849db84b44e9b8050ff0452d8635",
      "sender": "gmaxwell",
      "payload": "cfields: they're setup at load time, yes-- but they're still just a function pointer, which we could also have setup at load time.  Though it is nice that the function override trick can make them run before main.",
      "action": false,
      "timestamp": "2017-10-05T19:49:09+00:00"
    },
    {
      "id": "1ded2ddba7cd4be684ef63146deeaf7d",
      "sender": "wumpus",
      "payload": "I'm normally not scared of low level ELF hacking, but for bitcoin, let's try to keep it safe and portable",
      "action": false,
      "timestamp": "2017-10-05T19:49:11+00:00"
    },
    {
      "id": "acf3eabfd8f540cf8f7a52750526ecd7",
      "sender": "luke-jr",
      "payload": "sipa: how does it behave if I have an explicit -mno-avx2?",
      "action": false,
      "timestamp": "2017-10-05T19:49:12+00:00"
    },
    {
      "id": "0e815ef4ccd54b9fa7b4e743191b2c36",
      "sender": "sipa",
      "payload": "(in particular clang doesn't have that)",
      "action": false,
      "timestamp": "2017-10-05T19:49:15+00:00"
    },
    {
      "id": "4df7e2c7a4da4280b74ddc9540fee64b",
      "sender": "cfields",
      "payload": "sipa: ah yes, that's what i was thinking of.",
      "action": false,
      "timestamp": "2017-10-05T19:49:17+00:00"
    },
    {
      "id": "4601cca0ddc5427f9a0444b3d44d522f",
      "sender": "sipa",
      "payload": "cfields: so i'm not suggesting using that",
      "action": false,
      "timestamp": "2017-10-05T19:49:33+00:00"
    },
    {
      "id": "5c0e8e4a7e4a476ebb9f09ce35ac3896",
      "sender": "sipa",
      "payload": "luke-jr: i assume it overrides it",
      "action": false,
      "timestamp": "2017-10-05T19:49:39+00:00"
    },
    {
      "id": "e9bc1e7d4ec943b48b0ab9d9a0efcb6b",
      "sender": "cfields",
      "payload": "ok",
      "action": false,
      "timestamp": "2017-10-05T19:49:43+00:00"
    },
    {
      "id": "7075467b1327432aa10911e4fb4364c2",
      "sender": "luke-jr",
      "payload": "I suppose I can test it",
      "action": false,
      "timestamp": "2017-10-05T19:50:02+00:00"
    },
    {
      "id": "5f7471207e4844db95e575e04b46291d",
      "sender": "wumpus",
      "payload": "yes, gcc can do it automatically on some platforms, but I'm afraid the only portable way is to make our own dispatch logic",
      "action": false,
      "timestamp": "2017-10-05T19:50:05+00:00"
    },
    {
      "id": "34b0ab5595fb45b7b11f78ef4d39f3ce",
      "sender": "sipa",
      "payload": "yes, we'll want our own dispatch logic anyway",
      "action": false,
      "timestamp": "2017-10-05T19:50:15+00:00"
    },
    {
      "id": "7e231ae8324d436f87f94ee9c188ec64",
      "sender": "wumpus",
      "payload": "we already have some CPUID bits checking",
      "action": false,
      "timestamp": "2017-10-05T19:50:18+00:00"
    },
    {
      "id": "0eed3fda5ca94f328b9a7bf78c353753",
      "sender": "sipa",
      "payload": "so we can test things",
      "action": false,
      "timestamp": "2017-10-05T19:50:20+00:00"
    },
    {
      "id": "b372860b834545a7a83f383ca499a7a9",
      "sender": "wumpus",
      "payload": "so it's nothing new erally",
      "action": false,
      "timestamp": "2017-10-05T19:50:21+00:00"
    },
    {
      "id": "d574b930803b4568b6bfe9eaed788846",
      "sender": "sipa",
      "payload": "and report which version is being chosen",
      "action": false,
      "timestamp": "2017-10-05T19:50:25+00:00"
    },
    {
      "id": "5c779015279f4945995e3f0198fdadb5",
      "sender": "cfields",
      "payload": "np, i wasn't suggesting. just trying to understand the advantages of one vs the other.",
      "action": false,
      "timestamp": "2017-10-05T19:50:29+00:00"
    },
    {
      "id": "806e534d08fe44669a52a1f9c2faaee1",
      "sender": "wumpus",
      "payload": "yes, exactly",
      "action": false,
      "timestamp": "2017-10-05T19:50:30+00:00"
    },
    {
      "id": "3b3d7e173075415484655c6901a3a099",
      "sender": "sipa",
      "payload": "but if possible i'd like to avoid the overhead of needing half a dozen libcrypto_XXX.a things that need to be linked in everywhere",
      "action": false,
      "timestamp": "2017-10-05T19:51:01+00:00"
    },
    {
      "id": "27b7c3d3b7634894abdc462c1ff8d3d2",
      "sender": "sipa",
      "payload": "though that's really the only advantage",
      "action": false,
      "timestamp": "2017-10-05T19:51:08+00:00"
    },
    {
      "id": "fd3c5452e0584e2ead8e3127a4fd5e96",
      "sender": "wumpus",
      "payload": "so I'd say: yes, use intrinsics instead of inline/offline asm,  and use our own dispatching, and compile units compiled with appropriate compiler flags",
      "action": false,
      "timestamp": "2017-10-05T19:51:38+00:00"
    },
    {
      "id": "e4a1a837794241609b9af7bf4cdf6d3d",
      "sender": "sipa",
      "payload": "okay.",
      "action": false,
      "timestamp": "2017-10-05T19:51:55+00:00"
    },
    {
      "id": "a0c6d911e120414288e568bf434266c0",
      "sender": "gmaxwell",
      "payload": "can we say prefer intrinsics instead of use? :) I don't think we'd eschew inline asm if we thought it was better in a particular case.",
      "action": false,
      "timestamp": "2017-10-05T19:52:28+00:00"
    },
    {
      "id": "447fe91fc7904f95bd932ea9ba12f6a5",
      "sender": "wumpus",
      "payload": "yes regarding build system it's just verbose, not really complex",
      "action": false,
      "timestamp": "2017-10-05T19:52:29+00:00"
    },
    {
      "id": "a5f6b87a3a82444e94f37c5018232338",
      "sender": "cfields",
      "payload": "sipa: see my point above about a fallback, though. In the case of mismatch hashes, i think it's worthwhile to re-check with a generic implementation before deciding it's failed.",
      "action": false,
      "timestamp": "2017-10-05T19:52:41+00:00"
    },
    {
      "id": "dca9cd1f4e6f4d2682cf8c074f65c7ea",
      "sender": "gmaxwell",
      "payload": "cfields: we should be testing these things in startup tests.",
      "action": false,
      "timestamp": "2017-10-05T19:53:12+00:00"
    },
    {
      "id": "b1104eea835549debaae6fad785f8178",
      "sender": "luke-jr",
      "payload": "(yes, it seems to override -mno-*",
      "action": false,
      "timestamp": "2017-10-05T19:53:12+00:00"
    },
    {
      "id": "841dfba7ab2244558286c1e88c6c7e24",
      "sender": "wumpus",
      "payload": "gmaxwell: well if there's a case you can do much better than the compiler, sure...",
      "action": false,
      "timestamp": "2017-10-05T19:53:17+00:00"
    },
    {
      "id": "d9f39552770b4bbc8d0099297a6010f5",
      "sender": "BlueMatt",
      "payload": "has a weak preference for compile units, but only cause I'd use them in FIBRE for my FEC stuff, too, but thats not much of a reasoning",
      "action": true,
      "timestamp": "2017-10-05T19:53:37+00:00"
    },
    {
      "id": "34490ee218b74d0b987cfdbf5f6f371d",
      "sender": "luke-jr",
      "payload": "hopes we can have POWER9 asm in 0.16 <.<",
      "action": true,
      "timestamp": "2017-10-05T19:54:26+00:00"
    },
    {
      "id": "435ef0401c204fa78ba976612ea83019",
      "sender": "BlueMatt",
      "payload": "agrees",
      "action": true,
      "timestamp": "2017-10-05T19:54:32+00:00"
    },
    {
      "id": "a0e245388ce64d4caf6a29d36f727b74",
      "sender": "cfields",
      "payload": "gmaxwell: an implementation bug in some branch of one optimized path is scary...",
      "action": false,
      "timestamp": "2017-10-05T19:54:38+00:00"
    },
    {
      "id": "601d99abac88448dbbf7bdb906f63474",
      "sender": "gmaxwell",
      "payload": "cfields: try differently if it fails is just not reasonable in a lot of cases; and often would add a lot of complexity (now you have to not cache hashes, but instead only use hash-verify methods) ... and we don't have expected values for thigns like single transaction hashes, just hash roots.",
      "action": false,
      "timestamp": "2017-10-05T19:54:56+00:00"
    },
    {
      "id": "630371a4ce514411b99a6d9470728bcf",
      "sender": "cfields",
      "payload": "gmaxwell: in particular, the crc issue had to do with incoming data alignment on x86_64",
      "action": false,
      "timestamp": "2017-10-05T19:54:57+00:00"
    },
    {
      "id": "29f1327a373349068a1c79e84b6d440f",
      "sender": "wumpus",
      "payload": "cfields: I agree",
      "action": false,
      "timestamp": "2017-10-05T19:55:24+00:00"
    },
    {
      "id": "89c89808c8504464820e70b673416bc1",
      "sender": "wumpus",
      "payload": "cfields: I think we should only do asm optimization in cases where it really makes a lot of difference, for that reason, ther risk has to be worth it",
      "action": false,
      "timestamp": "2017-10-05T19:55:51+00:00"
    },
    {
      "id": "39b55c197b0a4c5aa3c128b9ecbbbacb",
      "sender": "gmaxwell",
      "payload": "cfields: yes, thats something that always needs careful review and we should have unit tests that also stress alignment.",
      "action": false,
      "timestamp": "2017-10-05T19:56:01+00:00"
    },
    {
      "id": "71483e61565844afa61518eeab9ef8ac",
      "sender": "wumpus",
      "payload": "special-casing everything makes things a lot harder to review, and test, especially when it starts to need different kinds of hardware",
      "action": false,
      "timestamp": "2017-10-05T19:56:33+00:00"
    },
    {
      "id": "866c31df2bf541f683b941edbe1e0092",
      "sender": "wumpus",
      "payload": "but for testable low-level primitives like SHA256 I'd say it's ok",
      "action": false,
      "timestamp": "2017-10-05T19:56:54+00:00"
    },
    {
      "id": "93f5fac95d1c4546a56aaeca109a68c7",
      "sender": "gmaxwell",
      "payload": "good thing no one is talking about special casing everything. :)",
      "action": false,
      "timestamp": "2017-10-05T19:57:11+00:00"
    },
    {
      "id": "5602aa959d0c4f10b28f54684b41782f",
      "sender": "gmaxwell",
      "payload": "yea, sha2 etc have simple testable interfaces.",
      "action": false,
      "timestamp": "2017-10-05T19:57:29+00:00"
    },
    {
      "id": "cee09070a76d405caaa95c9977b8adfe",
      "sender": "wumpus",
      "payload": "no, that's just one extreme, I've seen soome graphics drivers which are scary in that regard :)",
      "action": false,
      "timestamp": "2017-10-05T19:57:37+00:00"
    },
    {
      "id": "b008fd133885402e9b69c7186d34cf2c",
      "sender": "gmaxwell",
      "payload": "But benchmarks!",
      "action": false,
      "timestamp": "2017-10-05T19:58:09+00:00"
    },
    {
      "id": "67ee4dae8db44b4bab96876f17447d08",
      "sender": "wumpus",
      "payload": "oh let's special case 4x4 tiles, 4x5 tiles, 4x6 tiles, ... for 3 different architectures",
      "action": false,
      "timestamp": "2017-10-05T19:58:11+00:00"
    },
    {
      "id": "6b78c8fe89904138b95c1d3ccc42c14d",
      "sender": "wumpus",
      "payload": "right :)",
      "action": false,
      "timestamp": "2017-10-05T19:58:20+00:00"
    },
    {
      "id": "b5508583b4eb467d857723dcc4229cfa",
      "sender": "cfields",
      "payload": "mmm. I don't see the harm in doing a quick re-check in a few certain cases (merkle mismatch is a good example)",
      "action": false,
      "timestamp": "2017-10-05T19:58:27+00:00"
    },
    {
      "id": "6e5fbe13c33548968c776a5f65f26ed4",
      "sender": "wumpus",
      "payload": "special-casing benchmarks is a curious form of over-learning",
      "action": false,
      "timestamp": "2017-10-05T19:58:51+00:00"
    },
    {
      "id": "36c98766a0084715a0c1cccfe8ea403e",
      "sender": "cfields",
      "payload": "anyway, i've made my case",
      "action": false,
      "timestamp": "2017-10-05T19:58:55+00:00"
    },
    {
      "id": "2f30b17d75bd4298b4210ec382ab168f",
      "sender": "gmaxwell",
      "payload": "cfields: because it requires restructing the code to not return hashes but instead only have uncachable hash_Verify methods.",
      "action": false,
      "timestamp": "2017-10-05T19:59:01+00:00"
    },
    {
      "id": "8cd5c912d36a41b5a45bcd48faa421b2",
      "sender": "wumpus",
      "payload": "cfields: re-check in what case?",
      "action": false,
      "timestamp": "2017-10-05T19:59:06+00:00"
    },
    {
      "id": "b8bea809e96b4be38e710232b6945402",
      "sender": "luke-jr",
      "payload": "although someone did manage to screw up xpub serialisation at one point IIRC",
      "action": false,
      "timestamp": "2017-10-05T19:59:24+00:00"
    },
    {
      "id": "e3d52bbe958a45669b99f8f163f832cc",
      "sender": "wumpus",
      "payload": "cfields: you mean re-run the validation w/ different implementations if an  incoming block fails?",
      "action": false,
      "timestamp": "2017-10-05T19:59:25+00:00"
    },
    {
      "id": "1bd9a5ed582e487581797bd4af96c3c1",
      "sender": "wumpus",
      "payload": "(what about false positives?)",
      "action": false,
      "timestamp": "2017-10-05T19:59:55+00:00"
    },
    {
      "id": "ddd10e2827874dcab9edd1d77bebc1df",
      "sender": "cfields",
      "payload": "wumpus: that's a big hammer, but yes-ish",
      "action": false,
      "timestamp": "2017-10-05T20:00:00+00:00"
    },
    {
      "id": "db29e3c0b3dc461f93f3d587380973bf",
      "sender": "gmaxwell",
      "payload": "cfields: and for small functions like a hash a check in an innerloop will measurably lower performance. ... and you also create the opposite problem, what if the alternative function is the wrong one?",
      "action": false,
      "timestamp": "2017-10-05T20:00:11+00:00"
    },
    {
      "id": "ee6037be517d40589ef9f1fe64d701c7",
      "sender": "gmaxwell",
      "payload": "(I'd actually consider whole block level more reasonable)",
      "action": false,
      "timestamp": "2017-10-05T20:00:26+00:00"
    },
    {
      "id": "af3d6c74b724401c8070167bf6c70195",
      "sender": "wumpus",
      "payload": "gmaxwell: I think he means on a high level",
      "action": false,
      "timestamp": "2017-10-05T20:00:29+00:00"
    },
    {
      "id": "c8c0fed35118498ea43f394f9eb01918",
      "sender": "wumpus",
      "payload": "on the inner level it's just NASA-level crazy, let's run three implementations and see which ones agree",
      "action": false,
      "timestamp": "2017-10-05T20:01:02+00:00"
    },
    {
      "id": "a069259316f640a1a0ee703d54699551",
      "sender": "sipa",
      "payload": "i think re-checking a block if it fails is reasonable... but why switch hash functions? it's massively more likely your CPU is fried than that the hash function implementation is wrong all along and you never noticed",
      "action": false,
      "timestamp": "2017-10-05T20:01:06+00:00"
    },
    {
      "id": "9294882536324b8aa7e84b8375bc63b4",
      "sender": "gmaxwell",
      "payload": "but then the dispatch is mutable not just set once at init. :(",
      "action": false,
      "timestamp": "2017-10-05T20:01:13+00:00"
    },
    {
      "id": "f7c493e505d74b31bf709ac449fec90b",
      "sender": "wumpus",
      "payload": "yeah ... I think we're overdesigning this",
      "action": false,
      "timestamp": "2017-10-05T20:01:28+00:00"
    },
    {
      "id": "7d93a1d67cfa453a8f97e9144e268110",
      "sender": "gmaxwell",
      "payload": "right we have a constant slow stream of complaints from users whos hosts have falsely rejected the blockchain.",
      "action": false,
      "timestamp": "2017-10-05T20:01:30+00:00"
    },
    {
      "id": "2db8efc0f41a40b7a61b10df7449b754",
      "sender": "wumpus",
      "payload": "just continue with what you were doing sipa :)",
      "action": false,
      "timestamp": "2017-10-05T20:01:37+00:00"
    },
    {
      "id": "b34ff8a4965a4371afb32abfe1180a08",
      "sender": "cfields",
      "payload": "gmaxwell: just have a generic non-dispatchable one",
      "action": false,
      "timestamp": "2017-10-05T20:01:40+00:00"
    },
    {
      "id": "41f33ed29f034ac6ac106e5afc014f50",
      "sender": "gmaxwell",
      "payload": "I would like to see that improved somehow.",
      "action": false,
      "timestamp": "2017-10-05T20:01:41+00:00"
    },
    {
      "id": "c0eb83843a06480b82e0e24854eea563",
      "sender": "wumpus",
      "payload": "any other topics?",
      "action": false,
      "timestamp": "2017-10-05T20:01:43+00:00"
    },
    {
      "id": "23342d80dc24402287e6caec5c0f68e7",
      "sender": "wumpus",
      "payload": "oh wait, it's time",
      "action": false,
      "timestamp": "2017-10-05T20:01:46+00:00"
    },
    {
      "id": "1fe59aed46ac4386ad7de6bb3c6233ab",
      "sender": "wumpus",
      "payload": "#endmeeting",
      "action": false,
      "timestamp": "2017-10-05T20:01:57+00:00"
    }
  ],
  "events": [
    {
      "event_type": "START_MEETING",
      "message": {
        "id": "7ef538b87dc74b97b9f57591fd879bd7",
        "sender": "jonasschnelli",
        "payload": "#startmeeting",
        "action": false,
        "timestamp": "2017-10-05T19:02:18+00:00"
      },
      "operand": null,
      "id": "7ef538b87dc74b97b9f57591fd879bd7",
      "timestamp": "2017-10-05T19:02:18+00:00"
    },
    {
      "event_type": "ADD_CHAIR",
      "message": {
        "id": "b0c16943005e4208bf33ba9255523ad4",
        "sender": "jonasschnelli",
        "payload": "#chair wumpus",
        "action": false,
        "timestamp": "2017-10-05T19:03:43+00:00"
      },
      "operand": [
        "wumpus"
      ],
      "id": "b0c16943005e4208bf33ba9255523ad4",
      "timestamp": "2017-10-05T19:03:43+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "278b18ba5ab8479f9be285317b98a42c",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/10637 | Coin Selection with Murchs algorithm by achow101 \u00c3\u0082\u00c2\u00b7 Pull Request #10637 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2017-10-05T19:03:47+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/10637",
      "id": "278b18ba5ab8479f9be285317b98a42c",
      "timestamp": "2017-10-05T19:03:47+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "f882f70984964bb9b0f742fcb23ec82a",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/11389 | Support having SegWit always active in regtest by sipa \u00c3\u0082\u00c2\u00b7 Pull Request #11389 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2017-10-05T19:05:17+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/11389",
      "id": "f882f70984964bb9b0f742fcb23ec82a",
      "timestamp": "2017-10-05T19:05:17+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "1c7ec293d9974c4ebccbc9819f2c9844",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/8498 | Near-Bugfix: Optimization: Minimize the number of times it is checked that no money... by jtimon \u00c3\u0082\u00c2\u00b7 Pull Request #8498 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2017-10-05T19:05:20+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/8498",
      "id": "1c7ec293d9974c4ebccbc9819f2c9844",
      "timestamp": "2017-10-05T19:05:20+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "b0c34668229e4f10bbec401c10017edf",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/11403 | SegWit wallet support by sipa \u00c3\u0082\u00c2\u00b7 Pull Request #11403 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2017-10-05T19:05:50+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/11403",
      "id": "b0c34668229e4f10bbec401c10017edf",
      "timestamp": "2017-10-05T19:05:50+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "70851dee0fdd464d96ead885c6ca61df",
        "sender": "wumpus",
        "payload": "#link https://github.com/bitcoin/bitcoin/issues/11449",
        "action": false,
        "timestamp": "2017-10-05T19:07:55+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/11449",
      "id": "70851dee0fdd464d96ead885c6ca61df",
      "timestamp": "2017-10-05T19:07:55+00:00"
    },
    {
      "event_type": "ACTION",
      "message": {
        "id": "6605808d378845078f474b1459666732",
        "sender": "wumpus",
        "payload": "#action achow101 make an issue for coin selection changes in general",
        "action": false,
        "timestamp": "2017-10-05T19:11:25+00:00"
      },
      "operand": "achow101 make an issue for coin selection changes in general",
      "id": "6605808d378845078f474b1459666732",
      "timestamp": "2017-10-05T19:11:25+00:00"
    },
    {
      "event_type": "TOPIC",
      "message": {
        "id": "fe0944044dca446ca1b2fdcae03ca96a",
        "sender": "wumpus",
        "payload": "#topic bad block interrogation/invalid block peer banning",
        "action": false,
        "timestamp": "2017-10-05T19:11:38+00:00"
      },
      "operand": "bad block interrogation/invalid block peer banning",
      "id": "fe0944044dca446ca1b2fdcae03ca96a",
      "timestamp": "2017-10-05T19:11:38+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "7936ea6429a54f45afff75f9b6f1b400",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/11446 | [WIP] Bad block interrogation by achow101 \u00c3\u0082\u00c2\u00b7 Pull Request #11446 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2017-10-05T19:11:54+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/11446",
      "id": "7936ea6429a54f45afff75f9b6f1b400",
      "timestamp": "2017-10-05T19:11:54+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "bdf4d8fe75a84a15bf09b79794736db6",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/10593 | Relax punishment for peers relaying invalid blocks and headers by luke-jr \u00c3\u0082\u00c2\u00b7 Pull Request #10593 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2017-10-05T19:14:36+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/10593",
      "id": "bdf4d8fe75a84a15bf09b79794736db6",
      "timestamp": "2017-10-05T19:14:36+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "3e63b6792996466ebd808b02a56e0013",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/10512 | Rework same-chain from abusing DoS banning, to explicit checks by luke-jr \u00c3\u0082\u00c2\u00b7 Pull Request #10512 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2017-10-05T19:27:31+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/10512",
      "id": "3e63b6792996466ebd808b02a56e0013",
      "timestamp": "2017-10-05T19:27:31+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "b925e99d00624167a2ec6dd2f608cd31",
        "sender": "gribble",
        "payload": "https://github.com/bitcoin/bitcoin/issues/10593 | Relax punishment for peers relaying invalid blocks and headers by luke-jr \u00c3\u0082\u00c2\u00b7 Pull Request #10593 \u00c3\u0082\u00c2\u00b7 bitcoin/bitcoin \u00c3\u0082\u00c2\u00b7 GitHub",
        "action": false,
        "timestamp": "2017-10-05T19:31:22+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/issues/10593",
      "id": "b925e99d00624167a2ec6dd2f608cd31",
      "timestamp": "2017-10-05T19:31:22+00:00"
    },
    {
      "event_type": "TOPIC",
      "message": {
        "id": "943bb301541746c0bbc887f3df630a72",
        "sender": "wumpus",
        "payload": "#topic multiwallet ui",
        "action": false,
        "timestamp": "2017-10-05T19:37:21+00:00"
      },
      "operand": "multiwallet ui",
      "id": "943bb301541746c0bbc887f3df630a72",
      "timestamp": "2017-10-05T19:37:21+00:00"
    },
    {
      "event_type": "LINK",
      "message": {
        "id": "cd0610e6ed2b4a1ca852fe7b3c9f44ac",
        "sender": "jonasschnelli",
        "payload": "https://github.com/bitcoin/bitcoin/pull/11383",
        "action": false,
        "timestamp": "2017-10-05T19:38:05+00:00"
      },
      "operand": "https://github.com/bitcoin/bitcoin/pull/11383",
      "id": "cd0610e6ed2b4a1ca852fe7b3c9f44ac",
      "timestamp": "2017-10-05T19:38:05+00:00"
    },
    {
      "event_type": "TOPIC",
      "message": {
        "id": "212067158ef0482e811d3ade5016e72b",
        "sender": "wumpus",
        "payload": "#topic dealing with platform-specific code (sipa)",
        "action": false,
        "timestamp": "2017-10-05T19:41:03+00:00"
      },
      "operand": "dealing with platform-specific code (sipa)",
      "id": "212067158ef0482e811d3ade5016e72b",
      "timestamp": "2017-10-05T19:41:03+00:00"
    },
    {
      "event_type": "END_MEETING",
      "message": {
        "id": "1fe59aed46ac4386ad7de6bb3c6233ab",
        "sender": "wumpus",
        "payload": "#endmeeting",
        "action": false,
        "timestamp": "2017-10-05T20:01:57+00:00"
      },
      "operand": null,
      "id": "1fe59aed46ac4386ad7de6bb3c6233ab",
      "timestamp": "2017-10-05T20:01:57+00:00"
    }
  ],
  "aliases": {},
  "vote_in_progress": false,
  "motion_index": null
}