summaryrefslogtreecommitdiff
path: root/15/cc3f719636c259396d730dc242b5eaf73dd9af
blob: 7dd459f0040f45de3b220202d5f87f21b47cc604 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
Return-Path: <lf-lists@mattcorallo.com>
Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org
	[172.17.192.35])
	by mail.linuxfoundation.org (Postfix) with ESMTPS id 5201AC19
	for <bitcoin-dev@lists.linuxfoundation.org>;
	Tue,  5 Jun 2018 18:45:00 +0000 (UTC)
X-Greylist: from auto-whitelisted by SQLgrey-1.7.6
Received: from mail.bluematt.me (mail.bluematt.me [192.241.179.72])
	by smtp1.linuxfoundation.org (Postfix) with ESMTPS id AD71D70E
	for <bitcoin-dev@lists.linuxfoundation.org>;
	Tue,  5 Jun 2018 18:44:59 +0000 (UTC)
Received: from [172.17.0.2] (gw.vpn.bluematt.me [144.217.106.88])
	by mail.bluematt.me (Postfix) with ESMTPSA id 52D5513AA22
	for <bitcoin-dev@lists.linuxfoundation.org>;
	Tue,  5 Jun 2018 18:44:58 +0000 (UTC)
To: Bitcoin Dev <bitcoin-dev@lists.linuxfoundation.org>
From: Matt Corallo <lf-lists@mattcorallo.com>
Openpgp: preference=signencrypt
Autocrypt: addr=matt@bluematt.me; prefer-encrypt=mutual; keydata=
	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
	uWCHuEtIxpFG8chItvKHjHI=
Message-ID: <92215b88-75a4-6be7-dec6-89c567a74a9a@mattcorallo.com>
Date: Tue, 5 Jun 2018 14:44:57 -0400
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
	Thunderbird/52.8.0
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham
	version=3.3.1
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
	smtp1.linux-foundation.org
Subject: [bitcoin-dev] [BIP Proposal] BetterHash Mining Protocol Replacements
X-BeenThere: bitcoin-dev@lists.linuxfoundation.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Bitcoin Protocol Discussion <bitcoin-dev.lists.linuxfoundation.org>
List-Unsubscribe: <https://lists.linuxfoundation.org/mailman/options/bitcoin-dev>,
	<mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=unsubscribe>
List-Archive: <http://lists.linuxfoundation.org/pipermail/bitcoin-dev/>
List-Post: <mailto:bitcoin-dev@lists.linuxfoundation.org>
List-Help: <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=help>
List-Subscribe: <https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev>,
	<mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=subscribe>
X-List-Received-Date: Tue, 05 Jun 2018 18:45:00 -0000

Been working on this one for a while, so its already been through a few
rounds of feeback (thanks to all those who already have provided feedback)!

At a high level, this meets a few goals:

1) Replace getblocktemplate with something that is both more performant
(no JSON encoding, no full transactions sent over the wire to update a
job, hence we can keep the same CTransactionRef in Bitcoin Core making
lots of validation things way faster), more robust for consensus changes
(no need to add protocol changes to add commitments ala SegWit in the
future), and moves more block-switching logic inside of the work
provider (allowing Bitcoin Core to better optimize work switching as it
knows more than an outside pool server, specifically we can play more
games with how we do mempool eviction, empty block mining, and not
mining fresh transactions more easily by moving to a more "push" model
from the normal "pull" getblocktemplate implementation).

2) Replace Stratum with something more secure (sign messages when
applicable, without adding too much overhead to the pool), simpler to
implement (not JSON-wrapped-hex, no 32-byte-swapped-per-4-byte-byteorder
insanity), and better-defined (a clearly written spec, encompassing the
various things shoved backwards into stratum like suggested difficulty
in the password field and device identification by setting user to
"user.device") with VENDOR_MESSAGEs provided for extensibility instead
of conflicting specifications from various different vendors.

3) Provide the ability for a pool to accept work which the users of the
pool selected the transactions for, providing strong decentralization
pressure by removing the network-level centralization attacks pools can
do (or be compromised and used to perform) while still allowing them
full control of payout management and variance reduction.

While (1) and (2) stand on their own, making it all one set of protocols
to provide (3) provides at least the opportunity for drastically better
decentralization in Bitcoin mining in the future.

The latest version of the full BIP draft can be found at
https://github.com/TheBlueMatt/bips/blob/betterhash/bip-XXXX.mediawiki
and implementations of the work-generation part at
https://github.com/TheBlueMatt/bitcoin/commits/2018-02-miningserver and
pool/proxy parts at https://github.com/TheBlueMatt/mining-proxy (though
note that both implementations are currently on a slightly out-of-date
version of the protocol, I hope to get them brought up to date in the
coming day or two and make them much more full-featured. The whole stack
has managed to mine numerous testnet blocks on several different types
of hardware).

Matt