IRC meeting summary for 2015-11-05

Overview

Log

Main topics

  • Sigcache performance
  • Performance goals for 0.12
  • transaction priority
  • sigops flooding attack
  • chain limits

Short topics/notes

Note: cfields, mcelrath and BlueMatt (and maybe more) missed the meeting because of daylight saving time.

Closing date for proposals for the scaling bitcoin workshop is the 9th.

Check to see if there are any other commits for the 0.11.2 RC. As soon as 6948 and 6825 are merged it seems good to go.
We need to move fairly quick as there are already miners voting for CLTV (F2Pool). Also testnet is CLTV locked already and is constantly forking.
0.11.2 RC1 has been released as of today: https://bitcoin.org/bin/bitcoin-core-0.11.2/test/

Most of the mempool-limiting analysis assumed child-pays-for-parent, however that isn’t ready for 0.12 yet, so we should think about possible abuses in context of the existing mining algorithm.

Because of time-constrains opt-in replace-by-fee has been deferred to next weeks meeting, but most people seem to want it in 0.12. sdaftuar makes a note that we need to make clear to users what they need to do if they don’t want to accept opt-in transactions.

Sigcache performance

background

The signature cache, which is in place to increase performance (by not having to check the signature multiple times), and to mitigate some attacks currently has a default limit of 50 000 signatures.
Sipa has a pull-request which proposes to:
Change the limit from number of entries to megabytes
Change the default to 40MB, which corresponds to 500 000 signatures
Store salted hashes instead of full entries
Remove entries that have been validated in a block

meeting comments

Sipa did benchmarks for various signature cache sizes on hitrate in blocks (how many of the cached signatures are in the block).
The maximum sigcache size was 68MB, resulting in a 3% miss-rate. Some blocks though have extremely high miss rates (60%) while others have none. Likely caused by miners running different policies.
Gmaxwell proposed to always run script verification for mempool transactions, even if these transactions get rejected into the mempool by the clients policy.
The result of that is that even a 300MB sigcache size only gets down to 15% misses. So there’s too much crap being relayed to keep any reasonable sized cache.
Gmaxwell points out downsides to not checking any rejected transactions, namely: there are some DOS attacks possible, and you increase your misrate if you set a policy which is more restrictive than the typical network, which might result in a race to the bottom.

meeting conclusion

Sipa continues his work and seeks out other strategies

Performance goals for 0.12

background

Bitcoin-core 0.12 is scheduled for release December 1st.

meeting comments

Everybody likes to include secp256k1 ASAP, as it has a very large performance increase.
Some people would like to include the sigcache pull-request, BIP30, modifyNewCoins and a createNewBlock rewrite if it’s ready.
Wumpus advises against merging last-minute performance improvements for 0.12.

meeting conclusion

Mentioned pull-requests should be reviewed, prioritizing CreateNewBlock

transaction priority

background

Each transaction is assigned a priority, determined by the age, size, and number of inputs. Which makes some transactions free.

meeting comments

Sipa thinks we should get rid of the current priority completely and replace it with a function that modifies fee or size of a transaction.
There’s a pull-request available that optimizes the current transaction priority, thereby avoiding the political debate that goes with changing the definition of transaction priority.
Luke-jr thinks the old policy should remain possible.

meeting conclusion

Check to see if PR #6357 is safe and efficient enough.

sigops flooding attack

background

The number of ECDSA signature-checking operations or sigops is currently limited to 20 000 per block. This in order to prevent miners creating blocks that take ages to verify as those operations are time-consuming.
You could however construct transactions that have a very high sigops count and since most miners don’t take into account the sigops count they end up with very small blocks because the sigop limit is reached.
This attack is described here.

meeting comments

Suggestion to take the number of sigops relative to the maximum blocksize into account with the total size. Meaning a 10k sigops transaction would currently be viewed as 500kB in size (for that single transaction, not towards the block).
That suggestion would be easy to change in the mining code, but more invasive to try and plug that into everything that looks at feerate.
This would also open up attacks on the mempool if these transactions are not evicted by mempool limiting.
Luke-jr has a bytes-per-sigop limit, that filters out these attack transactions.

meeting conclusion

More analysis should be done, people seem fine with the general direction of fixing it.

chain limits

background

Chain in this context means connected transactions. When you send a transaction that depends on another transaction that has yet to be confirmed we talk about a chain of transactions. Miners ideally take the whole chain into account instead of just every single transaction (although that’s not widely implemented afaik). So while a single transaction might not have a sufficient fee, a depending transaction could have a high enough fee to make it worthwhile to mine both. This is commonly known as child-pays-for-parent.
Since you can make these chains very big it’s possible to clog up the mempool this way.
With the recent malleability attacks, anyone who made transactions going multiple layers deep would’ve already encountered huge problems doing this (beautifully explained in let’s talk bitcoin #258 from 13:50 onwards)
Proposal and github link.

meeting comments

sdaftuar’s analysis shows that 40% of blocks contain a chain that exceeds the proposed limits. Even a small bump doesn’t make the problem go away.
Possible sources of these chains: a service paying the fees on other transactions (child-pays-for-parent), an iOS wallet that gladly spends unconfirmed change. A business confirms they use child-pays-for-parent when they receive bitcoins from an unspent chain.
It is possible that these long chains are delivered to miners directly, in which case they wouldn’t be affected by the proposed relay limits (and by malleability).
Since this is a problem that needs to be addressed, people seem fine with merging it anyway, communicating in advance to let businesses think about how this affects them.

meeting conclusion

Merge “Policy: Lower default limits for tx chains”
Morcos will mail the developer mailing list after it’s merged.

Participants

morcos          Alex Morcos  
gmaxwell        Gregory Maxwell  
wumpus          Wladimir J. van der Laan  
sipa            Pieter Wuille  
jgarzik         Jeff Garzik  
Luke-Jr         Luke Dashjr  
phantomcircuit  Patrick Strateman  
sdaftuar        Suhas Daftuar  
btcdrak         btcdrak  
jouke           ??Jouke Hofman??  
jtimon          Jorge Timón  
jonasschnelli   Jonas Schnelli  

Comic relief

20:01	wumpus		#meetingend   
20:01	wumpus		#meetingstop    
20:01	gmaxwell   Thanks all.   
20:01	btcdrak		#exitmeeting  
20:01	gmaxwell	   #nomeetingnonono  
20:01	btcdrak		#meedingexit  
20:01	wumpus		#endmeeting   
20:01	lightningbot  Meeting ended Thu Nov 5 20:01:29 2015 UTC. Information about MeetBot at http://wiki.debian.org/MeetBot .
20:01	btcdrak		#rekt

Credits

This summary was originally compiled by Stefan Gilis aka “G1lius” and posted to the bitcoin-discuss mailing list with the disclaimer, “Please bear in mind I’m not a developer so some things might be incorrect or plain wrong.” and placed copyright in the Public Domain.