summaryrefslogtreecommitdiff
path: root/21/a47746089c63bf8f255637b006f693cb2ed4f7
blob: da071501198730f14e13b212e581b6cb3c9b3c2c (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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
Received: from sog-mx-3.v43.ch3.sourceforge.com ([172.29.43.193]
	helo=mx.sourceforge.net)
	by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.76)
	(envelope-from <mh.in.england@gmail.com>) id 1V9a9q-0001Ol-Fc
	for bitcoin-development@lists.sourceforge.net;
	Wed, 14 Aug 2013 12:26:34 +0000
Received-SPF: pass (sog-mx-3.v43.ch3.sourceforge.com: domain of gmail.com
	designates 209.85.214.175 as permitted sender)
	client-ip=209.85.214.175; envelope-from=mh.in.england@gmail.com;
	helo=mail-ob0-f175.google.com; 
Received: from mail-ob0-f175.google.com ([209.85.214.175])
	by sog-mx-3.v43.ch3.sourceforge.com with esmtps (TLSv1:RC4-SHA:128)
	(Exim 4.76) id 1V9a9o-0007jW-Uf
	for bitcoin-development@lists.sourceforge.net;
	Wed, 14 Aug 2013 12:26:34 +0000
Received: by mail-ob0-f175.google.com with SMTP id xn12so11635829obc.6
	for <bitcoin-development@lists.sourceforge.net>;
	Wed, 14 Aug 2013 05:26:27 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.60.98.41 with SMTP id ef9mr1708211oeb.68.1376483187535; Wed,
	14 Aug 2013 05:26:27 -0700 (PDT)
Sender: mh.in.england@gmail.com
Received: by 10.76.80.165 with HTTP; Wed, 14 Aug 2013 05:26:27 -0700 (PDT)
Date: Wed, 14 Aug 2013 14:26:27 +0200
X-Google-Sender-Auth: dji8Hn3DdGNiXtgF73rmm2ZMuT8
Message-ID: <CANEZrP25861JnOX-5zzZhRJJWAgUKoJsskGyUfw6XTKqE8qfdg@mail.gmail.com>
From: Mike Hearn <mike@plan99.net>
To: Bitcoin Dev <bitcoin-development@lists.sourceforge.net>
Content-Type: multipart/alternative; boundary=089e013a100a6ebd3204e3e77731
X-Spam-Score: 0.7 (/)
X-Spam-Report: Spam Filtering performed by mx.sourceforge.net.
	See http://spamassassin.org/tag/ for more details.
	-1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for
	sender-domain
	0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider
	(mh.in.england[at]gmail.com)
	-0.0 SPF_PASS               SPF: sender matches SPF record
	1.2 HTML_OBFUSCATE_10_20 BODY: Message is 10% to 20% HTML obfuscation
	1.0 HTML_MESSAGE           BODY: HTML included in message
	0.1 DKIM_SIGNED            Message has a DKIM or DK signature,
	not necessarily valid
	-0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Headers-End: 1V9a9o-0007jW-Uf
Subject: [Bitcoin-development] bitcoinj 0.10
X-BeenThere: bitcoin-development@lists.sourceforge.net
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: <bitcoin-development.lists.sourceforge.net>
List-Unsubscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
	<mailto:bitcoin-development-request@lists.sourceforge.net?subject=unsubscribe>
List-Archive: <http://sourceforge.net/mailarchive/forum.php?forum_name=bitcoin-development>
List-Post: <mailto:bitcoin-development@lists.sourceforge.net>
List-Help: <mailto:bitcoin-development-request@lists.sourceforge.net?subject=help>
List-Subscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
	<mailto:bitcoin-development-request@lists.sourceforge.net?subject=subscribe>
X-List-Received-Date: Wed, 14 Aug 2013 12:26:34 -0000

--089e013a100a6ebd3204e3e77731
Content-Type: text/plain; charset=UTF-8

Hello,

I'm pleased to announce version 0.10 of bitcoinj, a Java library for
writing Bitcoin applications. BitcoinJ has been used to create everything
from end-user wallet apps to network crawlers to SatoshiDice.

To learn how to obtain bitcoinj 0.10, please see the following page:

   https://code.google.com/p/bitcoinj/wiki/UsingMaven

The v0.10 release is signed by Andreas Schildbach's GPG key. The git hash
of the release is 777e6781d789. This paragraph is signed by the same
Bitcoin key as with previous releases (check their release announcements to
establish continuity).

Signature: H9Nl7FPnmrUOmjhUZ0+xB4YW3q5F5gIkGdvllsDWmWYvOkNQHAE9jZE0I/qE1VfLPeMV+Rzo7geTB43uDSFSMek=

*New in this release*

   - An implementation of *micropayment channels* was added. There have
   been many bugfixes and improvements since the first announcement. This
   feature allows you to set up a 1:1 payment relationship with a remote
   server and after a short setup process send very tiny payments, very
   rapidly. It's suitable for metered billing applications. An article,
   "Working with micropayments" explains how to use it. This work was a joint
   effort between Matt and myself.
   - A simple sublibrary has been added that provides async IO based
   client/server classes that transmit length prefixed protocol buffers.
   - Thanks to Matija Mazi, some classes have been added that implement *the
   BIP 32 deterministic wallet algorithm*. Note that these classes are not
   yet used elsewhere in the system and full deterministic wallet support is
   therefore not available, however, a low level API is available for
   experimentation. That API is very likely to change in future releases so
   don't get too attached to it.
   - Thanks to Gary Rowe, we have integrated *a new Maven plugin* that
   checks the SHA1 hashes of downloaded dependencies against a hard-coded
   list. This means that even if an upstream Maven repository or developer
   were to be compromised, library dependencies could not be switched out for
   corrupted versions without someone noticing. For 0.10 the dependency hashes
   were just initialised based on what was already downloaded. In future,
   reproducible builds of upstream dependencies and auditing of changes would
   provide better security. You can and should use Gary's
plugin<https://github.com/gary-rowe/BitcoinjEnforcerRules> in
   your own projects to defend against a possible compromise of the bitcoinj
   repository.
   - *Callback handling* has been much improved. Each event listener can
   have an Executor specified which takes responsibility for running the
   callback. If you don't specify one they run by default on a single
   background thread, the "user thread", instead of the origin framework
   threads. This means your callbacks no longer need to be thread safe as
   they're always run serially. You can also change the default executor if
   you would like to control the thread on which callbacks run, for example to
   marshal them into your GUI toolkit thread automatically. This fixes some of
   the most painful parts of the pre-0.10 API, for instance that transaction
   confidence listeners were not allowed to re-enter the library.
   - *Exception handling* has also improved. You can assign a global
   Thread.UncaughtExceptionHandler which receives any exceptions thrown on
   the user thread (i.e. by your own event listeners), as well as any internal
   exceptions thrown by network threads (like inability to parse a message
   sent by a remote peer). Because your listeners now run on a separate thread
   by default, you can no longer accidentally cause internal data corruption
   or prevent other callbacks from running by leaking exceptions out of your
   callbacks; a subtle knife-edge in the previous API.
   - Support for *automatic wallet key rotation* has been added.
   - We now require Bloom-capable (0.8+) peers by default and will
   disconnect from older nodes. This avoids accidental bandwidth saturation on
   mobile devices.
   - The wallet now accepts timelocked transactions if it created them
   itself.
   - The wallet can be told to empty itself out, in which case the fee will
   be subtracted from the total amount instead of added. This simplifies the
   common case of wanting to send your entire balance whilst still including a
   fee.
   - Some JNI peers for event listeners were added. Auto-generated JNI
   bindings are experimental and not yet merged in to the mainline codebase:
   for now they are available as part of a separate project on github. This
   work allows you to access the bitcoinj API using relatively natural looking
   C++ code and an embedded JVM.
   - You can now register custom PeerFilterProvider implementors to add
   things to Bloom filters that aren't necessarily in wallets.
   - We have begun adding nullity annotations to the API. Combined with a
   strong static analysis engine like FindBugs or the IntelliJ Inspector, you
   can find cases where you aren't handling possible null pointers. Note that
   you should configure your static analysis system to understand the Guava
   Preconditions assertions, as otherwise you will get false positives.
   - You can now control how much information Wallet toString() dumps
   contain more precisely. Extensions can contribute to a wallets debug dump
   as well, and transaction data is now optional.
   - Documentation: The getting started tutorial and PingService example
   were rewritten. New articles were added that cover optimising chain sync
   and using the library from non-Java languages. Existing articles were also
   extended and refreshed.
   - Many bug fixes and new methods. You should upgrade as soon as possible
   to get the bug fixes, in particular, one that could cause transactions
   inside the same block to be incorrectly re-ordered when using Bloom
   filtering (which can affect the wallet). The library code now has more
   internal annotations to help static analysis engines, and several bugs were
   fixed as a result of that.

*API Changes*

   - The ScriptBuilder class now takes TransactionSignature objects, these
   wrap a raw ECDSA signature and the SIGHASH flags together, with utility
   methods to work with them.
   - The Locks class has been renamed to Threading. The thread on which
   callbacks run has been changed, see above.
   - The WalletEventListener.onKeyAdded method became onKeysAdded and now
   takes a list, to make processing of bulk adds more efficient.
   - BitcoinURIParseException is now checked so you can't forget to handle
   bogus URIs.
   - The Wallet.toString(..) method has additional parameters now so you
   can control what is included in the dump.

*Known issues*
*
*
Please see the limitations and missing
features<https://code.google.com/p/bitcoinj/wiki/Limitations> page.
This page has been fleshed out since the last release with common issues
and missing features. A few issues were also fixed and removed.

--089e013a100a6ebd3204e3e77731
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hello,<div><br></div><div>I&#39;m pleased to announce vers=
ion 0.10 of bitcoinj, a Java library for writing Bitcoin applications.=C2=
=A0<span style=3D"font-family:Arial,Helvetica,sans-serif;font-size:13px">Bi=
tcoinJ has been used to create everything from end-user wallet apps to netw=
ork crawlers to SatoshiDice.</span></div>
<div><span style=3D"font-family:Arial,Helvetica,sans-serif;font-size:13px">=
<br></span></div><div><span style=3D"font-family:Arial,Helvetica,sans-serif=
;font-size:13px">To learn how to obtain bitcoinj 0.10, please see the follo=
wing page:</span></div>
<div><span style=3D"font-family:Arial,Helvetica,sans-serif;font-size:13px">=
<br></span></div><div>=C2=A0 =C2=A0<a href=3D"https://code.google.com/p/bit=
coinj/wiki/UsingMaven" target=3D"_blank">https://code.google.com/p/bitcoinj=
/wiki/UsingMaven</a><span style=3D"font-family:Arial,Helvetica,sans-serif;f=
ont-size:13px"><br>
</span></div><div><br></div><div>The v0.10 release is signed by Andreas Sch=
ildbach&#39;s GPG key. The git hash of the release is 777e6781d789. This pa=
ragraph is signed by the same Bitcoin key as with previous releases (check =
their release announcements to establish continuity).</div>
<div><br></div><div>Signature:=C2=A0H9Nl7FPnmrUOmjhUZ0+xB4YW3q5F5gIkGdvllsD=
WmWYvOkNQHAE9jZE0I/qE1VfLPeMV+Rzo7geTB43uDSFSMek=3D</div><div><br></div><di=
v><b>New in this release</b></div><div><ul style=3D"padding-left:25px;max-w=
idth:62em;font-size:12.800000190734863px;font-family:arial,sans-serif">
<li style=3D"margin-bottom:0.3em">An implementation of=C2=A0<b>micropayment=
 channels</b>=C2=A0was added. There have been many bugfixes and improvement=
s since the first announcement. This feature allows you to set up a 1:1 pay=
ment relationship with a remote server and after a short setup process send=
 very tiny payments, very rapidly. It&#39;s suitable for metered billing ap=
plications. An article, &quot;Working with micropayments&quot; explains how=
 to use it. This work was a joint effort between Matt and myself.</li>
<li style=3D"margin-bottom:0.3em">A simple sublibrary has been added that p=
rovides async IO based client/server classes that transmit length prefixed =
protocol buffers.</li><li style=3D"margin-bottom:0.3em">Thanks to Matija Ma=
zi, some classes have been added that implement=C2=A0<b>the BIP 32 determin=
istic wallet algorithm</b>. Note that these classes are not yet used elsewh=
ere in the system and full deterministic wallet support is therefore not av=
ailable, however, a low level API is available for experimentation. That AP=
I is very likely to change in future releases so don&#39;t get too attached=
 to it.</li>
<li style=3D"margin-bottom:0.3em">Thanks to Gary Rowe, we have integrated=
=C2=A0<b>a new Maven plugin</b>=C2=A0that checks the SHA1 hashes of downloa=
ded dependencies against a hard-coded list. This means that even if an upst=
ream Maven repository or developer were to be compromised, library dependen=
cies could not be switched out for corrupted versions without someone notic=
ing. For 0.10 the dependency hashes were just initialised based on what was=
 already downloaded. In future, reproducible builds of upstream dependencie=
s and auditing of changes would provide better security. You can and should=
 use=C2=A0<a href=3D"https://github.com/gary-rowe/BitcoinjEnforcerRules" ta=
rget=3D"_blank">Gary&#39;s plugin</a>=C2=A0in your own projects to defend a=
gainst a possible compromise of the bitcoinj repository.</li>
<li style=3D"margin-bottom:0.3em"><b>Callback handling</b>=C2=A0has been mu=
ch improved. Each event listener can have an=C2=A0<tt style=3D"font-family:=
Monaco,&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;L=
ucida Console&#39;,monospace;font-size:12px;max-width:66em">Executor</tt>=
=C2=A0specified which takes responsibility for running the callback. If you=
 don&#39;t specify one they run by default on a single background thread, t=
he &quot;user thread&quot;, instead of the origin framework threads. This m=
eans your callbacks no longer need to be thread safe as they&#39;re always =
run serially. You can also change the default executor if you would like to=
 control the thread on which callbacks run, for example to marshal them int=
o your GUI toolkit thread automatically. This fixes some of the most painfu=
l parts of the pre-0.10 API, for instance that transaction confidence liste=
ners were not allowed to re-enter the library.</li>
<li style=3D"margin-bottom:0.3em"><b>Exception handling</b>=C2=A0has also i=
mproved. You can assign a global=C2=A0<tt style=3D"font-family:Monaco,&#39;=
DejaVu Sans Mono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Lucida Consol=
e&#39;,monospace;font-size:12px;max-width:66em">Thread.UncaughtExceptionHan=
dler</tt>=C2=A0which receives any exceptions thrown on the user thread (i.e=
. by your own event listeners), as well as any internal exceptions thrown b=
y network threads (like inability to parse a message sent by a remote peer)=
. Because your listeners now run on a separate thread by default, you can n=
o longer accidentally cause internal data corruption or prevent other callb=
acks from running by leaking exceptions out of your callbacks; a subtle kni=
fe-edge in the previous API.</li>
<li style=3D"margin-bottom:0.3em">Support for=C2=A0<b>automatic wallet key =
rotation</b>=C2=A0has been added.</li><li style=3D"margin-bottom:0.3em">We =
now require Bloom-capable (0.8+) peers by default and will disconnect from =
older nodes. This avoids accidental bandwidth saturation on mobile devices.=
</li>
<li style=3D"margin-bottom:0.3em">The wallet now accepts timelocked transac=
tions if it created them itself.</li><li style=3D"margin-bottom:0.3em">The =
wallet can be told to empty itself out, in which case the fee will be subtr=
acted from the total amount instead of added. This simplifies the common ca=
se of wanting to send your entire balance whilst still including a fee.</li=
>
<li style=3D"margin-bottom:0.3em">Some JNI peers for event listeners were a=
dded. Auto-generated JNI bindings are experimental and not yet merged in to=
 the mainline codebase: for now they are available as part of a separate pr=
oject on github. This work allows you to access the bitcoinj API using rela=
tively natural looking C++ code and an embedded JVM.</li>
<li style=3D"margin-bottom:0.3em">You can now register custom=C2=A0<tt styl=
e=3D"font-family:Monaco,&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera Sans=
 Mono&#39;,&#39;Lucida Console&#39;,monospace;font-size:12px;max-width:66em=
">PeerFilterProvider</tt>=C2=A0implementors to add things to Bloom filters =
that aren&#39;t necessarily in wallets.</li>
<li style=3D"margin-bottom:0.3em">We have begun adding nullity annotations =
to the API. Combined with a strong static analysis engine like FindBugs or =
the IntelliJ Inspector, you can find cases where you aren&#39;t handling po=
ssible null pointers. Note that you should configure your static analysis s=
ystem to understand the Guava Preconditions assertions, as otherwise you wi=
ll get false positives.</li>
<li style=3D"margin-bottom:0.3em">You can now control how much information =
Wallet toString() dumps contain more precisely. Extensions can contribute t=
o a wallets debug dump as well, and transaction data is now optional.</li>
<li style=3D"margin-bottom:0.3em">Documentation: The getting started tutori=
al and PingService example were rewritten. New articles were added that cov=
er optimising chain sync and using the library from non-Java languages. Exi=
sting articles were also extended and refreshed.</li>
<li style=3D"margin-bottom:0.3em">Many bug fixes and new methods. You shoul=
d upgrade as soon as possible to get the bug fixes, in particular, one that=
 could cause transactions inside the same block to be incorrectly re-ordere=
d when using Bloom filtering (which can affect the wallet). The library cod=
e now has more internal annotations to help static analysis engines, and se=
veral bugs were fixed as a result of that.</li>
</ul><p style=3D"line-height:1.25em;max-width:64em;font-size:12.80000019073=
4863px;font-family:arial,sans-serif"><b>API Changes</b></p><ul style=3D"pad=
ding-left:25px;max-width:62em;font-size:12.800000190734863px;font-family:ar=
ial,sans-serif">
<li style=3D"margin-bottom:0.3em">The=C2=A0<tt style=3D"font-family:Monaco,=
&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Lucida C=
onsole&#39;,monospace;font-size:12px;max-width:66em">ScriptBuilder</tt>=C2=
=A0class now takes=C2=A0<tt style=3D"font-family:Monaco,&#39;DejaVu Sans Mo=
no&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Lucida Console&#39;,monospa=
ce;font-size:12px;max-width:66em">TransactionSignature</tt>=C2=A0objects, t=
hese wrap a raw ECDSA signature and the SIGHASH flags together, with utilit=
y methods to work with them.</li>
<li style=3D"margin-bottom:0.3em">The=C2=A0<tt style=3D"font-family:Monaco,=
&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Lucida C=
onsole&#39;,monospace;font-size:12px;max-width:66em">Locks</tt>=C2=A0class =
has been renamed to=C2=A0<tt style=3D"font-family:Monaco,&#39;DejaVu Sans M=
ono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Lucida Console&#39;,monosp=
ace;font-size:12px;max-width:66em">Threading</tt>. The thread on which call=
backs run has been changed, see above.</li>
<li style=3D"margin-bottom:0.3em">The=C2=A0<tt style=3D"font-family:Monaco,=
&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Lucida C=
onsole&#39;,monospace;font-size:12px;max-width:66em">WalletEventListener.on=
KeyAdded</tt>=C2=A0method became=C2=A0<tt style=3D"font-family:Monaco,&#39;=
DejaVu Sans Mono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Lucida Consol=
e&#39;,monospace;font-size:12px;max-width:66em">onKeysAdded</tt>=C2=A0and n=
ow takes a list, to make processing of bulk adds more efficient.</li>
<li style=3D"margin-bottom:0.3em"><tt style=3D"font-family:Monaco,&#39;Deja=
Vu Sans Mono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Lucida Console&#3=
9;,monospace;font-size:12px;max-width:66em">BitcoinURIParseException</tt>=
=C2=A0is now checked so you can&#39;t forget to handle bogus URIs.</li>
<li style=3D"margin-bottom:0.3em">The=C2=A0<tt style=3D"font-family:Monaco,=
&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Lucida C=
onsole&#39;,monospace;font-size:12px;max-width:66em">Wallet.toString(..)</t=
t>=C2=A0method has additional parameters now so you can control what is inc=
luded in the dump.</li>
</ul></div><div><b>Known issues</b></div><div><b><br></b></div><div>Please =
see the=C2=A0<a href=3D"https://code.google.com/p/bitcoinj/wiki/Limitations=
" target=3D"_blank">limitations and missing features</a>=C2=A0page. This pa=
ge has been fleshed out since the last release with common issues and missi=
ng features. A few issues were also fixed and removed.</div>
</div>

--089e013a100a6ebd3204e3e77731--