Repository navigation
Expand file tree
/
Copy pathinterface-performance.html
More file actions
522 lines (495 loc) · 59.5 KB
/
Copy pathinterface-performance.html
File metadata and controls
522 lines (495 loc) · 59.5 KB
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
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Libbitcoin Interface Performance</title>
<meta name="description" content="Query performance measurements of libbitcoin-server across machines and configurations, some with Bitcoin Core, Fulcrum, or Frigate comparisons.">
<link rel="icon" type="image/svg+xml" href="favicon.svg">
<link rel="canonical" href="https://libbitcoin.info/interface-performance.html">
<script>
(function () {
'use strict';
var CANONICAL = 'libbitcoin.info';
var host = location.hostname.toLowerCase();
var local = location.protocol === 'file:' || host === 'localhost' ||
host === '127.0.0.1';
var trusted = local || host === CANONICAL || host === 'libbitcoin.github.io';
var framed = false;
try { framed = window.top !== window.self; } catch (_) { framed = true; }
if (trusted && !(framed && !local)) return;
// Wrong host (squatter proxy) or framed: navigate to the canonical site.
var url = 'https://' + CANONICAL + location.pathname + location.search;
try { window.top.location.replace(url); } catch (_) {}
try { location.replace(url); } catch (_) {}
// Navigation blocked: replace the page with a warning.
document.addEventListener('DOMContentLoaded', function () {
document.body.innerHTML =
'<div style="max-width:36em;margin:15vh auto;padding:0 24px;' +
'font:16px/1.6 system-ui;color:#ededed">' +
'<h1 style="color:#ff2357;font-size:22px">Warning: unofficial mirror</h1>' +
'<p>This page is being served from a domain not controlled by the ' +
'libbitcoin project. Do not trust content, links, or downloads here.</p>' +
'<p>The official site is <a style="color:#ffa022" ' +
'href="' + url + '">https://libbitcoin.info</a>.</p></div>';
});
})();
</script>
<meta property="og:type" content="website">
<meta property="og:site_name" content="libbitcoin">
<meta property="og:url" content="https://libbitcoin.info/interface-performance.html">
<meta property="og:title" content="Libbitcoin Interface Performance">
<meta property="og:description" content="Query performance measurements of libbitcoin-server across machines and configurations, some with Bitcoin Core, Fulcrum, or Frigate comparisons.">
<meta property="og:image" content="https://libbitcoin.info/card.png">
<meta property="og:image:secure_url" content="https://libbitcoin.info/card.png">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="2400">
<meta property="og:image:height" content="1260">
<meta property="og:image:alt" content="Libbitcoin is Coming — a Bitcoin full node and query server speaking Electrum, bitcoind, btcd, ZeroMQ, Stratum and the peer protocol.">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Libbitcoin Interface Performance">
<meta name="twitter:description" content="Query performance measurements of libbitcoin-server across machines and configurations, some with Bitcoin Core, Fulcrum, or Frigate comparisons.">
<meta name="twitter:image" content="https://libbitcoin.info/card.png">
<meta name="twitter:image:alt" content="Libbitcoin is Coming — a Bitcoin full node and query server.">
<style>
:root {
color-scheme: dark;
--paper: #272822; --surface: #1f211c;
--ink: #ededed; --ink-2: #cfcfcf; --ink-3: #6a7282;
--rule: #3a3c33; --rule-soft: #2e302a;
--accent: #c85637; --heading: #ffa022;
--yes: #00bb7f; --partial: #ffa022; --pending: #4f8dff;
--rejected: #ff2357; --scope: #6a7282; --wip: #c07bff;
--mono: ui-monospace, "SF Mono", "Cascadia Mono", "Segoe UI Mono", Menlo, Consolas, monospace;
--sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
--shadow: 0 1px 2px rgba(0,0,0,.4), 0 8px 24px -16px rgba(0,0,0,.8);
}
html { scrollbar-gutter: stable; }
body { background: var(--paper); color: var(--ink); font-family: var(--sans); font-size: 15px; line-height: 1.55; -webkit-font-smoothing: antialiased; }
.wrap { max-width: 1120px; margin: 0 auto; padding: 0 24px 96px; }
.logo { width: 132px; height: auto; display: block; }
.mast { padding: 56px 0 28px; border-bottom: 2px solid var(--ink); display: flex; flex-direction: column; gap: 14px; }
.eyebrow { font-family: var(--mono); font-size: 11px; letter-spacing: .18em; text-transform: uppercase; color: var(--accent); font-weight: 600; }
h1 { color: var(--heading); font-family: var(--mono); font-size: clamp(28px, 4.4vw, 44px); font-weight: 600; letter-spacing: -.02em; line-height: 1.1; text-wrap: balance; margin: 0; }
.lede { max-width: 66ch; color: var(--ink-2); font-size: 16px; }
.lede strong { color: var(--ink); font-weight: 600; }
.menu { display: flex; flex-wrap: wrap; gap: 6px 18px; margin: 0 0 28px; padding: 10px 0; border-top: 1px solid var(--rule-soft); border-bottom: 1px solid var(--rule-soft); font-family: var(--mono); font-size: 12px; letter-spacing: .08em; text-transform: uppercase; }
.menu a { color: var(--ink-2); text-decoration: none; }
.menu a:hover, .menu a:focus { color: var(--heading); }
.menu a.here { color: var(--heading); }
.mast .menu.site { margin: 0; }
.mast + .menu { border-top: 0; }
h2[id] { scroll-margin-top: 16px; }
.lede.after { margin: 14px 0 40px; }
.tag { display: inline-block; padding: 2px 7px; border-radius: 2px; font-family: var(--mono); font-size: 9.5px; letter-spacing: .1em; text-transform: uppercase; font-weight: 700; white-space: nowrap; border: 1px solid currentColor; }
.tag.yes { color: var(--yes); }
.tag.partial { color: var(--partial); }
.tag.pending { color: var(--pending); }
.tag.rejected { color: var(--rejected); }
.tag.scope { color: var(--scope); }
.tag.wip { color: var(--wip); }
h2 { font-family: var(--mono); font-size: 13px; letter-spacing: .14em; text-transform: uppercase; color: var(--ink-3); font-weight: 600; margin: 0 0 18px; padding-bottom: 8px; border-bottom: 1px solid var(--rule-soft); }
.board { display: grid; grid-template-columns: repeat(auto-fit, minmax(238px, 1fr)); gap: 12px; margin-bottom: 56px; }
.card { background: var(--surface); border: 1px solid #c856374d; border-radius: 3px; padding: 14px 15px 15px; display: flex; flex-direction: column; gap: 10px; box-shadow: var(--shadow); text-decoration: none; color: inherit; }
.card-name { font-family: var(--mono); font-size: 13.5px; font-weight: 600; letter-spacing: -.01em; }
.card-meta { font-family: var(--mono); font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-3); }
.bar { display: flex; height: 5px; border-radius: 3px; overflow: hidden; background: var(--rule-soft); }
.bar span { display: block; }
.bar .b-yes { background: var(--yes); }
.bar .b-partial { background: var(--partial); }
.bar .b-pending { background: var(--pending); }
.bar .b-rejected { background: var(--rejected); }
.bar .b-scope { background: var(--scope); opacity: .55; }
.bar .b-wip { background: var(--wip); }
.svc { margin-bottom: 52px; scroll-margin-top: 24px; }
.svc h3 { color: var(--heading); font-family: var(--mono); font-size: 20px; font-weight: 600; margin: 0 0 4px; letter-spacing: -.015em; }
.svc-note { color: var(--ink-2); max-width: 86ch; margin: 0 0 16px; font-size: 14.5px; }
.spec { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1px; background: var(--rule); border: 1px solid #c856374d; border-radius: 3px; margin-bottom: 18px; }
.spec div { background: var(--surface); padding: 9px 12px 10px; }
.spec dt { font-family: var(--mono); font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--ink-3); }
.spec dd { font-family: var(--mono); font-size: 12.5px; margin: 2px 0 0; color: var(--ink); }
.spec dd ul { margin: 0; padding-left: 15px; }
.spec dd li { list-style: disc; margin: 1px 0; }
.spec dd li::marker { color: var(--ink-3); }
.scroller { overflow-x: auto; border: 1px solid #c856374d; border-radius: 3px; background: var(--surface); }
table { border-collapse: collapse; width: 100%; font-size: 13px; table-layout: fixed; }
th { font-family: var(--mono); font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--ink-3); font-weight: 600; text-align: left; padding: 9px 14px; border-bottom: 1px solid var(--rule); white-space: nowrap; }
td { padding: 7px 14px; border-bottom: 1px solid var(--rule-soft); vertical-align: baseline; }
tr:last-child td { border-bottom: none; }
td.m { font-family: var(--mono); font-size: 12.5px; white-space: nowrap; }
td.v { font-family: var(--mono); font-size: 12.5px; white-space: nowrap; color: var(--ink-3); }
td.st { white-space: nowrap; width: 1%; }
td.no { color: var(--ink-2); font-size: 12.5px; }
tr.dim td.m { color: var(--ink-3); }
/* Narrow viewports: tables keep their columns and scroll in the scroller. */
@media (max-width: 760px) {
.wrap { padding: 0 14px 72px; }
th, td { padding: 6px 8px; }
table { font-size: 12px; }
td.m, td.v { font-size: 11.5px; }
.tag { font-size: 9px; padding: 2px 5px; letter-spacing: .06em; }
}
.foot { border-top: 2px solid var(--ink); padding-top: 20px; margin-top: 8px; color: var(--ink-2); font-size: 13.5px; max-width: 72ch; display: flex; flex-direction: column; gap: 10px; }
.foot code { font-family: var(--mono); font-size: 12.5px; color: var(--ink); }
a { color: var(--accent); }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(480px, 1fr)); gap: 14px; margin-bottom: 56px; }
.shot { margin: 0; background: var(--surface); border: 1px solid #c856374d; border-radius: 3px; padding: 14px 15px 15px; display: flex; flex-direction: column; gap: 10px; cursor: zoom-in; }
.shot:hover, .shot:focus { border-color: var(--accent); outline: none; }
.shot h3 { color: var(--heading); font-family: var(--mono); font-size: 14px; font-weight: 600; margin: 0; }
.shot img { display: block; width: 100%; height: auto; border-radius: 2px; }
.shot figcaption { color: var(--ink-2); font-size: 13px; line-height: 1.45; }
.lightbox { position: fixed; inset: 0; z-index: 10; background: rgba(0,0,0,.88); display: flex; align-items: center; justify-content: center; padding: 24px; cursor: zoom-out; }
.lightbox[hidden] { display: none; }
.lightbox img { max-width: 100%; max-height: 100%; object-fit: contain; }
@media (max-width: 560px) { .gallery { grid-template-columns: 1fr; } }
</style>
</head>
<body>
<div class="wrap">
<header class="mast">
<a href="./" aria-label="libbitcoin.info">
<svg
xmlns="http://www.w3.org/2000/svg"
class="logo" width="132"
height="114" aria-label="libbitcoin" role="img"
viewBox="0 0 63.431988 54.981449"
version="1.1"
>
<defs
/>
<g
transform="translate(-63.81855,-387.75114)">
<path
style="fill:#c85637;fill-opacity:1"
d="m 70.27468,409.29117 c 0.0769,-1.245 0.2286,-2.5713 0.41158,-3.5998 0.025,-0.1402 0.0881,-0.4949 0.14026,-0.7881 0.0522,-0.2933 0.13503,-0.6794 0.18409,-0.8578 0.0832,-0.3028 0.13024,-0.4438 0.43292,-1.2982 0.3045,-0.8596 0.97195,-1.8469 1.75795,-2.6006 0.36693,-0.3518 0.95197,-0.8196 1.15832,-0.9264 0.0857,-0.045 0.25545,-0.149 0.3771,-0.2328 0.12166,-0.084 0.33036,-0.2036 0.46377,-0.2665 1.23962,-0.5845 1.33775,-0.6266 1.74944,-0.7509 0.19126,-0.058 0.68158,-0.2097 1.08959,-0.3377 0.40802,-0.1279 0.88789,-0.2674 1.0664,-0.3099 0.39674,-0.095 1.06655,-0.4224 1.474,-0.7216 0.18376,-0.1349 0.44576,-0.4014 0.66601,-0.6776 0.19969,-0.2505 0.37762,-0.4663 0.39539,-0.4796 0.0177,-0.013 0.0881,-0.1072 0.15629,-0.2086 0.29386,-0.4372 1.25301,-1.4186 1.75938,-1.8002 0.5269,-0.3972 0.7891,-0.5733 0.90812,-0.6103 0.0616,-0.018 0.23094,-0.094 0.37642,-0.1674 0.93681,-0.4699 1.61728,-0.5851 3.79247,-0.642 0.90528,-0.024 1.79202,-0.056 1.97052,-0.072 0.70965,-0.063 1.41262,-0.3285 1.90098,-0.7168 0.12751,-0.1014 0.3072,-0.2354 0.39932,-0.2978 0.0921,-0.062 0.21732,-0.1787 0.27819,-0.2584 0.36194,-0.4739 1.35906,-1.3614 1.82464,-1.6238 1.31868,-0.7436 2.12425,-1.0365 3.38625,-1.2312 0.71314,-0.1099 2.29453,-0.073 2.96739,0.07 0.77273,0.164 1.99265,0.6058 2.78191,1.0074 0.0765,0.039 0.23298,0.098 0.34774,0.132 0.11475,0.034 0.40717,0.1428 0.6498,0.2425 0.7568,0.3106 1.02277,0.3588 1.96984,0.3571 0.77754,0 0.87419,-0.011 1.41415,-0.1464 1.79851,-0.4497 3.391,-0.4867 4.84517,-0.1124 0.74468,0.1916 1.26262,0.3862 1.74736,0.6564 0.27251,0.152 0.50715,0.2762 0.52138,0.2762 0.0862,0 1.30467,1.0079 1.38732,1.1475 0.0218,0.037 0.11779,0.1376 0.21338,0.224 0.0956,0.086 0.23421,0.246 0.30804,0.3549 0.0738,0.1088 0.14517,0.2082 0.15856,0.221 0.12486,0.119 0.51922,0.679 0.62057,0.8811 0.0702,0.1402 0.15447,0.2861 0.18718,0.3244 0.10613,0.124 0.53064,1.0094 0.88512,1.8457 l 0.0847,0.1997 -0.62196,0.6233 c -0.34206,0.3427 -0.60841,0.7783 -0.62152,0.7781 -0.0132,0 -0.14198,-0.4404 -0.25673,-0.7884 -0.39523,-1.1985 -0.50396,-1.4611 -0.91895,-2.2196 -0.24015,-0.4389 -1.19591,-1.4552 -1.60796,-1.7098 -0.0765,-0.047 -0.24341,-0.165 -0.37092,-0.2616 -0.35935,-0.2725 -1.45873,-0.8197 -2.00805,-0.9996 -1.29364,-0.4237 -2.05712,-0.5493 -3.1385,-0.5163 -0.78744,0.024 -1.183,0.1009 -1.76189,0.3425 -0.153,0.064 -0.34369,0.1358 -0.42375,0.1599 -0.164,0.05 -0.56638,0.3139 -0.8242,0.5417 -0.28904,0.2555 -0.64919,0.8028 -0.78808,1.1976 -0.0709,0.2014 -0.1446,0.383 -0.16387,0.4035 -0.0193,0.021 -0.0587,-0.084 -0.0875,-0.2319 -0.0288,-0.1479 -0.13104,-0.4869 -0.22711,-0.7535 -0.16835,-0.4669 -0.18894,-0.4989 -0.56878,-0.8826 -0.41772,-0.422 -0.81609,-0.7275 -1.15914,-0.8888 -0.11475,-0.054 -0.2608,-0.134 -0.32455,-0.178 -0.18248,-0.1256 -0.88066,-0.4283 -1.13595,-0.4925 -0.1275,-0.032 -0.34658,-0.091 -0.48684,-0.1307 -0.65257,-0.1855 -1.20132,-0.2672 -1.95867,-0.2919 -0.96666,-0.031 -1.34796,0.023 -2.67786,0.3836 -0.64715,0.1754 -1.8891,0.8184 -2.15599,1.1163 -0.0255,0.029 -0.16633,0.1386 -0.31297,0.2448 -0.14662,0.1062 -0.26665,0.2081 -0.26674,0.2265 -9e-5,0.018 -0.13386,0.1736 -0.29729,0.3451 -0.16345,0.1716 -0.34595,0.3936 -0.40557,0.4935 -0.0597,0.1 -0.21615,0.3391 -0.34788,0.5318 -0.13172,0.1925 -0.25292,0.3924 -0.26934,0.4442 -0.0165,0.052 -0.15302,0.3534 -0.30357,0.6705 -0.15053,0.3171 -0.29863,0.6775 -0.3291,0.8011 -0.0304,0.1234 -0.13356,0.4644 -0.22908,0.7576 -0.0955,0.2934 -0.23282,0.7732 -0.30511,1.0665 l -0.13141,0.5332 -0.0379,-0.51 c -0.0381,-0.5125 -0.0121,-2.0586 0.039,-2.3183 l 0.0273,-0.1391 -0.40886,-0.01 c -0.22489,-0.01 -0.94093,-0.086 -1.59121,-0.1838 -1.17792,-0.1765 -1.18783,-0.1772 -2.666,-0.1788 l -1.48369,0 -0.3589,0.1272 c -0.67067,0.2373 -1.36975,0.6516 -1.92422,1.1404 -0.40366,0.3559 -1.07855,1.2559 -1.20015,1.6006 -0.037,0.1048 -0.0955,0.2337 -0.13014,0.2865 -0.0987,0.1507 -0.42896,0.9497 -0.48799,1.1806 -0.0434,0.1699 -0.15947,0.5475 -0.35536,1.1566 -0.014,0.044 -0.34457,-0.2518 -0.95843,-0.8578 l -0.93687,-0.9247 0.96085,0.9092 0.94025,0.8338 -0.10166,0.4213 c -0.0486,0.2013 -0.12668,0.315 -0.29027,0.4762 l -0.21608,0.2128 -0.1995,-0.3935 c -0.16447,-0.3243 -0.2373,-0.4174 -0.41472,-0.5302 -0.11836,-0.075 -0.3091,-0.1619 -0.42385,-0.1925 -0.5625,-0.1504 -2.36958,0.1838 -3.27212,0.6052 -0.22765,0.1063 -0.44522,0.2199 -0.48347,0.2524 -0.0382,0.033 -0.12665,0.077 -0.19643,0.1 -0.37614,0.1211 -1.52719,1.1173 -2.0523,1.7763 -0.37144,0.4662 -0.8953,1.3611 -1.03987,1.7765 -0.0467,0.134 -0.14128,0.4001 -0.21028,0.5914 -0.36512,1.0119 -0.63928,2.5319 -0.82379,4.567 -0.0718,0.7909 -0.0763,5.9657 -0.006,6.1371 0.0419,0.1013 0.0566,0.084 0.19279,-0.2201 0.0811,-0.1814 0.18026,-0.4602 0.22032,-0.6197 0.0401,-0.1594 0.10187,-0.3942 0.13732,-0.5216 0.10766,-0.3871 0.33354,-1.4556 0.41167,-1.9474 0.0765,-0.4817 0.21211,-2.0048 0.21458,-2.4103 0.002,-0.3682 0.0695,-0.1597 0.16428,0.5093 0.1999,1.411 0.0697,3.2817 -0.35802,5.1465 -0.0292,0.1276 -0.1441,0.5088 -0.25524,0.8473 -0.19364,0.5897 -0.31275,1.0718 -0.55249,2.2361 -0.31786,1.5437 -0.33434,3.3583 -0.0461,5.0832 0.0378,0.2261 0.11161,0.6614 0.16411,0.9674 0.0525,0.306 0.12664,0.7906 0.16473,1.0768 0.16561,1.2444 0.62703,2.5525 1.13059,3.2053 0.15152,0.1964 0.54908,0.595 0.75285,0.7548 0.31024,0.2432 0.76246,0.4493 1.24492,0.5674 0.7694,0.1881 0.98914,0.2146 1.78252,0.2146 l 0.74544,0 0.82983,0.7519 c 0.92373,0.8371 1.16881,0.6904 -0.0658,0.9919 -0.64521,0.1576 -1.56054,0.197 -2.14042,0.1128 -0.67485,-0.098 -1.42023,-0.2803 -1.75427,-0.4288 -1.12121,-0.4983 -1.59994,-0.8031 -2.20486,-1.4044 -0.3463,-0.3441 -0.94797,-1.0907 -0.94797,-1.1762 0,-0.021 -0.0815,-0.192 -0.1811,-0.3811 -0.29038,-0.5515 -0.41103,-0.9031 -0.55551,-1.6189 -0.17385,-0.8614 -0.1715,-0.8462 -0.28121,-1.8315 -0.16954,-1.5228 -0.20463,-2.4655 -0.21405,-5.7493 -0.005,-1.7595 -0.0203,-4.4928 -0.0339,-6.0738 -0.0136,-1.5811 -0.007,-3.1639 0.015,-3.5174 z m 7.74587,20.307 c 0.087,-0.014 0.28075,-0.038 0.43045,-0.054 0.58395,-0.062 0.85526,-0.2468 1.07986,-0.7334 0.12686,-0.2749 0.13137,-0.3099 0.13149,-1.0264 0,-0.4081 -0.0255,-1.107 -0.0569,-1.5532 -0.12465,-1.7733 -0.16404,-3.4202 -0.13469,-5.6312 l 0.044,-2.3107 0.15067,-0.1304 0.13609,-0.111 -0.14314,0.1289 -0.14314,0.1288 -0.0312,-1.6359 c -0.0171,-0.8996 -0.0439,-1.7922 -0.0594,-1.9835 l -0.0282,-0.4302 0.3697,0.3623 0.35999,0.4156 -0.36637,-0.379 -0.3664,-0.379 -0.0389,-0.6874 c -0.0655,-1.1573 0.0541,-2.9473 0.28461,-4.2575 0.26096,-1.4832 0.40935,-2.0623 0.67438,-2.6315 l 0.1132,-0.2431 0,0.3014 c 1e-5,0.1657 -0.0201,0.5308 -0.0449,0.8113 -0.21156,2.4042 -0.24312,4.3228 -0.1003,6.097 0.0544,0.6758 0.0991,1.3106 0.0993,1.4107 l 0,0.1819 -0.12751,-0.1119 c -0.0967,-0.085 -0.0668,-0.15 0.0474,-0.026 0.14305,0.1557 0.12653,0.2604 0.1286,0.6104 0.002,0.2028 0.0201,0.64 0.0419,0.9715 l 0.0398,0.6027 -0.35493,0.3709 -0.35491,0.371 0.37239,-0.4131 0.33357,-0.345 0.0292,0.441 c 0.0564,0.7031 0.21587,2.8847 0.32999,4.5132 0.10996,1.5695 0.16383,2.5026 0.24885,4.3119 0.0435,0.9256 0.0926,1.0975 0.49544,1.7334 0.49601,0.783 1.47562,1.4565 2.57213,1.7684 0.24226,0.069 0.47059,0.1343 0.5074,0.1452 0.0435,0.014 -0.15051,0.2416 -0.55639,0.6554 l -0.62336,0.6356 0.60544,-0.6601 0.56175,-0.6309 0.32489,0.064 c 0.10663,0.024 0.42321,0.065 0.7035,0.089 0.89249,0.078 1.78665,-0.047 2.6988,-0.3784 0.59164,-0.215 1.29291,-0.8644 1.56615,-1.4504 0.0928,-0.199 0.30584,-1.0625 0.38344,-1.5541 0.026,-0.1653 0.0555,-0.7595 0.0655,-1.3205 0.0178,-1.0036 -0.0196,-1.6589 -0.18787,-3.2912 -0.0395,-0.3829 -0.10182,-1.4787 -0.13851,-2.435 -0.0676,-1.7609 -0.19837,-4.0811 -0.32539,-5.7724 -0.10204,-1.3584 -0.0873,-4.7694 0.0273,-6.3123 0.10082,-1.358 0.27624,-2.4725 0.44776,-2.8448 l 0.11745,-0.2551 0.051,0.1391 c 0.0342,0.093 0.0516,0.8423 0.053,2.2719 0.002,2.4023 0.008,2.666 0.0613,2.666 0.0206,0 0.0838,-0.1616 0.14032,-0.3594 0.092,-0.3214 0.38681,-0.9542 0.62102,-1.3329 0.0807,-0.1305 0.0846,-0.1319 0.0625,-0.023 -0.46172,2.2743 -0.50107,3.6758 -0.18753,6.6767 0.15681,1.5006 0.23454,2.8813 0.37205,6.607 0.065,1.7595 0.1371,3.7022 0.16036,4.3169 0.0437,1.1549 0.0646,1.3127 0.25775,1.9482 0.10149,0.3338 0.14609,0.4085 0.39271,0.6574 0.18145,0.1832 0.41894,0.3559 0.68287,0.4968 0.42253,0.2256 1.1278,0.4859 1.31616,0.4859 0.0799,0 0.42906,0.1986 0.95214,0.7758 l 0.73577,0.7465 -0.4991,-0.027 c -0.54711,-0.022 -2.77755,-0.2304 -2.87862,-0.2693 -0.12001,-0.046 -0.54435,0.1169 -0.79811,0.3066 -0.52298,0.3907 -0.87439,0.8991 -1.02397,1.4816 -0.10297,0.4009 -0.0686,1.1448 0.0738,1.5962 0.17214,0.5457 0.79466,1.7503 0.86709,1.6779 0.0302,-0.03 0.14161,-0.8836 0.19757,-1.5127 0.0847,-0.9526 0.25616,-1.5862 0.61328,-2.2667 0.18191,-0.3466 0.29012,-0.4559 0.59363,-0.5995 0.34025,-0.161 0.97914,-0.1713 1.43732,-0.023 1.36484,0.4412 2.0912,0.664 2.24872,0.6899 0.15681,0.026 0.34731,0.094 0.79522,0.5727 l 0.50298,0.5372 -0.50782,-0.5201 -0.75774,-0.5809 0.52594,0.1473 c 0.41063,0.1289 0.76034,0.2568 0.99627,0.3643 0.11563,0.053 0.26169,0.1091 0.32456,0.1252 0.0629,0.016 0.1554,0.06 0.20561,0.097 0.0877,0.065 0.08,0.079 -0.1958,0.3548 l -0.28711,0.2871 -0.23509,-0.1229 c -0.43871,-0.2292 -0.0374,-0.1153 -0.003,-0.071 0.0915,0.1201 -0.0273,0.1073 -0.35386,-0.038 -0.42994,-0.1914 -1.03916,-0.4236 -1.26479,-0.4821 -0.11475,-0.03 -0.58104,-0.1779 -1.03622,-0.3293 -1.16257,-0.3869 -1.75894,-0.4555 -2.1172,-0.2439 -0.4337,0.2562 -0.85733,1.6873 -0.979,3.3073 -0.0595,0.7921 -0.0409,0.8686 0.24481,1.0082 0.8542,0.4172 1.3428,0.6386 1.6079,0.7284 0.17006,0.057 0.63258,0.2204 1.02785,0.3616 0.39526,0.1413 0.84384,0.2874 0.99685,0.3248 0.15301,0.037 0.68999,0.1752 1.19332,0.3062 0.50331,0.131 0.9852,0.2383 1.07082,0.2383 l 0.15567,0 0.0319,-0.6144 c 0.0176,-0.3379 0.0512,-0.896 0.0747,-1.2402 0.0827,-1.2091 0.0432,-2.2553 -0.1012,-2.6849 -0.0308,-0.092 -0.10259,-0.2313 -0.15956,-0.3103 l -0.1585,-0.1503 0.26483,-0.2875 0.1962,-0.3355 0.35929,0.3106 c 0.11457,0.1254 0.24639,0.3028 0.29293,0.394 0.0746,0.1463 0.2269,1.0875 0.2269,1.3212 0,0.059 -0.15711,-0.2041 -0.51474,-0.5532 l -0.52161,-0.5093 0.55736,0.499 0.47499,0.5674 0.0289,0.2995 c 0.028,0.2899 -0.0371,2.8412 -0.0872,3.4142 l -0.0247,0.2827 0.31724,0.1462 c 0.17447,0.081 0.33239,0.1462 0.35094,0.1462 0.0185,0 0.31941,0.1384 0.6686,0.3075 0.34918,0.1692 0.71089,0.3343 0.80381,0.3672 0.0929,0.033 0.39542,0.1827 0.6723,0.3332 0.70403,0.3826 0.66538,0.376 0.66705,0.115 0.002,-0.2725 0.1322,-0.923 0.29424,-1.4669 0.10748,-0.3608 0.62496,-1.4863 0.66497,-1.4464 0.008,0.01 -0.006,0.1587 -0.0316,0.3346 -0.0691,0.478 -0.0574,1.4703 0.0228,1.9283 0.0723,0.4133 0.18186,0.7794 0.24661,0.8239 0.02,0.014 0.10301,0.1228 0.18432,0.2423 0.28385,0.4173 0.82698,0.7731 1.41098,0.9245 0.34435,0.089 0.46449,0.096 1.37668,0.074 0.8526,-0.02 1.0505,-0.039 1.34716,-0.1267 0.42766,-0.1268 1.42508,-0.5146 1.7387,-0.676 0.12751,-0.066 0.46134,-0.2359 0.74185,-0.3785 0.28051,-0.1425 0.59347,-0.3155 0.69548,-0.3843 0.102,-0.069 0.35238,-0.2099 0.55639,-0.3133 0.204,-0.1036 0.53698,-0.294 0.73993,-0.4234 0.20298,-0.1293 0.38784,-0.2352 0.4108,-0.2352 0.0229,0 0.2724,-0.1381 0.55427,-0.3069 0.2819,-0.1689 0.58735,-0.3381 0.67879,-0.3762 0.0915,-0.038 0.34365,-0.174 0.5604,-0.3019 0.21676,-0.128 0.46714,-0.2585 0.55639,-0.29 0.0892,-0.031 0.4005,-0.1853 0.69166,-0.3416 0.29116,-0.1564 0.55394,-0.2844 0.58396,-0.2844 0.03,0 0.34272,-0.146 0.6949,-0.3245 0.35219,-0.1785 0.67394,-0.3245 0.71499,-0.3245 0.0411,0 0.43126,0.1961 0.71562,0.5394 l 0.5724,0.5806 -0.71127,0.3404 c -0.35344,0.172 -0.80738,0.3839 -1.00878,0.4706 -0.20141,0.087 -0.46221,0.2085 -0.57957,0.2708 -0.11736,0.062 -0.60983,0.3025 -1.09435,0.5341 -0.48451,0.2316 -0.97482,0.4698 -1.08958,0.5292 -1.56309,0.8093 -3.47409,1.7747 -4.08304,2.0625 -0.94489,0.4466 -2.13053,0.8448 -2.84858,0.9567 -0.68216,0.1061 -1.9238,0.074 -2.59646,-0.066 -0.64465,-0.1351 -1.89064,-0.486 -2.52691,-0.7116 -0.29326,-0.104 -0.78358,-0.2775 -1.08958,-0.3856 -0.30602,-0.108 -0.76503,-0.2836 -1.02004,-0.39 -0.25501,-0.1065 -0.55754,-0.2211 -0.6723,-0.2546 -0.11475,-0.034 -0.36512,-0.1269 -0.55639,-0.2072 -0.81257,-0.3411 -1.49667,-0.5845 -3.66286,-1.3031 -1.27843,-0.4241 -2.19696,-0.7762 -2.48054,-0.9508 -0.051,-0.031 -0.20203,-0.092 -0.33561,-0.1355 -0.13358,-0.043 -0.25507,-0.098 -0.26996,-0.1222 -0.015,-0.024 -0.14557,-0.1075 -0.29034,-0.1854 -0.60731,-0.3266 -0.80642,-0.449 -1.12308,-0.691 -0.61759,-0.4717 -1.44449,-1.3527 -1.67854,-1.7882 -0.33923,-0.6311 -0.55811,-1.2088 -0.65837,-1.7372 -0.0889,-0.4689 -0.0919,-1.5876 -0.006,-2.108 0.0339,-0.2039 0.0577,-0.3755 0.053,-0.3811 -0.005,-0.01 -0.17059,0.053 -0.36871,0.1297 -0.44279,0.1719 -1.09628,0.3431 -1.55906,0.4082 -0.98469,0.1385 -2.59483,0.098 -3.47739,-0.087 -1.2677,-0.2659 -2.59342,-0.8349 -3.06374,-1.3148 -0.0912,-0.093 -0.18113,-0.1692 -0.19976,-0.1692 -0.0324,0 -0.39708,0.27 -0.44573,0.33 -0.0126,0.016 -0.11707,0.076 -0.23182,0.1335 -0.11476,0.058 -0.26081,0.1411 -0.32457,0.1853 -0.0637,0.045 -0.21236,0.1226 -0.33027,0.1743 l -0.21438,0.094 -0.75525,-0.7562 -0.84106,-0.7633 0.24402,-0.018 z m 15.58108,8.5473 c 0.0162,-0.025 0.21324,-0.2502 0.49332,-0.537 l 0.54354,-0.5045 -0.52161,0.5093 c -0.48449,0.4728 -0.53351,0.5602 -0.51525,0.5322 z m -12.58266,-38.2572 c 0.184,-0.1769 0.20539,-0.1872 0.1777,-0.085 -0.0173,0.064 -0.0651,0.3091 -0.10618,0.5453 -0.0411,0.2362 -0.0835,0.4206 -0.0942,0.4098 -0.0107,-0.011 -0.0571,-0.1656 -0.10303,-0.3441 l -0.0835,-0.3247 z m 1.92386,28.9213 c 0.70402,0.277 1.56738,0.4164 2.30667,0.3725 0.55815,-0.034 0.63805,-0.046 1.11277,-0.1726 0.64096,-0.1716 1.29374,-0.4239 1.74989,-0.6764 0.24886,-0.1378 0.49961,-0.2625 0.55722,-0.2771 0.0576,-0.014 0.11508,-0.044 0.12768,-0.064 0.0408,-0.065 0.81577,-0.5658 0.83987,-0.5418 0.0129,0.013 -0.039,0.1455 -0.11514,0.2947 -0.24396,0.4778 -1.05909,1.1644 -1.70608,1.437 -0.465,0.1959 -1.65116,0.4339 -2.16211,0.4339 l -0.23832,0 0.23005,-0.2434 0.23006,-0.2434 -0.26342,0.2503 -0.26344,0.2503 -0.46485,-0.053 c -0.48839,-0.055 -1.32518,-0.269 -1.58859,-0.4051 -0.1618,-0.084 -0.64204,-0.4263 -0.64204,-0.458 0,-0.01 0.1304,0.034 0.28978,0.096 z m 4.10502,-34.6879 c 0.90698,0.074 2.10205,0.6827 2.87219,1.4621 0.53791,0.5444 0.98961,1.3153 1.24965,2.1329 0.24078,0.7569 0.24925,2.2276 0.0173,3.0136 l -0.0889,0.3015 -0.004,-0.4636 c -0.009,-1.0236 -0.27779,-2.0719 -0.78223,-3.0518 -0.19455,-0.3779 -0.42249,-0.7639 -0.50656,-0.8578 -0.084,-0.094 -0.2098,-0.2524 -0.27943,-0.3522 -0.2516,-0.3608 -1.47183,-1.469 -1.69246,-1.537 -0.0568,-0.017 -0.19718,-0.099 -0.31193,-0.1821 -0.11476,-0.083 -0.3547,-0.2284 -0.53321,-0.3237 l -0.32456,-0.1734 0.3842,0.031 z m 7.33857,34.6152 c 0.0144,0 0.25462,0.029 0.53387,0.066 0.79157,0.1044 1.73903,0.1348 2.36103,0.076 0.64209,-0.061 1.55451,-0.2099 1.92415,-0.3138 0.48711,-0.137 1.60144,-0.6421 1.75474,-0.7954 0.0523,-0.052 0.205,-0.1706 0.33952,-0.2631 0.29514,-0.2031 0.89788,-0.9053 0.97254,-1.1333 0.0296,-0.09 0.0802,-0.2056 0.11243,-0.2567 0.0763,-0.1205 0.27875,-0.8036 0.34355,-1.1591 0.0885,-0.4854 0.10944,-1.6412 0.053,-2.9272 -0.03,-0.6851 -0.0662,-1.3605 -0.0805,-1.5007 l -0.0259,-0.3306 0.20785,0.2198 0.19413,0.2267 -0.20458,-0.2181 -0.20456,-0.218 0.0313,-1.6365 c 0.0172,-0.9001 0.061,-2.2939 0.0973,-3.0971 0.0363,-0.8033 0.0799,-1.8674 0.0969,-2.3646 l 0.0795,-1.0886 0.37551,-0.2561 0.42406,-0.4404 -0.39287,0.4755 c -0.34088,0.3295 -0.46563,0.3347 -0.44731,0.2431 0.0129,-0.064 0.036,-0.335 0.0516,-0.6027 0.0477,-0.818 0.25226,-2.9391 0.37552,-3.8947 0.0642,-0.4972 0.14606,-1.1754 0.18201,-1.5068 0.036,-0.3316 0.1085,-0.8219 0.16123,-1.0896 0.13819,-0.7019 0.32908,-1.5445 0.36418,-1.6075 0.0165,-0.03 0.0316,0.5231 0.0334,1.2287 0.002,0.7055 0.033,3.1503 0.0696,5.4325 0.0746,4.6656 0.0739,7.318 -0.003,11.8696 -0.0558,3.2871 -0.0455,3.5788 0.13752,3.9377 0.12876,0.2524 0.56069,0.5983 0.94391,0.7557 0.49466,0.2034 1.92968,0.4557 3.0995,0.5449 1.43828,0.1097 3.22436,0.016 4.01448,-0.2108 0.0445,-0.013 -0.0747,0.051 -0.26485,0.1423 -0.43897,0.2101 -0.84416,0.3209 -1.60156,0.4379 -1.21765,0.1882 -2.44437,0.2368 -3.54695,0.1406 -0.70274,-0.061 -1.98181,-0.2607 -2.22754,-0.3474 -0.10732,-0.038 -0.20547,-0.069 -0.21814,-0.069 -0.056,0 0.10414,0.144 0.23662,0.2129 0.82291,0.4276 1.22027,0.5811 1.72222,0.6652 0.15301,0.026 0.51814,0.087 0.8114,0.1367 1.55034,0.2616 3.58445,0.2373 5.26246,-0.063 0.20401,-0.037 0.50438,-0.09 0.6675,-0.1187 1.05345,-0.1852 2.01213,-0.8375 2.54337,-1.7303 0.48677,-0.8183 0.66617,-1.2786 1.0595,-2.7191 0.27406,-1.0037 0.50959,-2.8109 0.55799,-4.2809 l 0.0523,-1.0171 0.81982,0.8291 0.80952,0.7502 -0.0948,0.995 c -0.11484,1.2051 -0.1598,1.5269 -0.50884,2.9786 -0.10423,0.4335 -0.25088,0.9638 -0.3259,1.1785 -0.13861,0.3965 -0.13207,0.4648 0.0448,0.4669 0.11813,0 0.683,0.4037 0.98179,0.6993 0.24213,0.2396 0.78821,1.0295 0.78821,1.1402 0,0.014 -0.0964,-0.03 -0.21425,-0.096 -0.53302,-0.2979 -1.31327,-0.3877 -2.08007,-0.2394 -0.29647,0.057 -0.33739,0.08 -0.48449,0.2649 -0.80727,1.0163 -2.11024,1.7559 -3.85328,2.1872 -1.34485,0.3328 -1.11939,0.3677 -1.77644,-0.2749 l -0.56316,-0.5509 0.63826,0.5437 c 0.28963,0.2965 0.64231,0.503 0.61764,0.5182 -0.0247,0.015 -0.5613,0.1074 -0.89003,0.1514 -0.4524,0.061 -0.94711,0.081 -2.03503,0.082 -1.90635,0 -2.65184,-0.086 -4.63652,-0.5526 -0.45302,-0.1066 -0.88725,-0.251 -1.15447,-0.3839 -0.25709,-0.1278 -0.32542,-0.1139 -0.59244,0.1206 -0.0873,0.077 -0.25156,0.1753 -0.36505,0.2192 -0.11348,0.044 -0.24804,0.1164 -0.29904,0.1609 -0.13035,0.1138 -0.85863,0.4549 -1.04792,0.4908 -0.0867,0.017 -0.17844,0.045 -0.20395,0.064 -0.11589,0.084 -1.20594,0.4005 -1.7387,0.5046 -0.43933,0.086 -1.94279,0.2338 -2.60008,0.256 l -0.62955,0.021 -0.73822,-0.744 -0.85469,-0.7634 0.3251,0.047 c 1.40368,0.1867 2.64008,0.1566 3.88219,-0.094 0.18439,-0.038 0.34784,-0.088 0.36323,-0.1131 0.0165,-0.027 -0.0162,-0.035 -0.0802,-0.022 -0.53209,0.1185 -2.20303,0.1569 -2.93649,0.067 -0.49815,-0.061 -1.18012,-0.2324 -1.43733,-0.3619 -0.102,-0.051 -0.1737,-0.094 -0.15932,-0.095 z m 8.57464,0.068 c 0.30601,-0.3053 0.55639,-0.5654 0.55639,-0.5781 0,-0.013 -0.25038,0.2265 -0.55639,0.5317 -0.30601,0.3052 -0.55638,0.5654 -0.55638,0.5782 0,0.013 0.25037,-0.2265 0.55638,-0.5318 z m 0.45708,-7.7954 c -0.0258,0.024 0.0838,0.034 -0.12093,-0.1582 l -0.22023,-0.2067 0.25132,0.1928 c 0.11369,0.1211 0.0898,0.1721 0.0898,0.1721 z m -3.09764,-31.0129 c 0.52221,-0.128 1.06986,-0.082 1.59121,0.1351 0.22613,0.094 0.48308,0.2197 0.571,0.2795 0.28959,0.1967 0.83431,0.7503 1.03505,1.0516 0.36523,0.5484 0.60697,0.9689 0.67052,1.1663 0.0348,0.108 0.12801,0.3633 0.20728,0.5673 0.25283,0.6506 0.41019,1.3415 0.48709,2.1386 0.0948,0.9832 0.0907,1.5075 -0.0189,2.4051 -0.12796,1.0477 -0.16658,1.1447 -0.20313,0.51 -0.14257,-2.4748 -0.19426,-2.9968 -0.4006,-4.0458 -0.0739,-0.3759 -0.18506,-0.8108 -0.24693,-0.9664 -0.3025,-0.7609 -0.76522,-1.3183 -1.50105,-1.8078 -0.2104,-0.14 -0.85495,-0.4924 -1.43231,-0.7832 -0.57736,-0.2906 -1.0589,-0.5377 -1.0701,-0.5488 -0.0111,-0.011 0.1287,-0.057 0.31087,-0.1015 z m 7.13142,50.7474 c 0.0715,-0.1658 0.17238,-0.3953 0.2242,-0.51 0.12627,-0.2797 0.32878,-0.8301 0.35824,-0.9737 0.0132,-0.064 0.0749,-0.335 0.13737,-0.6028 0.0625,-0.2677 0.14056,-0.6433 0.17353,-0.8346 0.0775,-0.4496 0.0772,-1.7784 0,-2.2254 -0.0979,-0.5633 -0.36955,-1.5962 -0.49333,-1.8761 -0.13842,-0.313 -0.14306,-0.364 -0.0192,-0.2104 0.13969,0.1732 0.52456,0.949 0.66617,1.343 0.16698,0.4646 0.30758,1.4925 0.31095,2.2734 0.002,0.6951 -0.10026,1.5744 -0.24077,2.0505 -0.11386,0.3857 -0.45684,1.0733 -0.68443,1.3719 -0.18116,0.2377 -0.56564,0.6033 -0.56354,0.5357 0,-0.022 0.0598,-0.1757 0.13126,-0.3415 z m 5.4649,-2.411 c 0.027,0 0.24316,-0.1304 0.48044,-0.2898 0.2373,-0.1594 0.51098,-0.3351 0.60817,-0.3905 0.0972,-0.055 0.30609,-0.1979 0.46422,-0.3167 0.15812,-0.1188 0.34054,-0.2436 0.40535,-0.2773 0.0649,-0.034 0.28478,-0.1778 0.48879,-0.3205 0.20401,-0.1428 0.45438,-0.2995 0.55638,-0.3483 0.10201,-0.049 0.30023,-0.1645 0.44048,-0.257 0.48365,-0.3188 1.85066,-0.9626 2.2719,-1.07 0.14025,-0.036 0.46365,-0.1186 0.71866,-0.1842 0.42566,-0.1094 1.66788,-0.2247 1.59871,-0.1484 -0.0133,0.014 -0.28448,0.1297 -0.60275,0.2557 -0.31827,0.1259 -0.81861,0.3437 -1.11187,0.4838 -0.29327,0.1401 -0.61116,0.2798 -0.70642,0.3105 -0.0953,0.03 -0.18648,0.078 -0.20265,0.1033 -0.0165,0.026 -0.15414,-0.071 -0.31359,-0.2236 l -0.28419,-0.2713 0.31404,0.2518 c 0.15717,0.1259 0.32544,0.2247 0.31417,0.2337 -0.0547,0.044 -0.96181,0.4651 -0.99947,0.4651 -0.0237,0 -0.33595,0.1439 -0.69374,0.3199 -0.35781,0.1759 -0.97394,0.4702 -1.3692,0.6541 -0.39528,0.1838 -0.93775,0.4395 -1.20551,0.5683 -0.54212,0.2608 -1.16551,0.5068 -1.19908,0.4732 -0.0121,-0.012 0,-0.022 0.0272,-0.022 z m 3.59847,-28.9747 c 0.0707,0.062 0.42164,1.1745 0.52558,1.6654 0.0621,0.2934 0.16519,0.7813 0.22913,1.0845 0.0639,0.3032 0.16439,0.8561 0.22325,1.2286 l 0.10703,0.6775 -0.19093,0.2086 -0.19095,0.2087 0.17987,-0.2391 0.18956,-0.2001 0.0617,0.7269 c 0.1253,1.4773 0.16887,1.9611 0.19818,1.9611 0.0557,0 0.17884,-1.6907 0.18076,-2.4812 l 0.002,-0.6055 0.66208,-0.6911 0.67664,-0.6426 -0.0134,0.6648 c -0.0155,0.3442 -0.0491,1.3457 -0.0749,2.2255 -0.0513,1.7545 -0.11848,3.2428 -0.18515,4.1033 -0.0237,0.306 -0.0435,0.5875 -0.0442,0.6255 0,0.038 -0.37345,-0.3029 -0.82861,-0.7575 l -0.82755,-0.8266 -0.0287,-1.2594 c -0.0275,-1.2082 -0.0972,-2.237 -0.23929,-3.5312 -0.0364,-0.3316 -0.0792,-0.7697 -0.0951,-0.9738 -0.0477,-0.6112 -0.41767,-2.8393 -0.51788,-3.1188 -0.0158,-0.044 -0.0151,-0.068 0.002,-0.053 z m 0.8232,-3.1797 c 0.0815,0.153 0.20573,0.4347 0.27593,0.6259 0.0702,0.1913 0.24454,0.6453 0.38742,1.0089 0.14287,0.3636 0.25954,0.6871 0.25924,0.7187 -0.002,0.1 0.57009,1.7962 0.60467,1.7962 0.0181,0 0.0478,-0.1513 0.0659,-0.3361 0.0451,-0.4611 0.3364,-1.6272 0.44302,-1.7735 0.0186,-0.026 0.0789,-0.1784 0.13386,-0.3398 0.0942,-0.2761 0.41502,-0.9489 0.41996,-0.8807 0.002,0.018 -0.0377,0.2363 -0.0866,0.4868 -0.14268,0.731 -0.23024,1.3829 -0.27913,2.0783 -0.12512,1.7796 -0.14547,2.0642 -0.16919,2.3684 l -0.0256,0.3284 -0.66906,0.6679 -0.66908,0.6679 0,-0.7884 c 0,-2.2282 -0.3951,-5.5558 -0.8091,-6.8143 -0.0168,-0.051 0.0362,0.033 0.1178,0.1854 z m 1.51122,-10.1101 0.63689,-0.5792 0.0729,0.2383 c 0.0295,0.1124 0.14343,0.4859 0.2533,0.8302 0.22232,0.6967 0.35045,1.2221 0.47487,1.9473 0.0713,0.4157 0.10692,0.5172 0.24374,0.6954 0.15073,0.1964 0.39044,0.651 0.70267,1.3328 0.16247,0.3548 0.55022,1.6405 0.70968,2.3533 0.15208,0.68 0.38798,2.8287 0.48864,4.4512 0.2093,3.3731 0.41564,5.12 0.74752,6.3288 0.0525,0.1912 0.16402,0.6086 0.24779,0.9273 0.32798,1.2479 1.21084,3.8353 1.56625,4.5901 0.16324,0.3469 0.26744,0.5867 0.36252,0.8346 0.0875,0.2281 0.32649,0.7928 0.46401,1.0961 0.0479,0.1056 0.10112,0.2516 0.11837,0.3246 0.0173,0.073 0.15129,0.4977 0.2979,0.944 0.26543,0.8081 0.31346,0.9826 0.44025,1.5997 0.0367,0.1784 0.13964,0.6791 0.22884,1.1127 0.25264,1.2281 0.31033,1.7453 0.33712,3.0222 0.0262,1.2488 -0.0114,1.7724 -0.17937,2.4953 -0.10455,0.4499 -0.48632,1.4695 -0.6543,1.7473 -0.3497,0.5783 -0.50164,0.798 -0.79473,1.1494 -0.18032,0.2162 -0.45304,0.5171 -0.60604,0.6686 -0.49309,0.4886 -1.43149,1.2299 -1.97197,1.558 -0.14704,0.089 -0.35832,0.2219 -0.46951,0.2949 -0.11118,0.073 -0.25431,0.1664 -0.31807,0.2077 -0.0637,0.041 -0.25153,0.1452 -0.41728,0.2307 -0.16576,0.086 -0.33267,0.1821 -0.37093,0.2145 -0.0383,0.033 -0.40981,0.2328 -0.82565,0.4451 l -0.75613,0.3863 -0.57787,-0.5778 -0.69455,-0.5573 0.68564,-0.3257 c 0.31294,-0.1678 0.62113,-0.3214 0.68487,-0.3413 0.0638,-0.019 0.34543,-0.1641 0.62593,-0.3206 0.28051,-0.1564 0.58726,-0.3257 0.68166,-0.3762 0.34956,-0.1868 1.07646,-0.6469 1.34757,-0.8529 0.15381,-0.1169 0.3577,-0.2647 0.45308,-0.3283 0.43217,-0.2889 1.41069,-1.3385 1.66664,-1.7876 0.43355,-0.761 0.52876,-0.9458 0.58381,-1.1334 0.0336,-0.1149 0.11466,-0.3652 0.18002,-0.5563 0.42983,-1.2573 0.43968,-2.727 0.0308,-4.5904 -0.22197,-1.0113 -0.34106,-1.4586 -0.53717,-2.0169 -0.11646,-0.3315 -0.2434,-0.7231 -0.28213,-0.8704 -0.0387,-0.1473 -0.1753,-0.5228 -0.30353,-0.8346 -0.12823,-0.3117 -0.28321,-0.7163 -0.34441,-0.899 -0.0612,-0.1827 -0.19861,-0.5261 -0.30537,-0.7632 -0.10676,-0.2371 -0.27184,-0.6406 -0.36685,-0.8966 -0.095,-0.2559 -0.26713,-0.6845 -0.3825,-0.9522 -0.11537,-0.2678 -0.28742,-0.6955 -0.38233,-0.9504 -0.0949,-0.2551 -0.24226,-0.6469 -0.32744,-0.8708 -0.0852,-0.2239 -0.16888,-0.4846 -0.18601,-0.5796 -0.0171,-0.095 -0.0563,-0.2217 -0.0869,-0.2818 l -0.0558,-0.1093 -0.0534,0.1325 c -0.12412,0.3076 -0.38813,1.374 -0.45174,1.8248 -0.0378,0.2677 -0.0992,0.6642 -0.13653,0.8809 -0.15341,0.8915 -0.40789,2.9869 -0.46175,3.802 -0.0346,0.5237 -0.16317,1.9045 -0.18349,1.9704 -0.0598,0.1947 -0.16551,-1.6119 -0.16563,-2.833 -1.3e-4,-1.4126 0.0538,-2.5669 0.25548,-5.4663 0.0372,-0.5355 0.0888,-1.4119 0.11455,-1.9473 0.0257,-0.5355 0.0778,-1.5266 0.11568,-2.2024 0.13424,-2.3954 0.119,-4.5847 -0.0439,-6.3057 -0.15702,-1.6587 -0.21366,-1.9727 -0.61062,-3.3846 -0.21977,-0.7817 -0.25434,-0.8744 -0.59706,-1.5996 -0.10845,-0.2295 -0.20698,-0.4487 -0.21893,-0.4868 -0.0314,-0.1005 -0.0718,0.2626 -0.15184,1.3677 -0.0388,0.5356 -0.0828,1.0335 -0.0978,1.1066 l -0.0272,0.1329 -0.28916,-0.2866 -0.28916,-0.2865 -0.0304,-1.2141 c -0.0338,-1.3467 -0.11074,-2.2181 -0.28509,-3.2288 -0.064,-0.3711 -0.12556,-0.7282 -0.13678,-0.794 -0.0175,-0.1021 0.0576,-0.3069 0.60845,-0.8567 z m 0.13076,6.426 0.30419,0.3033 -0.071,0.4617 c -0.0391,0.254 -0.10319,0.6078 -0.14254,0.7863 -0.0393,0.1785 -0.0945,0.4393 -0.1225,0.5796 -0.028,0.1402 -0.0657,0.2717 -0.0838,0.292 -0.0404,0.046 -0.0834,-0.4961 -0.11691,-1.4744 -0.0141,-0.4079 -0.0358,-0.8565 -0.0486,-0.9968 l -0.0231,-0.255 z"
/>
<path
style="fill:#5c503f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 64.27427,411.93687 0.53033,1.9445 5.83364,-1.1048 -0.48614,-1.6352 z"
/>
<path
d="m 120.40933,398.93097 0.30936,1.9666 4.08797,-0.6629 -0.92808,-1.3921 z"
style="fill:#5c503f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
/>
<path
style="fill:#b9a180;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.15455109px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 70.09376,410.73507 0.12443,0.4987 -5.80685,0.7749 0.15721,0.6514 c 1.41068,0.2356 3.3835,0.1796 5.15116,-0.062 l 50.78108,-12.4235 3.10587,-0.1553 -0.62117,-1.0871 -2.57709,-0.01 -0.19549,-0.3467 4.17023,0.1996 0.77646,1.2423 0.15529,0.7764 -4.66618,0.267 c 0,0 -50.09002,12.6556 -50.8665,12.6556 -0.77646,0 -3.32366,-0.1885 -4.25542,-0.1885 -0.93178,0 -1.70824,-0.6212 -1.70824,-0.6212 l 0.31059,-1.2422 z"
/>
<path
style="fill:#ffa022;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.15455109px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 125.18231,400.37457 0.28788,13.0004 -6.67764,0.6212 -49.22813,10.8706 -2.95058,0.1553 -1.39764,-0.7765 -1.33075,-11.3125 2.34425,0.5546 3.49001,0.1979 50.93637,-12.734 2.95058,-0.1554 z"
/>
<g
transform="matrix(0.30583562,-0.07396385,0.07396385,0.30583562,-67.44226,247.45187)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.00049973px;line-height:100%;font-family:Magnum;-inkscape-font-specification:'Magnum, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#272822;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
>
<path
d="m 316.13409,646.12995 q 0,1.20002 -1.20001,1.20002 l -10.56013,0 q -1.20002,0 -1.20002,-1.20002 l 0,-25.44032 q 0,-1.20001 1.20002,-1.20001 l 4.60005,0 q 1.20002,0 1.20002,1.20001 l 0,18.84024 q 0,0.80001 0.80001,0.80001 l 3.96005,0 q 1.20001,0 1.20001,1.20002 l 0,4.60005 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.00049973px;line-height:100%;font-family:Magnum;-inkscape-font-specification:'Magnum, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#272822;fill-opacity:1"
/>
<path
d="m 325.01795,646.12995 q 0,1.20002 -1.20001,1.20002 l -4.60006,0 q -1.20001,0 -1.20001,-1.20002 l 0,-25.44032 q 0,-1.20001 1.20001,-1.20001 l 4.60006,0 q 1.20001,0 1.20001,1.20001 l 0,25.44032 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.00049973px;line-height:100%;font-family:Magnum;-inkscape-font-specification:'Magnum, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#272822;fill-opacity:1"
/>
<path
d="m 343.84444,642.1299 q 0,2.16003 -1.52002,3.68005 -1.52002,1.52002 -3.68005,1.52002 l -10.52013,0 q -1.20001,0 -1.20001,-1.20002 l 0,-25.44032 q 0,-1.20001 1.20001,-1.20001 l 10.52013,0 q 2.16003,0 3.68005,1.56002 1.52002,1.52002 1.52002,3.64004 l 0,5.72008 q 0,1.24001 -0.88001,2.12002 -0.88001,0.88001 -2.12003,0.88001 1.24002,0 2.12003,0.88001 0.88001,0.88002 0.88001,2.12003 l 0,5.72007 z m -7.00009,-11.80014 0,-3.04004 q 0,-0.80001 -0.80001,-0.80001 l -1.32001,0 q -0.80001,0 -0.80001,0.80001 l 0,3.04004 q 0,0.80001 0.80001,0.80001 l 1.32001,0 q 0.80001,0 0.80001,-0.80001 z m 0,9.20011 0,-3.04004 q 0,-0.80001 -0.80001,-0.80001 l -1.32001,0 q -0.80001,0 -0.80001,0.80001 l 0,3.04004 q 0,0.80001 0.80001,0.80001 l 1.32001,0 q 0.80001,0 0.80001,-0.80001 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.00049973px;line-height:100%;font-family:Magnum;-inkscape-font-specification:'Magnum, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#272822;fill-opacity:1"
/>
<path
d="m 362.6728,642.1299 q 0,2.16003 -1.52002,3.68005 -1.52002,1.52002 -3.68005,1.52002 l -10.52013,0 q -1.20001,0 -1.20001,-1.20002 l 0,-25.44032 q 0,-1.20001 1.20001,-1.20001 l 10.52013,0 q 2.16003,0 3.68005,1.56002 1.52002,1.52002 1.52002,3.64004 l 0,5.72008 q 0,1.24001 -0.88001,2.12002 -0.88002,0.88001 -2.12003,0.88001 1.24001,0 2.12003,0.88001 0.88001,0.88002 0.88001,2.12003 l 0,5.72007 z m -7.00009,-11.80014 0,-3.04004 q 0,-0.80001 -0.80001,-0.80001 l -1.32002,0 q -0.80001,0 -0.80001,0.80001 l 0,3.04004 q 0,0.80001 0.80001,0.80001 l 1.32002,0 q 0.80001,0 0.80001,-0.80001 z m 0,9.20011 0,-3.04004 q 0,-0.80001 -0.80001,-0.80001 l -1.32002,0 q -0.80001,0 -0.80001,0.80001 l 0,3.04004 q 0,0.80001 0.80001,0.80001 l 1.32002,0 q 0.80001,0 0.80001,-0.80001 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.00049973px;line-height:100%;font-family:Magnum;-inkscape-font-specification:'Magnum, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#272822;fill-opacity:1"
/>
<path
d="m 371.58103,646.12995 q 0,1.20002 -1.20001,1.20002 l -4.60006,0 q -1.20001,0 -1.20001,-1.20002 l 0,-25.44032 q 0,-1.20001 1.20001,-1.20001 l 4.60006,0 q 1.20001,0 1.20001,1.20001 l 0,25.44032 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.00049973px;line-height:100%;font-family:Magnum;-inkscape-font-specification:'Magnum, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#272822;fill-opacity:1"
/>
<path
d="m 390.12752,625.28969 q 0,1.20002 -1.20002,1.20002 l -2.84003,0 q -0.80001,0 -0.80001,0.80001 l 0,18.84023 q 0,1.20002 -1.20002,1.20002 l -4.60006,0 q -1.20001,0 -1.20001,-1.20002 l 0,-18.80023 q 0,-0.80001 -0.80001,-0.80001 l -2.80004,-0.04 q -1.20001,0 -1.20001,-1.20002 l 0,-4.60006 q 0,-1.20001 1.20001,-1.20001 l 14.24018,0 q 1.20002,0 1.20002,1.20001 l 0,4.60006 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.00049973px;line-height:100%;font-family:Magnum;-inkscape-font-specification:'Magnum, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#272822;fill-opacity:1"
/>
<path
d="m 404.96332,646.12995 q 0,1.20002 -1.20001,1.20002 l -6.56008,0 q -2.16003,0 -3.68005,-1.52002 -1.52002,-1.52002 -1.52002,-3.68005 l 0,-17.44022 q 0,-2.12002 1.52002,-3.64004 1.52002,-1.56002 3.68005,-1.56002 l 6.56008,0 q 1.20001,0 1.20001,1.20001 l 0,4.60006 q 0,1.20002 -1.20001,1.20002 l -3.96005,0 q -0.80001,0 -0.80001,0.80001 l 0,12.24015 q 0,0.80001 0.80001,0.80001 l 3.96005,0 q 1.20001,0 1.20001,1.20002 l 0,4.60005 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.00049973px;line-height:100%;font-family:Magnum;-inkscape-font-specification:'Magnum, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#272822;fill-opacity:1"
/>
<path
d="m 423.76731,642.1299 q 0,2.16003 -1.52002,3.68005 -1.52001,1.52002 -3.68004,1.52002 l -6.52008,0 q -2.16003,0 -3.68005,-1.52002 -1.52002,-1.52002 -1.52002,-3.68005 l 0,-17.44022 q 0,-2.12002 1.52002,-3.64004 1.52002,-1.56002 3.68005,-1.56002 l 6.52008,0 q 2.16003,0 3.68004,1.56002 1.52002,1.52002 1.52002,3.64004 l 0,17.44022 z m -7.00008,-2.60003 0,-12.24015 q 0,-0.80001 -0.80001,-0.80001 l -1.32002,0 q -0.80001,0 -0.80001,0.80001 l 0,12.24015 q 0,0.80001 0.80001,0.80001 l 1.32002,0 q 0.80001,0 0.80001,-0.80001 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.00049973px;line-height:100%;font-family:Magnum;-inkscape-font-specification:'Magnum, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#272822;fill-opacity:1"
/>
<path
d="m 432.67554,646.12995 q 0,1.20002 -1.20001,1.20002 l -4.60006,0 q -1.20001,0 -1.20001,-1.20002 l 0,-25.44032 q 0,-1.20001 1.20001,-1.20001 l 4.60006,0 q 1.20001,0 1.20001,1.20001 l 0,25.44032 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.00049973px;line-height:100%;font-family:Magnum;-inkscape-font-specification:'Magnum, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#272822;fill-opacity:1"
/>
<path
d="m 434.58181,646.12995 0,-21.44027 q 0,-2.12002 1.52002,-3.64004 1.52002,-1.56002 3.68005,-1.56002 l 6.52008,0 q 2.16003,0 3.68005,1.56002 1.52001,1.52002 1.52001,3.64004 l 0,21.44027 q 0,1.20002 -1.20001,1.20002 l -4.60006,0 q -1.20001,0 -1.20001,-1.20002 l 0,-18.84023 q 0,-0.80001 -0.80001,-0.80001 l -1.32002,0 q -0.80001,0 -0.80001,0.80001 l 0,18.84023 q 0,1.20002 -1.20001,1.20002 l -4.60006,0 q -1.20002,0 -1.20002,-1.20002 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.00049973px;line-height:100%;font-family:Magnum;-inkscape-font-specification:'Magnum, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#272822;fill-opacity:1"
/>
</g>
</g>
</svg>
</a>
<div class="eyebrow">Bitcoin full node and query server</div>
<h1>Interface Performance</h1>
<nav class="menu site">
<a href="index.html">Home</a>
<a href="interfaces.html">Server interfaces</a>
<a href="interface-performance.html" class="here">Interface performance</a>
<a href="node-performance.html">Node performance</a>
<a href="architecture/index.html">Node architecture</a>
<a href="database/index.html">Database architecture</a>
<a href="team.html">Team</a>
</nav>
<p class="lede">
Query performance measurements of <strong>libbitcoin-server</strong> across machines and
configurations, some with Bitcoin Core, Fulcrum, or Frigate comparisons.
</p>
</header>
<nav class="menu">
<a href="#efficiency">Efficiency</a>
<a href="#throughput">Throughput</a>
<a href="#native-rest-interface">Native REST Interface</a>
<a href="#electrum-interface">Electrum Interface</a>
<a href="#sparrow-interface">Sparrow Interface</a>
<a href="#bitcoin-p2p-interface">Bitcoin P2P Interface</a>
<a href="#bitcoind-json-rpc-interface">Bitcoind JSON-RPC Interface</a>
<a href="#bitcoind-rest-interface">Bitcoind REST Interface</a>
<a href="#bitcoind-zmq-interface">Bitcoind ZMQ Interface</a>
<a href="#btcd-interface">BTCD Interface</a>
<a href="#esplora-interface">Esplora Interface</a>
<a href="#methodology">Methodology</a>
</nav>
<section>
<h2 id="efficiency">Efficiency</h2>
<div class="gallery">
<figure class="shot" data-full="performance/server-efficiency.png" tabindex="0">
<h3>Index efficiency: multiple of other product (log scale)</h3>
<img src="performance/server-efficiency.png" alt="Index efficiency: multiple of other product (log scale)" loading="lazy">
</figure>
</div>
<p class="lede after">
Index efficiency is Libbitcoin's query rate relative to the other server, divided by the size
of its index relative to the other's, both at block 950,000 (index sizes are on the
<a href="node-performance.html#store-size">node performance</a> page). Each value is a
multiple: 2.5× means Libbitcoin delivers 2.5 times the query rate per byte of index, and
below 1× it delivers less. Address history rates are entries per second, silent payments
rates are blocks scanned per second, and other rates are calls per second.
</p>
</section>
<section>
<h2 id="throughput">Throughput</h2>
<div class="gallery">
<figure class="shot" data-full="performance/server-throughput-p2ps-linear.png" tabindex="0">
<h3>P2P/S block throughput (linear scale)</h3>
<img src="performance/server-throughput-p2ps-linear.png" alt="P2P/S block throughput (linear scale)" loading="lazy">
</figure>
<figure class="shot" data-full="performance/server-throughput-p2p.png" tabindex="0">
<h3>P2P/S block/tx throughput (log scale)</h3>
<img src="performance/server-throughput-p2p.png" alt="P2P/S block/tx throughput (log scale)" loading="lazy">
</figure>
<figure class="shot" data-full="performance/server-throughput-rpc.png" tabindex="0">
<h3>Bitcoind JSON-RPC block/tx throughput (log scale)</h3>
<img src="performance/server-throughput-rpc.png" alt="Bitcoind JSON-RPC block/tx throughput (log scale)" loading="lazy">
</figure>
<figure class="shot" data-full="performance/server-throughput-rest.png" tabindex="0">
<h3>Bitcoind REST block/tx throughput (log scale)</h3>
<img src="performance/server-throughput-rest.png" alt="Bitcoind REST block/tx throughput (log scale)" loading="lazy">
</figure>
<figure class="shot" data-full="performance/server-throughput-rest-hex.png" tabindex="0">
<h3>Bitcoind REST hex block/tx throughput (log scale)</h3>
<img src="performance/server-throughput-rest-hex.png" alt="Bitcoind REST hex block/tx throughput (log scale)" loading="lazy">
</figure>
</div>
<p class="lede after">
The other charts measure one connection at a time. Throughput is what a server delivers under
many: each connection count requests its own set of blocks or transactions back to back for
20 seconds, repeating the set if it runs out, from 16 client processes, with both servers
configured to accept the full connection count. Each set is requested twice in succession and
the second, warm pass is shown. Block series purge the cache and restart the server before
every connection count; transaction series do so once per series. On the linear block chart,
the dashed line marks the block rate that 10 Gbps of network can carry, so a
block curve above the line means the network, not the server, would be the limit. Bitcoin Core serves only
unconfirmed transactions over P2P, so P2P transactions are shown for Libbitcoin alone. Bitcoin
Core serves P2P blocks from a single thread and levels off at about 1,100 blocks per second
from two connections, with latency growing in proportion to the load; Libbitcoin serves them
concurrently and reaches about 5,900 per second by 64 connections. Over encrypted (BIP324)
P2P, Libbitcoin reaches about 4,600 blocks per second and Bitcoin Core about 630, while
Libbitcoin transactions are faster than unencrypted, since BIP324 drops the per-message
double SHA-256 checksum and Libbitcoin's ChaCha20 is hardware accelerated.
</p>
<p class="lede after">
Bitcoin Core does not serve HTTPS or websockets, so HTTPS series (dashed) in the RPC and REST
charts, and the websocket and native charts, show Libbitcoin alone. HTTPS uses 256 listening
ports, one per connection. The HTTPS and secure websocket curves level off where the test
client's TLS saturates its processes; Libbitcoin uses under six cores at those rates, and the
rate rises with more client processes. Plain HTTP transactions level off near 140,000 per
second.
</p>
</section>
<section>
<h2 id="native-rest-interface">Native REST Interface</h2>
<div class="gallery">
<figure class="shot" data-full="performance/server-native.png" tabindex="0">
<h3>Chain object rate (log scale)</h3>
<img src="performance/server-native.png" alt="Chain object rate (log scale)" loading="lazy">
</figure>
<figure class="shot" data-full="performance/server-native-history.png" tabindex="0">
<h3>Address output rate (log scale)</h3>
<img src="performance/server-native-history.png" alt="Address output rate (log scale)" loading="lazy">
</figure>
</div>
<p class="lede after">
Libbitcoin only, in binary data format over HTTP. Addresses are grouped by history size as
in the Electrum interface, and an address response is its outputs, so the rate is outputs
returned per second of call time.
</p>
</section>
<section>
<h2 id="electrum-interface">Electrum Interface</h2>
<div class="gallery">
<figure class="shot" data-full="performance/server-electrum.png" tabindex="0">
<h3>Chain object rate: comparative (log scale)</h3>
<img src="performance/server-electrum.png" alt="Chain object rate: comparative (log scale)" loading="lazy">
</figure>
<figure class="shot" data-full="performance/server-history.png" tabindex="0">
<h3>Address history rate: comparative (log scale)</h3>
<img src="performance/server-history.png" alt="Address history rate: comparative (log scale)" loading="lazy">
</figure>
</div>
<p class="lede after">
The Electrum interface is compared with <strong>Fulcrum 2.1.3</strong>, which indexes from Bitcoin
Core at default settings. Addresses are grouped by history size, and the largest class adds 27 addresses of 100k to
2.2M entries. The 0 entries class uses 300 script hashes that own no output, the query a
wallet makes most often when it scans past its last used address, and is plotted in calls per
second. Address history rates are entries returned per second of call time.
</p>
</section>
<section>
<h2 id="sparrow-interface">Sparrow Interface</h2>
<div class="gallery">
<figure class="shot" data-full="performance/server-sp-gpu.png" tabindex="0">
<h3>Silent payments scan rate, GPU: comparative (log scale)</h3>
<img src="performance/server-sp-gpu.png" alt="Silent payments scan rate, GPU: comparative (log scale)" loading="lazy">
</figure>
<figure class="shot" data-full="performance/server-sp-cpu.png" tabindex="0">
<h3>Silent payments scan rate, CPU: comparative (log scale)</h3>
<img src="performance/server-sp-cpu.png" alt="Silent payments scan rate, CPU: comparative (log scale)" loading="lazy">
</figure>
</div>
<p class="lede after">
The Sparrow interface is compared with <strong>Frigate 1.6.1</strong>, which indexes silent payments
from Bitcoin Core. A silent payments scan subscribes one scan key to a range of blocks ending at 950,000, and is
timed from the subscription to the notification of completion. Each of three repetitions
purges the standby list, scans cold with a new key, then scans warm with the same key. Rates
are blocks of the range per second, and each range is labeled with its approximate span of
time. GPU scans use each server's default GPU backend. CPU scans use Frigate's CPU backend,
UltrafastSecp256k1 field arithmetic on BMI2/ADX, which has no SIMD path, and Libbitcoin's
AVX-512 IFMA scan. A scan the server ended without completing, other than by timeout, is
marked as a server failure.
Libbitcoin's other CPU paths are shown warm, in order of rate above the Libbitcoin AVX-512
IFMA warm bar.
AVX-512F builds the IFMA 52 bit multiply-add from 32 bit multiplies, and AVX-IFMA is measured
as AVX-512 IFMA restricted to its 256 bit registers.
</p>
</section>
<section>
<h2 id="bitcoin-p2p-interface">Bitcoin P2P Interface</h2>
<div class="gallery">
<figure class="shot" data-full="performance/server-p2p.png" tabindex="0">
<h3>Chain object rate: comparative (log scale)</h3>
<img src="performance/server-p2p.png" alt="Chain object rate: comparative (log scale)" loading="lazy">
</figure>
</div>
<p class="lede after">
Each server is a peer to a single client connection over loopback. A block is a witness block
by getdata, headers and cfheaders are 2,000 per request, and cfilter is one block per
request.
</p>
</section>
<section>
<h2 id="bitcoind-json-rpc-interface">Bitcoind JSON-RPC Interface</h2>
<div class="gallery">
<figure class="shot" data-full="performance/server-bitcoind.png" tabindex="0">
<h3>Chain object rate: comparative (log scale)</h3>
<img src="performance/server-bitcoind.png" alt="Chain object rate: comparative (log scale)" loading="lazy">
</figure>
</div>
<p class="lede after">
The bitcoind JSON-RPC interface is compared with <strong>Bitcoin Core 32.0</strong>.
</p>
</section>
<section>
<h2 id="bitcoind-rest-interface">Bitcoind REST Interface</h2>
<div class="gallery">
<figure class="shot" data-full="performance/server-rest.png" tabindex="0">
<h3>Chain object rate: comparative (log scale)</h3>
<img src="performance/server-rest.png" alt="Chain object rate: comparative (log scale)" loading="lazy">
</figure>
</div>
<p class="lede after">
The bitcoind REST interface is compared with <strong>Bitcoin Core 32.0</strong>.
</p>
</section>
<section>
<h2 id="bitcoind-zmq-interface">Bitcoind ZMQ Interface</h2>
<div class="gallery">
<figure class="shot" data-full="performance/server-zmq.png" tabindex="0">
<h3>Chain object rate: comparative (log scale)</h3>
<img src="performance/server-zmq.png" alt="Chain object rate: comparative (log scale)" loading="lazy">
</figure>
</div>
<p class="lede after">
Each server is at block 950,000 with an empty pool. The 28,142 transactions of blocks
950,001 to 950,009 are offered in block order by one P2P peer (inventory, then the
transaction when requested), and each is timed from its send to the arrival of its rawtx
notification on a ZMQ subscription. Rates are 1000 / mean latency over the 24,517
transactions both servers accepted. Libbitcoin accepted 1,421 more transactions, as Bitcoin Core's clustered mempool
imposes a hardwired capacity limit for performance reasons. Both rejected 2,204 transactions
that were not yet valid at block 950,000: 1,522 are time-locked to a later block, 55 have
unsatisfied relative lock times (BIP68), and 627 spend outputs of those.
</p>
</section>
<section>
<h2 id="btcd-interface">BTCD Interface</h2>
<p class="lede after">Measurements pending.</p>
</section>
<section>
<h2 id="esplora-interface">Esplora Interface</h2>
<p class="lede after">Measurements pending.</p>
</section>
<section>
<h2 id="methodology">Methodology</h2>
<p class="lede">
Servers run one at a time on shelly (Threadripper PRO 9985WX, 512 GB, Windows 11), each with a
store at block 950,000, called over loopback from the same machine.
<strong>Libbitcoin 4.0</strong> serves from its own store (address index load factor 5).
<strong>Bitcoin Core 32.0</strong> has txindex, txospenderindex and the basic block filter
index.
</p>
<p class="lede after">
Unless noted, each method is called 300 times, one call at a time on one connection, with
requests drawn from random blocks across the chain. Each of three repetitions purges all
caches and restarts the servers, then makes a cold pass and a warm pass on the same requests.
Calls are timed to the last response byte, and rates are calls per second (1000 / mean ms).
Bitcoin Core and Fulcrum hold all headers in memory, so their warm header bars are hatched.
</p>
</section>
<div class="lightbox" id="lightbox" hidden><img alt=""></div>
<p class="foot">
<span>Copyright © 2011-2026 libbitcoin developers</span>
</p>
</div>
<script>
(function () {
var box = document.getElementById('lightbox'), img = box.querySelector('img');
function open(el) { img.src = el.getAttribute('data-full'); img.alt = el.querySelector('h3').textContent; box.hidden = false; }
function close() { box.hidden = true; img.removeAttribute('src'); }
document.querySelectorAll('.shot').forEach(function (el) {
el.addEventListener('click', function () { open(el); });
el.addEventListener('keydown', function (e) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); open(el); } });
});
box.addEventListener('click', close);
document.addEventListener('keydown', function (e) { if (e.key === 'Escape') close(); });
})();
</script>
</body>
</html>