Implicit/Tacit mechanisms in Bitcoin Core disclosing Selfish Mining


I'm referring to the selfish mine attack described by two researchers from Cornell University who describe a "possible" attack with lower than 51% hashing power.

Now it's interesting to know what sorts of mechanisms, changes were implemented into the new versions of Bitcoin Core that detect selfish mining, propagate some alerts, disclose suspicious forks etc.?


Obviously peers get to know about other peers' progress on the blockchain through data messages, in particular through updates via inv messages. Are there other types of "messages" exchanged - without the knowledge of the node itself - that would give away secrets about a longer private blockchain, in this case?

Aliakbar Ahmadi

Posted 2015-05-29T14:56:06.653

Reputation: 1 415

2It's not really clear to me how that would work, given that selfish mining would appear as though some hashpower dropped out, followed by a reorganization when the new chain was published. – Nick ODell – 2015-05-29T18:23:45.413

So you're implying that a hashpower drop-out as an indication of a potential selfish mining attack doesn't trigger an alert message or something similar? – Aliakbar Ahmadi – 2015-05-30T10:05:18.847

1Yeah. Now, if those nodes started mining on a chain that your client thought was invalid, and that chain became the best chain, then that would trigger an alert, sure. – Nick ODell – 2015-05-30T18:59:40.223

Ok. Thats exactly what I'm looking for..where is this alert in the source code? Is it somewhere in main.cpp or also in othr modules? – Aliakbar Ahmadi – 2015-05-30T21:22:34.913

@NickODell: you spoke of "mining on a chain that your client thought was invalid, and that chain became the best chain" - are there any other characteristics of an invalid chain than being shorter? – Aliakbar Ahmadi – 2015-06-10T15:16:56.783

Suppose I mined a one point one megabyte block. Since the current limit is one megabyte, your client won't accept this. If I then mine six blocks further than the best valid chain you know about, then your client will display a warning and disable RPC. – Nick ODell – 2015-06-10T15:27:42.397



It is impossible to detect a drop in hashrate working on a chain because foreign hashpower is only evident in the discovery speed of blocks, except if it were deducted from a pool publicly sharing its mining stats. Thus the dropped hashrate would only be evident over sufficient long spans of time.

The only indicator of selfish mining would be the actual publishing of a previously unknown longer chain. I believe I've read somewhere that this will be shown in BitcoinCore with a "Reorganization" warning.


Posted 2015-05-29T14:56:06.653

Reputation: 51 063

1In the case of a pool, another indicator is when the pool is asking miners to mine on a block that is not publicly known. – Nick ODell – 2015-06-26T00:02:05.887

I meant that it might be visible, if a large mining farm deducted its power from a pool. As the mining goals of pools are more or less public information anyway, I figured that it wouldn't be necessary to mention the possibility of a pool operator trying to enlist his pool in such a scheme. – Murch – 2015-06-26T08:49:57.227