--- Log opened Sat Jun 18 00:00:33 2016 | ||
-!- Jeremy_Rand_2 [~user@ip68-97-35-223.ok.ok.cox.net] has joined #bitcoin-wizards | 00:29 | |
-!- Jeremy_Rand_2 [~user@ip68-97-35-223.ok.ok.cox.net] has quit [Client Quit] | 00:30 | |
-!- bramc [634b58ce@gateway/web/freenode/ip.99.75.88.206] has quit [Quit: Page closed] | 00:34 | |
-!- ThomasV [~ThomasV@unaffiliated/thomasv] has joined #bitcoin-wizards | 00:41 | |
-!- Guyver2 [~Guyver2@guyver2.xs4all.nl] has joined #bitcoin-wizards | 00:44 | |
-!- ThomasV [~ThomasV@unaffiliated/thomasv] has quit [Ping timeout: 250 seconds] | 00:58 | |
-!- nonaTure [~nonaTure@199.15.128.146] has quit [Ping timeout: 240 seconds] | 01:00 | |
-!- nonaTure [~nonaTure@199.15.128.146] has joined #bitcoin-wizards | 01:02 | |
-!- hashtag_ [~hashtagg_@cpe-174-97-254-80.ma.res.rr.com] has quit [Ping timeout: 244 seconds] | 01:04 | |
-!- slackircbridge1 [~slackircb@45.55.41.36] has quit [Remote host closed the connection] | 01:19 | |
-!- slackircbridge [~slackircb@45.55.41.36] has joined #bitcoin-wizards | 01:20 | |
-!- Ylbam [uid99779@gateway/web/irccloud.com/x-ipiqfnqcopqthbpy] has joined #bitcoin-wizards | 01:22 | |
-!- skang404 [~user@27.109.14.34] has joined #bitcoin-wizards | 01:22 | |
-!- dEBRUYNE [~dEBRUYNE@unaffiliated/debruyne] has joined #bitcoin-wizards | 01:27 | |
-!- priidu [~priidu@unaffiliated/priidu] has joined #bitcoin-wizards | 01:47 | |
-!- Tiraspol [~Tiraspol3@unaffiliated/tiraspol] has quit [Ping timeout: 252 seconds] | 01:55 | |
-!- Tiraspol [~Tiraspol3@unaffiliated/tiraspol] has joined #bitcoin-wizards | 01:56 | |
-!- Tiraspol [~Tiraspol3@unaffiliated/tiraspol] has quit [Ping timeout: 252 seconds] | 02:01 | |
-!- Tiraspol [~Tiraspol3@unaffiliated/tiraspol] has joined #bitcoin-wizards | 02:01 | |
-!- Guyver2 [~Guyver2@guyver2.xs4all.nl] has quit [Quit: :)] | 02:11 | |
-!- Emcy [~MC@unaffiliated/mc1984] has joined #bitcoin-wizards | 02:26 | |
-!- ThomasV [~ThomasV@unaffiliated/thomasv] has joined #bitcoin-wizards | 02:28 | |
-!- ManfredMacx [~hyperion@93-136-119-22.adsl.net.t-com.hr] has joined #bitcoin-wizards | 02:38 | |
-!- frankenmint [~frankenmi@67-5-211-132.ptld.qwest.net] has quit [Remote host closed the connection] | 02:54 | |
-!- laurentmt [~Thunderbi@213-245-86-6.rev.numericable.fr] has joined #bitcoin-wizards | 03:48 | |
-!- laurentmt [~Thunderbi@213-245-86-6.rev.numericable.fr] has quit [Client Quit] | 03:48 | |
-!- frankenmint [~frankenmi@67-5-211-132.ptld.qwest.net] has joined #bitcoin-wizards | 03:55 | |
-!- frankenmint [~frankenmi@67-5-211-132.ptld.qwest.net] has quit [Ping timeout: 276 seconds] | 04:00 | |
-!- e4xit_ [~e4xit@cpc92302-cmbg19-2-0-cust1369.5-4.cable.virginm.net] has joined #bitcoin-wizards | 04:04 | |
-!- e4xit [~e4xit@cpc92302-cmbg19-2-0-cust1369.5-4.cable.virginm.net] has quit [Ping timeout: 244 seconds] | 04:04 | |
-!- e4xit_ is now known as e4xit | 04:04 | |
-!- ThomasV [~ThomasV@unaffiliated/thomasv] has quit [Ping timeout: 246 seconds] | 04:10 | |
-!- Ylbam [uid99779@gateway/web/irccloud.com/x-ipiqfnqcopqthbpy] has quit [Quit: Connection closed for inactivity] | 04:11 | |
-!- Davasny [~quassel@78-11-193-195.static.ip.netia.com.pl] has joined #bitcoin-wizards | 04:18 | |
-!- pro [~pro@unaffiliated/pro] has joined #bitcoin-wizards | 04:54 | |
-!- Tiraspol [~Tiraspol3@unaffiliated/tiraspol] has quit [Ping timeout: 250 seconds] | 04:56 | |
-!- Tiraspol [~Tiraspol3@c-98-212-187-224.hsd1.il.comcast.net] has joined #bitcoin-wizards | 04:58 | |
-!- Tiraspol [~Tiraspol3@c-98-212-187-224.hsd1.il.comcast.net] has quit [Changing host] | 04:58 | |
-!- Tiraspol [~Tiraspol3@unaffiliated/tiraspol] has joined #bitcoin-wizards | 04:58 | |
-!- nubbins` [~leel@unaffiliated/nubbins] has joined #bitcoin-wizards | 05:00 | |
-!- nubbins` [~leel@unaffiliated/nubbins] has quit [Quit: .] | 05:12 | |
-!- ThomasV [~ThomasV@unaffiliated/thomasv] has joined #bitcoin-wizards | 05:14 | |
-!- blackwraith [~priidu@unaffiliated/priidu] has joined #bitcoin-wizards | 05:44 | |
-!- priidu [~priidu@unaffiliated/priidu] has quit [Ping timeout: 260 seconds] | 05:47 | |
-!- dnaleor [~dnaleor@78-23-74-78.access.telenet.be] has quit [Quit: Leaving] | 05:53 | |
-!- dnaleor [~dnaleor@78-23-74-78.access.telenet.be] has joined #bitcoin-wizards | 05:56 | |
-!- Noldorin [~noldorin@unaffiliated/noldorin] has joined #bitcoin-wizards | 05:57 | |
-!- Ylbam [uid99779@gateway/web/irccloud.com/x-ncsrgezbczyqobiu] has joined #bitcoin-wizards | 06:15 | |
-!- arubi [~ese168@unaffiliated/arubi] has quit [Read error: Connection reset by peer] | 06:24 | |
-!- skang404 [~user@27.109.14.34] has quit [Remote host closed the connection] | 06:34 | |
-!- arubi [~ese168@unaffiliated/arubi] has joined #bitcoin-wizards | 06:37 | |
-!- gielbier [~giel____@095-096-096-058.static.chello.nl] has quit [Changing host] | 06:37 | |
-!- gielbier [~giel____@unaffiliated/gielbier] has joined #bitcoin-wizards | 06:37 | |
-!- SyncYourDogmas [~James@unaffiliated/syncyourdogmas] has quit [Quit: Leaving] | 06:39 | |
-!- jl2012 [uid133844@gateway/web/irccloud.com/x-ydfelyrcdvnymbvl] has quit [] | 07:06 | |
-!- jl2012 [uid133844@gateway/web/irccloud.com/x-wretvgrwcmocctwx] has joined #bitcoin-wizards | 07:07 | |
-!- frankenmint [~frankenmi@67-5-211-132.ptld.qwest.net] has joined #bitcoin-wizards | 07:20 | |
-!- frankenmint [~frankenmi@67-5-211-132.ptld.qwest.net] has quit [Remote host closed the connection] | 07:31 | |
-!- Guest10680 is now known as [Derek] | 07:37 | |
-!- [Derek] [~derek@199.195.250.122] has quit [Changing host] | 07:37 | |
-!- [Derek] [~derek@unaffiliated/derek/x-8562683] has joined #bitcoin-wizards | 07:37 | |
-!- frankenmint [~frankenmi@67-5-211-132.ptld.qwest.net] has joined #bitcoin-wizards | 07:43 | |
-!- blackwraith [~priidu@unaffiliated/priidu] has quit [Ping timeout: 260 seconds] | 07:52 | |
-!- ThomasV [~ThomasV@unaffiliated/thomasv] has quit [Ping timeout: 246 seconds] | 07:57 | |
-!- MaxSan_1 [~one@185.103.96.139] has joined #bitcoin-wizards | 08:01 | |
-!- MaxSan_ [~one@185.103.96.135] has quit [Ping timeout: 276 seconds] | 08:02 | |
-!- droark [~droark@c-24-22-36-12.hsd1.or.comcast.net] has quit [Quit: Later.] | 08:07 | |
-!- nonaTure [~nonaTure@199.15.128.146] has quit [Ping timeout: 250 seconds] | 08:25 | |
-!- Noldorin [~noldorin@unaffiliated/noldorin] has quit [Ping timeout: 258 seconds] | 08:28 | |
-!- jannes [~jannes@178.132.211.90] has joined #bitcoin-wizards | 08:37 | |
-!- NewLiberty_ [~NewLibert@2602:306:330b:2db0:d092:e67:4ddf:e7d8] has joined #bitcoin-wizards | 08:51 | |
-!- NewLiberty_ is now known as NewLiberty | 08:52 | |
bsm1175321 | @bramc I was explaining to my CEO yesterday your UTXO set commitment plans, and why speed was so critical. It comes down to the fact that a UTXO commitment is created/verified in the *critical*path*. (At block validation time) | 09:30 |
---|---|---|
bsm1175321 | The fact of the matter is that NO speed is going to be "fast enough". | 09:31 |
bsm1175321 | The Satoshi construction has a race condition (or equivalently assumes zero latency -- including block verification time), that needs to be removed from the critical path. | 09:31 |
bsm1175321 | That's exactly what braids do -- since blocks can have multiple parents, the verification is removed from the critical path. Miners should mine on the previous block until they're finished verifying an incoming block, and then they should name them BOTH as parents. | 09:32 |
bsm1175321 | This removes the race condition, and cuts off SPV mining and selfish mining at its knees. | 09:33 |
-!- ThomasV [~ThomasV@unaffiliated/thomasv] has joined #bitcoin-wizards | 09:52 | |
-!- wizkid057 [~wk@unaffiliated/wizkid057] has quit [Ping timeout: 276 seconds] | 09:53 | |
-!- dnaleor [~dnaleor@78-23-74-78.access.telenet.be] has quit [Ping timeout: 276 seconds] | 09:54 | |
-!- wizkid057 [~wk@unaffiliated/wizkid057] has joined #bitcoin-wizards | 09:54 | |
-!- c0rw1n_ [~c0rw1n@124.213-241-81.adsl-dyn.isp.belgacom.be] has joined #bitcoin-wizards | 10:07 | |
-!- c0rw1n_ [~c0rw1n@124.213-241-81.adsl-dyn.isp.belgacom.be] has quit [Remote host closed the connection] | 10:09 | |
-!- sabayonuser_ [~sabayonus@124.213-241-81.adsl-dyn.isp.belgacom.be] has joined #bitcoin-wizards | 10:21 | |
-!- sabayonuser_ is now known as c0rw1n- | 10:21 | |
-!- r0ach [~r0ach@107-217-214-192.lightspeed.jcvlfl.sbcglobal.net] has quit [] | 10:22 | |
-!- epscy_ is now known as epscy | 10:30 | |
-!- c0rw1n- [~sabayonus@124.213-241-81.adsl-dyn.isp.belgacom.be] has quit [Quit: Konversation terminated!] | 10:41 | |
-!- c0rw1n- [~c0rw1n@124.213-241-81.adsl-dyn.isp.belgacom.be] has joined #bitcoin-wizards | 10:41 | |
-!- King_Rex [~King_Rex@unaffiliated/king-rex/x-3258444] has joined #bitcoin-wizards | 10:42 | |
-!- r0ach [~r0ach@107-217-214-192.lightspeed.jcvlfl.sbcglobal.net] has joined #bitcoin-wizards | 10:51 | |
-!- gielbier [~giel____@unaffiliated/gielbier] has quit [Ping timeout: 260 seconds] | 10:52 | |
-!- nonaTure [~nonaTure@199.15.128.146] has joined #bitcoin-wizards | 11:00 | |
-!- priidu [~priidu@unaffiliated/priidu] has joined #bitcoin-wizards | 11:02 | |
-!- PERSIAN [~PERSIAN@MTRLPQ4709W-LP130-05-1279284515.dsl.bell.ca] has joined #bitcoin-wizards | 11:05 | |
-!- priidu [~priidu@unaffiliated/priidu] has quit [Ping timeout: 240 seconds] | 11:14 | |
-!- ThomasV [~ThomasV@unaffiliated/thomasv] has quit [Ping timeout: 252 seconds] | 11:15 | |
-!- ManfredMacx [~hyperion@93-136-119-22.adsl.net.t-com.hr] has quit [Quit: Leaving] | 11:16 | |
-!- priidu [~priidu@unaffiliated/priidu] has joined #bitcoin-wizards | 11:18 | |
-!- priidu [~priidu@unaffiliated/priidu] has quit [Max SendQ exceeded] | 11:19 | |
-!- priidu [~priidu@unaffiliated/priidu] has joined #bitcoin-wizards | 11:21 | |
-!- nabu [~nabu@192.40.88.13] has quit [Quit: Konversation terminated!] | 11:33 | |
-!- davec_ [~davec@cpe-24-243-251-52.hot.res.rr.com] has joined #bitcoin-wizards | 11:52 | |
-!- nonaTure [~nonaTure@199.15.128.146] has quit [Ping timeout: 272 seconds] | 11:53 | |
-!- Aranjedeath [~Aranjedea@unaffiliated/aranjedeath] has joined #bitcoin-wizards | 12:20 | |
-!- kristofferR [~kristoffe@37.37-191-175.fiber.lynet.no] has joined #bitcoin-wizards | 12:21 | |
-!- dEBRUYNE [~dEBRUYNE@unaffiliated/debruyne] has quit [Quit: Leaving] | 12:21 | |
-!- kristofferR [~kristoffe@37.37-191-175.fiber.lynet.no] has quit [Quit: Textual IRC Client: www.textualapp.com] | 12:30 | |
-!- Guyver2 [~Guyver2@guyver2.xs4all.nl] has joined #bitcoin-wizards | 12:30 | |
-!- jannes [~jannes@178.132.211.90] has quit [Quit: Leaving] | 12:33 | |
-!- MaxSan_1 [~one@185.103.96.139] has quit [Quit: Leaving.] | 12:45 | |
-!- hashtag_ [~hashtagg_@cpe-174-97-254-80.ma.res.rr.com] has joined #bitcoin-wizards | 12:49 | |
-!- nonaTure [~nonaTure@199.15.128.146] has joined #bitcoin-wizards | 13:01 | |
-!- frankenmint [~frankenmi@67-5-211-132.ptld.qwest.net] has quit [Remote host closed the connection] | 13:06 | |
-!- nabu [~nabu@192.40.88.13] has joined #bitcoin-wizards | 13:06 | |
-!- nabu [~nabu@192.40.88.13] has quit [Ping timeout: 250 seconds] | 13:13 | |
-!- nabu [~nabu@gateway/vpn/privateinternetaccess/nabu] has joined #bitcoin-wizards | 13:15 | |
-!- alpalp [~allen@unaffiliated/alpalp] has joined #bitcoin-wizards | 13:25 | |
maaku | bsm1175321: simple solution: commit to last block's utxoset | 13:32 |
-!- frankenmint [~frankenmi@67-5-211-132.ptld.qwest.net] has joined #bitcoin-wizards | 13:34 | |
-!- N0S4A2 [~weechat@216-243-38-141.users.condointernet.net] has joined #bitcoin-wizards | 13:35 | |
-!- RoboTeddy [~roboteddy@c-67-188-40-206.hsd1.ca.comcast.net] has quit [Remote host closed the connection] | 13:50 | |
-!- belcher [~user@unaffiliated/belcher] has joined #bitcoin-wizards | 14:05 | |
-!- JackH [~Jack@79-73-186-51.dynamic.dsl.as9105.com] has quit [Ping timeout: 244 seconds] | 14:13 | |
kanzure | maaku: besides an overview of efforts re: formal verification of bitcoin script, libconsensus and 'smart signatures', what else is missing or what efforts are underway | 14:13 |
-!- frankenmint [~frankenmi@67-5-211-132.ptld.qwest.net] has quit [Remote host closed the connection] | 14:15 | |
-!- PaulCape_ [~PaulCapes@204.28.124.82] has quit [Quit: .] | 14:19 | |
-!- PaulCapestany [~PaulCapes@204.28.124.82] has joined #bitcoin-wizards | 14:20 | |
-!- rasengan [rasengan@pdpc/corporate-sponsor/privateinternetaccess.com/rasengan] has quit [Quit: WeeChat 0.4.2] | 14:22 | |
bsm1175321 | maaku: That implies that I've verified the last block's UTXO set. There is a time lag in the verification, which is exactly the race condition I'm talking about. | 14:22 |
bsm1175321 | I might have created a new block while verifiying the last block's UTXO set. That's the problem. | 14:23 |
bsm1175321 | No one should commit, cryptographically, to something they haven't verified. | 14:23 |
-!- bramc [634b58ce@gateway/web/freenode/ip.99.75.88.206] has joined #bitcoin-wizards | 14:35 | |
-!- bitcoin-wizards1 [c03a8ea3@gateway/web/freenode/ip.192.58.142.163] has joined #bitcoin-wizards | 14:35 | |
bramc | bsm117532: I understand that braids do in principle get rid of this problem, but I'm still not sure exactly what their tradeoffs are, and they're a bit of a pipe dream for Bitcoin today, where utxo commitments are something which can be added immediately | 14:37 |
maaku | braids are magic pixie dust and on my /ignore list until bsm1175321 writes them up in detail | 14:37 |
bramc | maaku: I got far enough into understanding them at one point that I realized that you can't go halfway - siblings-only for example is worse than the way bitcoin works today | 14:38 |
bramc | Although that's all swapped out of my brain right now. | 14:38 |
bramc | The other nice thing about merkle sets is that they're a useful toy for all kinds of stuff, not just Bitcoin | 14:38 |
gmaxwell | still haven't seen how any of these off tip techniques don't greatly magnify selfish mining. | 14:40 |
-!- bitcoin-wizards1 [c03a8ea3@gateway/web/freenode/ip.192.58.142.163] has quit [Ping timeout: 250 seconds] | 14:42 | |
bsm1175321 | bramc: *delayed* utxo set commitments can be added. Or prompt UTXO set commitments, worsening the selfish mining problem. | 14:42 |
bsm1175321 | gmaxwell: The larger the delta-t in verifying a block, the larger the incentive to SPV mine or selfish mine. | 14:43 |
bramc | bsm1175321: If the big utxo set is delayed a few blocks and each block contains roots of just the things added and removed in that block, then proofs of inclusion and exclusion are possible and the latency problem isn't made any worse. | 14:44 |
gmaxwell | bsm1175321: verifying can be removed entirely out of the critical path. | 14:44 |
bsm1175321 | maaku: see my talk this coming Friday at the On Chain Scaling conference. Still not sure how to get this into Bitcoin. But it solves the underlying problem. | 14:44 |
gmaxwell | this is what weak blocks do. | 14:44 |
bramc | weak blocks are also a good idea, but different approaches to them have different tradeoffs | 14:45 |
katu_ | bsm1175321: btw, have you formalized the chain rules state machine yet? | 14:45 |
maaku | bsm1175321: will it be recorded? | 14:45 |
bsm1175321 | gmaxwell: How do weak blocks remove verification from the critical path? How do I know I'm not mining on an invalid parent? | 14:45 |
katu_ | on back of envelope, plain bitcoin is about 5 branches, braids is at least 20. | 14:45 |
katu_ | so would like to see it | 14:45 |
bsm1175321 | katu_: Yes, consensus rules will be stated. Will be happy to state them now if desired, though the context will make it more comprehensible, and work to be done in the next few days... | 14:46 |
bramc | There can always be blocks which don't use a weak block. Unless you require weak blocks, which creates more selfish mining problems. | 14:46 |
bsm1175321 | katu_: 20? Can you elaborate? | 14:46 |
bsm1175321 | maaku: Yes it will be recorded. | 14:46 |
katu_ | bsm1175321: i'm basically counting all the branches a code has to make. its really difficult to reason about it completely | 14:47 |
katu_ | as it is simply too many variables for me | 14:47 |
bsm1175321 | "a code has to make" -- what does that mean? | 14:47 |
gmaxwell | bsm1175321: because with weak blocks, the whole consensus state is announced and verified long before the winning solution. | 14:47 |
bramc | katu_: Not sure what you mean about code branches. But then I write all my stuff extremely idempotently which tends to mask that information. | 14:48 |
gmaxwell | bsm1175321: the only thing finding a block does in weak blocks is announce a winning nonce (and coinbase txn) for an already announced state change. | 14:48 |
gmaxwell | so when the solution shows up you've already validated the state its tied to. | 14:48 |
bsm1175321 | gmaxwell: My understanding is that weak blocks is "headers first" -- and ignores the block contents. Data corruption is real, and a block might be orphaned anyway despite having a valid PoW, no? | 14:49 |
bramc | gmaxwell: But then someone can selfishly keep a weak block for themselves, unless you give them incentive to announce it... at which point you're reinventing braids | 14:49 |
gmaxwell | bsm1175321: no thats incorrect. | 14:49 |
gmaxwell | (I dunno who is presenting this misinformation but they should be stabbed really hard with and exploding knife) | 14:49 |
katu_ | bsm1175321, bramch - the number of various edge cases i can come up with. bitcoin is quite intuitive in that regard, but even that took me a while how get oriented myself in reorg code. | 14:49 |
gmaxwell | bramc: thats now how it works either. ugh | 14:49 |
bsm1175321 | There are so many iterations of weak blocks...I can't keep track of them all, please elaborate gmaxwell. | 14:49 |
gmaxwell | No there aren't. | 14:50 |
kanzure | https://people.xiph.org/~greg/weakblocks.txt | 14:50 |
bramc | gmaxwell: Oh wait you're right, as long as weak blocks aren't required then there isn't any selfish benefit to withholding weak blocks because you're hurting yourself as much as everybody else. | 14:50 |
bramc | In my head 'weak blocks' is a constellation of different closely related ideas, not sure which of them have gained traction. | 14:52 |
gmaxwell | bramc: yes, but it's not mining without validating! | 14:52 |
gmaxwell | Even that is too much detail. Participants voluntarily announce sub difficuty shares (subject to a propagation rule) that attempt to solve blocks which also commit to a superset block that they'd rather be solving. The 'block' isn't transmitted at that time (it's irrelveant, as it failed to win) but the superset they'd rather mine ( using efficient block transmission). | 14:52 |
gmaxwell | once that superset is widely propagated (and validated), miners switch their actual mining attempts to be exactly that. (or one of several such proposed tips, by themselves or others). | 14:53 |
bsm1175321 | If there exists any asymmetry in how miners get rewarded, it will be exploited. Clearly orphan blocks are an asymmetry. Uncles in Ethereum are an asymmetry. Weak blocks also preserve an asymmetry. Someone loses, and it will be exploited. | 14:53 |
bramc | There is of course nothing wrong with both making things as fast as possible without weak blocks and then adding weak blocks later. | 14:53 |
gmaxwell | There is no asymmetry here. | 14:53 |
* bsm1175321 ponders... | 14:54 | |
gmaxwell | bsm1175321: please don't speak like that about ideas you just showed you completely misunderstand. | 14:54 |
gmaxwell | bramc: sure, and thats also been our effort in bitcoin, to optimize the existing system first. | 14:54 |
bsm1175321 | gmaxwell: Doesn't this asymmetry exist, 11 blocks back? | 14:54 |
bramc | gmaxwell: In your specific proposal is there any change to blocks at all? In its weakest form weak blocks is simply a form of compression | 14:54 |
kanzure | re efficient block relay, https://people.xiph.org/~greg/efficient.block.xfer.txt https://bitcoincore.org/en/2016/06/07/compact-blocks-faq/ | 14:55 |
gmaxwell | bsm1175321: no, any miner can attmept to mine any weakblock they know about. So even if their own prefered weak blocks are not (yet) well propagated, they simply attempt to mine someone elses. | 14:55 |
bramc | More stuff I need to read. I'm a little too tired today to parse through all of this, especially because I need to read through the MMR stuff. I still don't understand how proofs of unspent status are supposed to work there. | 14:56 |
gmaxwell | This means that large miners would enjoy a small boost in voting power, but not income; to there is no feedback loop there. | 14:56 |
bsm1175321 | gmaxwell: Isn't that just a rearrangement of asymmetry? f(asymmetry) != symmetry. | 14:57 |
gmaxwell | (the small boost because they have lots of hashpower and many spend an inconseqeuntial more time mining on their own weakblock suggestions, but this doesn't increase their income over their fair share.) | 14:58 |
gmaxwell | bsm1175321: You might as well be saying it has weeblax for all that means; you can point to any difference you want and say there is asymetry, the centeralization pressure comes from disproportional increases in income. | 14:59 |
gmaxwell | Which weak blocks eliminate, by taking verification out of the critical path, and making it so that income is not increased for the 'most quickly verified party'. | 15:00 |
bsm1175321 | gmaxwell: I agree. The only solution is to symmetrize, to prevent centralization pressure. | 15:00 |
bramc | gmaxwell: There are two different regimes weak blocks need to think about: (1) mempools are mostly empty, blocks mostly drain in out, and (2) the mempool is always completely full, blocks pull out the highest value transactions | 15:00 |
bsm1175321 | Miners should not know or care. | 15:00 |
gmaxwell | I don't think (1) rationally exists. Why wouldn't someone just run a script to backup their computer into the chain if there was 'free' capacity? | 15:00 |
bsm1175321 | gmaxwell: I look forward to debating weak blocks vs. braids in the coming weeks. I suspect we will converge on the same solution. | 15:01 |
bramc | (1) is not far from what we have today, with people freaking out when blocks actually get full | 15:01 |
-!- Noldorin [~noldorin@unaffiliated/noldorin] has joined #bitcoin-wizards | 15:01 | |
bramc | Although yes, (2) is the way things 'should' be, and which I've been a strong advocate for. | 15:01 |
gmaxwell | bramc: nah, don't believe lies that get sent to the press. | 15:02 |
gmaxwell | Current mempool status in bitcoins is 150mb of transaction data, and has been constantly that almost constantly since the limits were introduced. | 15:02 |
bsm1175321 | Let's separate economic expenditure (hash value) vs. validation. It's not the same thing. | 15:03 |
gmaxwell | bsm1175321: the whole incentives argument in bitcoin (esp for allowing SPV clients) depends on them being tightly linked. | 15:03 |
bsm1175321 | We can entirely divorce the two. You present me a hash value that satisfies a PoW condition, I can accept it regardless of my database's consensus requirements. | 15:04 |
gmaxwell | only if we don't want to exist non-validating nodes which depend on the economic rationality of the people doing mining work for their security. | 15:04 |
bsm1175321 | I can build a PBFT (h/t Honey Badger amiller) that contains PoW hashes, and transactions against them. | 15:05 |
gmaxwell | some advocate that, but these systems are far less scalable without that capability. | 15:05 |
bsm1175321 | gmaxwell: Agreed it's less scalable. | 15:05 |
gmaxwell | ... yes you can introduce identity and N^2 communications consensus systems if you really want to make sure all the virtuious properties of bitcoin are dead. :) | 15:05 |
bsm1175321 | I'm attempting to divorce the economic piece from the consistency piece. | 15:06 |
bsm1175321 | Anyhoo, thought to consider... I'm thinking about a hypothetical a PoW coin that accepts PoW as "value creation" below its consensus target. It would be an interesting excercise, and easy to prevent from becoming centralized. | 15:08 |
bsm1175321 | (FWIW, not going to be making any altcoins anytime soon -- I'd rather bring ideas to Bitcoin) | 15:08 |
bsm1175321 | Imagine a "value creation" transaction which takes the last block's Merkle root and satisfies a PoW condition -- and you get coins allocated proportional to your PoW target. And if you're lucky enough to satisfy the network's PoW target, you get a block, and possible more coins as a consequence. | 15:10 |
-!- King_Rex [~King_Rex@unaffiliated/king-rex/x-3258444] has quit [Remote host closed the connection] | 15:14 | |
-!- alpalp [~allen@unaffiliated/alpalp] has quit [Ping timeout: 249 seconds] | 15:21 | |
bramc | bsm1175321: Greg understands what braids is trying to do at a high level but is very skeptical that it doesn't make selfish mining attacks worse. That's what you have to convince him off | 15:22 |
bramc | Well that and an argumement that it could be deployed in a soft fork | 15:22 |
bsm1175321 | Yeah I have nothing to convince him of a soft fork... | 15:22 |
bramc | And that playing games with how conflicts are handled in braids couldn't let people undo transactions after a lot of time has passed | 15:23 |
bsm1175321 | How could it possibly making selfish mining attacks worse? Selfish mining works because of the asymmetry between not profiting from a block, and profiting from a block. If *both* parents of a block profit, there is no asymmetry, and selfish mining is dead. | 15:23 |
bsm1175321 | bramc: It's always possible to undo transactions with >51%. The burden of proof is that you can't do it with less. You can with bitcoin, at present. | 15:25 |
-!- nonaTure [~nonaTure@199.15.128.146] has quit [Ping timeout: 240 seconds] | 15:25 | |
bsm1175321 | Sounds like you two are talking in person. Great!!! I want UTXO set commitments!!! SPV sucks!!! | 15:26 |
bramc | bsm1175321: The sort of selfish mining attack in question is one where a miner intentionally doesn't propagate a block they've found for their own future gain. A 1/3 miner in Bitcoin can gain advantage over time this way. | 15:26 |
-!- alpalp [~allen@unaffiliated/alpalp] has joined #bitcoin-wizards | 15:26 | |
bsm1175321 | bramc: The algorithm I will present on Friday considers such a miner a "minority participant" -- and as such any conflicts will be decided against him. It's easy to evaluate that his hashpower is less than the hashpower between his parent and his youngest child. | 15:28 |
bsm1175321 | bramc: The longer a miner doesn't propegate his block, the more "minority" he becomes. The notion of "minority" is decided by a blocks *children*. | 15:29 |
-!- MaxSan_ [~one@46.19.137.116] has joined #bitcoin-wizards | 15:29 | |
bramc | bsm1175321: I'm not the one you need to convince, and the details are sufficiently technical that trying to hash them out over irc is probably a fool's errand, you need to have a convincing presentation which people can go over at their leisure. | 15:30 |
bsm1175321 | bramc: Any conflicting transactions in a long-delayed block will always be decided in the favor of the majority chain, in concordance with the 51% rule. | 15:30 |
-!- Guyver2 [~Guyver2@guyver2.xs4all.nl] has quit [Quit: :)] | 15:30 | |
bsm1175321 | bramc Agreed. I have experience in this. | 15:31 |
bsm1175321 | Still not sure how to get this into Bitcoin. But eliminating the race condition has been my goal. | 15:31 |
Taek | <gmaxwell> still haven't seen how any of these off tip techniques don't greatly magnify selfish mining. | 15:35 |
Taek | I'm pretty convinced that my Jute stuff does not suffer from selfish mining attacks | 15:36 |
bsm1175321 | FWIW I think I just described how it kills it. | 15:36 |
Taek | The merge mechanism for pulling orphaned blocks into the chain and rewarded them means that a miner with 40% hashrate can't compete with 60 1% miners | 15:37 |
Taek | Because, the 1% miners can continue to merge eachother's blocks, and can merge the blocks from the 40% miner as they get released | 15:38 |
Taek | The 40% miner can create a chain that would be ahead by a constant amount of time, say 30 seconds or something | 15:38 |
bsm1175321 | asymmetry kills. Define asymmetry, you've defined selfish mining. | 15:38 |
Taek | but the cliff for including blocks is a lot longer than 30 seconds, which means the 40% miner is not going to be able to isolate the small miner's blocks without being victim to losing, as it's fighting against 60% hashrate | 15:39 |
Taek | I feel like I can explain this a lot better on a whiteboard | 15:39 |
Taek | maaku: I spent some time considering your concerns over SPV. Though SPV is not that important to me, I do think that you can pretty easily repair SPV within Jute | 15:40 |
-!- belcher [~user@unaffiliated/belcher] has quit [Quit: Leaving] | 15:40 | |
Taek | You introduce utxo commitments that lag by a few minutes | 15:40 |
Taek | similar to how utxo commitments today would probably point to the previous block instead of the current block | 15:41 |
-!- alpalp [~allen@unaffiliated/alpalp] has quit [Ping timeout: 250 seconds] | 15:43 | |
bsm1175321 | Taek: you. me. whiteboard. soon. | 15:43 |
Taek | wouldn't mind making a video of that | 15:43 |
bsm1175321 | heheehee ;-) | 15:43 |
bsm1175321 | Please see my on chain scaling on-line talk next Friday. I'd like to figure out what is the best solution WRT weak blocks/graphs/braids. | 15:45 |
bramc | Taek: Yes I just explained the delayed utxo commitments thing in the bitcoin-dev mailing list | 15:45 |
-!- laurentmt [~Thunderbi@213-245-86-6.rev.numericable.fr] has joined #bitcoin-wizards | 15:45 | |
Taek | bsm: will definitely watch the video | 15:46 |
-!- laurentmt [~Thunderbi@213-245-86-6.rev.numericable.fr] has quit [Client Quit] | 15:46 | |
Taek | weak blocks are nice because it's a relatively clean change to the code | 15:46 |
Taek | any braid stuff is going to be more brutal, and probably a hardfork or outright an altcoin | 15:46 |
* bsm1175321 doesn't like delays. It means I'm wrong a certain percentage of the time, and I don't like being wrong. | 15:47 | |
Taek | it doesn't mean you are wrong, it just means you need to wait an extra block to tell if your transaction got mined | 15:47 |
bsm1175321 | Braids are a hard fork. At best we can checkpoint back to a 1MB block, but it's "brutal" to do, as Taek says... | 15:47 |
-!- nonaTure [~nonaTure@199.15.128.146] has joined #bitcoin-wizards | 15:48 | |
bramc | I can't even tell if I'm trolling at this point https://twitter.com/bramcohen/status/744301857116282880 | 15:53 |
-!- nabu [~nabu@gateway/vpn/privateinternetaccess/nabu] has quit [Ping timeout: 276 seconds] | 16:00 | |
instagibbs | bsm1175321, presentation and solid paper or bust ;) | 16:01 |
-!- nabu [~nabu@192.40.88.72] has joined #bitcoin-wizards | 16:01 | |
bsm1175321 | instagibbs: sold. | 16:01 |
-!- roman_ [~quassel@2a01:cb1d:4a4:2e00:4d36:deb8:da5c:57b1] has quit [Read error: Connection reset by peer] | 16:01 | |
bsm1175321 | bramc: I think you just discovered crypto-currency? | 16:01 |
bramc | This is even better than covenants! | 16:02 |
-!- MoALTz [~no@78-11-183-124.static.ip.netia.com.pl] has quit [Quit: Leaving] | 16:05 | |
-!- Davasny [~quassel@78-11-193-195.static.ip.netia.com.pl] has quit [Read error: Connection reset by peer] | 16:09 | |
-!- dEBRUYNE [~dEBRUYNE@unaffiliated/debruyne] has joined #bitcoin-wizards | 16:21 | |
-!- r0ach [~r0ach@107-217-214-192.lightspeed.jcvlfl.sbcglobal.net] has quit [Ping timeout: 244 seconds] | 16:29 | |
-!- nonaTure [~nonaTure@199.15.128.146] has quit [Ping timeout: 250 seconds] | 16:42 | |
kanzure | status of libsecp256k1 paper? has a draft or pile of notes happened yet? | 16:44 |
nicolag | why does fault-tolerance requires neutralizing deciding messages in a consensus protocol? (I was watching the beginning of Mazieres' talk at google) | 16:59 |
nicolag | I think it is to make sure that the system doesn't get stuck, so it can neutralize that message and move forward (in raft for example by using timeouts) | 17:03 |
-!- RoboTeddy [~roboteddy@c-67-188-40-206.hsd1.ca.comcast.net] has joined #bitcoin-wizards | 17:06 | |
katu_ | nicolag: which protocol, paxos-like? | 17:06 |
nicolag | katu_: I think in his presenation, he tries to generalize different concepts, saying that a consensus protocol that wants to agree on statements, need to have statements that must be irrefutable and neutralizable | 17:07 |
katu_ | im not too familiar with academic terms, just the actual implementations | 17:07 |
katu_ | to me there are two families, online and offline consensus | 17:08 |
nicolag | (I am trying to understand his formal language too) | 17:08 |
katu_ | the only existing offline one is satoshi like pow consensus - theres nothing to neutralize. as for online consensus, these are pretty complex and yes, usually deal with neutralization | 17:08 |
katu_ | (well, PoS can be considered sort of offline too, sans its NaS weakness) | 17:09 |
katu_ | nah scratch that, PoS has to be always online, for returning node to guess correct tip. | 17:10 |
katu_ | nicolag: for some conscise notes regarding paxos-like see http://www.scs.stanford.edu/14au-cs244b/notes/paxos.txt | 17:12 |
nicolag | thanks katu_ | 17:13 |
-!- dEBRUYNE [~dEBRUYNE@unaffiliated/debruyne] has quit [Quit: Leaving] | 17:16 | |
amiller | gmaxwell, the nice thing about honeybadger is that it's only O(N) total communications per tranasction (only O(1) per node), even in the worst case | 17:17 |
amiller | this doesn't really affect your point at all, but it was a big challenge to achieve that so i thought i'd point it out | 17:18 |
-!- CrazyTruthYakDDS [uid67551@gateway/web/irccloud.com/x-nyazntspqxycjxhv] has joined #bitcoin-wizards | 17:44 | |
-!- rusty2 [~rusty@pdpc/supporter/bronze/rusty] has joined #bitcoin-wizards | 17:45 | |
gmaxwell | amiller: I know. | 17:48 |
amiller | ok | 17:48 |
gmaxwell | amiller: Or unless you're saying something deeper than I beliefed. My understanding is that HB paper is O(N) per transaction because it uses FEC for broadcast, the consensus itself still requires N^2 messages it just doesn't grow with transactions. Using FEC to make broadcast more efficient is a known techique ('network coding', which we'd even tried for block relay previously), so I didn't cons | 17:53 |
gmaxwell | ider that part of the HB result interesting. | 17:53 |
-!- rusty2 [~rusty@pdpc/supporter/bronze/rusty] has quit [Ping timeout: 246 seconds] | 18:01 | |
nsh | FEC? | 18:05 |
gmaxwell | Forward error correction. | 18:05 |
-!- blackwraith [~priidu@unaffiliated/priidu] has joined #bitcoin-wizards | 18:05 | |
nsh | ty | 18:05 |
-!- priidu [~priidu@unaffiliated/priidu] has quit [Ping timeout: 260 seconds] | 18:07 | |
-!- Noldorin [~noldorin@unaffiliated/noldorin] has quit [Remote host closed the connection] | 18:18 | |
-!- unknown| [~unknown@73.114.17.106] has joined #bitcoin-wizards | 18:21 | |
-!- Ylbam [uid99779@gateway/web/irccloud.com/x-ncsrgezbczyqobiu] has quit [Quit: Connection closed for inactivity] | 18:31 | |
-!- Alopex [~bitcoin@cyber.dealing.ninja] has quit [Remote host closed the connection] | 18:39 | |
-!- Alopex [~bitcoin@cyber.dealing.ninja] has joined #bitcoin-wizards | 18:41 | |
-!- Alopex [~bitcoin@cyber.dealing.ninja] has quit [Remote host closed the connection] | 18:58 | |
-!- PERSIAN [~PERSIAN@MTRLPQ4709W-LP130-05-1279284515.dsl.bell.ca] has quit [Ping timeout: 250 seconds] | 18:58 | |
-!- Alopex [~bitcoin@cyber.dealing.ninja] has joined #bitcoin-wizards | 19:00 | |
gmaxwell | zooko: you should implement zerocash as an ethereum contract, I hear there might be a party willing to fund that work... | 19:02 |
-!- jonasschnelli [~jonasschn@unaffiliated/jonasschnelli] has quit [Ping timeout: 258 seconds] | 19:05 | |
-!- jonasschnelli [~jonasschn@2a01:4f8:200:7025::2] has joined #bitcoin-wizards | 19:08 | |
-!- bramc [634b58ce@gateway/web/freenode/ip.99.75.88.206] has quit [Ping timeout: 250 seconds] | 19:08 | |
-!- pro [~pro@unaffiliated/pro] has quit [Quit: Leaving] | 19:33 | |
-!- dnaleor [~dnaleor@78-23-74-78.access.telenet.be] has joined #bitcoin-wizards | 19:34 | |
-!- alpalp [~allen@unaffiliated/alpalp] has joined #bitcoin-wizards | 19:37 | |
-!- Burrito [~Burrito@unaffiliated/burrito] has quit [Quit: Leaving] | 19:41 | |
-!- Giszmo [~leo@pc-122-14-46-190.cm.vtr.net] has joined #bitcoin-wizards | 19:41 | |
-!- Emcy [~MC@unaffiliated/mc1984] has quit [Ping timeout: 250 seconds] | 19:45 | |
-!- MaxSan_ [~one@46.19.137.116] has quit [Ping timeout: 258 seconds] | 19:53 | |
-!- blackwraith [~priidu@unaffiliated/priidu] has quit [Ping timeout: 240 seconds] | 19:54 | |
-!- unknown| [~unknown@73.114.17.106] has quit [Read error: Connection reset by peer] | 19:57 | |
-!- unknown| [~unknown@73.114.17.106] has joined #bitcoin-wizards | 20:00 | |
-!- MaxSan_ [~one@46.19.137.116] has joined #bitcoin-wizards | 20:18 | |
-!- nuke1989 [~nuke@178-88-119.dynamic.cyta.gr] has quit [Remote host closed the connection] | 20:24 | |
-!- alpalp [~allen@unaffiliated/alpalp] has quit [Ping timeout: 250 seconds] | 20:54 | |
-!- NewLiberty [~NewLibert@2602:306:330b:2db0:d092:e67:4ddf:e7d8] has quit [Ping timeout: 250 seconds] | 20:59 | |
-!- justanotheruser [~Justan@unaffiliated/justanotheruser] has quit [Read error: Connection reset by peer] | 21:01 | |
-!- justanotheruser [~Justan@unaffiliated/justanotheruser] has joined #bitcoin-wizards | 21:03 | |
-!- jiggalator [~jiggalato@198.16.176.10] has joined #bitcoin-wizards | 21:03 | |
-!- jiggalator [~jiggalato@198.16.176.10] has quit [Client Quit] | 21:03 | |
zooko | gmaxwell: my first thought about that is that Ethereum needs an upgrade to add a ZK-verifier opcode. | 21:21 |
zooko | gmaxwell: in any case, I'm not interested in committing Zcash Co resources to working on that at least until after we launch Zcash 1.0 "Sprout" and tend it through its infant phase, | 21:22 |
zooko | but I'd be happy to encourage other people and hook up interested parties, so | 21:22 |
zooko | please tell me more about who wants to fund it. | 21:22 |
-!- MaxSan_ [~one@46.19.137.116] has quit [Quit: Leaving.] | 21:23 | |
-!- jonasschnelli [~jonasschn@2a01:4f8:200:7025::2] has quit [Ping timeout: 272 seconds] | 21:25 | |
-!- nets1n [~jiggalato@198.16.176.10] has joined #bitcoin-wizards | 21:25 | |
-!- nets1n [~jiggalato@198.16.176.10] has quit [Client Quit] | 21:26 | |
-!- jiggalator [~jiggalato@198.16.176.10] has joined #bitcoin-wizards | 21:26 | |
-!- jiggalator [~jiggalato@198.16.176.10] has quit [Client Quit] | 21:28 | |
-!- nets1n [~jiggalato@198.16.176.10] has joined #bitcoin-wizards | 21:29 | |
-!- jonasschnelli [~jonasschn@2a01:4f8:200:7025::2] has joined #bitcoin-wizards | 21:29 | |
-!- nets1n [~jiggalato@198.16.176.10] has quit [Client Quit] | 21:30 | |
-!- jiggalator [~jiggalato@unaffiliated/jiggalator] has joined #bitcoin-wizards | 21:31 | |
-!- jiggalator is now known as nets1n | 21:33 | |
-!- r0ach [~r0ach@107-217-214-192.lightspeed.jcvlfl.sbcglobal.net] has joined #bitcoin-wizards | 21:34 | |
-!- TheSeven [~quassel@rockbox/developer/TheSeven] has quit [Disconnected by services] | 21:44 | |
-!- [7] [~quassel@rockbox/developer/TheSeven] has joined #bitcoin-wizards | 21:45 | |
-!- bramc [634b58ce@gateway/web/freenode/ip.99.75.88.206] has joined #bitcoin-wizards | 22:03 | |
bramc | What happened to BIP 9? | 22:04 |
-!- Sosumi [~Leon@bl10-113-190.dsl.telepac.pt] has joined #bitcoin-wizards | 22:17 | |
bramc | hmm, looks like it just passed. Something I saw indicated it failed, which seemed weird. Apparently it was wrong. | 22:18 |
-!- gsdgdfs [~Trans@modemcable252.252-177-173.mc.videotron.ca] has joined #bitcoin-wizards | 22:24 | |
-!- rusty2 [~rusty@pdpc/supporter/bronze/rusty] has joined #bitcoin-wizards | 22:25 | |
-!- Transisto2 [~Trans@modemcable252.252-177-173.mc.videotron.ca] has quit [Ping timeout: 250 seconds] | 22:26 | |
-!- nets1n [~jiggalato@unaffiliated/jiggalator] has quit [Remote host closed the connection] | 22:32 | |
-!- nets1n [~jiggalato@198.16.176.10] has joined #bitcoin-wizards | 22:37 | |
-!- c0rw1n- [~c0rw1n@124.213-241-81.adsl-dyn.isp.belgacom.be] has quit [Ping timeout: 240 seconds] | 22:40 | |
-!- RoboTeddy [~roboteddy@c-67-188-40-206.hsd1.ca.comcast.net] has quit [Ping timeout: 260 seconds] | 22:54 | |
-!- RoboTeddy [~roboteddy@c-67-188-40-206.hsd1.ca.comcast.net] has joined #bitcoin-wizards | 22:56 | |
-!- rusty2 [~rusty@pdpc/supporter/bronze/rusty] has quit [Ping timeout: 244 seconds] | 22:59 | |
-!- coup_de_shitlord is now known as stqism | 22:59 | |
-!- stqism [~coup_de_s@irc.tox.im] has quit [Changing host] | 22:59 | |
-!- stqism [~coup_de_s@freebsd/user/stqism] has joined #bitcoin-wizards | 22:59 | |
-!- PERSIAN [~PERSIAN@MTRLPQ4709W-LP130-05-1279284515.dsl.bell.ca] has joined #bitcoin-wizards | 23:00 | |
gmaxwell | zooko: the whole argument of their system is "it can already do everything!" | 23:05 |
-!- Sosumi [~Leon@bl10-113-190.dsl.telepac.pt] has quit [Quit: Bye] | 23:08 | |
-!- ThomasV [~ThomasV@unaffiliated/thomasv] has joined #bitcoin-wizards | 23:22 | |
-!- spinza [~spin@197.89.184.69] has quit [Ping timeout: 276 seconds] | 23:23 | |
-!- Aranjedeath [~Aranjedea@unaffiliated/aranjedeath] has quit [Quit: Three sheets to the wind] | 23:23 | |
-!- unknown| [~unknown@73.114.17.106] has quit [Ping timeout: 240 seconds] | 23:27 | |
-!- unknown| [~unknown@73.114.18.214] has joined #bitcoin-wizards | 23:27 | |
-!- AusteritySucks [~Austerity@unaffiliated/austeritysucks] has quit [Ping timeout: 244 seconds] | 23:29 | |
-!- terrapin [~noname@185.21.218.134] has quit [Max SendQ exceeded] | 23:33 | |
-!- keesh [~noname@185.21.218.134] has joined #bitcoin-wizards | 23:34 | |
-!- priidu [~priidu@unaffiliated/priidu] has joined #bitcoin-wizards | 23:36 | |
-!- nets1n [~jiggalato@198.16.176.10] has quit [] | 23:37 | |
-!- CrazyTruthYakDDS [uid67551@gateway/web/irccloud.com/x-nyazntspqxycjxhv] has quit [Quit: Connection closed for inactivity] | 23:41 | |
-!- AusteritySucks [~Austerity@unaffiliated/austeritysucks] has joined #bitcoin-wizards | 23:42 | |
-!- RoboTeddy [~roboteddy@c-67-188-40-206.hsd1.ca.comcast.net] has quit [Ping timeout: 240 seconds] | 23:42 | |
-!- RoboTeddy [~roboteddy@c-67-188-40-206.hsd1.ca.comcast.net] has joined #bitcoin-wizards | 23:43 | |
-!- AusteritySucks [~Austerity@unaffiliated/austeritysucks] has quit [Ping timeout: 250 seconds] | 23:46 | |
bramc | gmaxwell: Pshaw, its support for covenants sucks | 23:49 |
-!- AusteritySucks [~Austerity@unaffiliated/austeritysucks] has joined #bitcoin-wizards | 23:59 | |
--- Log closed Sun Jun 19 00:00:33 2016 |
Generated by irclog2html.py 2.15.0.dev0 by Marius Gedminas - find it at mg.pov.lt!