In a mining pool, many ASICs and GPU/CPU from all around the world connect to the pool's node. Is it possible to force every node's client software to check if a node is connected to just one computing unit, before the node is allowed to mine? Or am I missing something about how mining pool node works?

If I am right, some would say we cannot know if the client or hardware are tampered in such a way that the client will always say there is just one computing unit. How about putting the client and hardware in a Trusted Execution Environment (TEE) so that it cannot be tampered with?

2 Answers 2


No, this is not possible. Miners must be allowed to join the network without permission, because otherwise the position of a ‘decision-maker’ becomes necessary. This doesn’t necessarily mean the decision maker is just a single individual (or group of individuals, etc), but in any case it presents an additional barrier of entry to the network.

Consider: if I were a miner, why would I allow my node to ‘give permission’ to any other miner to join the network? By not allowing anyone else to join, I would have less competition when mining. So I would be smart to do anything I could to prevent others from joining.

Further, how does the network come to consensus on which nodes are allowed to mine? This is a non-trivial problem, in fact it is mining itself which allows the network to maintain consensus. You would need to create a whole new system and layer of consensus which would precede the act of mining.

Also worth mentioning: even if it were possible, running a node is inexpensive, so there is no stopping a single entity from just running many nodes in order to run many mining hardware devices.

As you mentioned, there is also no way to force a user to use a specific software implementation. A trusted execution environment is not a solution in this case: forcing something like that would centralize the decision of what runs inside the TEE, which is in stark contrast to the permissionless and open source nature cryptocurrencies. Without these properties, the value proposition of a cryptocurrency like bitcoin is destroyed. What if the decision maker or hardware manufacturer is compromised? Situations like that present huge existential risks to the network.


How about putting the client and hardware in a Trusted Execution Environment (TEE) so that it cannot be tampered with?

That's basically the only way you could accomplish this. But it means that the code would have to be signed, and you'd need some centralized authority to do the signing. That authority would have total control over how Bitcoin operates.

However, one of the major design goals of Bitcoin was to avoid centralization, so that decisions about how the currency works are made by consensus, not by any single authority. (You can see some text right in the genesis block expressing Satoshi's skepticism of central banks.) So you could design a currency that can only be run on TEEs, and it could have your desired mining restrictions, but I think you'd find that most of the current Bitcoin userbase would have no interest in using such a currency.

  • Hi, I don't understand the code signing part. What code needs to be signed by authority?
    – Danny
    Jul 25, 2018 at 2:54
  • 1
    @Danny: I guess it depends what kind of TEE you have in mind. One possibility is hardware that will only execute code if it has a valid digital signature created by a specified key (or set of keys). Then whoever holds those keys gets to decide what software the device can execute, and the question is who holds them. You could also have a device where the software is "burned in" and can't be changed - then you have to decide who gets to make the devices. Jul 28, 2018 at 20:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.