--- Day changed Wed Feb 17 2021 00:07 -!- jeremyrubin [~jr@024-176-247-182.res.spectrum.com] has quit [Ping timeout: 256 seconds] 00:25 -!- seven_ [~seven@cpe-90-157-197-248.static.amis.net] has joined #bitcoin-core-pr-reviews 01:15 -!- musdom [~Thunderbi@202.184.0.102] has joined #bitcoin-core-pr-reviews 01:51 -!- setpill [~setpill@unaffiliated/setpill] has joined #bitcoin-core-pr-reviews 02:18 -!- setpill [~setpill@unaffiliated/setpill] has quit [Quit: o/] 02:27 -!- vasild [~vd@gateway/tor-sasl/vasild] has quit [Disconnected by services] 02:27 -!- vasild_ [~vd@gateway/tor-sasl/vasild] has joined #bitcoin-core-pr-reviews 02:27 -!- vasild_ is now known as vasild 03:12 -!- mol_ [~mol@unaffiliated/molly] has quit [Ping timeout: 272 seconds] 03:14 -!- jadi [~jadi@91.184.69.122] has quit [Read error: Connection reset by peer] 03:20 -!- Violet57Sawayn [~Violet57S@static.57.1.216.95.clients.your-server.de] has joined #bitcoin-core-pr-reviews 03:25 -!- setpill [~setpill@unaffiliated/setpill] has joined #bitcoin-core-pr-reviews 03:26 -!- jadi [~jadi@91.184.69.122] has joined #bitcoin-core-pr-reviews 03:27 -!- setpill [~setpill@unaffiliated/setpill] has quit [Client Quit] 03:30 -!- setpill [~setpill@unaffiliated/setpill] has joined #bitcoin-core-pr-reviews 03:32 -!- Violet57Sawayn [~Violet57S@static.57.1.216.95.clients.your-server.de] has quit [Ping timeout: 265 seconds] 03:35 -!- setpill [~setpill@unaffiliated/setpill] has quit [Quit: o/] 04:07 -!- mol [~mol@unaffiliated/molly] has joined #bitcoin-core-pr-reviews 04:48 -!- da39a3ee5e6b4b0d [~da39a3ee5@2403:6200:8876:b666:c4b7:6001:ca20:56eb] has joined #bitcoin-core-pr-reviews 04:48 -!- eoin [6d4eadd2@109.78.173.210] has joined #bitcoin-core-pr-reviews 04:52 -!- setpill [~setpill@unaffiliated/setpill] has joined #bitcoin-core-pr-reviews 05:03 -!- jadijadi [~jadi@91.184.69.122] has joined #bitcoin-core-pr-reviews 05:05 -!- jadi [~jadi@91.184.69.122] has quit [Ping timeout: 240 seconds] 05:05 < michaelfolkson> Anyone else looking at the Minisketch notes? 05:06 -!- jonatack [~jon@37.171.131.157] has joined #bitcoin-core-pr-reviews 05:06 < michaelfolkson> This video on finite fields is really good, very well explained https://www.youtube.com/watch?v=z9bTzjy4SCg 05:07 -!- aferreira44 [~andre@2001:1284:f013:cf5d:7550:c485:3103:161c] has joined #bitcoin-core-pr-reviews 05:10 -!- jadi [~jadi@91.184.69.122] has joined #bitcoin-core-pr-reviews 05:10 -!- mol [~mol@unaffiliated/molly] has quit [Ping timeout: 265 seconds] 05:11 -!- jadijadi [~jadi@91.184.69.122] has quit [Ping timeout: 265 seconds] 05:41 < michaelfolkson> gleb discusses finding a set difference with BCH codes here: https://youtu.be/ZUWs00Anpaw?t=3916 05:42 -!- mol [~mol@unaffiliated/molly] has joined #bitcoin-core-pr-reviews 05:43 < michaelfolkson> So libminisketch is doing the math (heavy lifting) to achieve this aim 05:43 < michaelfolkson> https://bitcoin.stackexchange.com/questions/102582/what-problem-set-is-the-minisketch-library-designed-for-what-is-it-currently-us 05:53 -!- eoin [6d4eadd2@109.78.173.210] has quit [Quit: Connection closed] 06:14 -!- davterra [~davterra@gateway/tor-sasl/tralfaz] has joined #bitcoin-core-pr-reviews 06:15 < pinheadmz> jonatack jnewbery would anybody be interested in a PR to re-skin the bitcoincore.reviews site with a "dark mode"? Or am I the only one reviewing meeting notes super late on Tuesday nights? 06:17 < jonatack> pinheadmz: i would! i use the "dark reader" extension on every website that doesn't offer a dark mode 06:18 < pinheadmz> heh i uninstalled that after github just added it natively ;-) hard to swallow extensions that change website content 06:18 < jonatack> but dark reader slows things down (and my connection is very slow; a github page loads in several minutes, if it doesn't time out) and reads everything :( 06:19 < pinheadmz> github is just slow sometimes anyway -- i find if i leave a github page open over night, after a few hours when i click the tab again it can take several minutes just to re-render 06:19 -!- jadi [~jadi@91.184.69.122] has quit [Ping timeout: 272 seconds] 06:20 < jonatack> i literally cannot open github anymore anyway. i am trying to do everything using `gh pr` as it is an order of magnitude faster for me but many things cannot yet be done with it 06:20 < pinheadmz> whats `gh pr` ? 06:21 < jonatack> a subset of github cli 06:26 < michaelfolkson> Do you like it more now jonatack than you used to? 06:26 < jonatack> a command line tool that i'm using along with the new ghwatch.py script in the bitcoin maintainer tool repo 06:26 -!- jadi [~jadi@185.197.71.29] has joined #bitcoin-core-pr-reviews 06:27 < jonatack> michaelfolkson: still too limited but i'm starting to use it for simple commenting or reviewing that doesn't need inline code comments 06:27 < jonatack> it shows all of the general comments but unfortunately not yet the code comments 06:28 < michaelfolkson> I'm trying to avoid using GitHub specific things but if it turns out to be really useful I'll reconsider 06:29 -!- da39a3ee5e6b4b0d [~da39a3ee5@2403:6200:8876:b666:c4b7:6001:ca20:56eb] has quit [Quit: My MacBook has gone to sleep. ZZZzzz…] 06:44 -!- jadi [~jadi@185.197.71.29] has quit [Remote host closed the connection] 06:49 -!- da39a3ee5e6b4b0d [~da39a3ee5@2403:6200:8876:b666:c4b7:6001:ca20:56eb] has joined #bitcoin-core-pr-reviews 06:56 -!- jadi [~jadi@185.197.71.29] has joined #bitcoin-core-pr-reviews 07:07 < pinheadmz> jonatack https://github.com/bitcoin-core-review-club/website/pull/310 07:08 < jonatack> pinheadmz: thanks! 07:09 < jonatack> pinheadmz: (i think we need a toggle though, not everyone is a dark mode person) 07:11 < jonatack> pinheadmz: (maybe persisting the preference with a cookie) 07:15 < pinheadmz> hm would that work with github static pages? maybe with javascript... 07:15 -!- Shing [6cc937e2@108-201-55-226.lightspeed.rcsntx.sbcglobal.net] has joined #bitcoin-core-pr-reviews 07:18 < jonatack> the site uses jekyll, but offhand idk 07:19 < jonatack> it's still static 07:23 -!- ghost43 [~daer@gateway/tor-sasl/daer] has joined #bitcoin-core-pr-reviews 07:25 -!- ghost43 [~daer@gateway/tor-sasl/daer] has quit [Remote host closed the connection] 07:26 -!- ghost43 [~daer@gateway/tor-sasl/daer] has joined #bitcoin-core-pr-reviews 07:27 -!- ghost43_ [~daer@gateway/tor-sasl/daer] has quit [Ping timeout: 268 seconds] 07:29 -!- da39a3ee5e6b4b0d [~da39a3ee5@2403:6200:8876:b666:c4b7:6001:ca20:56eb] has quit [Quit: My MacBook has gone to sleep. ZZZzzz…] 07:45 -!- dylanm [4461061f@ip68-97-6-31.ok.ok.cox.net] has joined #bitcoin-core-pr-reviews 08:08 -!- jadijadi [~jadi@185.197.71.29] has joined #bitcoin-core-pr-reviews 08:10 -!- jadi [~jadi@185.197.71.29] has quit [Ping timeout: 240 seconds] 08:11 -!- davterra [~davterra@gateway/tor-sasl/tralfaz] has quit [Quit: Leaving] 08:33 -!- eoin [6d4eadd2@109.78.173.210] has joined #bitcoin-core-pr-reviews 08:37 -!- mol_ [~mol@unaffiliated/molly] has joined #bitcoin-core-pr-reviews 08:39 -!- prayank [~Prayank@2409:4053:219c:5e4:8d6b:60e4:de36:9efc] has joined #bitcoin-core-pr-reviews 08:40 -!- mol [~mol@unaffiliated/molly] has quit [Ping timeout: 265 seconds] 08:42 -!- lightlike [~lightlike@p200300c7ef15010090af0b4eac2476dc.dip0.t-ipconnect.de] has joined #bitcoin-core-pr-reviews 08:42 -!- jadijadi [~jadi@185.197.71.29] has quit [Remote host closed the connection] 08:43 -!- jadi [~jadi@185.197.71.29] has joined #bitcoin-core-pr-reviews 08:44 -!- elle [~ellemouto@155.93.252.70] has joined #bitcoin-core-pr-reviews 08:45 < michaelfolkson> I don't have gleb slides but this slide is handy for understanding where the polynomials come from https://youtu.be/ZUWs00Anpaw?t=4613 08:47 < michaelfolkson> I haven't spent enough time studying the math :( 08:47 -!- jadi [~jadi@185.197.71.29] has quit [Ping timeout: 272 seconds] 08:48 -!- mdrollette [~mdrollett@cpe-70-123-125-237.tx.res.rr.com] has quit [Quit: bye] 08:51 -!- Yang4NY [52114c69@finc-22-b2-v4wan-160991-cust104.vm7.cable.virginm.net] has joined #bitcoin-core-pr-reviews 08:58 -!- sipa [~pw@gateway/tor-sasl/sipa1024] has joined #bitcoin-core-pr-reviews 08:58 -!- B [~B@47.205.22.150] has joined #bitcoin-core-pr-reviews 08:58 -!- B is now known as Guest51073 08:58 < jnewbery> pinheadmz: thanks for the pr! I think it'd need to be a toggleable option to be merged 08:59 -!- OliP [32f414b1@50-244-20-177-static.hfc.comcastbusiness.net] has joined #bitcoin-core-pr-reviews 08:59 -!- iodize [~iodize@195.181.160.175.adsl.inet-telecom.org] has joined #bitcoin-core-pr-reviews 08:59 < glozow> pinheadmz: nice! 09:00 < jnewbery> #startmeeting 09:00 < jonatack> hi 09:00 < sipa> hi 09:00 < emzy> hi 09:00 < elle> hi 09:00 < jnewbery> hi folks! Welcome to Bitcoin Core PR Review Club 09:00 < glozow> hi! 09:00 < OliP> Hi! 09:00 < dergoegge> hi 09:00 < iodize> hi 09:00 < aferreira44> Hi 09:00 < jnewbery> Feel free to say hi to let everyone know you're here. And let us know if this is your first time. 09:00 -!- jay57 [70c492ad@112.196.146.173] has joined #bitcoin-core-pr-reviews 09:00 < aferreira44> First time here 09:00 -!- Caralie [185a59be@cpe-24-90-89-190.nyc.res.rr.com] has joined #bitcoin-core-pr-reviews 09:00 < prayank> hi 09:00 < michaelfolkson> hi 09:00 < dylanm> Hi there, second time 09:00 < Caralie> hi 09:00 < iodize> welcome aferreira44 09:00 < jnewbery> welcome aferreira44! 09:00 -!- andozw [ae15b41c@174-21-180-28.tukw.qwest.net] has joined #bitcoin-core-pr-reviews 09:01 < sdaftuar> hi 09:01 < schmidty> hi 09:01 -!- ecola [~3cola@95.175.17.147] has joined #bitcoin-core-pr-reviews 09:01 < andozw> yo 09:01 < ecola> hi 09:01 < sipa> welcome all! 09:01 < jnewbery> This week is a little bit different. It's the first time we're talking about a PR that isn't in the Bitcoin Core repo. 09:01 < lightlike> Hi 09:01 < Shing> hi, first time here 09:01 < jnewbery> We'll be covering some of the math in Minisketch. Notes and questions kindly provided by sipa are here: https://bitcoincore.reviews/minisketch-26 09:02 -!- am74 [92732bd1@146.115.43.209] has joined #bitcoin-core-pr-reviews 09:02 < jnewbery> ok, take it away, sipa! 09:02 -!- shafiunmiraz0 [~shafiunmi@103.220.205.190] has joined #bitcoin-core-pr-reviews 09:02 < sipa> cool, thanks jnewbery! 09:02 < sipa> this will also be a bit different as it's primarily reviewing the algorithm/math itself, and not so much the implementation 09:03 -!- fodediop [~fode@41.214.87.141] has joined #bitcoin-core-pr-reviews 09:03 < sipa> i have no idea how this is going to go, but i'm sure it'll be interesting 09:03 < amiti> hi! 09:03 < fodediop> hi 09:03 < sipa> who has had a chance to look over the notes on https://bitcoincore.reviews/minisketch-26 ? 09:03 -!- t65 [a444c95d@164.68.201.93] has joined #bitcoin-core-pr-reviews 09:03 < jnewbery> y 09:03 < michaelfolkson> I have but not for long enough :( 09:03 < jonatack> a bit 09:03 < Murch> hi 09:03 < dergoegge> ~y 09:03 < glozow> y 09:03 < am74> I took a look but not a mathematician so don't fully understand everything 09:04 < shafiunmiraz0> a bit 09:04 < jnewbery> Shing: welcome! 09:04 < eoin> Hi, first time here 09:04 < sipa> that's perfectly fine... i don't expect that we'll go over all of it 09:04 -!- __grunch__ [~grunch@2800:810:549:84d7:7d1b:230c:fa24:9c9d] has joined #bitcoin-core-pr-reviews 09:05 < emzy> y 09:05 < sipa> so let's dive in with the first question, and we'll see where we go from there 09:05 < willcl_ark> hi 09:05 < sipa> How are finite field elements represented in the Python code? 09:05 -!- NelsonGaldeman [5e0f2480@94.15.36.128] has joined #bitcoin-core-pr-reviews 09:05 < ecola> just lurking here, totally out of my depth 09:05 < jnewbery> eoin: welcome! 09:06 < glozow> In `GF2Ops`, elements are represented as integers. In the generation code I found it helpful to note that `GF(2^field_size)` is isomorphic to `Z_2[x] / (f)` for polynomial f of degree `field_size`, so when generating the field, the integers are like polynomials where the nth bit (from the right) is the coefficient for `x^{n-1}`. 09:06 < am74> There are some libraries like pyfinite 09:06 < jnewbery> ecola: lurking is also fine. We're all learning 09:06 < eoin> Thank you jnewbury 09:06 < lightlike> as numbers from 1 to 2^b-1 where b is field size 09:06 < sipa> glozow: yes, exactly :) 09:06 < sipa> lightlike: 0 as well 09:06 < glozow> Oh, and polynomials in the poly_* functions with finite field coefficients are arrays of integers with the ith element of the array corresponding to the coefficient for `x^i` (with no trailing zeroes). 09:07 < sipa> someone prepared :) 09:07 < sipa> glozow: exactly 09:07 < michaelfolkson> For those who feel completely out their depth this might be helpful: https://bitcoin.stackexchange.com/questions/102582/what-problem-set-is-the-minisketch-library-designed-for-what-is-it-currently-us 09:07 < michaelfolkson> "In theory it could be used for any problem where you have two sets of data and want to work out how those data sets differ (which specific elements are present in one but missing in another) as efficiently as possible." 09:08 < sipa> so, our field elements are represented as the integers from 0... 2^bits - 1, inclusive 09:08 < emzy> Can you think of it as a more general bloomfilter? 09:08 < sipa> but they are not integers 09:09 < sipa> emzy: there is some similarity, but it's closer to IBLT 09:09 < sipa> the big difference with normal bloom filters is that you can recover the actual elements from a sketch 09:09 < sipa> how do we perform addition between our field elements? 09:10 < glozow> simply xor! 09:10 < dergoegge> addition is a simple XOR (i think subtraction as well, not to confident about that tho) 09:10 < sipa> dergoegge: very good, you answered my next question too 09:10 -!- Guest51073 [~B@47.205.22.150] has quit [Ping timeout: 264 seconds] 09:11 < sipa> can you see why? 09:11 -!- sishir [47ca5b95@c-71-202-91-149.hsd1.ca.comcast.net] has joined #bitcoin-core-pr-reviews 09:11 < jnewbery> dergoegge: if you have two field elements a and b, and a + b is a ^ b, what is a + b + b? 09:12 < dergoegge> jnewbery: a :) 09:12 < sipa> so if a + b + b = a, then a + b = a - b :) 09:12 < dergoegge> so subtraction is also a simple xor 09:12 < jonatack> right, it cancels itself out (set semantics) 09:12 < sipa> this self-cancelling aspect will become important later 09:12 < sipa> what about multiplication? 09:13 < glozow> more generally, when characteristic 2, additive inverse of any element is equal to itself? 09:14 < glozow> Multiplication (x, y): For each bit in y (from LSB to MSB), add x if the bit = 1, then multiply by 2. Equivalent to adding y copies of x. 09:14 < jnewbery> glozow: exactly! True for any GF(2^n) 09:14 < sipa> glozow: indeed, that's almost the definition of characteristic (the characteristic of a field is the maximum number of times you need to add an element to itself to be guaranteed to reach 0) 09:14 < sipa> every 2^n sized field has characteristic 2 09:15 < sipa> so if we're working in the 8-bit field, what would {3} * {3} be (i'm going to write field elements in {} to not give the impression they're actually integers) 09:15 < dergoegge> i understand multiplication except the part with the irreducible polynomials. 09:16 < dergoegge> is that comparable with modulo but for polynomials? 09:16 < sipa> dergoegge: let's go into that then 09:16 < sipa> yes, it is exactly that 09:16 < sipa> the irreducible polynomials correspond to the prime numbers in Z 09:16 -!- t65 [a444c95d@164.68.201.93] has quit [Quit: Connection closed] 09:16 < sipa> if you work modulo a non-prime number, you get zero divisors (two non-zero numbers that multiplied together give 0) 09:16 < sipa> e.g. mod 9, 3*3 = 0 09:17 < sipa> if you work modulo a non-irreducible polynomial, you also get zero divisors 09:17 < sipa> say we were trying to construct GF(4), but were working modulo x^2+1 ({5}), what would (x+1)*(x+1) be? ({3} * {3}) ? 09:18 < jnewbery> dergoegge: it's the generalization of that. Integers are polynomials of degree 0, so p is an irreducible polynomial of degree 0 09:18 < sipa> what's (x+1) * (x+1) in general? 09:19 < sdaftuar> x^2+1, so the product you asked about would be 0, when working modulo x^2+1 09:19 < glozow> x^2 + 1? 09:19 < lightlike> x^2 + 1? 09:19 < sipa> right 09:19 < sdaftuar> and hence that would not be a field 09:19 < sipa> in general it is (x^2 + 2x + 1), but that's the integer 2=1+1, not {2} 09:19 < sipa> 1+1 = 0 in our field 09:20 < prayank> sipa: (x+1)^2 = x^2 + 1 + x 09:20 < sipa> prayank: no 09:20 < sipa> x^2 + 1 + x + x 09:20 < prayank> Sorry 2x 09:20 < prayank> Yeah 09:20 < glozow> prayank: 2x = x + x = 0 here 09:20 < sipa> so if we were working modulo (x^2 + 1) {5}, the field element x+1 {3} would not have an inverse 09:21 < sipa> and it's a requirement for a field that every non-zero element has an inverse 09:21 < sipa> otherwise we can't solve linear equations over it 09:22 < sipa> ok, so, multiplication over the integers-representing-field-elements is really: taking them apart, interpreting the bits as coefficients of a polynomial over Z2 (integers mod 2), multiplying those polynomials, and then doing the result modulo an irreducible polynomial of degree (bits) 09:22 -!- ben92 [bd7a7e53@189.122.126.83] has joined #bitcoin-core-pr-reviews 09:22 < sipa> what irreducible polynomial is used for the 256-sized field? 09:23 < jnewbery> GF2_MODULI[8] 09:23 < glozow> x^9 + x + 1? 09:23 < glozow> WAIT OOPS I MISCOUNTED 09:23 < sipa> glozow: that's for a field with 512 elements 09:24 < glozow> x^8 + x^4 + x^3 + x + 1 09:24 < sipa> indeed 09:24 < jnewbery> so I was wrong as well, should be GF2_MODULI[7] ? 09:24 < glozow> no, the first 2 are None 09:24 < sipa> jnewbery: no, GF2_MODULI[8] 09:24 < jnewbery> oh sorry. None, None 09:24 < jnewbery> got it 09:24 < sipa> in minisketch the lowest-degree irreducible polynomial is used for every field size, and it appears no trinomial exists for size 2^8 09:25 < sipa> so a pentanomial is used 09:25 < jnewbery> The moduli are here in the code: https://github.com/sipa/minisketch/pull/26/files#diff-c1cbd3b5834cdb8c5408a4527171bfa260f4a104e89e051700a9da3dc69f56a4R18-R83 09:25 < sipa> so: integers represent field elements 09:25 < sipa> but in what follows we're going to work with polynomials _over_ those field elements 09:25 < sipa> and it's important not to confuse the two 09:26 < sipa> as polynomials are also used in the definition of the field elements themselves 09:26 < sipa> the field elements are represented as integers in the python code; polynomials are represented as lists of integers (if p is a list, p[0] is the 0th degree coefficvients, p[17] is the 17th degree coefficient, etc) 09:27 < sipa> let's move on to the next question 09:27 < sipa> Imagine Alice and Bob have sets {a,b,c,d,f} and {b,d,e,f} respectively, where the variables represent distinct non-zero 8-bit field elements. Assume that Alice knows ahead of time that the (symmetric) difference between those two sets is not more than 3. Alice is going to send a sketch of her elements to Bob, so that Bob can learn the differences. How many bits will her sketch be in size? 09:27 < jonatack> A sketch of b-bit elements with capacity c can be stored in bc bits, so Alice's sketch will be max 5 elements x 8 bits = 40 bits in size? 09:27 < dergoegge> 8*3 so 24 09:27 < lightlike> 3*8=24 bits? 09:27 < glozow> I got 24, `capacity` = 3, 8-bit elements (`field_size` = 8), we get bc = 24 bits. 09:27 < sipa> feel free to ask me any time if something isn't clear in the question 09:27 < jonatack> or capacity 3 x 8 bits = 24 09:28 < sipa> yes, exactly 24 bits 09:28 < jonatack> was unsure here 09:28 < dergoegge> in serialized_size whats the +7 for? 09:28 < sipa> and what field elements would the sketch Alice compute for her set, with capacity 3? 09:28 < sipa> dergoegge: rounding up to a multiple of bytes 09:28 < glozow> it's ceil division for bytes 09:28 < sipa> look at the add function 09:29 -!- jay57 [70c492ad@112.196.146.173] has quit [Quit: Connection closed] 09:29 < jonatack> field elements {a,c} 09:29 < glozow> oo, typo in add comment? `1 <= element < 2**field_size` 09:29 < sipa> jonatack: that's not right, we're looking for something with 3 elements 09:30 < sipa> glozow: i believe that comment is correct 09:30 < sipa> add requires "numbers" as input in range [1,255] 09:30 < glozow> er i mean, it currently says 1**field_size 09:30 < sipa> oh, oops, yes! 09:30 < sipa> absolutely 09:30 < sipa> it should be 2**field_size 09:31 < sipa> so, Alice is creating a Minisketch object, with field_size=8 capacity=3 09:31 < sipa> what are its _odd_syndromes initialized to? 09:32 < glozow> [0, 0, 0]? 09:32 < sipa> self._odd_syndromes = [0] * capacity 09:32 < sipa> indeed 09:32 < sipa> now Alice calls sketch.add(a) 09:32 < lightlike> should alice have a+b+c+d+f, a**3+b**3+c**3+d**3+f**3, a**5+b**5+c**5+d**5+f**5? 09:32 < sipa> what will the _odd_syndromes become? 09:32 < sipa> lightlike: exactly 09:32 -!- shesek [~shesek@unaffiliated/shesek] has quit [Remote host closed the connection] 09:33 < sipa> (where + and ** are field operations, not integer operations) 09:33 < sipa> add(a) will change _odd_syndromes to [a, a**3, a**5] 09:33 < sipa> add(b) will change it to [a+b, a**3 + b**3, a**5 + b**5] 09:33 < sipa> etc 09:34 < glozow> noice 09:34 < sipa> and serialize will output 3 bytes that pack those 3 field elements 09:35 < sipa> if Bob wants to learn what elements Alice has he doesn't, and the other way around, he will receive this sketch [a+b+c+d+f, a**3+b**3+c**3+d**3+f**3, a**5+b**5+c**5+d**5+f**5] from Alice 09:35 < sipa> and compute his own sketch 09:35 < sipa> and then combine the two to find the sketch of the symmetric difference of their sets 09:35 < sipa> how does he perform this combining? 09:35 < dergoegge> i though the // 8 in serialize size was a comment, lol oh man 09:35 < glozow> xor them! 09:35 < sipa> haha 09:35 < sipa> glozow: exactly 09:36 < sipa> and this is why the a+a = 0 property matters: simply adding field elements gives you naturally a sketch of the symmetric difference 09:36 < amiti> wow, thats so cool. 09:36 < sipa> so what's the combined sketch? 09:36 < sipa> for elements {a,b,c,d,f} and {b,d,e,f} 09:36 < lightlike> a+c+e, a**3+c**3+e**3, a**5+c**5+e**5 09:36 < emzy> nice math. :) 09:37 < sipa> yeah 09:37 < sipa> after doing that, Bob needs to decode the sketch to find the elements it corresponds to 09:37 < jnewbery> dergoegge: to answer your question from earlier, it's to get the smallest number of bytes that will fit the right number of bits. // in python is floor division 09:38 < sipa> there are 3 steps in that: first computing the even power-sums from just the odd-power ones, applying Berlekamp-Massey to convert it to a polynomial, and then finding the roots of that polynomial 09:38 < sipa> how is it possible to compute the even power-sums from just the odd ones? 09:38 < dergoegge> jnewbery: yea thanks i was just confused because i am looking at c code all day and // normally indicates comments :D 09:39 < sipa> so we're given [a+c+e, a**3 + c**3 + e**3, a**5 + c**5 + e**5] 09:39 < glozow> Since the polynomials are over a finite field with a characteristic 2, `a + a = 0` for every `a` in the field and thus `(x + y)^2 = x^2 + y^2`. It's also known that `s_0 = n` This makes it possible to compute all even syndromes of the sketch from the odd syndromes since every even is some `s_{2i} = x^{2i} + y^{2i} + ... = (x + y + ...)^{2i} = s_i^2` 09:39 < sipa> and we want [a+c+e, a**2 + c**2 + e**2, a**3 + c**3 + e**3, a**4 + c**4 + e**4, a**5 + c**5 + e**5, a**6 + c**6 + e**6] 09:40 < jonatack> looking at pyminisketch.py::L430-434 09:40 < sipa> yeah, indeed, the sum of squares is just the square of the sums 09:40 < lightlike> so square the last odd one for the next even one 09:40 < sipa> and the sum of 4th powers is the square of the sums of squares 09:40 < sipa> and the sum of 6th powers is the square of the sums of cubes 09:41 < sipa> not necessarily the last odd one 09:41 -!- Talkless [~Talkless@mail.dargis.net] has joined #bitcoin-core-pr-reviews 09:41 < sipa> e.g. the 4th power sum is the square of sum of 2nd powers 09:41 < lightlike> oh, ok 09:41 -!- sishir [47ca5b95@c-71-202-91-149.hsd1.ca.comcast.net] has quit [Quit: Connection closed] 09:42 < sipa> and this is indeed special about characteristic 2 09:42 < sipa> if we were working in a different characteristic field, we'd need to send the odd powers too 09:42 < sipa> giving an instant factor 2 size increase 09:42 < glozow> :math-fireworks: 09:42 < prayank> lol 09:43 < sipa> the next step in the recovery process is the Berlekamp-Massey algorithm 09:43 < jnewbery> *need to send the even powers too ? 09:43 < sipa> jnewbery: yes! 09:43 < sipa> unfortunately, i have no clue *why* the BM algorithm works 09:43 < sipa> but we can talk about *what* it does for us 09:43 < sipa> anyone have an idea? 09:44 < michaelfolkson> I've read the wiki entry :) 09:44 < glozow> BM finds the polynomnial (determined by coefficients) that generates the the syndromes. i.e. minimal polynomial L (its coefficients `l_0 ... l_n`) s.t. `S(M)*L` = the power sums. 09:44 < sipa> if our sketch just contained the single element a 09:45 < sipa> so [a, a**2, a**3, a**4, a**5, a**6] is our expanded syndromes 09:45 < sipa> what polynomial would BM output? 09:46 < sipa> note that every element in the list is the previous one times a 09:46 < sipa> that's a geometric series, remember? 09:46 < jnewbery> I'm going to guess (x-a) 09:47 < sipa> wrong ;) 09:47 < sipa> but very close 09:47 < jnewbery> is anyone else brave enough to guess or do I have to be wrong again? 09:48 < jnewbery> (x-a)^6 ? 09:48 < sipa> i'll help: it's (1-a*x) 09:48 < sipa> or [1, a] for us in list representation 09:49 < sdaftuar> the roots of the polynomial berlekamp massey spits out are the inverses of what we want? 09:49 < sipa> yeah 09:49 < sdaftuar> crazy 09:49 < sipa> so what BM does 09:49 < sipa> in a way 09:49 < sipa> is find a list of coefficients, which when convoluted with that many subsequent elements in the input, gives 0 09:49 < sipa> so for our 1st degree example here 09:50 < sipa> the input lists are [a, a**2], [a**2, a**3], [a**3, a**4], ... 09:50 -!- molz_ [~mol@unaffiliated/molly] has joined #bitcoin-core-pr-reviews 09:50 -!- mol_ [~mol@unaffiliated/molly] has quit [Read error: Connection reset by peer] 09:50 -!- ben92 [bd7a7e53@189.122.126.83] has quit [Ping timeout: 240 seconds] 09:50 < glozow> berlekamp massey doesn't give us the roots right? just coefficients - we get roots afterward? 09:50 < sipa> and for each of them, multiplying the first with -a, and adding the second times 1, gives 0 09:50 < sipa> right? 09:51 < sipa> (a * -a) + (a * 1) = 0 09:51 < sipa> it gives a way to compute the next term of the list in function of the previous one 09:51 < sipa> like the fibonacci series 09:52 < sipa> has rule x_{n+2} = x_{n} + x_{n+1} 09:52 < sipa> this one has rule x_{n+1} = a*x_{n} 09:52 < sipa> the coefficients of that rule are [-a, 1] 09:52 < sipa> and that's what BM finds 09:53 < sipa> given a list generated by a fibonacci-like rule, find the rule 09:53 < sipa> better: find the simplest rule 09:54 < sdaftuar> so BM finds a polynomial in GF(2^n)[x] of degree at most c, in our application? 09:54 < sdaftuar> i guess it can fail sometimes too? 09:54 < sipa> and it turns out that if you have a list [a, a**2, a**3, a**4, ...], that means the rule (-a)*x_{n} * 1*x_{n+1} 09:55 < sipa> if your list is [a+b, a**2 + b**2, a**3 + b**3, ...], it finds the rule ((-a)*x_{n} * 1*x_{n+1}) * ((-b)*x_{n} * 1*x_{n+1}) 09:55 < jonatack> beautifully elegant 09:55 < sipa> sdaftuar: BM will always find something, but if it finds a polynomial with degree higher than the capacity, we know something went wrong (as that would mean it's generated from more than capacity elements) 09:57 < sipa> so applying BM to the sketch in our problem, will find [a*b*c, a*b + b*c + a*c, a + b + c, 1] (i.e. the polynomial (a+b+c) + (a*b + b*c + a*c)*x + (a+b+c)*x^2 + x^3) 09:57 < sipa> and the inverses of its roots are a, b, c 09:57 < sdaftuar> sipa: from a quick look at the python code, the runtime won't be crazy in those scenarios right? looks like it's just got runtime based on the number of syndromes? 09:58 < sipa> BM does a quadratic number of field operations i believe 09:58 < sipa> or rather O(sketch_size * differences) 09:59 < sipa> of course, the field operations do become slower in function of the field size 09:59 < sipa> i'm afraid that's our time 09:59 < lightlike> so the most expensive step is the calculation of the roots, not BM? 09:59 < sipa> the roots 09:59 < sipa> which, i'm afraid time doesn't allow us to go into 09:59 < sipa> but i'm happy to stay longer 09:59 < glozow> 😢 09:59 < jnewbery> we could also do a follow-up another week if you're happy to do that, sipa? 10:00 < jnewbery> might give people a bit more time to go over notes again and read up on BM 10:00 < michaelfolkson> +1 10:00 < jonatack> sipa: pyminisketch.py runs in about a minute for me...was anyone able to build the c++ libminisketch? make did not run for me 10:00 < sipa> the next step is about root finding :) 10:01 < jnewbery> I think glozow wants you to ask q5 10:01 < sipa> jnewbery: sure, find be me... though it may be less reviewy 10:01 < michaelfolkson> Did you run it on test vectors jonatack? 10:01 < sipa> jonatack: it works for me, though the unit tests run forever, which is kind of weird and may make it look like failure 10:01 < sipa> 5. The final, and most complicated step to recovering the set of differences is finding the roots of the obtained polynomial. To do so, we first verify that the obtained nth degree polynomial actually has n distinct roots. It relies on the property that (x^(fieldsize) - x) has every field element exactly once as root. How does that let us test if the polynomial is fully factorizable into n 10:01 < jonatack> michaelfolkson: i ran "time pyminisketch.py" 10:02 < sipa> roots? Why is this test necessary? 10:02 < michaelfolkson> Presumably you can feed two sets into it and it finds the elements that aren't in both sets? 10:02 -!- Caralie [185a59be@cpe-24-90-89-190.nyc.res.rr.com] has quit [Quit: Connection closed] 10:02 < sipa> michaelfolkson: that's what the tests do 10:02 < glozow> roots are where our actual stuff is! 10:03 -!- dylanm [4461061f@ip68-97-6-31.ok.ok.cox.net] has quit [Quit: Connection closed] 10:03 < glozow> A n-degree polynomial can have at most n roots. It _may_ have fewer roots that are repeated (note n-degree polynomial with unique roots is synonymous with having n roots). 10:03 < sipa> glozow: could it also just have fewer roots? 10:03 < sipa> (even when counting repetition) 10:03 < glozow> :think 10:03 < sipa> hint: we answered this in question 1 ;) 10:04 < michaelfolkson> The tests of the C++ code 10:04 < sipa> well, touched on it 10:04 < michaelfolkson> Did anyone feed two sets into the Python code? 10:04 < sipa> michaelfolkson: that's what the tests do 10:04 < glozow> is the answer just no o.O 10:05 < sdaftuar> depends on what field you're looking for roots in! 10:05 < sipa> glozow: the answer is yes, you can definitely have fewer roots 10:05 < glozow> aw man, how have fewer roots? 10:05 < sipa> in non-algebraically-closed fields, but all finite fields are not algebraically closed ;) 10:05 < michaelfolkson> sipa: Oh within this Python file right, I was looking elsewhere 10:05 < sipa> glozow: what are the roots of x^2 + x + 1? 10:06 < glozow> oh, das not reducible 10:06 < michaelfolkson> das correct 10:06 < sipa> yes, so what are its roots? 10:06 < jnewbery> there are none? 10:06 < sipa> yes, exactly 10:06 < sdaftuar> in GF(4), it has roots 10:06 < sipa> sdaftuar: ha, right 10:06 < sdaftuar> i mean, it really depends on the question :) 10:07 < sipa> but every finite has polynomials (with coefficients in that field) which are irreducible 10:07 < sdaftuar> right 10:07 < sipa> and irreduclbe polynomials have no roots by definition 10:07 < sipa> you can also have reducible polynomials which have no roots though 10:07 < sipa> e.g. a 4th degree polynomial may be factorizable into 2 2nd degree polynomials, which are individually irreducible 10:08 -!- elle [~ellemouto@155.93.252.70] has quit [Quit: leaving] 10:08 < jnewbery> ok, shall we wrap it up there and schedule a follow-up? It'd be a shame for people who had a hard stop to miss out on too much of the fun 10:09 < sipa> sgtm 10:09 < jnewbery> glozow prepared some excellent additional notes here for anyone who wants a bit more explanatory material: https://github.com/glozow/bitcoin-notes/tree/master/minisketch 10:09 < jnewbery> thanks so much sipa. This has been 🤯🤯🤯 10:09 < fodediop> This was a heavy one, but I beleive lol 10:10 < fodediop> thank you sipa 10:10 < glozow> thanks professor sipa!!!! 10:10 < dergoegge> thanks sipa! 10:10 < dergoegge> 🤯 10:10 < OliP> Thanks sipa! 10:10 < amiti> yeah this was awesome, I learned a lot from lurking :) 10:10 < prayank> Thanks everyone 10:10 < jonatack> great stuff, thank you sipa 10:10 < emzy> Thanks sipa! 10:10 < shafiunmiraz0> Thank you sipa. Thank you jnewbery. Thank you everyone 10:10 < lightlike> thanks sipa! 10:10 -!- OliP [32f414b1@50-244-20-177-static.hfc.comcastbusiness.net] has quit [Quit: Connection closed] 10:10 < michaelfolkson> Cool, thanks sipa. Will check out the glozow notes too 10:10 < jnewbery> #endmeeting 10:11 < sipa> glozow: This is important because our set {m_1 ... m_n} is derived from the roots of the polynomial. The Berklekamp Trace Algorithm also requires this I believe. 10:12 < sipa> that's exactly the answer; our root finding algorithm (next club!) requires that the polynomial is fully factorizable into distinct 1st degree factors 10:12 -!- eoin [6d4eadd2@109.78.173.210] has left #bitcoin-core-pr-reviews [] 10:12 < sipa> (it'll go into an infinite loop otherwise) 10:12 < glozow> sorrey bad habit (left hand types Ber right hand types K), i'm pushing changes since jnewbery outed me for being a nerd 10:12 -!- fodediop [~fode@41.214.87.141] has quit [Quit: WeeChat 3.0] 10:12 < sipa> thanks all! 10:12 < glozow> WOOHOO! 10:12 < sipa> i hope this was informative 10:13 < jonatack> very 10:13 < ecola> thank you sipa 10:13 < prayank> sipa: Since we were discussing maths and I am not good at it. I had a question if you could answer. I had read somewhere that a + (b-a)/3 + (c-a)/3 is better than (a+b+c)/3 when looking for average of 3 numbers. Is this true? 10:14 < jnewbery> elle is hosting next week, so we perhaps we can reconvene in two weeks for more minisketch. Keep an eye on the website for updates. 10:14 < sipa> prayank: is this about numerical stability? 10:15 < sipa> "better" isn't very well defined 10:15 < prayank> sipa: Just average and comparison based on what requires less computation 10:16 -!- eoin [6d4eadd2@109.78.173.210] has joined #bitcoin-core-pr-reviews 10:16 -!- lightlike [~lightlike@p200300c7ef15010090af0b4eac2476dc.dip0.t-ipconnect.de] has quit [Quit: Leaving] 10:16 < sipa> the latter is obviously more work, it has the same amount of addition/subtractions, but needs two divisions 10:17 < sipa> even if you merge them into a + (b+c-2*a)/3 it's more work 10:17 -!- shafiunmiraz0 [~shafiunmi@103.220.205.190] has quit [Quit: Leaving] 10:18 < prayank> Thanks 10:20 < prayank> Although I am confused If I had to use average in a project which one should be used. Maybe it depends on project and other things involved. 10:20 < sipa> yes 10:20 < sipa> in some context it may be better for numerical stability, i'm not sure 10:20 < sipa> but that really depends on the context 10:22 -!- Yang4NY [52114c69@finc-22-b2-v4wan-160991-cust104.vm7.cable.virginm.net] has quit [Quit: Ping timeout (120 seconds)] 10:30 < jonatack> Meeting log is up at https://bitcoincore.reviews/minisketch-26#meeting-log 🍰 10:30 -!- eoin [6d4eadd2@109.78.173.210] has quit [Quit: Connection closed] 10:36 -!- NelsonGaldeman [5e0f2480@94.15.36.128] has quit [Quit: Connection closed] 10:37 -!- prayank [~Prayank@2409:4053:219c:5e4:8d6b:60e4:de36:9efc] has left #bitcoin-core-pr-reviews [] 10:39 -!- eoin [6d4eadd2@109.78.173.210] has joined #bitcoin-core-pr-reviews 10:47 -!- iodize [~iodize@195.181.160.175.adsl.inet-telecom.org] has left #bitcoin-core-pr-reviews [] 10:50 -!- shesek [~shesek@164.90.217.137] has joined #bitcoin-core-pr-reviews 10:50 -!- shesek [~shesek@164.90.217.137] has quit [Changing host] 10:50 -!- shesek [~shesek@unaffiliated/shesek] has joined #bitcoin-core-pr-reviews 10:55 -!- am74 [92732bd1@146.115.43.209] has quit [Ping timeout: 240 seconds] 10:58 -!- larryruane_ [uid473749@gateway/web/irccloud.com/x-cawimsbycdaubiml] has joined #bitcoin-core-pr-reviews 11:01 -!- eoin [6d4eadd2@109.78.173.210] has quit [Quit: Connection closed] 11:05 < jonatack> sipa: building minisketch worked fine after doing the usual steps, opened a patch to update the readme build doc 11:05 < sipa> oh oops 11:05 < sipa> i guess we just didn't update the instructions when the autoconf stuff was added 11:06 < jonatack> np, was thinking about math and following it mindlessly an hour ago 11:07 -!- ecola [~3cola@95.175.17.147] has quit [Quit: Leaving] 11:10 < sipa> sdaftuar: it appears that (x^2 + x + 1) has roots in GF(4), but not in any other GF(2^n) 11:15 < sipa> (and because its coefficients are in the base field GF(2), this doesn't depend on the choice of polynomial in the field definition) 11:22 < sipa> jonatack: pyminisketch.py runs a lot faster in pypy 11:22 < sipa> 6-7x faster 11:26 -!- __grunch__ [~grunch@2800:810:549:84d7:7d1b:230c:fa24:9c9d] has quit [Ping timeout: 272 seconds] 11:27 -!- __grunch__ [~grunch@2800:810:549:84d7:7d1b:230c:fa24:9c9d] has joined #bitcoin-core-pr-reviews 11:31 -!- waxwing [~waxwing@unaffiliated/waxwing] has joined #bitcoin-core-pr-reviews 11:32 -!- jeremyrubin [~jr@024-176-247-182.res.spectrum.com] has joined #bitcoin-core-pr-reviews 11:49 -!- andrewtoth_ [~andrewtot@gateway/tor-sasl/andrewtoth] has joined #bitcoin-core-pr-reviews 11:52 -!- andrewtoth [~andrewtot@gateway/tor-sasl/andrewtoth] has quit [Ping timeout: 268 seconds] 11:57 -!- andrewtoth_ [~andrewtot@gateway/tor-sasl/andrewtoth] has quit [Remote host closed the connection] 12:03 -!- Talkless [~Talkless@mail.dargis.net] has quit [Quit: Konversation terminated!] 12:18 -!- andozw [ae15b41c@174-21-180-28.tukw.qwest.net] has quit [Quit: Connection closed] 12:22 -!- molz_ [~mol@unaffiliated/molly] has quit [Read error: Connection reset by peer] 12:23 -!- queip [~queip@unaffiliated/rezurus] has quit [Ping timeout: 246 seconds] 12:24 -!- __grunch__ [~grunch@2800:810:549:84d7:7d1b:230c:fa24:9c9d] has quit [Ping timeout: 272 seconds] 12:27 -!- queip [~queip@unaffiliated/rezurus] has joined #bitcoin-core-pr-reviews 12:29 -!- setpill [~setpill@unaffiliated/setpill] has quit [Quit: setpill] 12:50 -!- jonatack_ [~jon@37.173.29.80] has joined #bitcoin-core-pr-reviews 12:53 -!- jonatack [~jon@37.171.131.157] has quit [Ping timeout: 260 seconds] 12:58 -!- jonatack_ [~jon@37.173.29.80] has quit [Read error: Connection reset by peer] 13:01 -!- mol [~mol@unaffiliated/molly] has joined #bitcoin-core-pr-reviews 13:46 -!- Shing [6cc937e2@108-201-55-226.lightspeed.rcsntx.sbcglobal.net] has quit [Quit: Connection closed] 13:46 -!- __grunch__ [~grunch@2800:810:549:84d7:7d1b:230c:fa24:9c9d] has joined #bitcoin-core-pr-reviews 13:50 < sdaftuar> sipa: i guess i haven't worked with these finite fields in a long time but that is shocking to me and somewhat unbelievable. i will play around with it now :) 13:50 < sipa> sdaftuar: do you have sagemath? 13:50 < sdaftuar> apparently i do! 13:51 < sipa> it's common computer algebra software that's awesome for playing around with these things 13:51 < sipa> P. = GF(256)[] 13:51 < sipa> P is now the ring of polynomials over GF(256), with variable name x 13:51 < sipa> (x^2 + x + 1).factor() 13:53 < sdaftuar> (x + z8^7 + z8^6 + z8^4 + z8^2 + z8) * (x + z8^7 + z8^6 + z8^4 + z8^2 + z8 + 1) 13:53 < sipa> so z8 here is the variable for the field definition of GF(256) 13:54 < sdaftuar> that's what i figured. so it has two roots in GF(256) right? 13:54 < sipa> so that's really (x + {214}) * (x + {215}) 13:54 < sipa> indeed 13:54 < sdaftuar> doesn't that contradict what you wrote above? 13:55 < sipa> it does 13:55 < sdaftuar> ok :) 13:55 < sipa> i was being dumb 13:55 < sdaftuar> i would have guessed that it factored completely for any 2^n where n is even or something 13:55 < sdaftuar> GF(2^n) 13:55 < sipa> and it's easy to see why (perhaps that's why you found it unbelievable?)... GF(256) is an extension field of GF(4) 13:55 < sdaftuar> because aren't those all extensions of GF(4)? 13:55 < sipa> indeed 13:56 < sdaftuar> ok whew :) 13:56 < sipa> ha 13:56 < sipa> i now remember 13:56 < sipa> minisketch even uses this 13:56 < sipa> when it gets down to 2nd degree factors in the root finding algorithm, it uses an explicit formula for the roots, rather than doing another splitting step 13:57 < sdaftuar> oh right i think you mentioned that to me once 13:57 < sipa> unfortunately, the (b +- sqrt(4*a*c)) / 2a formula doesn't work in characteristic 2 fields 13:57 < sipa> because "2" is not a thing 13:57 < sdaftuar> right, division by 0 13:57 < sipa> and the reason for that is that in char2 fields, x^2 is a linear operation 13:57 < sipa> which implies sqrt() is also a linear operation 13:58 < sipa> in other words, every number has exactly one square root 13:58 < sipa> and trying to rewrite your 2nd degree polynomial in function of (x^2 - a) doesn't work... you can't get 2 roots out of that 13:59 < sdaftuar> oh that is interesting, completing the square is not an idea that works at all 13:59 < sipa> yep 13:59 < sipa> so instead, it's written in terms of (x^2 + x + a) 13:59 < sipa> and we have precomputed tables for solving that in terms of a 14:00 -!- shaunsun [shaunsun@gateway/vpn/privateinternetaccess/shaunsun] has joined #bitcoin-core-pr-reviews 14:00 -!- shaunsun [shaunsun@gateway/vpn/privateinternetaccess/shaunsun] has quit [Client Quit] 14:01 < sdaftuar> but in general can't the x term also have a coefficient in GF(256) too? 14:01 < sipa> yes, certainly 14:01 < sipa> but you can use a substitution to get it to 1 14:01 < sdaftuar> while still keeping the x^2 coefficient 1? 14:02 < sdaftuar> maybe i'm being slow 14:02 < sdaftuar> i thought you could force one of those coefficients to be 1, but you were stuck with the others 14:02 < sipa> https://github.com/sipa/minisketch/blob/master/src/sketch_impl.h#L140L153 14:03 < sipa> blijkbaar lost dat voor (x^2 + a*x + b), het volgende op: (x^2 + x + (a / b^2)) 14:04 < sipa> eh, ik heb ze omgewissels 14:04 -!- luke-jr [~luke-jr@unaffiliated/luke-jr] has quit [Read error: Connection reset by peer] 14:04 < sipa> ok, substitueer a*y = x 14:05 < sipa> then you get a^2*y^2 + a^2*y + b 14:05 < sipa> divide by a^2 14:05 < sipa> and you have y^2 + y + (b / a^2) 14:05 < sdaftuar> thank you, got it 14:05 < sipa> wow, i didn't realize i switched to dutch for 2 sentences... sorry, parallel conversation in a different chat :) 14:06 < sdaftuar> lol 14:06 < sdaftuar> luckily translate.google.com helped me out 14:07 -!- luke-jr [~luke-jr@unaffiliated/luke-jr] has joined #bitcoin-core-pr-reviews 14:27 -!- vasild [~vd@gateway/tor-sasl/vasild] has quit [Disconnected by services] 14:27 -!- vasild_ [~vd@gateway/tor-sasl/vasild] has joined #bitcoin-core-pr-reviews 14:27 -!- vasild_ is now known as vasild 15:20 -!- __grunch__ [~grunch@2800:810:549:84d7:7d1b:230c:fa24:9c9d] has quit [Remote host closed the connection] 15:56 -!- harrigan [~harrigan@ptr-93-89-242-235.ip.airwire.ie] has quit [Read error: Connection reset by peer] 15:58 -!- harrigan [~harrigan@ptr-93-89-242-235.ip.airwire.ie] has joined #bitcoin-core-pr-reviews 16:31 -!- da39a3ee5e6b4b0d [~da39a3ee5@2403:6200:8876:b666:c4b7:6001:ca20:56eb] has joined #bitcoin-core-pr-reviews 16:31 -!- emzy [~quassel@unaffiliated/emzy] has quit [Quit: No Ping reply in 180 seconds.] 16:32 -!- da39a3ee5e6b4b0d [~da39a3ee5@2403:6200:8876:b666:c4b7:6001:ca20:56eb] has quit [Client Quit] 16:32 -!- emzy [~quassel@2a01:4f8:192:628a::83] has joined #bitcoin-core-pr-reviews 16:41 -!- emzy [~quassel@2a01:4f8:192:628a::83] has quit [Changing host] 16:41 -!- emzy [~quassel@unaffiliated/emzy] has joined #bitcoin-core-pr-reviews 16:43 -!- da39a3ee5e6b4b0d [~da39a3ee5@2403:6200:8876:b666:c4b7:6001:ca20:56eb] has joined #bitcoin-core-pr-reviews 17:13 -!- seven_ [~seven@cpe-90-157-197-248.static.amis.net] has quit [Ping timeout: 256 seconds] 17:25 -!- da39a3ee5e6b4b0d [~da39a3ee5@2403:6200:8876:b666:c4b7:6001:ca20:56eb] has quit [Quit: My MacBook has gone to sleep. ZZZzzz…] 17:41 -!- da39a3ee5e6b4b0d [~da39a3ee5@184.22.188.111] has joined #bitcoin-core-pr-reviews 17:53 -!- belcher_ [~belcher@unaffiliated/belcher] has joined #bitcoin-core-pr-reviews 17:56 -!- belcher [~belcher@unaffiliated/belcher] has quit [Ping timeout: 265 seconds] 18:56 -!- da39a3ee5e6b4b0d [~da39a3ee5@184.22.188.111] has quit [Ping timeout: 240 seconds] 18:59 -!- CubicEarth [~CubicEart@c-67-168-1-172.hsd1.wa.comcast.net] has quit [Ping timeout: 240 seconds] 18:59 -!- kiltzman [~k1ltzman@5.206.224.243] has quit [Ping timeout: 240 seconds] 18:59 -!- S3RK [~S3RK@213.55.241.111] has quit [Ping timeout: 240 seconds] 18:59 -!- CubicEarth_ [~CubicEart@c-67-168-1-172.hsd1.wa.comcast.net] has joined #bitcoin-core-pr-reviews 18:59 -!- aferreira44 [~andre@2001:1284:f013:cf5d:7550:c485:3103:161c] has quit [Ping timeout: 268 seconds] 19:00 -!- aferreira44 [~andre@2001:1284:f013:cf5d:e5ae:4270:cdb:4daa] has joined #bitcoin-core-pr-reviews 19:00 -!- kiltzman [~k1ltzman@195.189.99.96] has joined #bitcoin-core-pr-reviews 19:01 -!- kiltzman [~k1ltzman@195.189.99.96] has quit [Excess Flood] 19:01 -!- k1ltzman [~k1ltzman@195.189.99.96] has joined #bitcoin-core-pr-reviews 19:04 -!- S3RK [~S3RK@213.55.241.111] has joined #bitcoin-core-pr-reviews 19:05 -!- da39a3ee5e6b4b0d [~da39a3ee5@184.22.159.161] has joined #bitcoin-core-pr-reviews 19:28 -!- aferreira44 [~andre@2001:1284:f013:cf5d:e5ae:4270:cdb:4daa] has quit [Ping timeout: 264 seconds] 19:41 -!- jeremyrubin [~jr@024-176-247-182.res.spectrum.com] has quit [Ping timeout: 264 seconds] 19:53 -!- jeremyrubin [~jr@024-176-247-182.res.spectrum.com] has joined #bitcoin-core-pr-reviews 20:01 -!- luke-jr [~luke-jr@unaffiliated/luke-jr] has quit [Quit: ZNC - http://znc.sourceforge.net] 20:02 -!- luke-jr [~luke-jr@unaffiliated/luke-jr] has joined #bitcoin-core-pr-reviews 20:13 -!- davterra [~davterra@gateway/tor-sasl/tralfaz] has joined #bitcoin-core-pr-reviews 21:16 -!- da39a3ee5e6b4b0d [~da39a3ee5@184.22.159.161] has quit [Quit: My MacBook has gone to sleep. ZZZzzz…] 21:21 -!- ghost43 [~daer@gateway/tor-sasl/daer] has quit [Remote host closed the connection] 21:21 -!- ghost43 [~daer@gateway/tor-sasl/daer] has joined #bitcoin-core-pr-reviews 21:31 -!- da39a3ee5e6b4b0d [~da39a3ee5@2403:6200:8876:b8ec:d51f:19ab:810a:831a] has joined #bitcoin-core-pr-reviews 21:48 -!- larryruane_ [uid473749@gateway/web/irccloud.com/x-cawimsbycdaubiml] has quit [Quit: Connection closed for inactivity] 21:53 -!- jessepos_ [~jp@2601:645:200:162f:70af:6c8d:477c:f040] has joined #bitcoin-core-pr-reviews 21:56 -!- jesseposner [~jp@2601:645:200:162f:7169:2a92:e85f:5daa] has quit [Ping timeout: 260 seconds] 22:08 -!- vasild [~vd@gateway/tor-sasl/vasild] has quit [Remote host closed the connection] 22:08 -!- vasild [~vd@gateway/tor-sasl/vasild] has joined #bitcoin-core-pr-reviews 22:28 -!- ghost43_ [~daer@gateway/tor-sasl/daer] has joined #bitcoin-core-pr-reviews 22:32 -!- ghost43 [~daer@gateway/tor-sasl/daer] has quit [Remote host closed the connection] 22:47 -!- jessepos_ [~jp@2601:645:200:162f:70af:6c8d:477c:f040] has quit [Quit: Textual IRC Client: www.textualapp.com] 22:48 -!- jesseposner [~jp@2601:645:200:162f:70af:6c8d:477c:f040] has joined #bitcoin-core-pr-reviews 22:50 -!- jadi [~jadi@5.112.124.196] has joined #bitcoin-core-pr-reviews 23:33 -!- jonatack_ [~jon@37.167.103.144] has joined #bitcoin-core-pr-reviews 23:35 -!- jadi [~jadi@5.112.124.196] has quit [Ping timeout: 265 seconds] 23:51 -!- jadi [~jadi@5.112.124.196] has joined #bitcoin-core-pr-reviews